diff --git a/.ci/Jenkinsfile_coverage b/.ci/Jenkinsfile_coverage index db19a0a5b249d..1c1d21024ce91 100644 --- a/.ci/Jenkinsfile_coverage +++ b/.ci/Jenkinsfile_coverage @@ -34,8 +34,8 @@ def handleIngestion(timestamp) { kibanaCoverage.collectVcsInfo("### Collect VCS Info") kibanaCoverage.generateReports("### Merge coverage reports") kibanaCoverage.uploadCombinedReports() - kibanaCoverage.ingest(env.JOB_NAME, BUILD_NUMBER, BUILD_URL, timestamp, previousSha, teamAssignmentsPath(), '### Generate Team Assignments && Ingest') kibanaCoverage.uploadCoverageStaticSite(timestamp) + kibanaCoverage.ingest(env.JOB_NAME, BUILD_NUMBER, BUILD_URL, timestamp, previousSha, teamAssignmentsPath(), '### Generate Team Assignments && Ingest') } def handlePreviousSha() { diff --git a/.eslintrc.js b/.eslintrc.js index 5802f67a7cd65..a0363e77e3596 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -388,6 +388,7 @@ module.exports = { */ { files: [ + '**/*.stories.tsx', 'x-pack/test/apm_api_integration/**/*.ts', 'x-pack/test/functional/apps/**/*.js', 'x-pack/plugins/apm/**/*.js', diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 54cf52fae5fe8..fc9c55e7868f4 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -329,16 +329,6 @@ x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json @elastic/kib # Shared /x-pack/plugins/enterprise_search/ @elastic/enterprise-search-frontend /x-pack/test/functional_enterprise_search/ @elastic/enterprise-search-frontend -# App Search -/x-pack/plugins/enterprise_search/public/applications/app_search @elastic/app-search-frontend -/x-pack/plugins/enterprise_search/server/routes/app_search @elastic/app-search-frontend -/x-pack/plugins/enterprise_search/server/collectors/app_search @elastic/app-search-frontend -/x-pack/plugins/enterprise_search/server/saved_objects/app_search @elastic/app-search-frontend -# Workplace Search -/x-pack/plugins/enterprise_search/public/applications/workplace_search @elastic/workplace-search-frontend -/x-pack/plugins/enterprise_search/server/routes/workplace_search @elastic/workplace-search-frontend -/x-pack/plugins/enterprise_search/server/collectors/workplace_search @elastic/workplace-search-frontend -/x-pack/plugins/enterprise_search/server/saved_objects/workplace_search @elastic/workplace-search-frontend # Elasticsearch UI /src/plugins/dev_tools/ @elastic/es-ui diff --git a/config/kibana.yml b/config/kibana.yml index 72e0764f849a0..58ae8b9346f51 100644 --- a/config/kibana.yml +++ b/config/kibana.yml @@ -27,11 +27,6 @@ # The URLs of the Elasticsearch instances to use for all your queries. #elasticsearch.hosts: ["http://localhost:9200"] -# When this setting's value is true Kibana uses the hostname specified in the server.host -# setting. When the value of this setting is false, Kibana uses the hostname of the host -# that connects to this Kibana instance. -#elasticsearch.preserveHost: true - # Kibana uses an index in Elasticsearch to store saved searches, visualizations and # dashboards. Kibana creates a new index if the index doesn't already exist. #kibana.index: ".kibana" @@ -81,9 +76,6 @@ # Time in milliseconds for Elasticsearch to wait for responses from shards. Set to 0 to disable. #elasticsearch.shardTimeout: 30000 -# Time in milliseconds to wait for Elasticsearch at Kibana startup before retrying. -#elasticsearch.startupTimeout: 5000 - # Logs queries sent to Elasticsearch. Requires logging.verbose set to true. #elasticsearch.logQueries: false diff --git a/docs/developer/architecture/code-exploration.asciidoc b/docs/developer/architecture/code-exploration.asciidoc deleted file mode 100644 index 4a390336da34f..0000000000000 --- a/docs/developer/architecture/code-exploration.asciidoc +++ /dev/null @@ -1,598 +0,0 @@ -//// - -NOTE: - This is an automatically generated file. Please do not edit directly. Instead, run the - following from within the kibana repository: - - node scripts/build_plugin_list_docs - - You can update the template within packages/kbn-dev-utils/target/plugin_list/generate_plugin_list.js - -//// - -[[code-exploration]] -== Exploring Kibana code - -The goals of our folder heirarchy are: - -- Easy for developers to know where to add new services, plugins and applications. -- Easy for developers to know where to find the code from services, plugins and applications. -- Easy to browse and understand our folder structure. - -To that aim, we strive to: - -- Avoid too many files in any given folder. -- Choose clear, unambigious folder names. -- Organize by domain. -- Every folder should contain a README that describes the contents of that folder. - -[discrete] -[[kibana-services-applications]] -=== Services and Applications - -[discrete] -==== src/plugins - -- {kib-repo}blob/{branch}/src/plugins/advanced_settings[advancedSettings] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/src/plugins/apm_oss[apmOss] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/src/plugins/bfetch/README.md[bfetch] - -bfetch allows to batch HTTP requests and streams responses back. - - -- {kib-repo}blob/{branch}/src/plugins/charts/README.md[charts] - -The Charts plugin is a way to create easier integration of shared colors, themes, types and other utilities across all Kibana charts and visualizations. - - -- {kib-repo}blob/{branch}/src/plugins/console[console] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/src/plugins/dashboard/README.md[dashboard] - -Contains the dashboard application. - - -- {kib-repo}blob/{branch}/src/plugins/data/README.md[data] - -data plugin provides common data access services. - - -- {kib-repo}blob/{branch}/src/plugins/dev_tools/README.md[devTools] - -The ui/registry/dev_tools is removed in favor of the devTools plugin which exposes a register method in the setup contract. -Registering app works mostly the same as registering apps in core.application.register. -Routing will be handled by the id of the dev tool - your dev tool will be mounted when the URL matches /app/dev_tools#/. -This API doesn't support angular, for registering angular dev tools, bootstrap a local module on mount into the given HTML element. - - -- {kib-repo}blob/{branch}/src/plugins/discover/README.md[discover] - -Contains the Discover application and the saved search embeddable. - - -- {kib-repo}blob/{branch}/src/plugins/embeddable/README.md[embeddable] - -Embeddables are re-usable widgets that can be rendered in any environment or plugin. Developers can embed them directly in their plugin. End users can dynamically add them to any embeddable containers. - - -- {kib-repo}blob/{branch}/src/plugins/es_ui_shared/README.md[esUiShared] - -This plugin contains reusable code in the form of self-contained modules (or libraries). Each of these modules exports a set of functionality relevant to the domain of the module. - - -- {kib-repo}blob/{branch}/src/plugins/expressions/README.md[expressions] - -This plugin provides methods which will parse & execute an expression pipeline -string for you, as well as a series of registries for advanced users who might -want to incorporate their own functions, types, and renderers into the service -for use in their own application. - - -- {kib-repo}blob/{branch}/src/plugins/home/README.md[home] - -Moves the legacy ui/registry/feature_catalogue module for registering "features" that should be shown in the home page's feature catalogue to a service within a "home" plugin. The feature catalogue refered to here should not be confused with the "feature" plugin for registering features used to derive UI capabilities for feature controls. - - -- {kib-repo}blob/{branch}/src/plugins/index_pattern_management[indexPatternManagement] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/src/plugins/input_control_vis/README.md[inputControlVis] - -Contains the input control visualization allowing to place custom filter controls on a dashboard. - - -- {kib-repo}blob/{branch}/src/plugins/inspector/README.md[inspector] - -The inspector is a contextual tool to gain insights into different elements -in Kibana, e.g. visualizations. It has the form of a flyout panel. - - -- {kib-repo}blob/{branch}/src/plugins/kibana_legacy/README.md[kibanaLegacy] - -This plugin will contain several helpers and services to integrate pieces of the legacy Kibana app with the new Kibana platform. - - -- {kib-repo}blob/{branch}/src/plugins/kibana_react/README.md[kibanaReact] - -Tools for building React applications in Kibana. - - -- {kib-repo}blob/{branch}/src/plugins/kibana_usage_collection/README.md[kibanaUsageCollection] - -This plugin registers the basic usage collectors from Kibana: - - -- {kib-repo}blob/{branch}/src/plugins/kibana_utils/README.md[kibanaUtils] - -Utilities for building Kibana plugins. - - -- {kib-repo}blob/{branch}/src/plugins/legacy_export[legacyExport] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/src/plugins/management[management] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/src/plugins/maps_legacy[mapsLegacy] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/src/plugins/navigation/README.md[navigation] - -The navigation plugins exports the TopNavMenu component. -It also provides a stateful version of it on the start contract. - - -- {kib-repo}blob/{branch}/src/plugins/newsfeed[newsfeed] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/src/plugins/region_map[regionMap] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/src/plugins/saved_objects[savedObjects] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/src/plugins/saved_objects_management[savedObjectsManagement] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/src/plugins/share/README.md[share] - -Replaces the legacy ui/share module for registering share context menus. - - -- {kib-repo}blob/{branch}/src/plugins/telemetry/README.md[telemetry] - -Telemetry allows Kibana features to have usage tracked in the wild. The general term "telemetry" refers to multiple things: - - -- {kib-repo}blob/{branch}/src/plugins/telemetry_collection_manager/README.md[telemetryCollectionManager] - -Telemetry's collection manager to go through all the telemetry sources when fetching it before reporting. - - -- {kib-repo}blob/{branch}/src/plugins/telemetry_management_section/README.md[telemetryManagementSection] - -This plugin adds the Advanced Settings section for the Usage Data collection (aka Telemetry). - - -- {kib-repo}blob/{branch}/src/plugins/tile_map[tileMap] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/src/plugins/timelion/README.md[timelion] - -Contains the deprecated timelion application. For the timelion visualization, -which also contains the timelion APIs and backend, look at the vis_type_timelion plugin. - - -- {kib-repo}blob/{branch}/src/plugins/ui_actions/README.md[uiActions] - -An API for: - - -- {kib-repo}blob/{branch}/src/plugins/usage_collection/README.md[usageCollection] - -Usage Collection allows collecting usage data for other services to consume (telemetry and monitoring). -To integrate with the telemetry services for usage collection of your feature, there are 2 steps: - - -- {kib-repo}blob/{branch}/src/plugins/vis_type_markdown/README.md[visTypeMarkdown] - -The markdown visualization that can be used to place text panels on dashboards. - - -- {kib-repo}blob/{branch}/src/plugins/vis_type_metric/README.md[visTypeMetric] - -Contains the metric visualization. - - -- {kib-repo}blob/{branch}/src/plugins/vis_type_table/README.md[visTypeTable] - -Contains the data table visualization, that allows presenting data in a simple table format. - - -- {kib-repo}blob/{branch}/src/plugins/vis_type_tagcloud/README.md[visTypeTagcloud] - -Contains the tagcloud visualization. - - -- {kib-repo}blob/{branch}/src/plugins/vis_type_timelion/README.md[visTypeTimelion] - -Contains the timelion visualization and the timelion backend. - - -- {kib-repo}blob/{branch}/src/plugins/vis_type_timeseries/README.md[visTypeTimeseries] - -Contains everything around TSVB (the editor, visualizatin implementations and backends). - - -- {kib-repo}blob/{branch}/src/plugins/vis_type_vega/README.md[visTypeVega] - -Contains the Vega visualization. - - -- {kib-repo}blob/{branch}/src/plugins/vis_type_vislib/README.md[visTypeVislib] - -Contains the vislib visualizations. These are the classical area/line/bar, pie, gauge/goal and -heatmap charts. - - -- {kib-repo}blob/{branch}/src/plugins/vis_type_xy/README.md[visTypeXy] - -Contains the new xy-axis chart using the elastic-charts library, which will eventually -replace the vislib xy-axis (bar, area, line) charts. - - -- {kib-repo}blob/{branch}/src/plugins/visualizations/README.md[visualizations] - -Contains most of the visualization infrastructure, e.g. the visualization type registry or the -visualization embeddable. - - -- {kib-repo}blob/{branch}/src/plugins/visualize/README.md[visualize] - -Contains the visualize application which includes the listing page and the app frame, -which will load the visualization's editor. - - -[discrete] -==== x-pack/plugins - -- {kib-repo}blob/{branch}/x-pack/plugins/actions/README.md[actions] - -The Kibana actions plugin provides a framework to create executable actions. You can: - - -- {kib-repo}blob/{branch}/x-pack/plugins/alerting_builtins/README.md[alertingBuiltins] - -This plugin provides alertTypes shipped with Kibana for use with the -the alerts plugin. When enabled, it will register -the built-in alertTypes with the alerting plugin, register associated HTTP -routes, etc. - - -- {kib-repo}blob/{branch}/x-pack/plugins/alerts/README.md[alerts] - -The Kibana alerting plugin provides a common place to set up alerts. You can: - - -- {kib-repo}blob/{branch}/x-pack/plugins/apm/readme.md[apm] - -To access an elasticsearch instance that has live data you have two options: - - -- {kib-repo}blob/{branch}/x-pack/plugins/audit_trail[auditTrail] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/beats_management/readme.md[beatsManagement] - -Notes: -Failure to have auth enabled in Kibana will make for a broken UI. UI-based errors not yet in place - - -- {kib-repo}blob/{branch}/x-pack/plugins/canvas/README.md[canvas] - -"Never look back. The past is done. The future is a blank canvas." ― Suzy Kassem, Rise Up and Salute the Sun - - -- {kib-repo}blob/{branch}/x-pack/plugins/case/README.md[case] - -Experimental Feature - - -- {kib-repo}blob/{branch}/x-pack/plugins/cloud[cloud] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/code[code] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/console_extensions[consoleExtensions] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/cross_cluster_replication/README.md[crossClusterReplication] - -You can run a local cluster and simulate a remote cluster within a single Kibana directory. - - -- {kib-repo}blob/{branch}/x-pack/plugins/dashboard_enhanced/README.md[dashboardEnhanced] - -Contains the enhancements to the OSS dashboard app. - - -- {kib-repo}blob/{branch}/x-pack/plugins/dashboard_mode/README.md[dashboardMode] - -The deprecated dashboard only mode. - - -- {kib-repo}blob/{branch}/x-pack/plugins/data_enhanced[dataEnhanced] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/discover_enhanced/README.md[discoverEnhanced] - -Contains the enhancements to the OSS discover app. - - -- {kib-repo}blob/{branch}/x-pack/plugins/embeddable_enhanced[embeddableEnhanced] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/encrypted_saved_objects/README.md[encryptedSavedObjects] - -The purpose of this plugin is to provide a way to encrypt/decrypt attributes on the custom Saved Objects that works with -security and spaces filtering as well as performing audit logging. - - -- {kib-repo}blob/{branch}/x-pack/plugins/enterprise_search/README.md[enterpriseSearch] - -This plugin's goal is to provide a Kibana user interface to the Enterprise Search solution's products (App Search and Workplace Search). In it's current MVP state, the plugin provides the following with the goal of gathering user feedback and raising product awareness: - - -- {kib-repo}blob/{branch}/x-pack/plugins/event_log/README.md[eventLog] - -The purpose of this plugin is to provide a way to persist a history of events -occuring in Kibana, initially just for the Make It Action project - alerts -and actions. - - -- {kib-repo}blob/{branch}/x-pack/plugins/features[features] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/file_upload[fileUpload] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/global_search/README.md[globalSearch] - -The GlobalSearch plugin provides an easy way to search for various objects, such as applications -or dashboards from the Kibana instance, from both server and client-side plugins - - -- {kib-repo}blob/{branch}/x-pack/plugins/global_search_bar/README.md[globalSearchBar] - -The GlobalSearchBar plugin provides a search interface for navigating Kibana. (It is the UI to the GlobalSearch plugin.) - - -- {kib-repo}blob/{branch}/x-pack/plugins/global_search_providers[globalSearchProviders] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/graph/README.md[graph] - -This is the main source folder of the Graph plugin. It contains all of the Kibana server and client source code. x-pack/test/functional/apps/graph contains additional functional tests. - - -- {kib-repo}blob/{branch}/x-pack/plugins/grokdebugger/README.md[grokdebugger] - -- {kib-repo}blob/{branch}/x-pack/plugins/index_lifecycle_management/README.md[indexLifecycleManagement] - -You can test that the Frozen badge, phase filtering, and lifecycle information is surfaced in -Index Management by running this series of requests in Console: - - -- {kib-repo}blob/{branch}/x-pack/plugins/index_management[indexManagement] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/infra/README.md[infra] - -This is the home of the infra plugin, which aims to provide a solution for -the infrastructure monitoring use-case within Kibana. - - -- {kib-repo}blob/{branch}/x-pack/plugins/ingest_manager/README.md[ingestManager] - -Fleet needs to have Elasticsearch API keys enabled, and also to have TLS enabled on kibana, (if you want to run Kibana without TLS you can provide the following config flag --xpack.ingestManager.fleet.tlsCheckDisabled=false) - - -- {kib-repo}blob/{branch}/x-pack/plugins/ingest_pipelines/README.md[ingestPipelines] - -The ingest_pipelines plugin provides Kibana support for Elasticsearch's ingest nodes. Please refer to the Elasticsearch documentation for more details. - - -- {kib-repo}blob/{branch}/x-pack/plugins/lens/readme.md[lens] - -Run all tests from the x-pack root directory - - -- {kib-repo}blob/{branch}/x-pack/plugins/license_management[licenseManagement] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/licensing/README.md[licensing] - -The licensing plugin retrieves license data from Elasticsearch at regular configurable intervals. - - -- {kib-repo}blob/{branch}/x-pack/plugins/lists/README.md[lists] - -README.md for developers working on the backend lists on how to get started -using the CURL scripts in the scripts folder. - - -- {kib-repo}blob/{branch}/x-pack/plugins/logstash[logstash] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/maps/README.md[maps] - -Visualize geo data from Elasticsearch or 3rd party geo-services. - - -- {kib-repo}blob/{branch}/x-pack/plugins/maps_legacy_licensing/README.md[mapsLegacyLicensing] - -This plugin provides access to the detailed tile map services from Elastic. - - -- {kib-repo}blob/{branch}/x-pack/plugins/ml[ml] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/monitoring[monitoring] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/observability/README.md[observability] - -This plugin provides shared components and services for use across observability solutions, as well as the observability landing page UI. - - -- {kib-repo}blob/{branch}/x-pack/plugins/oss_telemetry[ossTelemetry] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/painless_lab[painlessLab] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/remote_clusters[remoteClusters] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/reporting/README.md[reporting] - -An awesome Kibana reporting plugin - - -- {kib-repo}blob/{branch}/x-pack/plugins/rollup/README.md[rollup] - -Welcome to the Kibana rollup plugin! This plugin provides Kibana support for Elasticsearch's rollup feature. Please refer to the Elasticsearch documentation to understand rollup indices and how to create rollup jobs. - - -- {kib-repo}blob/{branch}/x-pack/plugins/searchprofiler[searchprofiler] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/security/README.md[security] - -See Configuring security in Kibana. - - -- {kib-repo}blob/{branch}/x-pack/plugins/security_solution/README.md[securitySolution] - -Welcome to the Kibana Security Solution plugin! This README will go over getting started with development and testing. - - -- {kib-repo}blob/{branch}/x-pack/plugins/snapshot_restore/README.md[snapshotRestore] - -or - - -- {kib-repo}blob/{branch}/x-pack/plugins/spaces[spaces] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/task_manager[taskManager] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/telemetry_collection_xpack/README.md[telemetryCollectionXpack] - -Gathers all usage collection, retrieving them from both: OSS and X-Pack plugins. - - -- {kib-repo}blob/{branch}/x-pack/plugins/transform[transform] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/translations[translations] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/triggers_actions_ui/README.md[triggers_actions_ui] - -The Kibana alerts and actions UI plugin provides a user interface for managing alerts and actions. -As a developer you can reuse and extend built-in alerts and actions UI functionality: - - -- {kib-repo}blob/{branch}/x-pack/plugins/ui_actions_enhanced/README.md[uiActionsEnhanced] - -- {kib-repo}blob/{branch}/x-pack/plugins/upgrade_assistant[upgradeAssistant] - -WARNING: Missing README. - - -- {kib-repo}blob/{branch}/x-pack/plugins/uptime/README.md[uptime] - -The purpose of this plugin is to provide users of Heartbeat more visibility of what's happening -in their infrastructure. - - -- {kib-repo}blob/{branch}/x-pack/plugins/watcher/README.md[watcher] - -This plugins adopts some conventions in addition to or in place of conventions in Kibana (at the time of the plugin's creation): - diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc index 5a4a60c2e628e..e314e55c34085 100644 --- a/docs/developer/plugin-list.asciidoc +++ b/docs/developer/plugin-list.asciidoc @@ -62,16 +62,28 @@ This API doesn't support angular, for registering angular dev tools, bootstrap a |Contains the Discover application and the saved search embeddable. -|{kib-repo}blob/{branch}/src/plugins/embeddable/README.md[embeddable] -|Embeddables are re-usable widgets that can be rendered in any environment or plugin. Developers can embed them directly in their plugin. End users can dynamically add them to any embeddable containers. +|<> +|Embeddables are re-usable widgets that can be rendered in any environment or plugin. Developers can embed them directly in their plugin. End users can dynamically add them to any embeddable _containers_. |{kib-repo}blob/{branch}/src/plugins/es_ui_shared/README.md[esUiShared] |This plugin contains reusable code in the form of self-contained modules (or libraries). Each of these modules exports a set of functionality relevant to the domain of the module. -|{kib-repo}blob/{branch}/src/plugins/expressions/README.md[expressions] -|This plugin provides methods which will parse & execute an expression pipeline +|<> +|Expression pipeline is a chain of functions that *pipe* its output to the +input of the next function. Functions can be configured using arguments provided +by the user. The final output of the expression pipeline can be rendered using +one of the *renderers* registered in `expressions` plugin. + +All the arguments to expression functions need to be serializable, as well as input and output. +Expression functions should try to stay 'pure'. This makes functions easy to reuse and also +make it possible to serialize the whole chain as well as output at every step of execution. + +Expressions power visualizations in Dashboard and Lens, as well as, every +*element* in Canvas is backed by an expression. + +This plugin provides methods which will parse & execute an *expression pipeline* string for you, as well as a series of registries for advanced users who might want to incorporate their own functions, types, and renderers into the service for use in their own application. @@ -168,9 +180,16 @@ It also provides a stateful version of it on the start contract. which also contains the timelion APIs and backend, look at the vis_type_timelion plugin. -|{kib-repo}blob/{branch}/src/plugins/ui_actions/README.md[uiActions] +|<> |An API for: +- creating custom functionality (`actions`) +- creating custom user interaction events (`triggers`) +- attaching and detaching `actions` to `triggers`. +- emitting `trigger` events +- executing `actions` attached to a given `trigger`. +- exposing a context menu for the user to choose the appropriate action when there are multiple actions attached to a single trigger. + |{kib-repo}blob/{branch}/src/plugins/url_forwarding/README.md[urlForwarding] |This plugins contains helpers to redirect legacy URLs. It can be used to forward old URLs to their new counterparts. @@ -511,5 +530,8 @@ in their infrastructure. |=== include::{kibana-root}/src/plugins/dashboard/README.asciidoc[leveloffset=+1] +include::{kibana-root}/src/plugins/embeddable/README.asciidoc[leveloffset=+1] +include::{kibana-root}/src/plugins/expressions/README.asciidoc[leveloffset=+1] +include::{kibana-root}/src/plugins/ui_actions/README.asciidoc[leveloffset=+1] include::{kibana-root}/x-pack/plugins/dashboard_enhanced/README.asciidoc[leveloffset=+1] include::{kibana-root}/x-pack/plugins/embeddable_enhanced/README.asciidoc[leveloffset=+1] diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern._constructor_.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern._constructor_.md index 4baf98038f89a..f81d03a28ec12 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern._constructor_.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern._constructor_.md @@ -9,12 +9,12 @@ Constructs a new instance of the `IndexPattern` class Signature: ```typescript -constructor({ spec, savedObjectsClient, fieldFormats, shortDotsEnable, metaFields, }: IndexPatternDeps); +constructor({ spec, fieldFormats, shortDotsEnable, metaFields, }: IndexPatternDeps); ``` ## Parameters | Parameter | Type | Description | | --- | --- | --- | -| { spec, savedObjectsClient, fieldFormats, shortDotsEnable, metaFields, } | IndexPatternDeps | | +| { spec, fieldFormats, shortDotsEnable, metaFields, } | IndexPatternDeps | | diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.md index 325b97383e328..c07041470d102 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.md @@ -14,7 +14,7 @@ export declare class IndexPattern implements IIndexPattern | Constructor | Modifiers | Description | | --- | --- | --- | -| [(constructor)({ spec, savedObjectsClient, fieldFormats, shortDotsEnable, metaFields, })](./kibana-plugin-plugins-data-public.indexpattern._constructor_.md) | | Constructs a new instance of the IndexPattern class | +| [(constructor)({ spec, fieldFormats, shortDotsEnable, metaFields, })](./kibana-plugin-plugins-data-public.indexpattern._constructor_.md) | | Constructs a new instance of the IndexPattern class | ## Properties @@ -53,7 +53,6 @@ export declare class IndexPattern implements IIndexPattern | [getTimeField()](./kibana-plugin-plugins-data-public.indexpattern.gettimefield.md) | | | | [isTimeBased()](./kibana-plugin-plugins-data-public.indexpattern.istimebased.md) | | | | [isTimeNanosBased()](./kibana-plugin-plugins-data-public.indexpattern.istimenanosbased.md) | | | -| [popularizeField(fieldName, unit)](./kibana-plugin-plugins-data-public.indexpattern.popularizefield.md) | | | | [removeScriptedField(fieldName)](./kibana-plugin-plugins-data-public.indexpattern.removescriptedfield.md) | | Remove scripted field from field list | | [toSpec()](./kibana-plugin-plugins-data-public.indexpattern.tospec.md) | | | diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.popularizefield.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.popularizefield.md deleted file mode 100644 index eba5382158520..0000000000000 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpattern.popularizefield.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPattern](./kibana-plugin-plugins-data-public.indexpattern.md) > [popularizeField](./kibana-plugin-plugins-data-public.indexpattern.popularizefield.md) - -## IndexPattern.popularizeField() method - -Signature: - -```typescript -popularizeField(fieldName: string, unit?: number): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| fieldName | string | | -| unit | number | | - -Returns: - -`Promise` - diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.md index af087344268d7..34df8656e9175 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.md @@ -43,5 +43,5 @@ export declare class IndexPatternsService | [createAndSave(spec, override, skipFetchFields)](./kibana-plugin-plugins-data-public.indexpatternsservice.createandsave.md) | | Create a new index pattern and save it right away | | [createSavedObject(indexPattern, override)](./kibana-plugin-plugins-data-public.indexpatternsservice.createsavedobject.md) | | Save a new index pattern | | [delete(indexPatternId)](./kibana-plugin-plugins-data-public.indexpatternsservice.delete.md) | | Deletes an index pattern from .kibana index | -| [updateSavedObject(indexPattern, saveAttempts)](./kibana-plugin-plugins-data-public.indexpatternsservice.updatesavedobject.md) | | Save existing index pattern. Will attempt to merge differences if there are conflicts | +| [updateSavedObject(indexPattern, saveAttempts, ignoreErrors)](./kibana-plugin-plugins-data-public.indexpatternsservice.updatesavedobject.md) | | Save existing index pattern. Will attempt to merge differences if there are conflicts | diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.updatesavedobject.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.updatesavedobject.md index 3973f5d4c3e7b..5fc16c70de7ed 100644 --- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.updatesavedobject.md +++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternsservice.updatesavedobject.md @@ -9,7 +9,7 @@ Save existing index pattern. Will attempt to merge differences if there are conf Signature: ```typescript -updateSavedObject(indexPattern: IndexPattern, saveAttempts?: number): Promise; +updateSavedObject(indexPattern: IndexPattern, saveAttempts?: number, ignoreErrors?: boolean): Promise; ``` ## Parameters @@ -18,6 +18,7 @@ updateSavedObject(indexPattern: IndexPattern, saveAttempts?: number): PromiseIndexPattern | | | saveAttempts | number | | +| ignoreErrors | boolean | | Returns: diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern._constructor_.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern._constructor_.md index f7f8e51c4b632..22ee6f15933ea 100644 --- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern._constructor_.md +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern._constructor_.md @@ -9,12 +9,12 @@ Constructs a new instance of the `IndexPattern` class Signature: ```typescript -constructor({ spec, savedObjectsClient, fieldFormats, shortDotsEnable, metaFields, }: IndexPatternDeps); +constructor({ spec, fieldFormats, shortDotsEnable, metaFields, }: IndexPatternDeps); ``` ## Parameters | Parameter | Type | Description | | --- | --- | --- | -| { spec, savedObjectsClient, fieldFormats, shortDotsEnable, metaFields, } | IndexPatternDeps | | +| { spec, fieldFormats, shortDotsEnable, metaFields, } | IndexPatternDeps | | diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.md index e5a9e7d8f9f93..603864234d34b 100644 --- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.md +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.md @@ -14,7 +14,7 @@ export declare class IndexPattern implements IIndexPattern | Constructor | Modifiers | Description | | --- | --- | --- | -| [(constructor)({ spec, savedObjectsClient, fieldFormats, shortDotsEnable, metaFields, })](./kibana-plugin-plugins-data-server.indexpattern._constructor_.md) | | Constructs a new instance of the IndexPattern class | +| [(constructor)({ spec, fieldFormats, shortDotsEnable, metaFields, })](./kibana-plugin-plugins-data-server.indexpattern._constructor_.md) | | Constructs a new instance of the IndexPattern class | ## Properties @@ -53,7 +53,6 @@ export declare class IndexPattern implements IIndexPattern | [getTimeField()](./kibana-plugin-plugins-data-server.indexpattern.gettimefield.md) | | | | [isTimeBased()](./kibana-plugin-plugins-data-server.indexpattern.istimebased.md) | | | | [isTimeNanosBased()](./kibana-plugin-plugins-data-server.indexpattern.istimenanosbased.md) | | | -| [popularizeField(fieldName, unit)](./kibana-plugin-plugins-data-server.indexpattern.popularizefield.md) | | | | [removeScriptedField(fieldName)](./kibana-plugin-plugins-data-server.indexpattern.removescriptedfield.md) | | Remove scripted field from field list | | [toSpec()](./kibana-plugin-plugins-data-server.indexpattern.tospec.md) | | | diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.popularizefield.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.popularizefield.md deleted file mode 100644 index 8b2c9242a6256..0000000000000 --- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.indexpattern.popularizefield.md +++ /dev/null @@ -1,23 +0,0 @@ - - -[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [IndexPattern](./kibana-plugin-plugins-data-server.indexpattern.md) > [popularizeField](./kibana-plugin-plugins-data-server.indexpattern.popularizefield.md) - -## IndexPattern.popularizeField() method - -Signature: - -```typescript -popularizeField(fieldName: string, unit?: number): Promise; -``` - -## Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| fieldName | string | | -| unit | number | | - -Returns: - -`Promise` - diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.md index b8b6ee1f0b28c..9c47ea1a166d5 100644 --- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.md +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.md @@ -17,4 +17,5 @@ export interface ISearchStartAggsStart | | | [getSearchStrategy](./kibana-plugin-plugins-data-server.isearchstart.getsearchstrategy.md) | (name: string) => ISearchStrategy<SearchStrategyRequest, SearchStrategyResponse> | Get other registered search strategies. For example, if a new strategy needs to use the already-registered ES search strategy, it can use this function to accomplish that. | | [search](./kibana-plugin-plugins-data-server.isearchstart.search.md) | (context: RequestHandlerContext, request: SearchStrategyRequest, options: ISearchOptions) => Promise<SearchStrategyResponse> | | +| [searchSource](./kibana-plugin-plugins-data-server.isearchstart.searchsource.md) | {
asScoped: (request: KibanaRequest) => Promise<ISearchStartSearchSource>;
} | | diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.searchsource.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.searchsource.md new file mode 100644 index 0000000000000..66a43fe29c43b --- /dev/null +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.isearchstart.searchsource.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-data-server](./kibana-plugin-plugins-data-server.md) > [ISearchStart](./kibana-plugin-plugins-data-server.isearchstart.md) > [searchSource](./kibana-plugin-plugins-data-server.isearchstart.searchsource.md) + +## ISearchStart.searchSource property + +Signature: + +```typescript +searchSource: { + asScoped: (request: KibanaRequest) => Promise; + }; +``` diff --git a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin.start.md b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin.start.md index 84aeb4cf80cce..e44cb5c657747 100644 --- a/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin.start.md +++ b/docs/development/plugins/data/server/kibana-plugin-plugins-data-server.plugin.start.md @@ -8,13 +8,13 @@ ```typescript start(core: CoreStart): { - search: ISearchStart>; fieldFormats: { fieldFormatServiceFactory: (uiSettings: import("../../../core/server").IUiSettingsClient) => Promise; }; indexPatterns: { indexPatternsServiceFactory: (kibanaRequest: import("../../../core/server").KibanaRequest) => Promise; }; + search: ISearchStart>; }; ``` @@ -27,12 +27,12 @@ start(core: CoreStart): { Returns: `{ - search: ISearchStart>; fieldFormats: { fieldFormatServiceFactory: (uiSettings: import("../../../core/server").IUiSettingsClient) => Promise; }; indexPatterns: { indexPatternsServiceFactory: (kibanaRequest: import("../../../core/server").KibanaRequest) => Promise; }; + search: ISearchStart>; }` diff --git a/docs/development/plugins/embeddable/public/index.md b/docs/development/plugins/embeddable/public/index.md new file mode 100644 index 0000000000000..5de9666f6d0b9 --- /dev/null +++ b/docs/development/plugins/embeddable/public/index.md @@ -0,0 +1,12 @@ + + +[Home](./index.md) + +## API Reference + +## Packages + +| Package | Description | +| --- | --- | +| [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.action_add_panel.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.action_add_panel.md new file mode 100644 index 0000000000000..37c7a546d11ed --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.action_add_panel.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ACTION\_ADD\_PANEL](./kibana-plugin-plugins-embeddable-public.action_add_panel.md) + +## ACTION\_ADD\_PANEL variable + +Signature: + +```typescript +ACTION_ADD_PANEL = "ACTION_ADD_PANEL" +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.action_edit_panel.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.action_edit_panel.md new file mode 100644 index 0000000000000..89f02e69f2260 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.action_edit_panel.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ACTION\_EDIT\_PANEL](./kibana-plugin-plugins-embeddable-public.action_edit_panel.md) + +## ACTION\_EDIT\_PANEL variable + +Signature: + +```typescript +ACTION_EDIT_PANEL = "editPanel" +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.adapters.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.adapters.md new file mode 100644 index 0000000000000..9635b36cdf05a --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.adapters.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Adapters](./kibana-plugin-plugins-embeddable-public.adapters.md) + +## Adapters interface + +The interface that the adapters used to open an inspector have to fullfill. + +Signature: + +```typescript +export interface Adapters +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction._constructor_.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction._constructor_.md new file mode 100644 index 0000000000000..388f0e064d866 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction._constructor_.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [AddPanelAction](./kibana-plugin-plugins-embeddable-public.addpanelaction.md) > [(constructor)](./kibana-plugin-plugins-embeddable-public.addpanelaction._constructor_.md) + +## AddPanelAction.(constructor) + +Constructs a new instance of the `AddPanelAction` class + +Signature: + +```typescript +constructor(getFactory: EmbeddableStart['getEmbeddableFactory'], getAllFactories: EmbeddableStart['getEmbeddableFactories'], overlays: OverlayStart, notifications: NotificationsStart, SavedObjectFinder: React.ComponentType); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| getFactory | EmbeddableStart['getEmbeddableFactory'] | | +| getAllFactories | EmbeddableStart['getEmbeddableFactories'] | | +| overlays | OverlayStart | | +| notifications | NotificationsStart | | +| SavedObjectFinder | React.ComponentType<any> | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.execute.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.execute.md new file mode 100644 index 0000000000000..46629f3c654f8 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.execute.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [AddPanelAction](./kibana-plugin-plugins-embeddable-public.addpanelaction.md) > [execute](./kibana-plugin-plugins-embeddable-public.addpanelaction.execute.md) + +## AddPanelAction.execute() method + +Signature: + +```typescript +execute(context: ActionExecutionContext): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| context | ActionExecutionContext<ActionContext> | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.getdisplayname.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.getdisplayname.md new file mode 100644 index 0000000000000..b3a181861572b --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.getdisplayname.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [AddPanelAction](./kibana-plugin-plugins-embeddable-public.addpanelaction.md) > [getDisplayName](./kibana-plugin-plugins-embeddable-public.addpanelaction.getdisplayname.md) + +## AddPanelAction.getDisplayName() method + +Signature: + +```typescript +getDisplayName(): string; +``` +Returns: + +`string` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.geticontype.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.geticontype.md new file mode 100644 index 0000000000000..c02aa6613630b --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.geticontype.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [AddPanelAction](./kibana-plugin-plugins-embeddable-public.addpanelaction.md) > [getIconType](./kibana-plugin-plugins-embeddable-public.addpanelaction.geticontype.md) + +## AddPanelAction.getIconType() method + +Signature: + +```typescript +getIconType(): string; +``` +Returns: + +`string` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.id.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.id.md new file mode 100644 index 0000000000000..781fb8ed29372 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.id.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [AddPanelAction](./kibana-plugin-plugins-embeddable-public.addpanelaction.md) > [id](./kibana-plugin-plugins-embeddable-public.addpanelaction.id.md) + +## AddPanelAction.id property + +Signature: + +```typescript +readonly id = "ACTION_ADD_PANEL"; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.iscompatible.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.iscompatible.md new file mode 100644 index 0000000000000..c8349b86cf348 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.iscompatible.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [AddPanelAction](./kibana-plugin-plugins-embeddable-public.addpanelaction.md) > [isCompatible](./kibana-plugin-plugins-embeddable-public.addpanelaction.iscompatible.md) + +## AddPanelAction.isCompatible() method + +Signature: + +```typescript +isCompatible(context: ActionExecutionContext): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| context | ActionExecutionContext<ActionContext> | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.md new file mode 100644 index 0000000000000..74a6c2b2183a2 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.md @@ -0,0 +1,34 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [AddPanelAction](./kibana-plugin-plugins-embeddable-public.addpanelaction.md) + +## AddPanelAction class + +Signature: + +```typescript +export declare class AddPanelAction implements Action +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(getFactory, getAllFactories, overlays, notifications, SavedObjectFinder)](./kibana-plugin-plugins-embeddable-public.addpanelaction._constructor_.md) | | Constructs a new instance of the AddPanelAction class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [id](./kibana-plugin-plugins-embeddable-public.addpanelaction.id.md) | | | | +| [type](./kibana-plugin-plugins-embeddable-public.addpanelaction.type.md) | | | | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [execute(context)](./kibana-plugin-plugins-embeddable-public.addpanelaction.execute.md) | | | +| [getDisplayName()](./kibana-plugin-plugins-embeddable-public.addpanelaction.getdisplayname.md) | | | +| [getIconType()](./kibana-plugin-plugins-embeddable-public.addpanelaction.geticontype.md) | | | +| [isCompatible(context)](./kibana-plugin-plugins-embeddable-public.addpanelaction.iscompatible.md) | | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.type.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.type.md new file mode 100644 index 0000000000000..d57974c984025 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.addpanelaction.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [AddPanelAction](./kibana-plugin-plugins-embeddable-public.addpanelaction.md) > [type](./kibana-plugin-plugins-embeddable-public.addpanelaction.type.md) + +## AddPanelAction.type property + +Signature: + +```typescript +readonly type = "ACTION_ADD_PANEL"; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.chartactioncontext.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.chartactioncontext.md new file mode 100644 index 0000000000000..1c9fc27d53f19 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.chartactioncontext.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ChartActionContext](./kibana-plugin-plugins-embeddable-public.chartactioncontext.md) + +## ChartActionContext type + +Signature: + +```typescript +export declare type ChartActionContext = ValueClickContext | RangeSelectContext; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container._constructor_.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container._constructor_.md new file mode 100644 index 0000000000000..c571bae7c7613 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container._constructor_.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Container](./kibana-plugin-plugins-embeddable-public.container.md) > [(constructor)](./kibana-plugin-plugins-embeddable-public.container._constructor_.md) + +## Container.(constructor) + +Constructs a new instance of the `Container` class + +Signature: + +```typescript +constructor(input: TContainerInput, output: TContainerOutput, getFactory: EmbeddableStart['getEmbeddableFactory'], parent?: Container); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| input | TContainerInput | | +| output | TContainerOutput | | +| getFactory | EmbeddableStart['getEmbeddableFactory'] | | +| parent | Container | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.addnewembeddable.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.addnewembeddable.md new file mode 100644 index 0000000000000..1a7b32fea5361 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.addnewembeddable.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Container](./kibana-plugin-plugins-embeddable-public.container.md) > [addNewEmbeddable](./kibana-plugin-plugins-embeddable-public.container.addnewembeddable.md) + +## Container.addNewEmbeddable() method + +Signature: + +```typescript +addNewEmbeddable = IEmbeddable>(type: string, explicitInput: Partial): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| type | string | | +| explicitInput | Partial<EEI> | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.children.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.children.md new file mode 100644 index 0000000000000..e8f140219ed9c --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.children.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Container](./kibana-plugin-plugins-embeddable-public.container.md) > [children](./kibana-plugin-plugins-embeddable-public.container.children.md) + +## Container.children property + +Signature: + +```typescript +protected readonly children: { + [key: string]: IEmbeddable | ErrorEmbeddable; + }; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.createnewpanelstate.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.createnewpanelstate.md new file mode 100644 index 0000000000000..cb084192ccf23 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.createnewpanelstate.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Container](./kibana-plugin-plugins-embeddable-public.container.md) > [createNewPanelState](./kibana-plugin-plugins-embeddable-public.container.createnewpanelstate.md) + +## Container.createNewPanelState() method + +Signature: + +```typescript +protected createNewPanelState>(factory: EmbeddableFactory, partial?: Partial): PanelState; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| factory | EmbeddableFactory<TEmbeddableInput, any, TEmbeddable> | | +| partial | Partial<TEmbeddableInput> | | + +Returns: + +`PanelState` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.destroy.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.destroy.md new file mode 100644 index 0000000000000..d2776fb9e5944 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.destroy.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Container](./kibana-plugin-plugins-embeddable-public.container.md) > [destroy](./kibana-plugin-plugins-embeddable-public.container.destroy.md) + +## Container.destroy() method + +Signature: + +```typescript +destroy(): void; +``` +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.getchild.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.getchild.md new file mode 100644 index 0000000000000..56d6a8a105bc7 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.getchild.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Container](./kibana-plugin-plugins-embeddable-public.container.md) > [getChild](./kibana-plugin-plugins-embeddable-public.container.getchild.md) + +## Container.getChild() method + +Signature: + +```typescript +getChild(id: string): E; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| id | string | | + +Returns: + +`E` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.getchildids.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.getchildids.md new file mode 100644 index 0000000000000..83a9b134cad3f --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.getchildids.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Container](./kibana-plugin-plugins-embeddable-public.container.md) > [getChildIds](./kibana-plugin-plugins-embeddable-public.container.getchildids.md) + +## Container.getChildIds() method + +Signature: + +```typescript +getChildIds(): string[]; +``` +Returns: + +`string[]` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.getfactory.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.getfactory.md new file mode 100644 index 0000000000000..f4ac95abbf372 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.getfactory.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Container](./kibana-plugin-plugins-embeddable-public.container.md) > [getFactory](./kibana-plugin-plugins-embeddable-public.container.getfactory.md) + +## Container.getFactory property + +Signature: + +```typescript +protected readonly getFactory: EmbeddableStart['getEmbeddableFactory']; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.getinheritedinput.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.getinheritedinput.md new file mode 100644 index 0000000000000..4c5823b890e65 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.getinheritedinput.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Container](./kibana-plugin-plugins-embeddable-public.container.md) > [getInheritedInput](./kibana-plugin-plugins-embeddable-public.container.getinheritedinput.md) + +## Container.getInheritedInput() method + +Return state that comes from the container and is passed down to the child. For instance, time range and filters are common inherited input state. Note that any state stored in `this.input.panels[embeddableId].explicitInput` will override inherited input. + +Signature: + +```typescript +protected abstract getInheritedInput(id: string): TChildInput; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| id | string | | + +Returns: + +`TChildInput` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.getinputforchild.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.getinputforchild.md new file mode 100644 index 0000000000000..803356d554012 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.getinputforchild.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Container](./kibana-plugin-plugins-embeddable-public.container.md) > [getInputForChild](./kibana-plugin-plugins-embeddable-public.container.getinputforchild.md) + +## Container.getInputForChild() method + +Signature: + +```typescript +getInputForChild(embeddableId: string): TEmbeddableInput; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| embeddableId | string | | + +Returns: + +`TEmbeddableInput` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.getpanelstate.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.getpanelstate.md new file mode 100644 index 0000000000000..5981284e0497c --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.getpanelstate.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Container](./kibana-plugin-plugins-embeddable-public.container.md) > [getPanelState](./kibana-plugin-plugins-embeddable-public.container.getpanelstate.md) + +## Container.getPanelState() method + +Signature: + +```typescript +protected getPanelState(embeddableId: string): PanelState; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| embeddableId | string | | + +Returns: + +`PanelState` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.iscontainer.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.iscontainer.md new file mode 100644 index 0000000000000..af65381de78f7 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.iscontainer.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Container](./kibana-plugin-plugins-embeddable-public.container.md) > [isContainer](./kibana-plugin-plugins-embeddable-public.container.iscontainer.md) + +## Container.isContainer property + +Signature: + +```typescript +readonly isContainer: boolean; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.md new file mode 100644 index 0000000000000..d14adc31e4123 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.md @@ -0,0 +1,43 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Container](./kibana-plugin-plugins-embeddable-public.container.md) + +## Container class + +Signature: + +```typescript +export declare abstract class Container = {}, TContainerInput extends ContainerInput = ContainerInput, TContainerOutput extends ContainerOutput = ContainerOutput> extends Embeddable implements IContainer +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(input, output, getFactory, parent)](./kibana-plugin-plugins-embeddable-public.container._constructor_.md) | | Constructs a new instance of the Container class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [children](./kibana-plugin-plugins-embeddable-public.container.children.md) | | {
[key: string]: IEmbeddable<any, any> | ErrorEmbeddable;
} | | +| [getFactory](./kibana-plugin-plugins-embeddable-public.container.getfactory.md) | | EmbeddableStart['getEmbeddableFactory'] | | +| [isContainer](./kibana-plugin-plugins-embeddable-public.container.iscontainer.md) | | boolean | | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [addNewEmbeddable(type, explicitInput)](./kibana-plugin-plugins-embeddable-public.container.addnewembeddable.md) | | | +| [createNewPanelState(factory, partial)](./kibana-plugin-plugins-embeddable-public.container.createnewpanelstate.md) | | | +| [destroy()](./kibana-plugin-plugins-embeddable-public.container.destroy.md) | | | +| [getChild(id)](./kibana-plugin-plugins-embeddable-public.container.getchild.md) | | | +| [getChildIds()](./kibana-plugin-plugins-embeddable-public.container.getchildids.md) | | | +| [getInheritedInput(id)](./kibana-plugin-plugins-embeddable-public.container.getinheritedinput.md) | | Return state that comes from the container and is passed down to the child. For instance, time range and filters are common inherited input state. Note that any state stored in this.input.panels[embeddableId].explicitInput will override inherited input. | +| [getInputForChild(embeddableId)](./kibana-plugin-plugins-embeddable-public.container.getinputforchild.md) | | | +| [getPanelState(embeddableId)](./kibana-plugin-plugins-embeddable-public.container.getpanelstate.md) | | | +| [reload()](./kibana-plugin-plugins-embeddable-public.container.reload.md) | | | +| [removeEmbeddable(embeddableId)](./kibana-plugin-plugins-embeddable-public.container.removeembeddable.md) | | | +| [untilEmbeddableLoaded(id)](./kibana-plugin-plugins-embeddable-public.container.untilembeddableloaded.md) | | | +| [updateInputForChild(id, changes)](./kibana-plugin-plugins-embeddable-public.container.updateinputforchild.md) | | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.reload.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.reload.md new file mode 100644 index 0000000000000..902da827ac46c --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.reload.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Container](./kibana-plugin-plugins-embeddable-public.container.md) > [reload](./kibana-plugin-plugins-embeddable-public.container.reload.md) + +## Container.reload() method + +Signature: + +```typescript +reload(): void; +``` +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.removeembeddable.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.removeembeddable.md new file mode 100644 index 0000000000000..44594c0649d46 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.removeembeddable.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Container](./kibana-plugin-plugins-embeddable-public.container.md) > [removeEmbeddable](./kibana-plugin-plugins-embeddable-public.container.removeembeddable.md) + +## Container.removeEmbeddable() method + +Signature: + +```typescript +removeEmbeddable(embeddableId: string): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| embeddableId | string | | + +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.untilembeddableloaded.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.untilembeddableloaded.md new file mode 100644 index 0000000000000..45c115f370694 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.untilembeddableloaded.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Container](./kibana-plugin-plugins-embeddable-public.container.md) > [untilEmbeddableLoaded](./kibana-plugin-plugins-embeddable-public.container.untilembeddableloaded.md) + +## Container.untilEmbeddableLoaded() method + +Signature: + +```typescript +untilEmbeddableLoaded(id: string): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| id | string | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.updateinputforchild.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.updateinputforchild.md new file mode 100644 index 0000000000000..ae25f373a907b --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.container.updateinputforchild.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Container](./kibana-plugin-plugins-embeddable-public.container.md) > [updateInputForChild](./kibana-plugin-plugins-embeddable-public.container.updateinputforchild.md) + +## Container.updateInputForChild() method + +Signature: + +```typescript +updateInputForChild(id: string, changes: Partial): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| id | string | | +| changes | Partial<EEI> | | + +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.containerinput.hidepaneltitles.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.containerinput.hidepaneltitles.md new file mode 100644 index 0000000000000..5bb80ae411a78 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.containerinput.hidepaneltitles.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ContainerInput](./kibana-plugin-plugins-embeddable-public.containerinput.md) > [hidePanelTitles](./kibana-plugin-plugins-embeddable-public.containerinput.hidepaneltitles.md) + +## ContainerInput.hidePanelTitles property + +Signature: + +```typescript +hidePanelTitles?: boolean; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.containerinput.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.containerinput.md new file mode 100644 index 0000000000000..dc24507b71cfb --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.containerinput.md @@ -0,0 +1,19 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ContainerInput](./kibana-plugin-plugins-embeddable-public.containerinput.md) + +## ContainerInput interface + +Signature: + +```typescript +export interface ContainerInput extends EmbeddableInput +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [hidePanelTitles](./kibana-plugin-plugins-embeddable-public.containerinput.hidepaneltitles.md) | boolean | | +| [panels](./kibana-plugin-plugins-embeddable-public.containerinput.panels.md) | {
[key: string]: PanelState<PanelExplicitInput & EmbeddableInput & {
id: string;
}>;
} | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.containerinput.panels.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.containerinput.panels.md new file mode 100644 index 0000000000000..82d45ebe9a10e --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.containerinput.panels.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ContainerInput](./kibana-plugin-plugins-embeddable-public.containerinput.md) > [panels](./kibana-plugin-plugins-embeddable-public.containerinput.panels.md) + +## ContainerInput.panels property + +Signature: + +```typescript +panels: { + [key: string]: PanelState; + }; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.containeroutput.embeddableloaded.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.containeroutput.embeddableloaded.md new file mode 100644 index 0000000000000..3f0db4eba0bc3 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.containeroutput.embeddableloaded.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ContainerOutput](./kibana-plugin-plugins-embeddable-public.containeroutput.md) > [embeddableLoaded](./kibana-plugin-plugins-embeddable-public.containeroutput.embeddableloaded.md) + +## ContainerOutput.embeddableLoaded property + +Signature: + +```typescript +embeddableLoaded: { + [key: string]: boolean; + }; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.containeroutput.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.containeroutput.md new file mode 100644 index 0000000000000..f448f0f3ac059 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.containeroutput.md @@ -0,0 +1,18 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ContainerOutput](./kibana-plugin-plugins-embeddable-public.containeroutput.md) + +## ContainerOutput interface + +Signature: + +```typescript +export interface ContainerOutput extends EmbeddableOutput +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [embeddableLoaded](./kibana-plugin-plugins-embeddable-public.containeroutput.embeddableloaded.md) | {
[key: string]: boolean;
} | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.context_menu_trigger.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.context_menu_trigger.md new file mode 100644 index 0000000000000..bcfcf6a321661 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.context_menu_trigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [CONTEXT\_MENU\_TRIGGER](./kibana-plugin-plugins-embeddable-public.context_menu_trigger.md) + +## CONTEXT\_MENU\_TRIGGER variable + +Signature: + +```typescript +CONTEXT_MENU_TRIGGER = "CONTEXT_MENU_TRIGGER" +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.contextmenutrigger.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.contextmenutrigger.md new file mode 100644 index 0000000000000..0a88e1e0a2ea8 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.contextmenutrigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [contextMenuTrigger](./kibana-plugin-plugins-embeddable-public.contextmenutrigger.md) + +## contextMenuTrigger variable + +Signature: + +```typescript +contextMenuTrigger: Trigger<'CONTEXT_MENU_TRIGGER'> +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.defaultembeddablefactoryprovider.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.defaultembeddablefactoryprovider.md new file mode 100644 index 0000000000000..08047a7a441b8 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.defaultembeddablefactoryprovider.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [defaultEmbeddableFactoryProvider](./kibana-plugin-plugins-embeddable-public.defaultembeddablefactoryprovider.md) + +## defaultEmbeddableFactoryProvider variable + +Signature: + +```typescript +defaultEmbeddableFactoryProvider: = IEmbeddable, T extends SavedObjectAttributes = SavedObjectAttributes>(def: EmbeddableFactoryDefinition) => EmbeddableFactory +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction._constructor_.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction._constructor_.md new file mode 100644 index 0000000000000..55bb3d76b99d8 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction._constructor_.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EditPanelAction](./kibana-plugin-plugins-embeddable-public.editpanelaction.md) > [(constructor)](./kibana-plugin-plugins-embeddable-public.editpanelaction._constructor_.md) + +## EditPanelAction.(constructor) + +Constructs a new instance of the `EditPanelAction` class + +Signature: + +```typescript +constructor(getEmbeddableFactory: EmbeddableStart['getEmbeddableFactory'], application: ApplicationStart, stateTransfer?: EmbeddableStateTransfer | undefined); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| getEmbeddableFactory | EmbeddableStart['getEmbeddableFactory'] | | +| application | ApplicationStart | | +| stateTransfer | EmbeddableStateTransfer | undefined | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.currentappid.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.currentappid.md new file mode 100644 index 0000000000000..db94b1482d8b5 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.currentappid.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EditPanelAction](./kibana-plugin-plugins-embeddable-public.editpanelaction.md) > [currentAppId](./kibana-plugin-plugins-embeddable-public.editpanelaction.currentappid.md) + +## EditPanelAction.currentAppId property + +Signature: + +```typescript +currentAppId: string | undefined; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.execute.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.execute.md new file mode 100644 index 0000000000000..6cfd88f17ba85 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.execute.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EditPanelAction](./kibana-plugin-plugins-embeddable-public.editpanelaction.md) > [execute](./kibana-plugin-plugins-embeddable-public.editpanelaction.execute.md) + +## EditPanelAction.execute() method + +Signature: + +```typescript +execute(context: ActionContext): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| context | ActionContext | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.getapptarget.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.getapptarget.md new file mode 100644 index 0000000000000..c9ede0f48b285 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.getapptarget.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EditPanelAction](./kibana-plugin-plugins-embeddable-public.editpanelaction.md) > [getAppTarget](./kibana-plugin-plugins-embeddable-public.editpanelaction.getapptarget.md) + +## EditPanelAction.getAppTarget() method + +Signature: + +```typescript +getAppTarget({ embeddable }: ActionContext): NavigationContext | undefined; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| { embeddable } | ActionContext | | + +Returns: + +`NavigationContext | undefined` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.getdisplayname.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.getdisplayname.md new file mode 100644 index 0000000000000..227fdb8877149 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.getdisplayname.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EditPanelAction](./kibana-plugin-plugins-embeddable-public.editpanelaction.md) > [getDisplayName](./kibana-plugin-plugins-embeddable-public.editpanelaction.getdisplayname.md) + +## EditPanelAction.getDisplayName() method + +Signature: + +```typescript +getDisplayName({ embeddable }: ActionContext): string; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| { embeddable } | ActionContext | | + +Returns: + +`string` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.gethref.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.gethref.md new file mode 100644 index 0000000000000..1139278ab781f --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.gethref.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EditPanelAction](./kibana-plugin-plugins-embeddable-public.editpanelaction.md) > [getHref](./kibana-plugin-plugins-embeddable-public.editpanelaction.gethref.md) + +## EditPanelAction.getHref() method + +Signature: + +```typescript +getHref({ embeddable }: ActionContext): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| { embeddable } | ActionContext | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.geticontype.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.geticontype.md new file mode 100644 index 0000000000000..bc5a1f054ca75 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.geticontype.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EditPanelAction](./kibana-plugin-plugins-embeddable-public.editpanelaction.md) > [getIconType](./kibana-plugin-plugins-embeddable-public.editpanelaction.geticontype.md) + +## EditPanelAction.getIconType() method + +Signature: + +```typescript +getIconType(): string; +``` +Returns: + +`string` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.id.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.id.md new file mode 100644 index 0000000000000..d8b0888b51801 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.id.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EditPanelAction](./kibana-plugin-plugins-embeddable-public.editpanelaction.md) > [id](./kibana-plugin-plugins-embeddable-public.editpanelaction.id.md) + +## EditPanelAction.id property + +Signature: + +```typescript +readonly id = "editPanel"; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.iscompatible.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.iscompatible.md new file mode 100644 index 0000000000000..7f2714f14f0e9 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.iscompatible.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EditPanelAction](./kibana-plugin-plugins-embeddable-public.editpanelaction.md) > [isCompatible](./kibana-plugin-plugins-embeddable-public.editpanelaction.iscompatible.md) + +## EditPanelAction.isCompatible() method + +Signature: + +```typescript +isCompatible({ embeddable }: ActionContext): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| { embeddable } | ActionContext | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.md new file mode 100644 index 0000000000000..a39eae812ebfc --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.md @@ -0,0 +1,38 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EditPanelAction](./kibana-plugin-plugins-embeddable-public.editpanelaction.md) + +## EditPanelAction class + +Signature: + +```typescript +export declare class EditPanelAction implements Action +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(getEmbeddableFactory, application, stateTransfer)](./kibana-plugin-plugins-embeddable-public.editpanelaction._constructor_.md) | | Constructs a new instance of the EditPanelAction class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [currentAppId](./kibana-plugin-plugins-embeddable-public.editpanelaction.currentappid.md) | | string | undefined | | +| [id](./kibana-plugin-plugins-embeddable-public.editpanelaction.id.md) | | | | +| [order](./kibana-plugin-plugins-embeddable-public.editpanelaction.order.md) | | number | | +| [type](./kibana-plugin-plugins-embeddable-public.editpanelaction.type.md) | | | | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [execute(context)](./kibana-plugin-plugins-embeddable-public.editpanelaction.execute.md) | | | +| [getAppTarget({ embeddable })](./kibana-plugin-plugins-embeddable-public.editpanelaction.getapptarget.md) | | | +| [getDisplayName({ embeddable })](./kibana-plugin-plugins-embeddable-public.editpanelaction.getdisplayname.md) | | | +| [getHref({ embeddable })](./kibana-plugin-plugins-embeddable-public.editpanelaction.gethref.md) | | | +| [getIconType()](./kibana-plugin-plugins-embeddable-public.editpanelaction.geticontype.md) | | | +| [isCompatible({ embeddable })](./kibana-plugin-plugins-embeddable-public.editpanelaction.iscompatible.md) | | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.order.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.order.md new file mode 100644 index 0000000000000..0ec5cde54b279 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.order.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EditPanelAction](./kibana-plugin-plugins-embeddable-public.editpanelaction.md) > [order](./kibana-plugin-plugins-embeddable-public.editpanelaction.order.md) + +## EditPanelAction.order property + +Signature: + +```typescript +order: number; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.type.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.type.md new file mode 100644 index 0000000000000..329f08abaaa3c --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.editpanelaction.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EditPanelAction](./kibana-plugin-plugins-embeddable-public.editpanelaction.md) > [type](./kibana-plugin-plugins-embeddable-public.editpanelaction.type.md) + +## EditPanelAction.type property + +Signature: + +```typescript +readonly type = "editPanel"; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable._constructor_.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable._constructor_.md new file mode 100644 index 0000000000000..c5e8788bf5d4d --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable._constructor_.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [(constructor)](./kibana-plugin-plugins-embeddable-public.embeddable._constructor_.md) + +## Embeddable.(constructor) + +Constructs a new instance of the `Embeddable` class + +Signature: + +```typescript +constructor(input: TEmbeddableInput, output: TEmbeddableOutput, parent?: IContainer); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| input | TEmbeddableInput | | +| output | TEmbeddableOutput | | +| parent | IContainer | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.destroy.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.destroy.md new file mode 100644 index 0000000000000..1ff16eec0b750 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.destroy.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [destroy](./kibana-plugin-plugins-embeddable-public.embeddable.destroy.md) + +## Embeddable.destroy() method + +Called when this embeddable is no longer used, this should be the place for implementors to add any additional clean up tasks, like unmounting and unsubscribing. + +Signature: + +```typescript +destroy(): void; +``` +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getinput.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getinput.md new file mode 100644 index 0000000000000..f4a0724d42680 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getinput.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [getInput](./kibana-plugin-plugins-embeddable-public.embeddable.getinput.md) + +## Embeddable.getInput() method + +Signature: + +```typescript +getInput(): Readonly; +``` +Returns: + +`Readonly` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getinput_.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getinput_.md new file mode 100644 index 0000000000000..e4910d3eb1bf2 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getinput_.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [getInput$](./kibana-plugin-plugins-embeddable-public.embeddable.getinput_.md) + +## Embeddable.getInput$() method + +Signature: + +```typescript +getInput$(): Readonly>; +``` +Returns: + +`Readonly>` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getinspectoradapters.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getinspectoradapters.md new file mode 100644 index 0000000000000..490eaca32e685 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getinspectoradapters.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [getInspectorAdapters](./kibana-plugin-plugins-embeddable-public.embeddable.getinspectoradapters.md) + +## Embeddable.getInspectorAdapters() method + +An embeddable can return inspector adapters if it want the inspector to be available via the context menu of that panel. Inspector adapters that will be used to open an inspector for. + +Signature: + +```typescript +getInspectorAdapters(): Adapters | undefined; +``` +Returns: + +`Adapters | undefined` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getiscontainer.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getiscontainer.md new file mode 100644 index 0000000000000..cb9945ea31293 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getiscontainer.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [getIsContainer](./kibana-plugin-plugins-embeddable-public.embeddable.getiscontainer.md) + +## Embeddable.getIsContainer() method + +Signature: + +```typescript +getIsContainer(): this is IContainer; +``` +Returns: + +`this is IContainer` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getoutput.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getoutput.md new file mode 100644 index 0000000000000..b24c5aefddb40 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getoutput.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [getOutput](./kibana-plugin-plugins-embeddable-public.embeddable.getoutput.md) + +## Embeddable.getOutput() method + +Signature: + +```typescript +getOutput(): Readonly; +``` +Returns: + +`Readonly` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getoutput_.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getoutput_.md new file mode 100644 index 0000000000000..34b5f864dd0c8 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getoutput_.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [getOutput$](./kibana-plugin-plugins-embeddable-public.embeddable.getoutput_.md) + +## Embeddable.getOutput$() method + +Signature: + +```typescript +getOutput$(): Readonly>; +``` +Returns: + +`Readonly>` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getroot.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getroot.md new file mode 100644 index 0000000000000..79397911d5bc7 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.getroot.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [getRoot](./kibana-plugin-plugins-embeddable-public.embeddable.getroot.md) + +## Embeddable.getRoot() method + +Returns the top most parent embeddable, or itself if this embeddable is not within a parent. + +Signature: + +```typescript +getRoot(): IEmbeddable | IContainer; +``` +Returns: + +`IEmbeddable | IContainer` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.gettitle.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.gettitle.md new file mode 100644 index 0000000000000..4dc1900b4b011 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.gettitle.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [getTitle](./kibana-plugin-plugins-embeddable-public.embeddable.gettitle.md) + +## Embeddable.getTitle() method + +Signature: + +```typescript +getTitle(): string; +``` +Returns: + +`string` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.id.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.id.md new file mode 100644 index 0000000000000..348934b9fb65c --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.id.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [id](./kibana-plugin-plugins-embeddable-public.embeddable.id.md) + +## Embeddable.id property + +Signature: + +```typescript +readonly id: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.input.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.input.md new file mode 100644 index 0000000000000..4541aeacd5bc8 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.input.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [input](./kibana-plugin-plugins-embeddable-public.embeddable.input.md) + +## Embeddable.input property + +Signature: + +```typescript +protected input: TEmbeddableInput; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.iscontainer.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.iscontainer.md new file mode 100644 index 0000000000000..db15653d40c4c --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.iscontainer.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [isContainer](./kibana-plugin-plugins-embeddable-public.embeddable.iscontainer.md) + +## Embeddable.isContainer property + +Signature: + +```typescript +readonly isContainer: boolean; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.md new file mode 100644 index 0000000000000..295cc10b1bb19 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.md @@ -0,0 +1,51 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) + +## Embeddable class + +Signature: + +```typescript +export declare abstract class Embeddable implements IEmbeddable +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(input, output, parent)](./kibana-plugin-plugins-embeddable-public.embeddable._constructor_.md) | | Constructs a new instance of the Embeddable class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [id](./kibana-plugin-plugins-embeddable-public.embeddable.id.md) | | string | | +| [input](./kibana-plugin-plugins-embeddable-public.embeddable.input.md) | | TEmbeddableInput | | +| [isContainer](./kibana-plugin-plugins-embeddable-public.embeddable.iscontainer.md) | | boolean | | +| [output](./kibana-plugin-plugins-embeddable-public.embeddable.output.md) | | TEmbeddableOutput | | +| [parent](./kibana-plugin-plugins-embeddable-public.embeddable.parent.md) | | IContainer | | +| [renderComplete](./kibana-plugin-plugins-embeddable-public.embeddable.rendercomplete.md) | | RenderCompleteDispatcher | | +| [runtimeId](./kibana-plugin-plugins-embeddable-public.embeddable.runtimeid.md) | | number | | +| [runtimeId](./kibana-plugin-plugins-embeddable-public.embeddable.runtimeid.md) | static | number | | +| [type](./kibana-plugin-plugins-embeddable-public.embeddable.type.md) | | string | | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [destroy()](./kibana-plugin-plugins-embeddable-public.embeddable.destroy.md) | | Called when this embeddable is no longer used, this should be the place for implementors to add any additional clean up tasks, like unmounting and unsubscribing. | +| [getInput()](./kibana-plugin-plugins-embeddable-public.embeddable.getinput.md) | | | +| [getInput$()](./kibana-plugin-plugins-embeddable-public.embeddable.getinput_.md) | | | +| [getInspectorAdapters()](./kibana-plugin-plugins-embeddable-public.embeddable.getinspectoradapters.md) | | An embeddable can return inspector adapters if it want the inspector to be available via the context menu of that panel. Inspector adapters that will be used to open an inspector for. | +| [getIsContainer()](./kibana-plugin-plugins-embeddable-public.embeddable.getiscontainer.md) | | | +| [getOutput()](./kibana-plugin-plugins-embeddable-public.embeddable.getoutput.md) | | | +| [getOutput$()](./kibana-plugin-plugins-embeddable-public.embeddable.getoutput_.md) | | | +| [getRoot()](./kibana-plugin-plugins-embeddable-public.embeddable.getroot.md) | | Returns the top most parent embeddable, or itself if this embeddable is not within a parent. | +| [getTitle()](./kibana-plugin-plugins-embeddable-public.embeddable.gettitle.md) | | | +| [reload()](./kibana-plugin-plugins-embeddable-public.embeddable.reload.md) | | Reload will be called when there is a request to refresh the data or view, even if the input data did not change. | +| [render(el)](./kibana-plugin-plugins-embeddable-public.embeddable.render.md) | | | +| [supportedTriggers()](./kibana-plugin-plugins-embeddable-public.embeddable.supportedtriggers.md) | | | +| [updateInput(changes)](./kibana-plugin-plugins-embeddable-public.embeddable.updateinput.md) | | | +| [updateOutput(outputChanges)](./kibana-plugin-plugins-embeddable-public.embeddable.updateoutput.md) | | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.output.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.output.md new file mode 100644 index 0000000000000..db854e2a69cec --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.output.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [output](./kibana-plugin-plugins-embeddable-public.embeddable.output.md) + +## Embeddable.output property + +Signature: + +```typescript +protected output: TEmbeddableOutput; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.parent.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.parent.md new file mode 100644 index 0000000000000..bfd82f53e96f1 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.parent.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [parent](./kibana-plugin-plugins-embeddable-public.embeddable.parent.md) + +## Embeddable.parent property + +Signature: + +```typescript +readonly parent?: IContainer; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.reload.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.reload.md new file mode 100644 index 0000000000000..e3b06f414cb5b --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.reload.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [reload](./kibana-plugin-plugins-embeddable-public.embeddable.reload.md) + +## Embeddable.reload() method + +Reload will be called when there is a request to refresh the data or view, even if the input data did not change. + +Signature: + +```typescript +abstract reload(): void; +``` +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.render.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.render.md new file mode 100644 index 0000000000000..171a3c6a30a85 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.render.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [render](./kibana-plugin-plugins-embeddable-public.embeddable.render.md) + +## Embeddable.render() method + +Signature: + +```typescript +render(el: HTMLElement): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| el | HTMLElement | | + +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.rendercomplete.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.rendercomplete.md new file mode 100644 index 0000000000000..c86bb2e998044 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.rendercomplete.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [renderComplete](./kibana-plugin-plugins-embeddable-public.embeddable.rendercomplete.md) + +## Embeddable.renderComplete property + +Signature: + +```typescript +protected renderComplete: RenderCompleteDispatcher; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.runtimeid.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.runtimeid.md new file mode 100644 index 0000000000000..a5cdd12b6f198 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.runtimeid.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [runtimeId](./kibana-plugin-plugins-embeddable-public.embeddable.runtimeid.md) + +## Embeddable.runtimeId property + +Signature: + +```typescript +static runtimeId: number; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.supportedtriggers.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.supportedtriggers.md new file mode 100644 index 0000000000000..16676bc732b1c --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.supportedtriggers.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [supportedTriggers](./kibana-plugin-plugins-embeddable-public.embeddable.supportedtriggers.md) + +## Embeddable.supportedTriggers() method + +Signature: + +```typescript +supportedTriggers(): Array; +``` +Returns: + +`Array` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.type.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.type.md new file mode 100644 index 0000000000000..bb3ae7384686c --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [type](./kibana-plugin-plugins-embeddable-public.embeddable.type.md) + +## Embeddable.type property + +Signature: + +```typescript +abstract readonly type: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.updateinput.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.updateinput.md new file mode 100644 index 0000000000000..36c46bb71c6b6 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.updateinput.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [updateInput](./kibana-plugin-plugins-embeddable-public.embeddable.updateinput.md) + +## Embeddable.updateInput() method + +Signature: + +```typescript +updateInput(changes: Partial): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| changes | Partial<TEmbeddableInput> | | + +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.updateoutput.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.updateoutput.md new file mode 100644 index 0000000000000..0b0244e7a5853 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddable.updateoutput.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) > [updateOutput](./kibana-plugin-plugins-embeddable-public.embeddable.updateoutput.md) + +## Embeddable.updateOutput() method + +Signature: + +```typescript +protected updateOutput(outputChanges: Partial): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| outputChanges | Partial<TEmbeddableOutput> | | + +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel._constructor_.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel._constructor_.md new file mode 100644 index 0000000000000..76412de0d5419 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableChildPanel](./kibana-plugin-plugins-embeddable-public.embeddablechildpanel.md) > [(constructor)](./kibana-plugin-plugins-embeddable-public.embeddablechildpanel._constructor_.md) + +## EmbeddableChildPanel.(constructor) + +Constructs a new instance of the `EmbeddableChildPanel` class + +Signature: + +```typescript +constructor(props: EmbeddableChildPanelProps); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| props | EmbeddableChildPanelProps | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel.componentdidmount.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel.componentdidmount.md new file mode 100644 index 0000000000000..5302d3e986d94 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel.componentdidmount.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableChildPanel](./kibana-plugin-plugins-embeddable-public.embeddablechildpanel.md) > [componentDidMount](./kibana-plugin-plugins-embeddable-public.embeddablechildpanel.componentdidmount.md) + +## EmbeddableChildPanel.componentDidMount() method + +Signature: + +```typescript +componentDidMount(): Promise; +``` +Returns: + +`Promise` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel.componentwillunmount.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel.componentwillunmount.md new file mode 100644 index 0000000000000..17c23a5ba2fd1 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel.componentwillunmount.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableChildPanel](./kibana-plugin-plugins-embeddable-public.embeddablechildpanel.md) > [componentWillUnmount](./kibana-plugin-plugins-embeddable-public.embeddablechildpanel.componentwillunmount.md) + +## EmbeddableChildPanel.componentWillUnmount() method + +Signature: + +```typescript +componentWillUnmount(): void; +``` +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel.embeddable.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel.embeddable.md new file mode 100644 index 0000000000000..298697167e127 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel.embeddable.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableChildPanel](./kibana-plugin-plugins-embeddable-public.embeddablechildpanel.md) > [embeddable](./kibana-plugin-plugins-embeddable-public.embeddablechildpanel.embeddable.md) + +## EmbeddableChildPanel.embeddable property + +Signature: + +```typescript +embeddable: IEmbeddable | ErrorEmbeddable; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel.md new file mode 100644 index 0000000000000..d52033b4fd6ad --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel.md @@ -0,0 +1,35 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableChildPanel](./kibana-plugin-plugins-embeddable-public.embeddablechildpanel.md) + +## EmbeddableChildPanel class + +This component can be used by embeddable containers using react to easily render children. It waits for the child to be initialized, showing a loading indicator until that is complete. + +Signature: + +```typescript +export declare class EmbeddableChildPanel extends React.Component +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(props)](./kibana-plugin-plugins-embeddable-public.embeddablechildpanel._constructor_.md) | | Constructs a new instance of the EmbeddableChildPanel class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [embeddable](./kibana-plugin-plugins-embeddable-public.embeddablechildpanel.embeddable.md) | | IEmbeddable | ErrorEmbeddable | | +| [mounted](./kibana-plugin-plugins-embeddable-public.embeddablechildpanel.mounted.md) | | boolean | | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [componentDidMount()](./kibana-plugin-plugins-embeddable-public.embeddablechildpanel.componentdidmount.md) | | | +| [componentWillUnmount()](./kibana-plugin-plugins-embeddable-public.embeddablechildpanel.componentwillunmount.md) | | | +| [render()](./kibana-plugin-plugins-embeddable-public.embeddablechildpanel.render.md) | | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel.mounted.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel.mounted.md new file mode 100644 index 0000000000000..169f27ea5afa6 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel.mounted.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableChildPanel](./kibana-plugin-plugins-embeddable-public.embeddablechildpanel.md) > [mounted](./kibana-plugin-plugins-embeddable-public.embeddablechildpanel.mounted.md) + +## EmbeddableChildPanel.mounted property + +Signature: + +```typescript +mounted: boolean; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel.render.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel.render.md new file mode 100644 index 0000000000000..01d70eb5f628f --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanel.render.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableChildPanel](./kibana-plugin-plugins-embeddable-public.embeddablechildpanel.md) > [render](./kibana-plugin-plugins-embeddable-public.embeddablechildpanel.render.md) + +## EmbeddableChildPanel.render() method + +Signature: + +```typescript +render(): JSX.Element; +``` +Returns: + +`JSX.Element` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.classname.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.classname.md new file mode 100644 index 0000000000000..d18dea31545d9 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.classname.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableChildPanelProps](./kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.md) > [className](./kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.classname.md) + +## EmbeddableChildPanelProps.className property + +Signature: + +```typescript +className?: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.container.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.container.md new file mode 100644 index 0000000000000..91120f955b15e --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.container.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableChildPanelProps](./kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.md) > [container](./kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.container.md) + +## EmbeddableChildPanelProps.container property + +Signature: + +```typescript +container: IContainer; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.embeddableid.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.embeddableid.md new file mode 100644 index 0000000000000..6765010e1b696 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.embeddableid.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableChildPanelProps](./kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.md) > [embeddableId](./kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.embeddableid.md) + +## EmbeddableChildPanelProps.embeddableId property + +Signature: + +```typescript +embeddableId: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.md new file mode 100644 index 0000000000000..7ed3bd1e20768 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableChildPanelProps](./kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.md) + +## EmbeddableChildPanelProps interface + +Signature: + +```typescript +export interface EmbeddableChildPanelProps +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [className](./kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.classname.md) | string | | +| [container](./kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.container.md) | IContainer | | +| [embeddableId](./kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.embeddableid.md) | string | | +| [PanelComponent](./kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.panelcomponent.md) | EmbeddableStart['EmbeddablePanel'] | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.panelcomponent.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.panelcomponent.md new file mode 100644 index 0000000000000..e1bb6b41d3887 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.panelcomponent.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableChildPanelProps](./kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.md) > [PanelComponent](./kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.panelcomponent.md) + +## EmbeddableChildPanelProps.PanelComponent property + +Signature: + +```typescript +PanelComponent: EmbeddableStart['EmbeddablePanel']; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablecontext.embeddable.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablecontext.embeddable.md new file mode 100644 index 0000000000000..06e51958a2d1e --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablecontext.embeddable.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableContext](./kibana-plugin-plugins-embeddable-public.embeddablecontext.md) > [embeddable](./kibana-plugin-plugins-embeddable-public.embeddablecontext.embeddable.md) + +## EmbeddableContext.embeddable property + +Signature: + +```typescript +embeddable: IEmbeddable; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablecontext.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablecontext.md new file mode 100644 index 0000000000000..a2c2d9245eabe --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablecontext.md @@ -0,0 +1,18 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableContext](./kibana-plugin-plugins-embeddable-public.embeddablecontext.md) + +## EmbeddableContext interface + +Signature: + +```typescript +export interface EmbeddableContext +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [embeddable](./kibana-plugin-plugins-embeddable-public.embeddablecontext.embeddable.md) | IEmbeddable | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableeditorstate.embeddableid.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableeditorstate.embeddableid.md new file mode 100644 index 0000000000000..d998e982cc9d5 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableeditorstate.embeddableid.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableEditorState](./kibana-plugin-plugins-embeddable-public.embeddableeditorstate.md) > [embeddableId](./kibana-plugin-plugins-embeddable-public.embeddableeditorstate.embeddableid.md) + +## EmbeddableEditorState.embeddableId property + +Signature: + +```typescript +embeddableId?: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableeditorstate.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableeditorstate.md new file mode 100644 index 0000000000000..63302f50204fe --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableeditorstate.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableEditorState](./kibana-plugin-plugins-embeddable-public.embeddableeditorstate.md) + +## EmbeddableEditorState interface + +A state package that contains information an editor will need to create or edit an embeddable then redirect back. + +Signature: + +```typescript +export interface EmbeddableEditorState +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [embeddableId](./kibana-plugin-plugins-embeddable-public.embeddableeditorstate.embeddableid.md) | string | | +| [originatingApp](./kibana-plugin-plugins-embeddable-public.embeddableeditorstate.originatingapp.md) | string | | +| [valueInput](./kibana-plugin-plugins-embeddable-public.embeddableeditorstate.valueinput.md) | EmbeddableInput | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableeditorstate.originatingapp.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableeditorstate.originatingapp.md new file mode 100644 index 0000000000000..640b0894ef2c7 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableeditorstate.originatingapp.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableEditorState](./kibana-plugin-plugins-embeddable-public.embeddableeditorstate.md) > [originatingApp](./kibana-plugin-plugins-embeddable-public.embeddableeditorstate.originatingapp.md) + +## EmbeddableEditorState.originatingApp property + +Signature: + +```typescript +originatingApp: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableeditorstate.valueinput.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableeditorstate.valueinput.md new file mode 100644 index 0000000000000..61ebfc61634b8 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableeditorstate.valueinput.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableEditorState](./kibana-plugin-plugins-embeddable-public.embeddableeditorstate.md) > [valueInput](./kibana-plugin-plugins-embeddable-public.embeddableeditorstate.valueinput.md) + +## EmbeddableEditorState.valueInput property + +Signature: + +```typescript +valueInput?: EmbeddableInput; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.cancreatenew.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.cancreatenew.md new file mode 100644 index 0000000000000..78bcb4f31a5be --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.cancreatenew.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableFactory](./kibana-plugin-plugins-embeddable-public.embeddablefactory.md) > [canCreateNew](./kibana-plugin-plugins-embeddable-public.embeddablefactory.cancreatenew.md) + +## EmbeddableFactory.canCreateNew() method + +If false, this type of embeddable can't be created with the "createNew" functionality. Instead, use createFromSavedObject, where an existing saved object must first exist. + +Signature: + +```typescript +canCreateNew(): boolean; +``` +Returns: + +`boolean` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.create.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.create.md new file mode 100644 index 0000000000000..130c8cb760625 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.create.md @@ -0,0 +1,27 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableFactory](./kibana-plugin-plugins-embeddable-public.embeddablefactory.md) > [create](./kibana-plugin-plugins-embeddable-public.embeddablefactory.create.md) + +## EmbeddableFactory.create() method + +Resolves to undefined if a new Embeddable cannot be directly created and the user will instead be redirected elsewhere. + +This will likely change in future iterations when we improve in place editing capabilities. + +Signature: + +```typescript +create(initialInput: TEmbeddableInput, parent?: IContainer): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| initialInput | TEmbeddableInput | | +| parent | IContainer | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.createfromsavedobject.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.createfromsavedobject.md new file mode 100644 index 0000000000000..7a411988ca3b0 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.createfromsavedobject.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableFactory](./kibana-plugin-plugins-embeddable-public.embeddablefactory.md) > [createFromSavedObject](./kibana-plugin-plugins-embeddable-public.embeddablefactory.createfromsavedobject.md) + +## EmbeddableFactory.createFromSavedObject() method + +Creates a new embeddable instance based off the saved object id. + +Signature: + +```typescript +createFromSavedObject(savedObjectId: string, input: Partial, parent?: IContainer): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| savedObjectId | string | | +| input | Partial<TEmbeddableInput> | some input may come from a parent, or user, if it's not stored with the saved object. For example, the time range of the parent container. | +| parent | IContainer | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.getdefaultinput.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.getdefaultinput.md new file mode 100644 index 0000000000000..bf1ca6abd9ba0 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.getdefaultinput.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableFactory](./kibana-plugin-plugins-embeddable-public.embeddablefactory.md) > [getDefaultInput](./kibana-plugin-plugins-embeddable-public.embeddablefactory.getdefaultinput.md) + +## EmbeddableFactory.getDefaultInput() method + +Can be used to get any default input, to be passed in to during the creation process. Default input will not be stored in a parent container, so any inherited input from a container will trump default input parameters. + +Signature: + +```typescript +getDefaultInput(partial: Partial): Partial; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| partial | Partial<TEmbeddableInput> | | + +Returns: + +`Partial` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.getdisplayname.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.getdisplayname.md new file mode 100644 index 0000000000000..5b97645d4947d --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.getdisplayname.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableFactory](./kibana-plugin-plugins-embeddable-public.embeddablefactory.md) > [getDisplayName](./kibana-plugin-plugins-embeddable-public.embeddablefactory.getdisplayname.md) + +## EmbeddableFactory.getDisplayName() method + +Returns a display name for this type of embeddable. Used in "Create new... " options in the add panel for containers. + +Signature: + +```typescript +getDisplayName(): string; +``` +Returns: + +`string` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.getexplicitinput.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.getexplicitinput.md new file mode 100644 index 0000000000000..3ec05f50005d0 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.getexplicitinput.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableFactory](./kibana-plugin-plugins-embeddable-public.embeddablefactory.md) > [getExplicitInput](./kibana-plugin-plugins-embeddable-public.embeddablefactory.getexplicitinput.md) + +## EmbeddableFactory.getExplicitInput() method + +Can be used to request explicit input from the user, to be passed in to `EmbeddableFactory:create`. Explicit input is stored on the parent container for this embeddable. It overrides any inherited input passed down from the parent container. + +Signature: + +```typescript +getExplicitInput(): Promise>; +``` +Returns: + +`Promise>` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.iscontainertype.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.iscontainertype.md new file mode 100644 index 0000000000000..f3ba375ab575c --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.iscontainertype.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableFactory](./kibana-plugin-plugins-embeddable-public.embeddablefactory.md) > [isContainerType](./kibana-plugin-plugins-embeddable-public.embeddablefactory.iscontainertype.md) + +## EmbeddableFactory.isContainerType property + +True if is this factory create embeddables that are Containers. Used in the add panel to conditionally show whether these can be added to another container. It's just not supported right now, but once nested containers are officially supported we can probably get rid of this interface. + +Signature: + +```typescript +readonly isContainerType: boolean; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.iseditable.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.iseditable.md new file mode 100644 index 0000000000000..f1ad10dfaa1f6 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.iseditable.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableFactory](./kibana-plugin-plugins-embeddable-public.embeddablefactory.md) > [isEditable](./kibana-plugin-plugins-embeddable-public.embeddablefactory.iseditable.md) + +## EmbeddableFactory.isEditable property + +Returns whether the current user should be allowed to edit this type of embeddable. Most of the time this should be based off the capabilities service, hence it's async. + +Signature: + +```typescript +readonly isEditable: () => Promise; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.md new file mode 100644 index 0000000000000..d543cf3d096df --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.md @@ -0,0 +1,34 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableFactory](./kibana-plugin-plugins-embeddable-public.embeddablefactory.md) + +## EmbeddableFactory interface + +EmbeddableFactories create and initialize an embeddable instance + +Signature: + +```typescript +export interface EmbeddableFactory = IEmbeddable, TSavedObjectAttributes extends SavedObjectAttributes = SavedObjectAttributes> extends PersistableState +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [isContainerType](./kibana-plugin-plugins-embeddable-public.embeddablefactory.iscontainertype.md) | boolean | True if is this factory create embeddables that are Containers. Used in the add panel to conditionally show whether these can be added to another container. It's just not supported right now, but once nested containers are officially supported we can probably get rid of this interface. | +| [isEditable](./kibana-plugin-plugins-embeddable-public.embeddablefactory.iseditable.md) | () => Promise<boolean> | Returns whether the current user should be allowed to edit this type of embeddable. Most of the time this should be based off the capabilities service, hence it's async. | +| [savedObjectMetaData](./kibana-plugin-plugins-embeddable-public.embeddablefactory.savedobjectmetadata.md) | SavedObjectMetaData<TSavedObjectAttributes> | | +| [type](./kibana-plugin-plugins-embeddable-public.embeddablefactory.type.md) | string | | + +## Methods + +| Method | Description | +| --- | --- | +| [canCreateNew()](./kibana-plugin-plugins-embeddable-public.embeddablefactory.cancreatenew.md) | If false, this type of embeddable can't be created with the "createNew" functionality. Instead, use createFromSavedObject, where an existing saved object must first exist. | +| [create(initialInput, parent)](./kibana-plugin-plugins-embeddable-public.embeddablefactory.create.md) | Resolves to undefined if a new Embeddable cannot be directly created and the user will instead be redirected elsewhere.This will likely change in future iterations when we improve in place editing capabilities. | +| [createFromSavedObject(savedObjectId, input, parent)](./kibana-plugin-plugins-embeddable-public.embeddablefactory.createfromsavedobject.md) | Creates a new embeddable instance based off the saved object id. | +| [getDefaultInput(partial)](./kibana-plugin-plugins-embeddable-public.embeddablefactory.getdefaultinput.md) | Can be used to get any default input, to be passed in to during the creation process. Default input will not be stored in a parent container, so any inherited input from a container will trump default input parameters. | +| [getDisplayName()](./kibana-plugin-plugins-embeddable-public.embeddablefactory.getdisplayname.md) | Returns a display name for this type of embeddable. Used in "Create new... " options in the add panel for containers. | +| [getExplicitInput()](./kibana-plugin-plugins-embeddable-public.embeddablefactory.getexplicitinput.md) | Can be used to request explicit input from the user, to be passed in to EmbeddableFactory:create. Explicit input is stored on the parent container for this embeddable. It overrides any inherited input passed down from the parent container. | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.savedobjectmetadata.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.savedobjectmetadata.md new file mode 100644 index 0000000000000..ec5bf420aac3e --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.savedobjectmetadata.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableFactory](./kibana-plugin-plugins-embeddable-public.embeddablefactory.md) > [savedObjectMetaData](./kibana-plugin-plugins-embeddable-public.embeddablefactory.savedobjectmetadata.md) + +## EmbeddableFactory.savedObjectMetaData property + +Signature: + +```typescript +readonly savedObjectMetaData?: SavedObjectMetaData; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.type.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.type.md new file mode 100644 index 0000000000000..307f808de9bcd --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactory.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableFactory](./kibana-plugin-plugins-embeddable-public.embeddablefactory.md) > [type](./kibana-plugin-plugins-embeddable-public.embeddablefactory.type.md) + +## EmbeddableFactory.type property + +Signature: + +```typescript +readonly type: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactorydefinition.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactorydefinition.md new file mode 100644 index 0000000000000..4e342d3cf73a1 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactorydefinition.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableFactoryDefinition](./kibana-plugin-plugins-embeddable-public.embeddablefactorydefinition.md) + +## EmbeddableFactoryDefinition type + +Signature: + +```typescript +export declare type EmbeddableFactoryDefinition = IEmbeddable, T extends SavedObjectAttributes = SavedObjectAttributes> = Pick, 'create' | 'type' | 'isEditable' | 'getDisplayName'> & Partial, 'createFromSavedObject' | 'isContainerType' | 'getExplicitInput' | 'savedObjectMetaData' | 'canCreateNew' | 'getDefaultInput' | 'telemetry' | 'extract' | 'inject'>>; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactorynotfounderror._constructor_.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactorynotfounderror._constructor_.md new file mode 100644 index 0000000000000..273126936ce91 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactorynotfounderror._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableFactoryNotFoundError](./kibana-plugin-plugins-embeddable-public.embeddablefactorynotfounderror.md) > [(constructor)](./kibana-plugin-plugins-embeddable-public.embeddablefactorynotfounderror._constructor_.md) + +## EmbeddableFactoryNotFoundError.(constructor) + +Constructs a new instance of the `EmbeddableFactoryNotFoundError` class + +Signature: + +```typescript +constructor(type: string); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| type | string | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactorynotfounderror.code.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactorynotfounderror.code.md new file mode 100644 index 0000000000000..2ad75d3e68ba4 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactorynotfounderror.code.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableFactoryNotFoundError](./kibana-plugin-plugins-embeddable-public.embeddablefactorynotfounderror.md) > [code](./kibana-plugin-plugins-embeddable-public.embeddablefactorynotfounderror.code.md) + +## EmbeddableFactoryNotFoundError.code property + +Signature: + +```typescript +code: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactorynotfounderror.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactorynotfounderror.md new file mode 100644 index 0000000000000..028271d36fee0 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablefactorynotfounderror.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableFactoryNotFoundError](./kibana-plugin-plugins-embeddable-public.embeddablefactorynotfounderror.md) + +## EmbeddableFactoryNotFoundError class + +Signature: + +```typescript +export declare class EmbeddableFactoryNotFoundError extends Error +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(type)](./kibana-plugin-plugins-embeddable-public.embeddablefactorynotfounderror._constructor_.md) | | Constructs a new instance of the EmbeddableFactoryNotFoundError class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [code](./kibana-plugin-plugins-embeddable-public.embeddablefactorynotfounderror.code.md) | | string | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableinput.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableinput.md new file mode 100644 index 0000000000000..d1d97d50f5948 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableinput.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableInput](./kibana-plugin-plugins-embeddable-public.embeddableinput.md) + +## EmbeddableInput type + +Signature: + +```typescript +export declare type EmbeddableInput = { + viewMode?: ViewMode; + title?: string; + id: string; + lastReloadRequestTime?: number; + hidePanelTitles?: boolean; + enhancements?: SerializableState; + disabledActions?: string[]; + disableTriggers?: boolean; + timeRange?: TimeRange; + query?: Query; + filters?: Filter[]; +}; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableinstanceconfiguration.id.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableinstanceconfiguration.id.md new file mode 100644 index 0000000000000..2298c6fb111a0 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableinstanceconfiguration.id.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableInstanceConfiguration](./kibana-plugin-plugins-embeddable-public.embeddableinstanceconfiguration.md) > [id](./kibana-plugin-plugins-embeddable-public.embeddableinstanceconfiguration.id.md) + +## EmbeddableInstanceConfiguration.id property + +Signature: + +```typescript +id: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableinstanceconfiguration.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableinstanceconfiguration.md new file mode 100644 index 0000000000000..84f6bcefef447 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableinstanceconfiguration.md @@ -0,0 +1,19 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableInstanceConfiguration](./kibana-plugin-plugins-embeddable-public.embeddableinstanceconfiguration.md) + +## EmbeddableInstanceConfiguration interface + +Signature: + +```typescript +export interface EmbeddableInstanceConfiguration +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [id](./kibana-plugin-plugins-embeddable-public.embeddableinstanceconfiguration.id.md) | string | | +| [savedObjectId](./kibana-plugin-plugins-embeddable-public.embeddableinstanceconfiguration.savedobjectid.md) | string | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableinstanceconfiguration.savedobjectid.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableinstanceconfiguration.savedobjectid.md new file mode 100644 index 0000000000000..c1584403c5bba --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableinstanceconfiguration.savedobjectid.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableInstanceConfiguration](./kibana-plugin-plugins-embeddable-public.embeddableinstanceconfiguration.md) > [savedObjectId](./kibana-plugin-plugins-embeddable-public.embeddableinstanceconfiguration.savedobjectid.md) + +## EmbeddableInstanceConfiguration.savedObjectId property + +Signature: + +```typescript +savedObjectId?: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.defaulttitle.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.defaulttitle.md new file mode 100644 index 0000000000000..c9d616a96e8e2 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.defaulttitle.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableOutput](./kibana-plugin-plugins-embeddable-public.embeddableoutput.md) > [defaultTitle](./kibana-plugin-plugins-embeddable-public.embeddableoutput.defaulttitle.md) + +## EmbeddableOutput.defaultTitle property + +Signature: + +```typescript +defaultTitle?: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.editable.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.editable.md new file mode 100644 index 0000000000000..4bf84a8f2abf8 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.editable.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableOutput](./kibana-plugin-plugins-embeddable-public.embeddableoutput.md) > [editable](./kibana-plugin-plugins-embeddable-public.embeddableoutput.editable.md) + +## EmbeddableOutput.editable property + +Signature: + +```typescript +editable?: boolean; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.editapp.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.editapp.md new file mode 100644 index 0000000000000..5c5acd6288ba4 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.editapp.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableOutput](./kibana-plugin-plugins-embeddable-public.embeddableoutput.md) > [editApp](./kibana-plugin-plugins-embeddable-public.embeddableoutput.editapp.md) + +## EmbeddableOutput.editApp property + +Signature: + +```typescript +editApp?: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.editpath.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.editpath.md new file mode 100644 index 0000000000000..da282ece32f20 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.editpath.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableOutput](./kibana-plugin-plugins-embeddable-public.embeddableoutput.md) > [editPath](./kibana-plugin-plugins-embeddable-public.embeddableoutput.editpath.md) + +## EmbeddableOutput.editPath property + +Signature: + +```typescript +editPath?: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.editurl.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.editurl.md new file mode 100644 index 0000000000000..a0c4bed4ad8bb --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.editurl.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableOutput](./kibana-plugin-plugins-embeddable-public.embeddableoutput.md) > [editUrl](./kibana-plugin-plugins-embeddable-public.embeddableoutput.editurl.md) + +## EmbeddableOutput.editUrl property + +Signature: + +```typescript +editUrl?: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.error.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.error.md new file mode 100644 index 0000000000000..db3f27ecf295b --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.error.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableOutput](./kibana-plugin-plugins-embeddable-public.embeddableoutput.md) > [error](./kibana-plugin-plugins-embeddable-public.embeddableoutput.error.md) + +## EmbeddableOutput.error property + +Signature: + +```typescript +error?: EmbeddableError; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.loading.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.loading.md new file mode 100644 index 0000000000000..a9472b1663f1a --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.loading.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableOutput](./kibana-plugin-plugins-embeddable-public.embeddableoutput.md) > [loading](./kibana-plugin-plugins-embeddable-public.embeddableoutput.loading.md) + +## EmbeddableOutput.loading property + +Signature: + +```typescript +loading?: boolean; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.md new file mode 100644 index 0000000000000..92e1560c34e31 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableOutput](./kibana-plugin-plugins-embeddable-public.embeddableoutput.md) + +## EmbeddableOutput interface + +Signature: + +```typescript +export interface EmbeddableOutput +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [defaultTitle](./kibana-plugin-plugins-embeddable-public.embeddableoutput.defaulttitle.md) | string | | +| [editable](./kibana-plugin-plugins-embeddable-public.embeddableoutput.editable.md) | boolean | | +| [editApp](./kibana-plugin-plugins-embeddable-public.embeddableoutput.editapp.md) | string | | +| [editPath](./kibana-plugin-plugins-embeddable-public.embeddableoutput.editpath.md) | string | | +| [editUrl](./kibana-plugin-plugins-embeddable-public.embeddableoutput.editurl.md) | string | | +| [error](./kibana-plugin-plugins-embeddable-public.embeddableoutput.error.md) | EmbeddableError | | +| [loading](./kibana-plugin-plugins-embeddable-public.embeddableoutput.loading.md) | boolean | | +| [savedObjectId](./kibana-plugin-plugins-embeddable-public.embeddableoutput.savedobjectid.md) | string | | +| [title](./kibana-plugin-plugins-embeddable-public.embeddableoutput.title.md) | string | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.savedobjectid.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.savedobjectid.md new file mode 100644 index 0000000000000..29aca26621d79 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.savedobjectid.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableOutput](./kibana-plugin-plugins-embeddable-public.embeddableoutput.md) > [savedObjectId](./kibana-plugin-plugins-embeddable-public.embeddableoutput.savedobjectid.md) + +## EmbeddableOutput.savedObjectId property + +Signature: + +```typescript +savedObjectId?: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.title.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.title.md new file mode 100644 index 0000000000000..0748a60b38e0f --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableoutput.title.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableOutput](./kibana-plugin-plugins-embeddable-public.embeddableoutput.md) > [title](./kibana-plugin-plugins-embeddable-public.embeddableoutput.title.md) + +## EmbeddableOutput.title property + +Signature: + +```typescript +title?: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepackagestate.embeddableid.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepackagestate.embeddableid.md new file mode 100644 index 0000000000000..de1598d92b6de --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepackagestate.embeddableid.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddablePackageState](./kibana-plugin-plugins-embeddable-public.embeddablepackagestate.md) > [embeddableId](./kibana-plugin-plugins-embeddable-public.embeddablepackagestate.embeddableid.md) + +## EmbeddablePackageState.embeddableId property + +Signature: + +```typescript +embeddableId?: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepackagestate.input.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepackagestate.input.md new file mode 100644 index 0000000000000..2f4b1a1fa4237 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepackagestate.input.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddablePackageState](./kibana-plugin-plugins-embeddable-public.embeddablepackagestate.md) > [input](./kibana-plugin-plugins-embeddable-public.embeddablepackagestate.input.md) + +## EmbeddablePackageState.input property + +Signature: + +```typescript +input: Optional | Optional; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepackagestate.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepackagestate.md new file mode 100644 index 0000000000000..1c0b1b8bf8b46 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepackagestate.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddablePackageState](./kibana-plugin-plugins-embeddable-public.embeddablepackagestate.md) + +## EmbeddablePackageState interface + +A state package that contains all fields necessary to create or update an embeddable by reference or by value in a container. + +Signature: + +```typescript +export interface EmbeddablePackageState +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [embeddableId](./kibana-plugin-plugins-embeddable-public.embeddablepackagestate.embeddableid.md) | string | | +| [input](./kibana-plugin-plugins-embeddable-public.embeddablepackagestate.input.md) | Optional<EmbeddableInput, 'id'> | Optional<SavedObjectEmbeddableInput, 'id'> | | +| [type](./kibana-plugin-plugins-embeddable-public.embeddablepackagestate.type.md) | string | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepackagestate.type.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepackagestate.type.md new file mode 100644 index 0000000000000..67ca5b8803dd5 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepackagestate.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddablePackageState](./kibana-plugin-plugins-embeddable-public.embeddablepackagestate.md) > [type](./kibana-plugin-plugins-embeddable-public.embeddablepackagestate.type.md) + +## EmbeddablePackageState.type property + +Signature: + +```typescript +type: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel._constructor_.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel._constructor_.md new file mode 100644 index 0000000000000..741e5df8a1590 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddablePanel](./kibana-plugin-plugins-embeddable-public.embeddablepanel.md) > [(constructor)](./kibana-plugin-plugins-embeddable-public.embeddablepanel._constructor_.md) + +## EmbeddablePanel.(constructor) + +Constructs a new instance of the `EmbeddablePanel` class + +Signature: + +```typescript +constructor(props: Props); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| props | Props | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.closemycontextmenupanel.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.closemycontextmenupanel.md new file mode 100644 index 0000000000000..6869257675aa4 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.closemycontextmenupanel.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddablePanel](./kibana-plugin-plugins-embeddable-public.embeddablepanel.md) > [closeMyContextMenuPanel](./kibana-plugin-plugins-embeddable-public.embeddablepanel.closemycontextmenupanel.md) + +## EmbeddablePanel.closeMyContextMenuPanel property + +Signature: + +```typescript +closeMyContextMenuPanel: () => void; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.componentdidmount.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.componentdidmount.md new file mode 100644 index 0000000000000..fb281dcf1107f --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.componentdidmount.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddablePanel](./kibana-plugin-plugins-embeddable-public.embeddablepanel.md) > [componentDidMount](./kibana-plugin-plugins-embeddable-public.embeddablepanel.componentdidmount.md) + +## EmbeddablePanel.componentDidMount() method + +Signature: + +```typescript +componentDidMount(): void; +``` +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.componentwillunmount.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.componentwillunmount.md new file mode 100644 index 0000000000000..41050f9c7c82a --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.componentwillunmount.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddablePanel](./kibana-plugin-plugins-embeddable-public.embeddablepanel.md) > [componentWillUnmount](./kibana-plugin-plugins-embeddable-public.embeddablepanel.componentwillunmount.md) + +## EmbeddablePanel.componentWillUnmount() method + +Signature: + +```typescript +componentWillUnmount(): void; +``` +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.md new file mode 100644 index 0000000000000..643649ede51ef --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.md @@ -0,0 +1,35 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddablePanel](./kibana-plugin-plugins-embeddable-public.embeddablepanel.md) + +## EmbeddablePanel class + +Signature: + +```typescript +export declare class EmbeddablePanel extends React.Component +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(props)](./kibana-plugin-plugins-embeddable-public.embeddablepanel._constructor_.md) | | Constructs a new instance of the EmbeddablePanel class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [closeMyContextMenuPanel](./kibana-plugin-plugins-embeddable-public.embeddablepanel.closemycontextmenupanel.md) | | () => void | | +| [onBlur](./kibana-plugin-plugins-embeddable-public.embeddablepanel.onblur.md) | | (blurredPanelIndex: string) => void | | +| [onFocus](./kibana-plugin-plugins-embeddable-public.embeddablepanel.onfocus.md) | | (focusedPanelIndex: string) => void | | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [componentDidMount()](./kibana-plugin-plugins-embeddable-public.embeddablepanel.componentdidmount.md) | | | +| [componentWillUnmount()](./kibana-plugin-plugins-embeddable-public.embeddablepanel.componentwillunmount.md) | | | +| [render()](./kibana-plugin-plugins-embeddable-public.embeddablepanel.render.md) | | | +| [UNSAFE\_componentWillMount()](./kibana-plugin-plugins-embeddable-public.embeddablepanel.unsafe_componentwillmount.md) | | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.onblur.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.onblur.md new file mode 100644 index 0000000000000..f1db746801818 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.onblur.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddablePanel](./kibana-plugin-plugins-embeddable-public.embeddablepanel.md) > [onBlur](./kibana-plugin-plugins-embeddable-public.embeddablepanel.onblur.md) + +## EmbeddablePanel.onBlur property + +Signature: + +```typescript +onBlur: (blurredPanelIndex: string) => void; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.onfocus.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.onfocus.md new file mode 100644 index 0000000000000..3c9b713eab950 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.onfocus.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddablePanel](./kibana-plugin-plugins-embeddable-public.embeddablepanel.md) > [onFocus](./kibana-plugin-plugins-embeddable-public.embeddablepanel.onfocus.md) + +## EmbeddablePanel.onFocus property + +Signature: + +```typescript +onFocus: (focusedPanelIndex: string) => void; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.render.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.render.md new file mode 100644 index 0000000000000..13e87df47a242 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.render.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddablePanel](./kibana-plugin-plugins-embeddable-public.embeddablepanel.md) > [render](./kibana-plugin-plugins-embeddable-public.embeddablepanel.render.md) + +## EmbeddablePanel.render() method + +Signature: + +```typescript +render(): JSX.Element; +``` +Returns: + +`JSX.Element` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.unsafe_componentwillmount.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.unsafe_componentwillmount.md new file mode 100644 index 0000000000000..286d7e9cee1f3 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanel.unsafe_componentwillmount.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddablePanel](./kibana-plugin-plugins-embeddable-public.embeddablepanel.md) > [UNSAFE\_componentWillMount](./kibana-plugin-plugins-embeddable-public.embeddablepanel.unsafe_componentwillmount.md) + +## EmbeddablePanel.UNSAFE\_componentWillMount() method + +Signature: + +```typescript +UNSAFE_componentWillMount(): void; +``` +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanelhoc.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanelhoc.md new file mode 100644 index 0000000000000..3f57ac562e6d5 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablepanelhoc.md @@ -0,0 +1,14 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddablePanelHOC](./kibana-plugin-plugins-embeddable-public.embeddablepanelhoc.md) + +## EmbeddablePanelHOC type + +Signature: + +```typescript +export declare type EmbeddablePanelHOC = React.FC<{ + embeddable: IEmbeddable; + hideHeader?: boolean; +}>; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablerenderer.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablerenderer.md new file mode 100644 index 0000000000000..1bc55e6007910 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablerenderer.md @@ -0,0 +1,32 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableRenderer](./kibana-plugin-plugins-embeddable-public.embeddablerenderer.md) + +## EmbeddableRenderer variable + +Helper react component to render an embeddable Can be used if you have an embeddable object or an embeddable factory Supports updating input by passing `input` prop + +Signature: + +```typescript +EmbeddableRenderer: (props: EmbeddableRendererProps) => JSX.Element +``` + +## Remarks + +This component shouldn't be used inside an embeddable container to render embeddable children because children may lose inherited input, here is why: + +When passing `input` inside a prop, internally there is a call: + +```ts +embeddable.updateInput(input); + +``` +If you are simply rendering an embeddable, it's no problem. + +However when you are dealing with containers, you want to be sure to only pass into updateInput the actual state that changed. This is because calling child.updateInput({ foo }) will make foo explicit state. It cannot be inherited from it's parent. + +For example, on a dashboard, the time range is inherited by all children, unless they had their time range set explicitly. This is how "per panel time range" works. That action calls embeddable.updateInput({ timeRange }), and the time range will no longer be inherited from the container. + +see: https://github.com/elastic/kibana/pull/67783\#discussion\_r435447657 for more details. refer to: examples/embeddable\_explorer for examples with correct usage of this component. + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablerendererprops.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablerendererprops.md new file mode 100644 index 0000000000000..c21864b1140e8 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablerendererprops.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableRendererProps](./kibana-plugin-plugins-embeddable-public.embeddablerendererprops.md) + +## EmbeddableRendererProps type + +This type is a publicly exposed props of [EmbeddableRenderer](./kibana-plugin-plugins-embeddable-public.embeddablerenderer.md) Union is used to validate that or factory or embeddable is passed in, but it can't be both simultaneously In case when embeddable is passed in, input is optional, because there is already an input inside of embeddable object In case when factory is used, then input is required, because it will be used as initial input to create an embeddable object + +Signature: + +```typescript +export declare type EmbeddableRendererProps = EmbeddableRendererPropsWithEmbeddable | EmbeddableRendererWithFactory; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableroot._constructor_.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableroot._constructor_.md new file mode 100644 index 0000000000000..4e0a2a6880d29 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableroot._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableRoot](./kibana-plugin-plugins-embeddable-public.embeddableroot.md) > [(constructor)](./kibana-plugin-plugins-embeddable-public.embeddableroot._constructor_.md) + +## EmbeddableRoot.(constructor) + +Constructs a new instance of the `EmbeddableRoot` class + +Signature: + +```typescript +constructor(props: Props); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| props | Props | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableroot.componentdidmount.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableroot.componentdidmount.md new file mode 100644 index 0000000000000..7085339dd8868 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableroot.componentdidmount.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableRoot](./kibana-plugin-plugins-embeddable-public.embeddableroot.md) > [componentDidMount](./kibana-plugin-plugins-embeddable-public.embeddableroot.componentdidmount.md) + +## EmbeddableRoot.componentDidMount() method + +Signature: + +```typescript +componentDidMount(): void; +``` +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableroot.componentdidupdate.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableroot.componentdidupdate.md new file mode 100644 index 0000000000000..386c8c61681d5 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableroot.componentdidupdate.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableRoot](./kibana-plugin-plugins-embeddable-public.embeddableroot.md) > [componentDidUpdate](./kibana-plugin-plugins-embeddable-public.embeddableroot.componentdidupdate.md) + +## EmbeddableRoot.componentDidUpdate() method + +Signature: + +```typescript +componentDidUpdate(prevProps?: Props): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| prevProps | Props | | + +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableroot.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableroot.md new file mode 100644 index 0000000000000..49d8a184f334c --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableroot.md @@ -0,0 +1,27 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableRoot](./kibana-plugin-plugins-embeddable-public.embeddableroot.md) + +## EmbeddableRoot class + +Signature: + +```typescript +export declare class EmbeddableRoot extends React.Component +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(props)](./kibana-plugin-plugins-embeddable-public.embeddableroot._constructor_.md) | | Constructs a new instance of the EmbeddableRoot class | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [componentDidMount()](./kibana-plugin-plugins-embeddable-public.embeddableroot.componentdidmount.md) | | | +| [componentDidUpdate(prevProps)](./kibana-plugin-plugins-embeddable-public.embeddableroot.componentdidupdate.md) | | | +| [render()](./kibana-plugin-plugins-embeddable-public.embeddableroot.render.md) | | | +| [shouldComponentUpdate(newProps)](./kibana-plugin-plugins-embeddable-public.embeddableroot.shouldcomponentupdate.md) | | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableroot.render.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableroot.render.md new file mode 100644 index 0000000000000..d9b3820dede15 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableroot.render.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableRoot](./kibana-plugin-plugins-embeddable-public.embeddableroot.md) > [render](./kibana-plugin-plugins-embeddable-public.embeddableroot.render.md) + +## EmbeddableRoot.render() method + +Signature: + +```typescript +render(): JSX.Element; +``` +Returns: + +`JSX.Element` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableroot.shouldcomponentupdate.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableroot.shouldcomponentupdate.md new file mode 100644 index 0000000000000..36b08f72c0e40 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddableroot.shouldcomponentupdate.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableRoot](./kibana-plugin-plugins-embeddable-public.embeddableroot.md) > [shouldComponentUpdate](./kibana-plugin-plugins-embeddable-public.embeddableroot.shouldcomponentupdate.md) + +## EmbeddableRoot.shouldComponentUpdate() method + +Signature: + +```typescript +shouldComponentUpdate(newProps: Props): boolean; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| newProps | Props | | + +Returns: + +`boolean` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetup.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetup.md new file mode 100644 index 0000000000000..97d6eda66bdcd --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetup.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableSetup](./kibana-plugin-plugins-embeddable-public.embeddablesetup.md) + +## EmbeddableSetup interface + +Signature: + +```typescript +export interface EmbeddableSetup +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [registerEmbeddableFactory](./kibana-plugin-plugins-embeddable-public.embeddablesetup.registerembeddablefactory.md) | <I extends EmbeddableInput, O extends EmbeddableOutput, E extends IEmbeddable<I, O> = IEmbeddable<I, O>>(id: string, factory: EmbeddableFactoryDefinition<I, O, E>) => () => EmbeddableFactory<I, O, E> | | +| [registerEnhancement](./kibana-plugin-plugins-embeddable-public.embeddablesetup.registerenhancement.md) | (enhancement: EnhancementRegistryDefinition) => void | | +| [setCustomEmbeddableFactoryProvider](./kibana-plugin-plugins-embeddable-public.embeddablesetup.setcustomembeddablefactoryprovider.md) | (customProvider: EmbeddableFactoryProvider) => void | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetup.registerembeddablefactory.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetup.registerembeddablefactory.md new file mode 100644 index 0000000000000..d9f63b30dfe6d --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetup.registerembeddablefactory.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableSetup](./kibana-plugin-plugins-embeddable-public.embeddablesetup.md) > [registerEmbeddableFactory](./kibana-plugin-plugins-embeddable-public.embeddablesetup.registerembeddablefactory.md) + +## EmbeddableSetup.registerEmbeddableFactory property + +Signature: + +```typescript +registerEmbeddableFactory: = IEmbeddable>(id: string, factory: EmbeddableFactoryDefinition) => () => EmbeddableFactory; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetup.registerenhancement.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetup.registerenhancement.md new file mode 100644 index 0000000000000..46baaf6dbf268 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetup.registerenhancement.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableSetup](./kibana-plugin-plugins-embeddable-public.embeddablesetup.md) > [registerEnhancement](./kibana-plugin-plugins-embeddable-public.embeddablesetup.registerenhancement.md) + +## EmbeddableSetup.registerEnhancement property + +Signature: + +```typescript +registerEnhancement: (enhancement: EnhancementRegistryDefinition) => void; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetup.setcustomembeddablefactoryprovider.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetup.setcustomembeddablefactoryprovider.md new file mode 100644 index 0000000000000..463ff80e5818b --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetup.setcustomembeddablefactoryprovider.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableSetup](./kibana-plugin-plugins-embeddable-public.embeddablesetup.md) > [setCustomEmbeddableFactoryProvider](./kibana-plugin-plugins-embeddable-public.embeddablesetup.setcustomembeddablefactoryprovider.md) + +## EmbeddableSetup.setCustomEmbeddableFactoryProvider property + +Signature: + +```typescript +setCustomEmbeddableFactoryProvider: (customProvider: EmbeddableFactoryProvider) => void; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetupdependencies.data.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetupdependencies.data.md new file mode 100644 index 0000000000000..d3a62657372ac --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetupdependencies.data.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableSetupDependencies](./kibana-plugin-plugins-embeddable-public.embeddablesetupdependencies.md) > [data](./kibana-plugin-plugins-embeddable-public.embeddablesetupdependencies.data.md) + +## EmbeddableSetupDependencies.data property + +Signature: + +```typescript +data: DataPublicPluginSetup; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetupdependencies.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetupdependencies.md new file mode 100644 index 0000000000000..fdd31ca75be2a --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetupdependencies.md @@ -0,0 +1,19 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableSetupDependencies](./kibana-plugin-plugins-embeddable-public.embeddablesetupdependencies.md) + +## EmbeddableSetupDependencies interface + +Signature: + +```typescript +export interface EmbeddableSetupDependencies +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [data](./kibana-plugin-plugins-embeddable-public.embeddablesetupdependencies.data.md) | DataPublicPluginSetup | | +| [uiActions](./kibana-plugin-plugins-embeddable-public.embeddablesetupdependencies.uiactions.md) | UiActionsSetup | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetupdependencies.uiactions.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetupdependencies.uiactions.md new file mode 100644 index 0000000000000..7eff6e2b0b28b --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetupdependencies.uiactions.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableSetupDependencies](./kibana-plugin-plugins-embeddable-public.embeddablesetupdependencies.md) > [uiActions](./kibana-plugin-plugins-embeddable-public.embeddablesetupdependencies.uiactions.md) + +## EmbeddableSetupDependencies.uiActions property + +Signature: + +```typescript +uiActions: UiActionsSetup; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestart.embeddablepanel.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestart.embeddablepanel.md new file mode 100644 index 0000000000000..b8c10bf0e4473 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestart.embeddablepanel.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableStart](./kibana-plugin-plugins-embeddable-public.embeddablestart.md) > [EmbeddablePanel](./kibana-plugin-plugins-embeddable-public.embeddablestart.embeddablepanel.md) + +## EmbeddableStart.EmbeddablePanel property + +Signature: + +```typescript +EmbeddablePanel: EmbeddablePanelHOC; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestart.getembeddablefactories.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestart.getembeddablefactories.md new file mode 100644 index 0000000000000..cc6b1187903bf --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestart.getembeddablefactories.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableStart](./kibana-plugin-plugins-embeddable-public.embeddablestart.md) > [getEmbeddableFactories](./kibana-plugin-plugins-embeddable-public.embeddablestart.getembeddablefactories.md) + +## EmbeddableStart.getEmbeddableFactories property + +Signature: + +```typescript +getEmbeddableFactories: () => IterableIterator; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestart.getembeddablefactory.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestart.getembeddablefactory.md new file mode 100644 index 0000000000000..d91878754bd7d --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestart.getembeddablefactory.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableStart](./kibana-plugin-plugins-embeddable-public.embeddablestart.md) > [getEmbeddableFactory](./kibana-plugin-plugins-embeddable-public.embeddablestart.getembeddablefactory.md) + +## EmbeddableStart.getEmbeddableFactory property + +Signature: + +```typescript +getEmbeddableFactory: = IEmbeddable>(embeddableFactoryId: string) => EmbeddableFactory | undefined; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestart.getembeddablepanel.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestart.getembeddablepanel.md new file mode 100644 index 0000000000000..7ba24a62a3893 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestart.getembeddablepanel.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableStart](./kibana-plugin-plugins-embeddable-public.embeddablestart.md) > [getEmbeddablePanel](./kibana-plugin-plugins-embeddable-public.embeddablestart.getembeddablepanel.md) + +## EmbeddableStart.getEmbeddablePanel property + +Signature: + +```typescript +getEmbeddablePanel: (stateTransfer?: EmbeddableStateTransfer) => EmbeddablePanelHOC; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestart.getstatetransfer.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestart.getstatetransfer.md new file mode 100644 index 0000000000000..dafc66b1a6e15 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestart.getstatetransfer.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableStart](./kibana-plugin-plugins-embeddable-public.embeddablestart.md) > [getStateTransfer](./kibana-plugin-plugins-embeddable-public.embeddablestart.getstatetransfer.md) + +## EmbeddableStart.getStateTransfer property + +Signature: + +```typescript +getStateTransfer: (history?: ScopedHistory) => EmbeddableStateTransfer; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestart.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestart.md new file mode 100644 index 0000000000000..f8e0028d8344b --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestart.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableStart](./kibana-plugin-plugins-embeddable-public.embeddablestart.md) + +## EmbeddableStart interface + +Signature: + +```typescript +export interface EmbeddableStart extends PersistableState +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [EmbeddablePanel](./kibana-plugin-plugins-embeddable-public.embeddablestart.embeddablepanel.md) | EmbeddablePanelHOC | | +| [getEmbeddableFactories](./kibana-plugin-plugins-embeddable-public.embeddablestart.getembeddablefactories.md) | () => IterableIterator<EmbeddableFactory> | | +| [getEmbeddableFactory](./kibana-plugin-plugins-embeddable-public.embeddablestart.getembeddablefactory.md) | <I extends EmbeddableInput = EmbeddableInput, O extends EmbeddableOutput = EmbeddableOutput, E extends IEmbeddable<I, O> = IEmbeddable<I, O>>(embeddableFactoryId: string) => EmbeddableFactory<I, O, E> | undefined | | +| [getEmbeddablePanel](./kibana-plugin-plugins-embeddable-public.embeddablestart.getembeddablepanel.md) | (stateTransfer?: EmbeddableStateTransfer) => EmbeddablePanelHOC | | +| [getStateTransfer](./kibana-plugin-plugins-embeddable-public.embeddablestart.getstatetransfer.md) | (history?: ScopedHistory) => EmbeddableStateTransfer | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.data.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.data.md new file mode 100644 index 0000000000000..0595609b11e49 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.data.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableStartDependencies](./kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.md) > [data](./kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.data.md) + +## EmbeddableStartDependencies.data property + +Signature: + +```typescript +data: DataPublicPluginStart; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.inspector.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.inspector.md new file mode 100644 index 0000000000000..299cc945104ab --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.inspector.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableStartDependencies](./kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.md) > [inspector](./kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.inspector.md) + +## EmbeddableStartDependencies.inspector property + +Signature: + +```typescript +inspector: InspectorStart; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.md new file mode 100644 index 0000000000000..5a1b5d1e06861 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableStartDependencies](./kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.md) + +## EmbeddableStartDependencies interface + +Signature: + +```typescript +export interface EmbeddableStartDependencies +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [data](./kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.data.md) | DataPublicPluginStart | | +| [inspector](./kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.inspector.md) | InspectorStart | | +| [uiActions](./kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.uiactions.md) | UiActionsStart | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.uiactions.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.uiactions.md new file mode 100644 index 0000000000000..398ee3fbcbc50 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.uiactions.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableStartDependencies](./kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.md) > [uiActions](./kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.uiactions.md) + +## EmbeddableStartDependencies.uiActions property + +Signature: + +```typescript +uiActions: UiActionsStart; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer._constructor_.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer._constructor_.md new file mode 100644 index 0000000000000..323ed5e38bde1 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer._constructor_.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableStateTransfer](./kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.md) > [(constructor)](./kibana-plugin-plugins-embeddable-public.embeddablestatetransfer._constructor_.md) + +## EmbeddableStateTransfer.(constructor) + +Constructs a new instance of the `EmbeddableStateTransfer` class + +Signature: + +```typescript +constructor(navigateToApp: ApplicationStart['navigateToApp'], scopedHistory?: ScopedHistory | undefined, appList?: ReadonlyMap | undefined); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| navigateToApp | ApplicationStart['navigateToApp'] | | +| scopedHistory | ScopedHistory<unknown> | undefined | | +| appList | ReadonlyMap<string, PublicAppInfo> | undefined | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.getappnamefromid.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.getappnamefromid.md new file mode 100644 index 0000000000000..f15574593e853 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.getappnamefromid.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableStateTransfer](./kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.md) > [getAppNameFromId](./kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.getappnamefromid.md) + +## EmbeddableStateTransfer.getAppNameFromId property + +Fetches an internationalized app title when given an appId. + +Signature: + +```typescript +getAppNameFromId: (appId: string) => string | undefined; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.getincomingeditorstate.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.getincomingeditorstate.md new file mode 100644 index 0000000000000..2a0823a9bf835 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.getincomingeditorstate.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableStateTransfer](./kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.md) > [getIncomingEditorState](./kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.getincomingeditorstate.md) + +## EmbeddableStateTransfer.getIncomingEditorState() method + +Fetches an [originating app](./kibana-plugin-plugins-embeddable-public.embeddableeditorstate.md) argument from the scoped history's location state. + +Signature: + +```typescript +getIncomingEditorState(options?: { + keysToRemoveAfterFetch?: string[]; + }): EmbeddableEditorState | undefined; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| options | {
keysToRemoveAfterFetch?: string[];
} | | + +Returns: + +`EmbeddableEditorState | undefined` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.getincomingembeddablepackage.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.getincomingembeddablepackage.md new file mode 100644 index 0000000000000..2069f0ce084f9 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.getincomingembeddablepackage.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableStateTransfer](./kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.md) > [getIncomingEmbeddablePackage](./kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.getincomingembeddablepackage.md) + +## EmbeddableStateTransfer.getIncomingEmbeddablePackage() method + +Fetches an [embeddable package](./kibana-plugin-plugins-embeddable-public.embeddablepackagestate.md) argument from the scoped history's location state. + +Signature: + +```typescript +getIncomingEmbeddablePackage(options?: { + keysToRemoveAfterFetch?: string[]; + }): EmbeddablePackageState | undefined; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| options | {
keysToRemoveAfterFetch?: string[];
} | | + +Returns: + +`EmbeddablePackageState | undefined` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.md new file mode 100644 index 0000000000000..2b44693e14846 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.md @@ -0,0 +1,35 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableStateTransfer](./kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.md) + +## EmbeddableStateTransfer class + +A wrapper around the state object in which provides strongly typed helper methods for common incoming and outgoing states used by the embeddable infrastructure. + +Signature: + +```typescript +export declare class EmbeddableStateTransfer +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(navigateToApp, scopedHistory, appList)](./kibana-plugin-plugins-embeddable-public.embeddablestatetransfer._constructor_.md) | | Constructs a new instance of the EmbeddableStateTransfer class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [getAppNameFromId](./kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.getappnamefromid.md) | | (appId: string) => string | undefined | Fetches an internationalized app title when given an appId. | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [getIncomingEditorState(options)](./kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.getincomingeditorstate.md) | | Fetches an [originating app](./kibana-plugin-plugins-embeddable-public.embeddableeditorstate.md) argument from the scoped history's location state. | +| [getIncomingEmbeddablePackage(options)](./kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.getincomingembeddablepackage.md) | | Fetches an [embeddable package](./kibana-plugin-plugins-embeddable-public.embeddablepackagestate.md) argument from the scoped history's location state. | +| [navigateToEditor(appId, options)](./kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.navigatetoeditor.md) | | A wrapper around the method which navigates to the specified appId with [embeddable editor state](./kibana-plugin-plugins-embeddable-public.embeddableeditorstate.md) | +| [navigateToWithEmbeddablePackage(appId, options)](./kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.navigatetowithembeddablepackage.md) | | A wrapper around the method which navigates to the specified appId with [embeddable package state](./kibana-plugin-plugins-embeddable-public.embeddablepackagestate.md) | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.navigatetoeditor.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.navigatetoeditor.md new file mode 100644 index 0000000000000..fa24784d9aac5 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.navigatetoeditor.md @@ -0,0 +1,29 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableStateTransfer](./kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.md) > [navigateToEditor](./kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.navigatetoeditor.md) + +## EmbeddableStateTransfer.navigateToEditor() method + +A wrapper around the method which navigates to the specified appId with [embeddable editor state](./kibana-plugin-plugins-embeddable-public.embeddableeditorstate.md) + +Signature: + +```typescript +navigateToEditor(appId: string, options?: { + path?: string; + state: EmbeddableEditorState; + appendToExistingState?: boolean; + }): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| appId | string | | +| options | {
path?: string;
state: EmbeddableEditorState;
appendToExistingState?: boolean;
} | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.navigatetowithembeddablepackage.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.navigatetowithembeddablepackage.md new file mode 100644 index 0000000000000..7173bc8b127cd --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.navigatetowithembeddablepackage.md @@ -0,0 +1,29 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EmbeddableStateTransfer](./kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.md) > [navigateToWithEmbeddablePackage](./kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.navigatetowithembeddablepackage.md) + +## EmbeddableStateTransfer.navigateToWithEmbeddablePackage() method + +A wrapper around the method which navigates to the specified appId with [embeddable package state](./kibana-plugin-plugins-embeddable-public.embeddablepackagestate.md) + +Signature: + +```typescript +navigateToWithEmbeddablePackage(appId: string, options?: { + path?: string; + state: EmbeddablePackageState; + appendToExistingState?: boolean; + }): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| appId | string | | +| options | {
path?: string;
state: EmbeddablePackageState;
appendToExistingState?: boolean;
} | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.enhancementregistrydefinition.id.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.enhancementregistrydefinition.id.md new file mode 100644 index 0000000000000..083b3931bcf7d --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.enhancementregistrydefinition.id.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EnhancementRegistryDefinition](./kibana-plugin-plugins-embeddable-public.enhancementregistrydefinition.md) > [id](./kibana-plugin-plugins-embeddable-public.enhancementregistrydefinition.id.md) + +## EnhancementRegistryDefinition.id property + +Signature: + +```typescript +id: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.enhancementregistrydefinition.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.enhancementregistrydefinition.md new file mode 100644 index 0000000000000..c54ebe4b1712d --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.enhancementregistrydefinition.md @@ -0,0 +1,18 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [EnhancementRegistryDefinition](./kibana-plugin-plugins-embeddable-public.enhancementregistrydefinition.md) + +## EnhancementRegistryDefinition interface + +Signature: + +```typescript +export interface EnhancementRegistryDefinition

extends PersistableStateDefinition

+``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [id](./kibana-plugin-plugins-embeddable-public.enhancementregistrydefinition.id.md) | string | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable._constructor_.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable._constructor_.md new file mode 100644 index 0000000000000..0facb07b41692 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable._constructor_.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ErrorEmbeddable](./kibana-plugin-plugins-embeddable-public.errorembeddable.md) > [(constructor)](./kibana-plugin-plugins-embeddable-public.errorembeddable._constructor_.md) + +## ErrorEmbeddable.(constructor) + +Constructs a new instance of the `ErrorEmbeddable` class + +Signature: + +```typescript +constructor(error: Error | string, input: EmbeddableInput, parent?: IContainer); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| error | Error | string | | +| input | EmbeddableInput | | +| parent | IContainer | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable.destroy.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable.destroy.md new file mode 100644 index 0000000000000..eeb605f2140ec --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable.destroy.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ErrorEmbeddable](./kibana-plugin-plugins-embeddable-public.errorembeddable.md) > [destroy](./kibana-plugin-plugins-embeddable-public.errorembeddable.destroy.md) + +## ErrorEmbeddable.destroy() method + +Signature: + +```typescript +destroy(): void; +``` +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable.error.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable.error.md new file mode 100644 index 0000000000000..7e4def3d52923 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable.error.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ErrorEmbeddable](./kibana-plugin-plugins-embeddable-public.errorembeddable.md) > [error](./kibana-plugin-plugins-embeddable-public.errorembeddable.error.md) + +## ErrorEmbeddable.error property + +Signature: + +```typescript +error: Error | string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable.md new file mode 100644 index 0000000000000..75f3fc6d503d5 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable.md @@ -0,0 +1,33 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ErrorEmbeddable](./kibana-plugin-plugins-embeddable-public.errorembeddable.md) + +## ErrorEmbeddable class + +Signature: + +```typescript +export declare class ErrorEmbeddable extends Embeddable +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(error, input, parent)](./kibana-plugin-plugins-embeddable-public.errorembeddable._constructor_.md) | | Constructs a new instance of the ErrorEmbeddable class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [error](./kibana-plugin-plugins-embeddable-public.errorembeddable.error.md) | | Error | string | | +| [type](./kibana-plugin-plugins-embeddable-public.errorembeddable.type.md) | | | | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [destroy()](./kibana-plugin-plugins-embeddable-public.errorembeddable.destroy.md) | | | +| [reload()](./kibana-plugin-plugins-embeddable-public.errorembeddable.reload.md) | | | +| [render(dom)](./kibana-plugin-plugins-embeddable-public.errorembeddable.render.md) | | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable.reload.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable.reload.md new file mode 100644 index 0000000000000..14d7c9fcf7ee0 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable.reload.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ErrorEmbeddable](./kibana-plugin-plugins-embeddable-public.errorembeddable.md) > [reload](./kibana-plugin-plugins-embeddable-public.errorembeddable.reload.md) + +## ErrorEmbeddable.reload() method + +Signature: + +```typescript +reload(): void; +``` +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable.render.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable.render.md new file mode 100644 index 0000000000000..70c9d169f3f7e --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable.render.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ErrorEmbeddable](./kibana-plugin-plugins-embeddable-public.errorembeddable.md) > [render](./kibana-plugin-plugins-embeddable-public.errorembeddable.render.md) + +## ErrorEmbeddable.render() method + +Signature: + +```typescript +render(dom: HTMLElement): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| dom | HTMLElement | | + +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable.type.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable.type.md new file mode 100644 index 0000000000000..d407e743a89af --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.errorembeddable.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ErrorEmbeddable](./kibana-plugin-plugins-embeddable-public.errorembeddable.md) > [type](./kibana-plugin-plugins-embeddable-public.errorembeddable.type.md) + +## ErrorEmbeddable.type property + +Signature: + +```typescript +readonly type = "error"; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.addnewembeddable.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.addnewembeddable.md new file mode 100644 index 0000000000000..ca0095580a0ba --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.addnewembeddable.md @@ -0,0 +1,25 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IContainer](./kibana-plugin-plugins-embeddable-public.icontainer.md) > [addNewEmbeddable](./kibana-plugin-plugins-embeddable-public.icontainer.addnewembeddable.md) + +## IContainer.addNewEmbeddable() method + +Adds a new embeddable to the container. `explicitInput` may partially specify the required embeddable input, but the remainder must come from inherited container state. + +Signature: + +```typescript +addNewEmbeddable = Embeddable>(type: string, explicitInput: Partial): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| type | string | | +| explicitInput | Partial<EEI> | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.getchild.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.getchild.md new file mode 100644 index 0000000000000..4355cfb68ad3f --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.getchild.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IContainer](./kibana-plugin-plugins-embeddable-public.icontainer.md) > [getChild](./kibana-plugin-plugins-embeddable-public.icontainer.getchild.md) + +## IContainer.getChild() method + +Returns the child embeddable with the given id. + +Signature: + +```typescript +getChild = Embeddable>(id: string): E; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| id | string | | + +Returns: + +`E` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.getinputforchild.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.getinputforchild.md new file mode 100644 index 0000000000000..e5afc0eac3ce0 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.getinputforchild.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IContainer](./kibana-plugin-plugins-embeddable-public.icontainer.md) > [getInputForChild](./kibana-plugin-plugins-embeddable-public.icontainer.getinputforchild.md) + +## IContainer.getInputForChild() method + +Returns the input for the given child. Uses a combination of explicit input for the child stored on the parent and derived/inherited input taken from the container itself. + +Signature: + +```typescript +getInputForChild(id: string): EEI; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| id | string | | + +Returns: + +`EEI` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.md new file mode 100644 index 0000000000000..cba430069c7a4 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IContainer](./kibana-plugin-plugins-embeddable-public.icontainer.md) + +## IContainer interface + +Signature: + +```typescript +export interface IContainer = ContainerInput, O extends ContainerOutput = ContainerOutput> extends IEmbeddable +``` + +## Methods + +| Method | Description | +| --- | --- | +| [addNewEmbeddable(type, explicitInput)](./kibana-plugin-plugins-embeddable-public.icontainer.addnewembeddable.md) | Adds a new embeddable to the container. explicitInput may partially specify the required embeddable input, but the remainder must come from inherited container state. | +| [getChild(id)](./kibana-plugin-plugins-embeddable-public.icontainer.getchild.md) | Returns the child embeddable with the given id. | +| [getInputForChild(id)](./kibana-plugin-plugins-embeddable-public.icontainer.getinputforchild.md) | Returns the input for the given child. Uses a combination of explicit input for the child stored on the parent and derived/inherited input taken from the container itself. | +| [removeEmbeddable(embeddableId)](./kibana-plugin-plugins-embeddable-public.icontainer.removeembeddable.md) | Removes the embeddable with the given id. | +| [untilEmbeddableLoaded(id)](./kibana-plugin-plugins-embeddable-public.icontainer.untilembeddableloaded.md) | Call if you want to wait until an embeddable with that id has finished loading. | +| [updateInputForChild(id, changes)](./kibana-plugin-plugins-embeddable-public.icontainer.updateinputforchild.md) | Changes the input for a given child. Note, this will override any inherited state taken from the container itself. | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.removeembeddable.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.removeembeddable.md new file mode 100644 index 0000000000000..94a991ca20a14 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.removeembeddable.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IContainer](./kibana-plugin-plugins-embeddable-public.icontainer.md) > [removeEmbeddable](./kibana-plugin-plugins-embeddable-public.icontainer.removeembeddable.md) + +## IContainer.removeEmbeddable() method + +Removes the embeddable with the given id. + +Signature: + +```typescript +removeEmbeddable(embeddableId: string): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| embeddableId | string | | + +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.untilembeddableloaded.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.untilembeddableloaded.md new file mode 100644 index 0000000000000..0d6d4a3d8ccf0 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.untilembeddableloaded.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IContainer](./kibana-plugin-plugins-embeddable-public.icontainer.md) > [untilEmbeddableLoaded](./kibana-plugin-plugins-embeddable-public.icontainer.untilembeddableloaded.md) + +## IContainer.untilEmbeddableLoaded() method + +Call if you want to wait until an embeddable with that id has finished loading. + +Signature: + +```typescript +untilEmbeddableLoaded(id: string): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| id | string | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.updateinputforchild.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.updateinputforchild.md new file mode 100644 index 0000000000000..04a82b0065516 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.icontainer.updateinputforchild.md @@ -0,0 +1,25 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IContainer](./kibana-plugin-plugins-embeddable-public.icontainer.md) > [updateInputForChild](./kibana-plugin-plugins-embeddable-public.icontainer.updateinputforchild.md) + +## IContainer.updateInputForChild() method + +Changes the input for a given child. Note, this will override any inherited state taken from the container itself. + +Signature: + +```typescript +updateInputForChild(id: string, changes: Partial): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| id | string | | +| changes | Partial<EEI> | | + +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.destroy.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.destroy.md new file mode 100644 index 0000000000000..7fc636f40f3c2 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.destroy.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) > [destroy](./kibana-plugin-plugins-embeddable-public.iembeddable.destroy.md) + +## IEmbeddable.destroy() method + +Cleans up subscriptions, destroy nodes mounted from calls to render. + +Signature: + +```typescript +destroy(): void; +``` +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.enhancements.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.enhancements.md new file mode 100644 index 0000000000000..9183cd6887872 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.enhancements.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) > [enhancements](./kibana-plugin-plugins-embeddable-public.iembeddable.enhancements.md) + +## IEmbeddable.enhancements property + +Extra abilities added to Embeddable by `*_enhanced` plugins. + +Signature: + +```typescript +enhancements?: object; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getinput.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getinput.md new file mode 100644 index 0000000000000..2fd8db07fa342 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getinput.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) > [getInput](./kibana-plugin-plugins-embeddable-public.iembeddable.getinput.md) + +## IEmbeddable.getInput() method + +Get the input used to instantiate this embeddable. The input is a serialized representation of this embeddable instance and can be used to clone or re-instantiate it. Input state: + +- Can be updated externally - Can change multiple times for a single embeddable instance. + +Examples: title, pie slice colors, custom search columns and sort order. + +Signature: + +```typescript +getInput(): Readonly; +``` +Returns: + +`Readonly` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getinput_.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getinput_.md new file mode 100644 index 0000000000000..ad91ad56b3d72 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getinput_.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) > [getInput$](./kibana-plugin-plugins-embeddable-public.iembeddable.getinput_.md) + +## IEmbeddable.getInput$() method + +Returns an observable which will be notified when input state changes. + +Signature: + +```typescript +getInput$(): Readonly>; +``` +Returns: + +`Readonly>` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getinspectoradapters.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getinspectoradapters.md new file mode 100644 index 0000000000000..84b083acac6f4 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getinspectoradapters.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) > [getInspectorAdapters](./kibana-plugin-plugins-embeddable-public.iembeddable.getinspectoradapters.md) + +## IEmbeddable.getInspectorAdapters() method + +An embeddable can return inspector adapters if it wants the inspector to be available via the context menu of that panel. Inspector adapters that will be used to open an inspector for. + +Signature: + +```typescript +getInspectorAdapters(): Adapters | undefined; +``` +Returns: + +`Adapters | undefined` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getiscontainer.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getiscontainer.md new file mode 100644 index 0000000000000..f9bfbbc4ca9bd --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getiscontainer.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) > [getIsContainer](./kibana-plugin-plugins-embeddable-public.iembeddable.getiscontainer.md) + +## IEmbeddable.getIsContainer() method + +A functional representation of the isContainer variable, but helpful for typescript to know the shape if this returns true + +Signature: + +```typescript +getIsContainer(): this is IContainer; +``` +Returns: + +`this is IContainer` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getoutput.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getoutput.md new file mode 100644 index 0000000000000..7e4e4fd3d4329 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getoutput.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) > [getOutput](./kibana-plugin-plugins-embeddable-public.iembeddable.getoutput.md) + +## IEmbeddable.getOutput() method + +Output state is: + +- State that should not change once the embeddable is instantiated, or - State that is derived from the input state, or - State that only the embeddable instance itself knows about, or the factory. + +Examples: editUrl, title taken from a saved object, if your input state was first name and last name, your output state could be greeting. + +Signature: + +```typescript +getOutput(): Readonly; +``` +Returns: + +`Readonly` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getoutput_.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getoutput_.md new file mode 100644 index 0000000000000..11ec3e0d1c8ea --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getoutput_.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) > [getOutput$](./kibana-plugin-plugins-embeddable-public.iembeddable.getoutput_.md) + +## IEmbeddable.getOutput$() method + +Returns an observable which will be notified when output state changes. + +Signature: + +```typescript +getOutput$(): Readonly>; +``` +Returns: + +`Readonly>` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getroot.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getroot.md new file mode 100644 index 0000000000000..eacec168b4d8a --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.getroot.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) > [getRoot](./kibana-plugin-plugins-embeddable-public.iembeddable.getroot.md) + +## IEmbeddable.getRoot() method + +Returns the top most parent embeddable, or itself if this embeddable is not within a parent. + +Signature: + +```typescript +getRoot(): IEmbeddable | IContainer; +``` +Returns: + +`IEmbeddable | IContainer` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.gettitle.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.gettitle.md new file mode 100644 index 0000000000000..eed80882f4b93 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.gettitle.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) > [getTitle](./kibana-plugin-plugins-embeddable-public.iembeddable.gettitle.md) + +## IEmbeddable.getTitle() method + +Returns the title of this embeddable. + +Signature: + +```typescript +getTitle(): string | undefined; +``` +Returns: + +`string | undefined` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.id.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.id.md new file mode 100644 index 0000000000000..7d2f5b9c7e71b --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.id.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) > [id](./kibana-plugin-plugins-embeddable-public.iembeddable.id.md) + +## IEmbeddable.id property + +A unique identifier for this embeddable. Mainly only used by containers to map their Panel States to a child embeddable instance. + +Signature: + +```typescript +readonly id: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.iscontainer.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.iscontainer.md new file mode 100644 index 0000000000000..93b910ee6f6a1 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.iscontainer.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) > [isContainer](./kibana-plugin-plugins-embeddable-public.iembeddable.iscontainer.md) + +## IEmbeddable.isContainer property + +Is this embeddable an instance of a Container class, can it contain nested embeddables? + +Signature: + +```typescript +readonly isContainer: boolean; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.md new file mode 100644 index 0000000000000..b3b6f961e56d1 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.md @@ -0,0 +1,41 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) + +## IEmbeddable interface + +Signature: + +```typescript +export interface IEmbeddable +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [enhancements](./kibana-plugin-plugins-embeddable-public.iembeddable.enhancements.md) | object | Extra abilities added to Embeddable by *_enhanced plugins. | +| [id](./kibana-plugin-plugins-embeddable-public.iembeddable.id.md) | string | A unique identifier for this embeddable. Mainly only used by containers to map their Panel States to a child embeddable instance. | +| [isContainer](./kibana-plugin-plugins-embeddable-public.iembeddable.iscontainer.md) | boolean | Is this embeddable an instance of a Container class, can it contain nested embeddables? | +| [parent](./kibana-plugin-plugins-embeddable-public.iembeddable.parent.md) | IContainer | If this embeddable is nested inside a container, this will contain a reference to its parent. | +| [runtimeId](./kibana-plugin-plugins-embeddable-public.iembeddable.runtimeid.md) | number | Unique ID an embeddable is assigned each time it is initialized. This ID is different for different instances of the same embeddable. For example, if the same dashboard is rendered twice on the screen, all embeddable instances will have a unique runtimeId. | +| [type](./kibana-plugin-plugins-embeddable-public.iembeddable.type.md) | string | The type of embeddable, this is what will be used to take a serialized embeddable and find the correct factory for which to create an instance of it. | + +## Methods + +| Method | Description | +| --- | --- | +| [destroy()](./kibana-plugin-plugins-embeddable-public.iembeddable.destroy.md) | Cleans up subscriptions, destroy nodes mounted from calls to render. | +| [getInput()](./kibana-plugin-plugins-embeddable-public.iembeddable.getinput.md) | Get the input used to instantiate this embeddable. The input is a serialized representation of this embeddable instance and can be used to clone or re-instantiate it. Input state:- Can be updated externally - Can change multiple times for a single embeddable instance.Examples: title, pie slice colors, custom search columns and sort order. | +| [getInput$()](./kibana-plugin-plugins-embeddable-public.iembeddable.getinput_.md) | Returns an observable which will be notified when input state changes. | +| [getInspectorAdapters()](./kibana-plugin-plugins-embeddable-public.iembeddable.getinspectoradapters.md) | An embeddable can return inspector adapters if it wants the inspector to be available via the context menu of that panel. Inspector adapters that will be used to open an inspector for. | +| [getIsContainer()](./kibana-plugin-plugins-embeddable-public.iembeddable.getiscontainer.md) | A functional representation of the isContainer variable, but helpful for typescript to know the shape if this returns true | +| [getOutput()](./kibana-plugin-plugins-embeddable-public.iembeddable.getoutput.md) | Output state is:- State that should not change once the embeddable is instantiated, or - State that is derived from the input state, or - State that only the embeddable instance itself knows about, or the factory.Examples: editUrl, title taken from a saved object, if your input state was first name and last name, your output state could be greeting. | +| [getOutput$()](./kibana-plugin-plugins-embeddable-public.iembeddable.getoutput_.md) | Returns an observable which will be notified when output state changes. | +| [getRoot()](./kibana-plugin-plugins-embeddable-public.iembeddable.getroot.md) | Returns the top most parent embeddable, or itself if this embeddable is not within a parent. | +| [getTitle()](./kibana-plugin-plugins-embeddable-public.iembeddable.gettitle.md) | Returns the title of this embeddable. | +| [reload()](./kibana-plugin-plugins-embeddable-public.iembeddable.reload.md) | Reload the embeddable so output and rendering is up to date. Especially relevant if the embeddable takes relative time as input (e.g. now to now-15) | +| [render(domNode)](./kibana-plugin-plugins-embeddable-public.iembeddable.render.md) | Renders the embeddable at the given node. | +| [supportedTriggers()](./kibana-plugin-plugins-embeddable-public.iembeddable.supportedtriggers.md) | List of triggers that this embeddable will execute. | +| [updateInput(changes)](./kibana-plugin-plugins-embeddable-public.iembeddable.updateinput.md) | Updates input state with the given changes. | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.parent.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.parent.md new file mode 100644 index 0000000000000..d20102902cdb0 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.parent.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) > [parent](./kibana-plugin-plugins-embeddable-public.iembeddable.parent.md) + +## IEmbeddable.parent property + +If this embeddable is nested inside a container, this will contain a reference to its parent. + +Signature: + +```typescript +readonly parent?: IContainer; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.reload.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.reload.md new file mode 100644 index 0000000000000..8caea9d8dc511 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.reload.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) > [reload](./kibana-plugin-plugins-embeddable-public.iembeddable.reload.md) + +## IEmbeddable.reload() method + +Reload the embeddable so output and rendering is up to date. Especially relevant if the embeddable takes relative time as input (e.g. now to now-15) + +Signature: + +```typescript +reload(): void; +``` +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.render.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.render.md new file mode 100644 index 0000000000000..9079227b622dc --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.render.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) > [render](./kibana-plugin-plugins-embeddable-public.iembeddable.render.md) + +## IEmbeddable.render() method + +Renders the embeddable at the given node. + +Signature: + +```typescript +render(domNode: HTMLElement | Element): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| domNode | HTMLElement | Element | | + +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.runtimeid.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.runtimeid.md new file mode 100644 index 0000000000000..5ddd8ddd0f8dd --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.runtimeid.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) > [runtimeId](./kibana-plugin-plugins-embeddable-public.iembeddable.runtimeid.md) + +## IEmbeddable.runtimeId property + +Unique ID an embeddable is assigned each time it is initialized. This ID is different for different instances of the same embeddable. For example, if the same dashboard is rendered twice on the screen, all embeddable instances will have a unique `runtimeId`. + +Signature: + +```typescript +readonly runtimeId?: number; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.supportedtriggers.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.supportedtriggers.md new file mode 100644 index 0000000000000..5480f3b246648 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.supportedtriggers.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) > [supportedTriggers](./kibana-plugin-plugins-embeddable-public.iembeddable.supportedtriggers.md) + +## IEmbeddable.supportedTriggers() method + +List of triggers that this embeddable will execute. + +Signature: + +```typescript +supportedTriggers(): Array; +``` +Returns: + +`Array` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.type.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.type.md new file mode 100644 index 0000000000000..46b9d40685dba --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.type.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) > [type](./kibana-plugin-plugins-embeddable-public.iembeddable.type.md) + +## IEmbeddable.type property + +The type of embeddable, this is what will be used to take a serialized embeddable and find the correct factory for which to create an instance of it. + +Signature: + +```typescript +readonly type: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.updateinput.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.updateinput.md new file mode 100644 index 0000000000000..523464103bd1a --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iembeddable.updateinput.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) > [updateInput](./kibana-plugin-plugins-embeddable-public.iembeddable.updateinput.md) + +## IEmbeddable.updateInput() method + +Updates input state with the given changes. + +Signature: + +```typescript +updateInput(changes: Partial): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| changes | Partial<I> | | + +Returns: + +`void` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iserrorembeddable.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iserrorembeddable.md new file mode 100644 index 0000000000000..358d085ea9bba --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.iserrorembeddable.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [isErrorEmbeddable](./kibana-plugin-plugins-embeddable-public.iserrorembeddable.md) + +## isErrorEmbeddable() function + +Signature: + +```typescript +export declare function isErrorEmbeddable(embeddable: TEmbeddable | ErrorEmbeddable): embeddable is ErrorEmbeddable; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| embeddable | TEmbeddable | ErrorEmbeddable | | + +Returns: + +`embeddable is ErrorEmbeddable` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.israngeselecttriggercontext.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.israngeselecttriggercontext.md new file mode 100644 index 0000000000000..cd28494fe3a09 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.israngeselecttriggercontext.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [isRangeSelectTriggerContext](./kibana-plugin-plugins-embeddable-public.israngeselecttriggercontext.md) + +## isRangeSelectTriggerContext variable + +Signature: + +```typescript +isRangeSelectTriggerContext: (context: ChartActionContext) => context is RangeSelectContext> +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.isreferenceorvalueembeddable.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.isreferenceorvalueembeddable.md new file mode 100644 index 0000000000000..26a221d929ce6 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.isreferenceorvalueembeddable.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [isReferenceOrValueEmbeddable](./kibana-plugin-plugins-embeddable-public.isreferenceorvalueembeddable.md) + +## isReferenceOrValueEmbeddable() function + +Signature: + +```typescript +export declare function isReferenceOrValueEmbeddable(incoming: unknown): incoming is ReferenceOrValueEmbeddable; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| incoming | unknown | | + +Returns: + +`incoming is ReferenceOrValueEmbeddable` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.issavedobjectembeddableinput.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.issavedobjectembeddableinput.md new file mode 100644 index 0000000000000..663cc41f1bffc --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.issavedobjectembeddableinput.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [isSavedObjectEmbeddableInput](./kibana-plugin-plugins-embeddable-public.issavedobjectembeddableinput.md) + +## isSavedObjectEmbeddableInput() function + +Signature: + +```typescript +export declare function isSavedObjectEmbeddableInput(input: EmbeddableInput | SavedObjectEmbeddableInput): input is SavedObjectEmbeddableInput; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| input | EmbeddableInput | SavedObjectEmbeddableInput | | + +Returns: + +`input is SavedObjectEmbeddableInput` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.isvalueclicktriggercontext.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.isvalueclicktriggercontext.md new file mode 100644 index 0000000000000..4e3c970d9b437 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.isvalueclicktriggercontext.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [isValueClickTriggerContext](./kibana-plugin-plugins-embeddable-public.isvalueclicktriggercontext.md) + +## isValueClickTriggerContext variable + +Signature: + +```typescript +isValueClickTriggerContext: (context: ChartActionContext) => context is ValueClickContext> +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.md new file mode 100644 index 0000000000000..64dfdd1c6dc22 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.md @@ -0,0 +1,95 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) + +## kibana-plugin-plugins-embeddable-public package + +## Classes + +| Class | Description | +| --- | --- | +| [AddPanelAction](./kibana-plugin-plugins-embeddable-public.addpanelaction.md) | | +| [Container](./kibana-plugin-plugins-embeddable-public.container.md) | | +| [EditPanelAction](./kibana-plugin-plugins-embeddable-public.editpanelaction.md) | | +| [Embeddable](./kibana-plugin-plugins-embeddable-public.embeddable.md) | | +| [EmbeddableChildPanel](./kibana-plugin-plugins-embeddable-public.embeddablechildpanel.md) | This component can be used by embeddable containers using react to easily render children. It waits for the child to be initialized, showing a loading indicator until that is complete. | +| [EmbeddableFactoryNotFoundError](./kibana-plugin-plugins-embeddable-public.embeddablefactorynotfounderror.md) | | +| [EmbeddablePanel](./kibana-plugin-plugins-embeddable-public.embeddablepanel.md) | | +| [EmbeddableRoot](./kibana-plugin-plugins-embeddable-public.embeddableroot.md) | | +| [EmbeddableStateTransfer](./kibana-plugin-plugins-embeddable-public.embeddablestatetransfer.md) | A wrapper around the state object in which provides strongly typed helper methods for common incoming and outgoing states used by the embeddable infrastructure. | +| [ErrorEmbeddable](./kibana-plugin-plugins-embeddable-public.errorembeddable.md) | | +| [PanelNotFoundError](./kibana-plugin-plugins-embeddable-public.panelnotfounderror.md) | | + +## Enumerations + +| Enumeration | Description | +| --- | --- | +| [ViewMode](./kibana-plugin-plugins-embeddable-public.viewmode.md) | | + +## Functions + +| Function | Description | +| --- | --- | +| [isErrorEmbeddable(embeddable)](./kibana-plugin-plugins-embeddable-public.iserrorembeddable.md) | | +| [isReferenceOrValueEmbeddable(incoming)](./kibana-plugin-plugins-embeddable-public.isreferenceorvalueembeddable.md) | | +| [isSavedObjectEmbeddableInput(input)](./kibana-plugin-plugins-embeddable-public.issavedobjectembeddableinput.md) | | +| [openAddPanelFlyout(options)](./kibana-plugin-plugins-embeddable-public.openaddpanelflyout.md) | | +| [plugin(initializerContext)](./kibana-plugin-plugins-embeddable-public.plugin.md) | | + +## Interfaces + +| Interface | Description | +| --- | --- | +| [Adapters](./kibana-plugin-plugins-embeddable-public.adapters.md) | The interface that the adapters used to open an inspector have to fullfill. | +| [ContainerInput](./kibana-plugin-plugins-embeddable-public.containerinput.md) | | +| [ContainerOutput](./kibana-plugin-plugins-embeddable-public.containeroutput.md) | | +| [EmbeddableChildPanelProps](./kibana-plugin-plugins-embeddable-public.embeddablechildpanelprops.md) | | +| [EmbeddableContext](./kibana-plugin-plugins-embeddable-public.embeddablecontext.md) | | +| [EmbeddableEditorState](./kibana-plugin-plugins-embeddable-public.embeddableeditorstate.md) | A state package that contains information an editor will need to create or edit an embeddable then redirect back. | +| [EmbeddableFactory](./kibana-plugin-plugins-embeddable-public.embeddablefactory.md) | EmbeddableFactories create and initialize an embeddable instance | +| [EmbeddableInstanceConfiguration](./kibana-plugin-plugins-embeddable-public.embeddableinstanceconfiguration.md) | | +| [EmbeddableOutput](./kibana-plugin-plugins-embeddable-public.embeddableoutput.md) | | +| [EmbeddablePackageState](./kibana-plugin-plugins-embeddable-public.embeddablepackagestate.md) | A state package that contains all fields necessary to create or update an embeddable by reference or by value in a container. | +| [EmbeddableSetup](./kibana-plugin-plugins-embeddable-public.embeddablesetup.md) | | +| [EmbeddableSetupDependencies](./kibana-plugin-plugins-embeddable-public.embeddablesetupdependencies.md) | | +| [EmbeddableStart](./kibana-plugin-plugins-embeddable-public.embeddablestart.md) | | +| [EmbeddableStartDependencies](./kibana-plugin-plugins-embeddable-public.embeddablestartdependencies.md) | | +| [EnhancementRegistryDefinition](./kibana-plugin-plugins-embeddable-public.enhancementregistrydefinition.md) | | +| [IContainer](./kibana-plugin-plugins-embeddable-public.icontainer.md) | | +| [IEmbeddable](./kibana-plugin-plugins-embeddable-public.iembeddable.md) | | +| [OutputSpec](./kibana-plugin-plugins-embeddable-public.outputspec.md) | | +| [PanelState](./kibana-plugin-plugins-embeddable-public.panelstate.md) | | +| [PropertySpec](./kibana-plugin-plugins-embeddable-public.propertyspec.md) | | +| [RangeSelectContext](./kibana-plugin-plugins-embeddable-public.rangeselectcontext.md) | | +| [ReferenceOrValueEmbeddable](./kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.md) | Any embeddable that implements this interface will be able to use input that is either by reference (backed by a saved object) OR by value, (provided by the container). | +| [SavedObjectEmbeddableInput](./kibana-plugin-plugins-embeddable-public.savedobjectembeddableinput.md) | | +| [ValueClickContext](./kibana-plugin-plugins-embeddable-public.valueclickcontext.md) | | + +## Variables + +| Variable | Description | +| --- | --- | +| [ACTION\_ADD\_PANEL](./kibana-plugin-plugins-embeddable-public.action_add_panel.md) | | +| [ACTION\_EDIT\_PANEL](./kibana-plugin-plugins-embeddable-public.action_edit_panel.md) | | +| [CONTEXT\_MENU\_TRIGGER](./kibana-plugin-plugins-embeddable-public.context_menu_trigger.md) | | +| [contextMenuTrigger](./kibana-plugin-plugins-embeddable-public.contextmenutrigger.md) | | +| [defaultEmbeddableFactoryProvider](./kibana-plugin-plugins-embeddable-public.defaultembeddablefactoryprovider.md) | | +| [EmbeddableRenderer](./kibana-plugin-plugins-embeddable-public.embeddablerenderer.md) | Helper react component to render an embeddable Can be used if you have an embeddable object or an embeddable factory Supports updating input by passing input prop | +| [isRangeSelectTriggerContext](./kibana-plugin-plugins-embeddable-public.israngeselecttriggercontext.md) | | +| [isValueClickTriggerContext](./kibana-plugin-plugins-embeddable-public.isvalueclicktriggercontext.md) | | +| [PANEL\_BADGE\_TRIGGER](./kibana-plugin-plugins-embeddable-public.panel_badge_trigger.md) | | +| [PANEL\_NOTIFICATION\_TRIGGER](./kibana-plugin-plugins-embeddable-public.panel_notification_trigger.md) | | +| [panelBadgeTrigger](./kibana-plugin-plugins-embeddable-public.panelbadgetrigger.md) | | +| [panelNotificationTrigger](./kibana-plugin-plugins-embeddable-public.panelnotificationtrigger.md) | | +| [withEmbeddableSubscription](./kibana-plugin-plugins-embeddable-public.withembeddablesubscription.md) | | + +## Type Aliases + +| Type Alias | Description | +| --- | --- | +| [ChartActionContext](./kibana-plugin-plugins-embeddable-public.chartactioncontext.md) | | +| [EmbeddableFactoryDefinition](./kibana-plugin-plugins-embeddable-public.embeddablefactorydefinition.md) | | +| [EmbeddableInput](./kibana-plugin-plugins-embeddable-public.embeddableinput.md) | | +| [EmbeddablePanelHOC](./kibana-plugin-plugins-embeddable-public.embeddablepanelhoc.md) | | +| [EmbeddableRendererProps](./kibana-plugin-plugins-embeddable-public.embeddablerendererprops.md) | This type is a publicly exposed props of [EmbeddableRenderer](./kibana-plugin-plugins-embeddable-public.embeddablerenderer.md) Union is used to validate that or factory or embeddable is passed in, but it can't be both simultaneously In case when embeddable is passed in, input is optional, because there is already an input inside of embeddable object In case when factory is used, then input is required, because it will be used as initial input to create an embeddable object | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.openaddpanelflyout.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.openaddpanelflyout.md new file mode 100644 index 0000000000000..ce97f79b4beb9 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.openaddpanelflyout.md @@ -0,0 +1,29 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [openAddPanelFlyout](./kibana-plugin-plugins-embeddable-public.openaddpanelflyout.md) + +## openAddPanelFlyout() function + +Signature: + +```typescript +export declare function openAddPanelFlyout(options: { + embeddable: IContainer; + getFactory: EmbeddableStart['getEmbeddableFactory']; + getAllFactories: EmbeddableStart['getEmbeddableFactories']; + overlays: OverlayStart; + notifications: NotificationsStart; + SavedObjectFinder: React.ComponentType; +}): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| options | {
embeddable: IContainer;
getFactory: EmbeddableStart['getEmbeddableFactory'];
getAllFactories: EmbeddableStart['getEmbeddableFactories'];
overlays: OverlayStart;
notifications: NotificationsStart;
SavedObjectFinder: React.ComponentType<any>;
} | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.outputspec.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.outputspec.md new file mode 100644 index 0000000000000..eead69b4e487c --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.outputspec.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [OutputSpec](./kibana-plugin-plugins-embeddable-public.outputspec.md) + +## OutputSpec interface + +Signature: + +```typescript +export interface OutputSpec +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panel_badge_trigger.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panel_badge_trigger.md new file mode 100644 index 0000000000000..d5032d98ef4aa --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panel_badge_trigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [PANEL\_BADGE\_TRIGGER](./kibana-plugin-plugins-embeddable-public.panel_badge_trigger.md) + +## PANEL\_BADGE\_TRIGGER variable + +Signature: + +```typescript +PANEL_BADGE_TRIGGER = "PANEL_BADGE_TRIGGER" +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panel_notification_trigger.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panel_notification_trigger.md new file mode 100644 index 0000000000000..cd8a4a1ca4581 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panel_notification_trigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [PANEL\_NOTIFICATION\_TRIGGER](./kibana-plugin-plugins-embeddable-public.panel_notification_trigger.md) + +## PANEL\_NOTIFICATION\_TRIGGER variable + +Signature: + +```typescript +PANEL_NOTIFICATION_TRIGGER = "PANEL_NOTIFICATION_TRIGGER" +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelbadgetrigger.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelbadgetrigger.md new file mode 100644 index 0000000000000..f6113c93a1c66 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelbadgetrigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [panelBadgeTrigger](./kibana-plugin-plugins-embeddable-public.panelbadgetrigger.md) + +## panelBadgeTrigger variable + +Signature: + +```typescript +panelBadgeTrigger: Trigger<'PANEL_BADGE_TRIGGER'> +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelnotfounderror._constructor_.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelnotfounderror._constructor_.md new file mode 100644 index 0000000000000..d1704403b2336 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelnotfounderror._constructor_.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [PanelNotFoundError](./kibana-plugin-plugins-embeddable-public.panelnotfounderror.md) > [(constructor)](./kibana-plugin-plugins-embeddable-public.panelnotfounderror._constructor_.md) + +## PanelNotFoundError.(constructor) + +Constructs a new instance of the `PanelNotFoundError` class + +Signature: + +```typescript +constructor(); +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelnotfounderror.code.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelnotfounderror.code.md new file mode 100644 index 0000000000000..d169fb97480cc --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelnotfounderror.code.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [PanelNotFoundError](./kibana-plugin-plugins-embeddable-public.panelnotfounderror.md) > [code](./kibana-plugin-plugins-embeddable-public.panelnotfounderror.code.md) + +## PanelNotFoundError.code property + +Signature: + +```typescript +code: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelnotfounderror.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelnotfounderror.md new file mode 100644 index 0000000000000..2191fdecf1ac5 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelnotfounderror.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [PanelNotFoundError](./kibana-plugin-plugins-embeddable-public.panelnotfounderror.md) + +## PanelNotFoundError class + +Signature: + +```typescript +export declare class PanelNotFoundError extends Error +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)()](./kibana-plugin-plugins-embeddable-public.panelnotfounderror._constructor_.md) | | Constructs a new instance of the PanelNotFoundError class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [code](./kibana-plugin-plugins-embeddable-public.panelnotfounderror.code.md) | | string | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelnotificationtrigger.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelnotificationtrigger.md new file mode 100644 index 0000000000000..df606c11f64ce --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelnotificationtrigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [panelNotificationTrigger](./kibana-plugin-plugins-embeddable-public.panelnotificationtrigger.md) + +## panelNotificationTrigger variable + +Signature: + +```typescript +panelNotificationTrigger: Trigger<'PANEL_NOTIFICATION_TRIGGER'> +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelstate.explicitinput.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelstate.explicitinput.md new file mode 100644 index 0000000000000..16123958d4db1 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelstate.explicitinput.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [PanelState](./kibana-plugin-plugins-embeddable-public.panelstate.md) > [explicitInput](./kibana-plugin-plugins-embeddable-public.panelstate.explicitinput.md) + +## PanelState.explicitInput property + +Signature: + +```typescript +explicitInput: Partial & { + id: string; + }; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelstate.id.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelstate.id.md new file mode 100644 index 0000000000000..e6fd4e0264f0d --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelstate.id.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [PanelState](./kibana-plugin-plugins-embeddable-public.panelstate.md) > [id](./kibana-plugin-plugins-embeddable-public.panelstate.id.md) + +## PanelState.id property + +Signature: + +```typescript +id: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelstate.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelstate.md new file mode 100644 index 0000000000000..b37f652b5021c --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelstate.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [PanelState](./kibana-plugin-plugins-embeddable-public.panelstate.md) + +## PanelState interface + +Signature: + +```typescript +export interface PanelState +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [explicitInput](./kibana-plugin-plugins-embeddable-public.panelstate.explicitinput.md) | Partial<E> & {
id: string;
} | | +| [id](./kibana-plugin-plugins-embeddable-public.panelstate.id.md) | string | | +| [type](./kibana-plugin-plugins-embeddable-public.panelstate.type.md) | string | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelstate.type.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelstate.type.md new file mode 100644 index 0000000000000..8be470a77f1c7 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.panelstate.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [PanelState](./kibana-plugin-plugins-embeddable-public.panelstate.md) > [type](./kibana-plugin-plugins-embeddable-public.panelstate.type.md) + +## PanelState.type property + +Signature: + +```typescript +type: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.plugin.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.plugin.md new file mode 100644 index 0000000000000..4e3ae760153cb --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.plugin.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [plugin](./kibana-plugin-plugins-embeddable-public.plugin.md) + +## plugin() function + +Signature: + +```typescript +export declare function plugin(initializerContext: PluginInitializerContext): EmbeddablePublicPlugin; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| initializerContext | PluginInitializerContext | | + +Returns: + +`EmbeddablePublicPlugin` + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.propertyspec.accesspath.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.propertyspec.accesspath.md new file mode 100644 index 0000000000000..2a337e4b0141a --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.propertyspec.accesspath.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [PropertySpec](./kibana-plugin-plugins-embeddable-public.propertyspec.md) > [accessPath](./kibana-plugin-plugins-embeddable-public.propertyspec.accesspath.md) + +## PropertySpec.accessPath property + +Signature: + +```typescript +accessPath: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.propertyspec.description.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.propertyspec.description.md new file mode 100644 index 0000000000000..f36309c657795 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.propertyspec.description.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [PropertySpec](./kibana-plugin-plugins-embeddable-public.propertyspec.md) > [description](./kibana-plugin-plugins-embeddable-public.propertyspec.description.md) + +## PropertySpec.description property + +Signature: + +```typescript +description: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.propertyspec.displayname.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.propertyspec.displayname.md new file mode 100644 index 0000000000000..16311493fa5dd --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.propertyspec.displayname.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [PropertySpec](./kibana-plugin-plugins-embeddable-public.propertyspec.md) > [displayName](./kibana-plugin-plugins-embeddable-public.propertyspec.displayname.md) + +## PropertySpec.displayName property + +Signature: + +```typescript +displayName: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.propertyspec.id.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.propertyspec.id.md new file mode 100644 index 0000000000000..a37ed9000b67a --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.propertyspec.id.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [PropertySpec](./kibana-plugin-plugins-embeddable-public.propertyspec.md) > [id](./kibana-plugin-plugins-embeddable-public.propertyspec.id.md) + +## PropertySpec.id property + +Signature: + +```typescript +id: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.propertyspec.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.propertyspec.md new file mode 100644 index 0000000000000..02534b5d9d4da --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.propertyspec.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [PropertySpec](./kibana-plugin-plugins-embeddable-public.propertyspec.md) + +## PropertySpec interface + +Signature: + +```typescript +export interface PropertySpec +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [accessPath](./kibana-plugin-plugins-embeddable-public.propertyspec.accesspath.md) | string | | +| [description](./kibana-plugin-plugins-embeddable-public.propertyspec.description.md) | string | | +| [displayName](./kibana-plugin-plugins-embeddable-public.propertyspec.displayname.md) | string | | +| [id](./kibana-plugin-plugins-embeddable-public.propertyspec.id.md) | string | | +| [value](./kibana-plugin-plugins-embeddable-public.propertyspec.value.md) | string | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.propertyspec.value.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.propertyspec.value.md new file mode 100644 index 0000000000000..3360a9fff783c --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.propertyspec.value.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [PropertySpec](./kibana-plugin-plugins-embeddable-public.propertyspec.md) > [value](./kibana-plugin-plugins-embeddable-public.propertyspec.value.md) + +## PropertySpec.value property + +Signature: + +```typescript +value?: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.rangeselectcontext.data.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.rangeselectcontext.data.md new file mode 100644 index 0000000000000..6d2774d86f109 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.rangeselectcontext.data.md @@ -0,0 +1,16 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [RangeSelectContext](./kibana-plugin-plugins-embeddable-public.rangeselectcontext.md) > [data](./kibana-plugin-plugins-embeddable-public.rangeselectcontext.data.md) + +## RangeSelectContext.data property + +Signature: + +```typescript +data: { + table: KibanaDatatable; + column: number; + range: number[]; + timeFieldName?: string; + }; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.rangeselectcontext.embeddable.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.rangeselectcontext.embeddable.md new file mode 100644 index 0000000000000..a6c9f0f7e4253 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.rangeselectcontext.embeddable.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [RangeSelectContext](./kibana-plugin-plugins-embeddable-public.rangeselectcontext.md) > [embeddable](./kibana-plugin-plugins-embeddable-public.rangeselectcontext.embeddable.md) + +## RangeSelectContext.embeddable property + +Signature: + +```typescript +embeddable?: T; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.rangeselectcontext.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.rangeselectcontext.md new file mode 100644 index 0000000000000..0f92ed86301da --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.rangeselectcontext.md @@ -0,0 +1,19 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [RangeSelectContext](./kibana-plugin-plugins-embeddable-public.rangeselectcontext.md) + +## RangeSelectContext interface + +Signature: + +```typescript +export interface RangeSelectContext +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [data](./kibana-plugin-plugins-embeddable-public.rangeselectcontext.data.md) | {
table: KibanaDatatable;
column: number;
range: number[];
timeFieldName?: string;
} | | +| [embeddable](./kibana-plugin-plugins-embeddable-public.rangeselectcontext.embeddable.md) | T | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.getinputasreftype.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.getinputasreftype.md new file mode 100644 index 0000000000000..559787c75ab66 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.getinputasreftype.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ReferenceOrValueEmbeddable](./kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.md) > [getInputAsRefType](./kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.getinputasreftype.md) + +## ReferenceOrValueEmbeddable.getInputAsRefType property + +Gets the embeddable's current input as its Reference type + +Signature: + +```typescript +getInputAsRefType: () => Promise; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.getinputasvaluetype.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.getinputasvaluetype.md new file mode 100644 index 0000000000000..f9cd23b97858a --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.getinputasvaluetype.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ReferenceOrValueEmbeddable](./kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.md) > [getInputAsValueType](./kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.getinputasvaluetype.md) + +## ReferenceOrValueEmbeddable.getInputAsValueType property + +Gets the embeddable's current input as its Value type + +Signature: + +```typescript +getInputAsValueType: () => Promise; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.inputisreftype.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.inputisreftype.md new file mode 100644 index 0000000000000..9de0447769397 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.inputisreftype.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ReferenceOrValueEmbeddable](./kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.md) > [inputIsRefType](./kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.inputisreftype.md) + +## ReferenceOrValueEmbeddable.inputIsRefType property + +determines whether the input is by value or by reference. + +Signature: + +```typescript +inputIsRefType: (input: ValTypeInput | RefTypeInput) => input is RefTypeInput; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.md new file mode 100644 index 0000000000000..47d6d8a0772d8 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ReferenceOrValueEmbeddable](./kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.md) + +## ReferenceOrValueEmbeddable interface + +Any embeddable that implements this interface will be able to use input that is either by reference (backed by a saved object) OR by value, (provided by the container). + +Signature: + +```typescript +export interface ReferenceOrValueEmbeddable +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [getInputAsRefType](./kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.getinputasreftype.md) | () => Promise<RefTypeInput> | Gets the embeddable's current input as its Reference type | +| [getInputAsValueType](./kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.getinputasvaluetype.md) | () => Promise<ValTypeInput> | Gets the embeddable's current input as its Value type | +| [inputIsRefType](./kibana-plugin-plugins-embeddable-public.referenceorvalueembeddable.inputisreftype.md) | (input: ValTypeInput | RefTypeInput) => input is RefTypeInput | determines whether the input is by value or by reference. | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.savedobjectembeddableinput.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.savedobjectembeddableinput.md new file mode 100644 index 0000000000000..ae0df9ec01ba1 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.savedobjectembeddableinput.md @@ -0,0 +1,18 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [SavedObjectEmbeddableInput](./kibana-plugin-plugins-embeddable-public.savedobjectembeddableinput.md) + +## SavedObjectEmbeddableInput interface + +Signature: + +```typescript +export interface SavedObjectEmbeddableInput extends EmbeddableInput +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [savedObjectId](./kibana-plugin-plugins-embeddable-public.savedobjectembeddableinput.savedobjectid.md) | string | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.savedobjectembeddableinput.savedobjectid.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.savedobjectembeddableinput.savedobjectid.md new file mode 100644 index 0000000000000..d8cb3bbda9d01 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.savedobjectembeddableinput.savedobjectid.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [SavedObjectEmbeddableInput](./kibana-plugin-plugins-embeddable-public.savedobjectembeddableinput.md) > [savedObjectId](./kibana-plugin-plugins-embeddable-public.savedobjectembeddableinput.savedobjectid.md) + +## SavedObjectEmbeddableInput.savedObjectId property + +Signature: + +```typescript +savedObjectId: string; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.valueclickcontext.data.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.valueclickcontext.data.md new file mode 100644 index 0000000000000..92c33affc47a9 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.valueclickcontext.data.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ValueClickContext](./kibana-plugin-plugins-embeddable-public.valueclickcontext.md) > [data](./kibana-plugin-plugins-embeddable-public.valueclickcontext.data.md) + +## ValueClickContext.data property + +Signature: + +```typescript +data: { + data: Array<{ + table: Pick; + column: number; + row: number; + value: any; + }>; + timeFieldName?: string; + negate?: boolean; + }; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.valueclickcontext.embeddable.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.valueclickcontext.embeddable.md new file mode 100644 index 0000000000000..38adee9346945 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.valueclickcontext.embeddable.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ValueClickContext](./kibana-plugin-plugins-embeddable-public.valueclickcontext.md) > [embeddable](./kibana-plugin-plugins-embeddable-public.valueclickcontext.embeddable.md) + +## ValueClickContext.embeddable property + +Signature: + +```typescript +embeddable?: T; +``` diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.valueclickcontext.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.valueclickcontext.md new file mode 100644 index 0000000000000..13133095956c6 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.valueclickcontext.md @@ -0,0 +1,19 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ValueClickContext](./kibana-plugin-plugins-embeddable-public.valueclickcontext.md) + +## ValueClickContext interface + +Signature: + +```typescript +export interface ValueClickContext +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [data](./kibana-plugin-plugins-embeddable-public.valueclickcontext.data.md) | {
data: Array<{
table: Pick<KibanaDatatable, 'rows' | 'columns'>;
column: number;
row: number;
value: any;
}>;
timeFieldName?: string;
negate?: boolean;
} | | +| [embeddable](./kibana-plugin-plugins-embeddable-public.valueclickcontext.embeddable.md) | T | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.viewmode.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.viewmode.md new file mode 100644 index 0000000000000..f47169951018d --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.viewmode.md @@ -0,0 +1,19 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [ViewMode](./kibana-plugin-plugins-embeddable-public.viewmode.md) + +## ViewMode enum + +Signature: + +```typescript +export declare enum ViewMode +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| EDIT | "edit" | | +| VIEW | "view" | | + diff --git a/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.withembeddablesubscription.md b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.withembeddablesubscription.md new file mode 100644 index 0000000000000..a815292f3a0c3 --- /dev/null +++ b/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.withembeddablesubscription.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-public](./kibana-plugin-plugins-embeddable-public.md) > [withEmbeddableSubscription](./kibana-plugin-plugins-embeddable-public.withembeddablesubscription.md) + +## withEmbeddableSubscription variable + +Signature: + +```typescript +withEmbeddableSubscription: = IEmbeddable, ExtraProps = {}>(WrappedComponent: React.ComponentType<{ + input: I; + output: O; + embeddable: E; +} & ExtraProps>) => React.ComponentType<{ + embeddable: E; +} & ExtraProps> +``` diff --git a/docs/development/plugins/embeddable/server/index.md b/docs/development/plugins/embeddable/server/index.md new file mode 100644 index 0000000000000..3c4d4ce3aed36 --- /dev/null +++ b/docs/development/plugins/embeddable/server/index.md @@ -0,0 +1,12 @@ + + +[Home](./index.md) + +## API Reference + +## Packages + +| Package | Description | +| --- | --- | +| [kibana-plugin-plugins-embeddable-server](./kibana-plugin-plugins-embeddable-server.md) | | + diff --git a/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.embeddableregistrydefinition.id.md b/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.embeddableregistrydefinition.id.md new file mode 100644 index 0000000000000..ce3e532fcaa3b --- /dev/null +++ b/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.embeddableregistrydefinition.id.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-server](./kibana-plugin-plugins-embeddable-server.md) > [EmbeddableRegistryDefinition](./kibana-plugin-plugins-embeddable-server.embeddableregistrydefinition.md) > [id](./kibana-plugin-plugins-embeddable-server.embeddableregistrydefinition.id.md) + +## EmbeddableRegistryDefinition.id property + +Signature: + +```typescript +id: string; +``` diff --git a/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.embeddableregistrydefinition.md b/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.embeddableregistrydefinition.md new file mode 100644 index 0000000000000..de46d91d90c65 --- /dev/null +++ b/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.embeddableregistrydefinition.md @@ -0,0 +1,18 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-server](./kibana-plugin-plugins-embeddable-server.md) > [EmbeddableRegistryDefinition](./kibana-plugin-plugins-embeddable-server.embeddableregistrydefinition.md) + +## EmbeddableRegistryDefinition interface + +Signature: + +```typescript +export interface EmbeddableRegistryDefinition

extends PersistableStateDefinition

+``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [id](./kibana-plugin-plugins-embeddable-server.embeddableregistrydefinition.id.md) | string | | + diff --git a/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.embeddablesetup.md b/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.embeddablesetup.md new file mode 100644 index 0000000000000..59ca4a2bbca75 --- /dev/null +++ b/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.embeddablesetup.md @@ -0,0 +1,19 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-server](./kibana-plugin-plugins-embeddable-server.md) > [EmbeddableSetup](./kibana-plugin-plugins-embeddable-server.embeddablesetup.md) + +## EmbeddableSetup interface + +Signature: + +```typescript +export interface EmbeddableSetup +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [registerEmbeddableFactory](./kibana-plugin-plugins-embeddable-server.embeddablesetup.registerembeddablefactory.md) | (factory: EmbeddableRegistryDefinition) => void | | +| [registerEnhancement](./kibana-plugin-plugins-embeddable-server.embeddablesetup.registerenhancement.md) | (enhancement: EnhancementRegistryDefinition) => void | | + diff --git a/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.embeddablesetup.registerembeddablefactory.md b/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.embeddablesetup.registerembeddablefactory.md new file mode 100644 index 0000000000000..442941ce86950 --- /dev/null +++ b/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.embeddablesetup.registerembeddablefactory.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-server](./kibana-plugin-plugins-embeddable-server.md) > [EmbeddableSetup](./kibana-plugin-plugins-embeddable-server.embeddablesetup.md) > [registerEmbeddableFactory](./kibana-plugin-plugins-embeddable-server.embeddablesetup.registerembeddablefactory.md) + +## EmbeddableSetup.registerEmbeddableFactory property + +Signature: + +```typescript +registerEmbeddableFactory: (factory: EmbeddableRegistryDefinition) => void; +``` diff --git a/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.embeddablesetup.registerenhancement.md b/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.embeddablesetup.registerenhancement.md new file mode 100644 index 0000000000000..9ea2846d0300b --- /dev/null +++ b/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.embeddablesetup.registerenhancement.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-server](./kibana-plugin-plugins-embeddable-server.md) > [EmbeddableSetup](./kibana-plugin-plugins-embeddable-server.embeddablesetup.md) > [registerEnhancement](./kibana-plugin-plugins-embeddable-server.embeddablesetup.registerenhancement.md) + +## EmbeddableSetup.registerEnhancement property + +Signature: + +```typescript +registerEnhancement: (enhancement: EnhancementRegistryDefinition) => void; +``` diff --git a/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.enhancementregistrydefinition.id.md b/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.enhancementregistrydefinition.id.md new file mode 100644 index 0000000000000..a93c691246872 --- /dev/null +++ b/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.enhancementregistrydefinition.id.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-server](./kibana-plugin-plugins-embeddable-server.md) > [EnhancementRegistryDefinition](./kibana-plugin-plugins-embeddable-server.enhancementregistrydefinition.md) > [id](./kibana-plugin-plugins-embeddable-server.enhancementregistrydefinition.id.md) + +## EnhancementRegistryDefinition.id property + +Signature: + +```typescript +id: string; +``` diff --git a/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.enhancementregistrydefinition.md b/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.enhancementregistrydefinition.md new file mode 100644 index 0000000000000..09ff48a92158d --- /dev/null +++ b/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.enhancementregistrydefinition.md @@ -0,0 +1,18 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-server](./kibana-plugin-plugins-embeddable-server.md) > [EnhancementRegistryDefinition](./kibana-plugin-plugins-embeddable-server.enhancementregistrydefinition.md) + +## EnhancementRegistryDefinition interface + +Signature: + +```typescript +export interface EnhancementRegistryDefinition

extends PersistableStateDefinition

+``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [id](./kibana-plugin-plugins-embeddable-server.enhancementregistrydefinition.id.md) | string | | + diff --git a/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.md b/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.md new file mode 100644 index 0000000000000..19ee57d677250 --- /dev/null +++ b/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-server](./kibana-plugin-plugins-embeddable-server.md) + +## kibana-plugin-plugins-embeddable-server package + +## Interfaces + +| Interface | Description | +| --- | --- | +| [EmbeddableRegistryDefinition](./kibana-plugin-plugins-embeddable-server.embeddableregistrydefinition.md) | | +| [EmbeddableSetup](./kibana-plugin-plugins-embeddable-server.embeddablesetup.md) | | +| [EnhancementRegistryDefinition](./kibana-plugin-plugins-embeddable-server.enhancementregistrydefinition.md) | | + +## Variables + +| Variable | Description | +| --- | --- | +| [plugin](./kibana-plugin-plugins-embeddable-server.plugin.md) | | + diff --git a/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.plugin.md b/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.plugin.md new file mode 100644 index 0000000000000..989f3c3e60963 --- /dev/null +++ b/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.plugin.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-embeddable-server](./kibana-plugin-plugins-embeddable-server.md) > [plugin](./kibana-plugin-plugins-embeddable-server.plugin.md) + +## plugin variable + +Signature: + +```typescript +plugin: () => EmbeddableServerPlugin +``` diff --git a/docs/development/plugins/expressions/public/index.md b/docs/development/plugins/expressions/public/index.md new file mode 100644 index 0000000000000..ade7a9e90b517 --- /dev/null +++ b/docs/development/plugins/expressions/public/index.md @@ -0,0 +1,12 @@ + + +[Home](./index.md) + +## API Reference + +## Packages + +| Package | Description | +| --- | --- | +| [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.anyexpressionfunctiondefinition.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.anyexpressionfunctiondefinition.md new file mode 100644 index 0000000000000..f905a1028d217 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.anyexpressionfunctiondefinition.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [AnyExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-public.anyexpressionfunctiondefinition.md) + +## AnyExpressionFunctionDefinition type + +Type to capture every possible expression function definition. + +Signature: + +```typescript +export declare type AnyExpressionFunctionDefinition = ExpressionFunctionDefinition, any>; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.anyexpressiontypedefinition.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.anyexpressiontypedefinition.md new file mode 100644 index 0000000000000..c213de4341a6a --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.anyexpressiontypedefinition.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [AnyExpressionTypeDefinition](./kibana-plugin-plugins-expressions-public.anyexpressiontypedefinition.md) + +## AnyExpressionTypeDefinition type + +Signature: + +```typescript +export declare type AnyExpressionTypeDefinition = ExpressionTypeDefinition; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.argumenttype.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.argumenttype.md new file mode 100644 index 0000000000000..bf80b863fda90 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.argumenttype.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ArgumentType](./kibana-plugin-plugins-expressions-public.argumenttype.md) + +## ArgumentType type + +This type represents all of the possible combinations of properties of an Argument in an Expression Function. The presence or absence of certain fields influence the shape and presence of others within each `arg` in the specification. + +Signature: + +```typescript +export declare type ArgumentType = SingleArgumentType | MultipleArgumentType | UnresolvedSingleArgumentType | UnresolvedMultipleArgumentType; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.buildexpression.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.buildexpression.md new file mode 100644 index 0000000000000..e1d522588aae8 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.buildexpression.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [buildExpression](./kibana-plugin-plugins-expressions-public.buildexpression.md) + +## buildExpression() function + +Makes it easy to progressively build, update, and traverse an expression AST. You can either start with an empty AST, or provide an expression string, AST, or array of expression function builders to use as initial state. + +Signature: + +```typescript +export declare function buildExpression(initialState?: ExpressionAstFunctionBuilder[] | ExpressionAstExpression | string): ExpressionAstExpressionBuilder; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| initialState | ExpressionAstFunctionBuilder[] | ExpressionAstExpression | string | | + +Returns: + +`ExpressionAstExpressionBuilder` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.buildexpressionfunction.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.buildexpressionfunction.md new file mode 100644 index 0000000000000..79deb7157130e --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.buildexpressionfunction.md @@ -0,0 +1,30 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [buildExpressionFunction](./kibana-plugin-plugins-expressions-public.buildexpressionfunction.md) + +## buildExpressionFunction() function + +Manages an AST for a single expression function. The return value can be provided to `buildExpression` to add this function to an expression. + +Note that to preserve type safety and ensure no args are missing, all required arguments for the specified function must be provided up front. If desired, they can be changed or removed later. + +Signature: + +```typescript +export declare function buildExpressionFunction(fnName: InferFunctionDefinition['name'], +initialArgs: { + [K in keyof FunctionArgs]: FunctionArgs[K] | ExpressionAstExpressionBuilder | ExpressionAstExpressionBuilder[]; +}): ExpressionAstFunctionBuilder; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| fnName | InferFunctionDefinition<FnDef>['name'] | | +| initialArgs | {
[K in keyof FunctionArgs<FnDef>]: FunctionArgs<FnDef>[K] | ExpressionAstExpressionBuilder | ExpressionAstExpressionBuilder[];
} | | + +Returns: + +`ExpressionAstFunctionBuilder` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatable.columns.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatable.columns.md new file mode 100644 index 0000000000000..d24c4f4dfb176 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatable.columns.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Datatable](./kibana-plugin-plugins-expressions-public.datatable.md) > [columns](./kibana-plugin-plugins-expressions-public.datatable.columns.md) + +## Datatable.columns property + +Signature: + +```typescript +columns: DatatableColumn[]; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatable.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatable.md new file mode 100644 index 0000000000000..f2daf656dfa73 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatable.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Datatable](./kibana-plugin-plugins-expressions-public.datatable.md) + +## Datatable interface + +A `Datatable` in Canvas is a unique structure that represents tabulated data. + +Signature: + +```typescript +export interface Datatable +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [columns](./kibana-plugin-plugins-expressions-public.datatable.columns.md) | DatatableColumn[] | | +| [rows](./kibana-plugin-plugins-expressions-public.datatable.rows.md) | DatatableRow[] | | +| [type](./kibana-plugin-plugins-expressions-public.datatable.type.md) | typeof name | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatable.rows.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatable.rows.md new file mode 100644 index 0000000000000..0d52e446b09fd --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatable.rows.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Datatable](./kibana-plugin-plugins-expressions-public.datatable.md) > [rows](./kibana-plugin-plugins-expressions-public.datatable.rows.md) + +## Datatable.rows property + +Signature: + +```typescript +rows: DatatableRow[]; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatable.type.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatable.type.md new file mode 100644 index 0000000000000..e0ee6fd5d8372 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatable.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Datatable](./kibana-plugin-plugins-expressions-public.datatable.md) > [type](./kibana-plugin-plugins-expressions-public.datatable.type.md) + +## Datatable.type property + +Signature: + +```typescript +type: typeof name; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatablecolumn.id.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatablecolumn.id.md new file mode 100644 index 0000000000000..d9b98e6cf939e --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatablecolumn.id.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [DatatableColumn](./kibana-plugin-plugins-expressions-public.datatablecolumn.md) > [id](./kibana-plugin-plugins-expressions-public.datatablecolumn.id.md) + +## DatatableColumn.id property + +Signature: + +```typescript +id: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatablecolumn.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatablecolumn.md new file mode 100644 index 0000000000000..d67a5d9b36b12 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatablecolumn.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [DatatableColumn](./kibana-plugin-plugins-expressions-public.datatablecolumn.md) + +## DatatableColumn interface + +This type represents the shape of a column in a `Datatable`. + +Signature: + +```typescript +export interface DatatableColumn +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [id](./kibana-plugin-plugins-expressions-public.datatablecolumn.id.md) | string | | +| [meta](./kibana-plugin-plugins-expressions-public.datatablecolumn.meta.md) | DatatableColumnMeta | | +| [name](./kibana-plugin-plugins-expressions-public.datatablecolumn.name.md) | string | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatablecolumn.meta.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatablecolumn.meta.md new file mode 100644 index 0000000000000..a5414dde86f97 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatablecolumn.meta.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [DatatableColumn](./kibana-plugin-plugins-expressions-public.datatablecolumn.md) > [meta](./kibana-plugin-plugins-expressions-public.datatablecolumn.meta.md) + +## DatatableColumn.meta property + +Signature: + +```typescript +meta: DatatableColumnMeta; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatablecolumn.name.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatablecolumn.name.md new file mode 100644 index 0000000000000..74c3883e7a172 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatablecolumn.name.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [DatatableColumn](./kibana-plugin-plugins-expressions-public.datatablecolumn.md) > [name](./kibana-plugin-plugins-expressions-public.datatablecolumn.name.md) + +## DatatableColumn.name property + +Signature: + +```typescript +name: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatablecolumntype.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatablecolumntype.md new file mode 100644 index 0000000000000..a06ab351e62c3 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatablecolumntype.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [DatatableColumnType](./kibana-plugin-plugins-expressions-public.datatablecolumntype.md) + +## DatatableColumnType type + +This type represents the `type` of any `DatatableColumn` in a `Datatable`. + +Signature: + +```typescript +export declare type DatatableColumnType = 'string' | 'number' | 'boolean' | 'date' | 'null'; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatablerow.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatablerow.md new file mode 100644 index 0000000000000..87cc15d0d4091 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.datatablerow.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [DatatableRow](./kibana-plugin-plugins-expressions-public.datatablerow.md) + +## DatatableRow type + +This type represents a row in a `Datatable`. + +Signature: + +```typescript +export declare type DatatableRow = Record; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution._constructor_.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution._constructor_.md new file mode 100644 index 0000000000000..1d0c9f99169db --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Execution](./kibana-plugin-plugins-expressions-public.execution.md) > [(constructor)](./kibana-plugin-plugins-expressions-public.execution._constructor_.md) + +## Execution.(constructor) + +Constructs a new instance of the `Execution` class + +Signature: + +```typescript +constructor(params: ExecutionParams); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| params | ExecutionParams<ExtraContext> | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.cancel.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.cancel.md new file mode 100644 index 0000000000000..e87cea30dd5b6 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.cancel.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Execution](./kibana-plugin-plugins-expressions-public.execution.md) > [cancel](./kibana-plugin-plugins-expressions-public.execution.cancel.md) + +## Execution.cancel() method + +Stop execution of expression. + +Signature: + +```typescript +cancel(): void; +``` +Returns: + +`void` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.cast.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.cast.md new file mode 100644 index 0000000000000..632849af7c82b --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.cast.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Execution](./kibana-plugin-plugins-expressions-public.execution.md) > [cast](./kibana-plugin-plugins-expressions-public.execution.cast.md) + +## Execution.cast() method + +Signature: + +```typescript +cast(value: any, toTypeNames?: string[]): any; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| value | any | | +| toTypeNames | string[] | | + +Returns: + +`any` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.context.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.context.md new file mode 100644 index 0000000000000..732fe94d65617 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.context.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Execution](./kibana-plugin-plugins-expressions-public.execution.md) > [context](./kibana-plugin-plugins-expressions-public.execution.context.md) + +## Execution.context property + +Execution context - object that allows to do side-effects. Context is passed to every function. + +Signature: + +```typescript +readonly context: ExecutionContext & ExtraContext; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.contract.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.contract.md new file mode 100644 index 0000000000000..fa03297ea22a7 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.contract.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Execution](./kibana-plugin-plugins-expressions-public.execution.md) > [contract](./kibana-plugin-plugins-expressions-public.execution.contract.md) + +## Execution.contract property + +Contract is a public representation of `Execution` instances. Contract we can return to other plugins for their consumption. + +Signature: + +```typescript +readonly contract: ExecutionContract; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.expression.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.expression.md new file mode 100644 index 0000000000000..a30cc89e8b649 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.expression.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Execution](./kibana-plugin-plugins-expressions-public.execution.md) > [expression](./kibana-plugin-plugins-expressions-public.execution.expression.md) + +## Execution.expression property + +Signature: + +```typescript +readonly expression: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.input.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.input.md new file mode 100644 index 0000000000000..553a463a2b931 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.input.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Execution](./kibana-plugin-plugins-expressions-public.execution.md) > [input](./kibana-plugin-plugins-expressions-public.execution.input.md) + +## Execution.input property + +Initial input of the execution. + +N.B. It is initialized to `null` rather than `undefined` for legacy reasons, because in legacy interpreter it was set to `null` by default. + +Signature: + +```typescript +input: Input; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.inspectoradapters.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.inspectoradapters.md new file mode 100644 index 0000000000000..728015011f7d9 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.inspectoradapters.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Execution](./kibana-plugin-plugins-expressions-public.execution.md) > [inspectorAdapters](./kibana-plugin-plugins-expressions-public.execution.inspectoradapters.md) + +## Execution.inspectorAdapters property + +Signature: + +```typescript +get inspectorAdapters(): InspectorAdapters; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.interpret.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.interpret.md new file mode 100644 index 0000000000000..31f38b7069812 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.interpret.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Execution](./kibana-plugin-plugins-expressions-public.execution.md) > [interpret](./kibana-plugin-plugins-expressions-public.execution.interpret.md) + +## Execution.interpret() method + +Signature: + +```typescript +interpret(ast: ExpressionAstNode, input: T, options?: ExpressionExecOptions): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| ast | ExpressionAstNode | | +| input | T | | +| options | ExpressionExecOptions | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.invokechain.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.invokechain.md new file mode 100644 index 0000000000000..5078baf2ca526 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.invokechain.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Execution](./kibana-plugin-plugins-expressions-public.execution.md) > [invokeChain](./kibana-plugin-plugins-expressions-public.execution.invokechain.md) + +## Execution.invokeChain() method + +Signature: + +```typescript +invokeChain(chainArr: ExpressionAstFunction[], input: unknown): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| chainArr | ExpressionAstFunction[] | | +| input | unknown | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.invokefunction.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.invokefunction.md new file mode 100644 index 0000000000000..e90cee8b626d6 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.invokefunction.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Execution](./kibana-plugin-plugins-expressions-public.execution.md) > [invokeFunction](./kibana-plugin-plugins-expressions-public.execution.invokefunction.md) + +## Execution.invokeFunction() method + +Signature: + +```typescript +invokeFunction(fn: ExpressionFunction, input: unknown, args: Record): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| fn | ExpressionFunction | | +| input | unknown | | +| args | Record<string, unknown> | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.md new file mode 100644 index 0000000000000..4d227e6ab85b8 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.md @@ -0,0 +1,43 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Execution](./kibana-plugin-plugins-expressions-public.execution.md) + +## Execution class + +Signature: + +```typescript +export declare class Execution = Record, Input = unknown, Output = unknown, InspectorAdapters extends Adapters = ExtraContext['inspectorAdapters'] extends object ? ExtraContext['inspectorAdapters'] : DefaultInspectorAdapters> +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(params)](./kibana-plugin-plugins-expressions-public.execution._constructor_.md) | | Constructs a new instance of the Execution class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [context](./kibana-plugin-plugins-expressions-public.execution.context.md) | | ExecutionContext<Input, InspectorAdapters> & ExtraContext | Execution context - object that allows to do side-effects. Context is passed to every function. | +| [contract](./kibana-plugin-plugins-expressions-public.execution.contract.md) | | ExecutionContract<ExtraContext, Input, Output, InspectorAdapters> | Contract is a public representation of Execution instances. Contract we can return to other plugins for their consumption. | +| [expression](./kibana-plugin-plugins-expressions-public.execution.expression.md) | | string | | +| [input](./kibana-plugin-plugins-expressions-public.execution.input.md) | | Input | Initial input of the execution.N.B. It is initialized to null rather than undefined for legacy reasons, because in legacy interpreter it was set to null by default. | +| [inspectorAdapters](./kibana-plugin-plugins-expressions-public.execution.inspectoradapters.md) | | InspectorAdapters | | +| [params](./kibana-plugin-plugins-expressions-public.execution.params.md) | | ExecutionParams<ExtraContext> | | +| [result](./kibana-plugin-plugins-expressions-public.execution.result.md) | | Promise<Output | ExpressionValueError> | | +| [state](./kibana-plugin-plugins-expressions-public.execution.state.md) | | ExecutionContainer<Output | ExpressionValueError> | Dynamic state of the execution. | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [cancel()](./kibana-plugin-plugins-expressions-public.execution.cancel.md) | | Stop execution of expression. | +| [cast(value, toTypeNames)](./kibana-plugin-plugins-expressions-public.execution.cast.md) | | | +| [interpret(ast, input, options)](./kibana-plugin-plugins-expressions-public.execution.interpret.md) | | | +| [invokeChain(chainArr, input)](./kibana-plugin-plugins-expressions-public.execution.invokechain.md) | | | +| [invokeFunction(fn, input, args)](./kibana-plugin-plugins-expressions-public.execution.invokefunction.md) | | | +| [resolveArgs(fnDef, input, argAsts)](./kibana-plugin-plugins-expressions-public.execution.resolveargs.md) | | | +| [start(input)](./kibana-plugin-plugins-expressions-public.execution.start.md) | | Call this method to start execution.N.B. input is initialized to null rather than undefined for legacy reasons, because in legacy interpreter it was set to null by default. | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.params.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.params.md new file mode 100644 index 0000000000000..cd90bf6adab47 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.params.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Execution](./kibana-plugin-plugins-expressions-public.execution.md) > [params](./kibana-plugin-plugins-expressions-public.execution.params.md) + +## Execution.params property + +Signature: + +```typescript +readonly params: ExecutionParams; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.resolveargs.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.resolveargs.md new file mode 100644 index 0000000000000..ab67dff604a86 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.resolveargs.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Execution](./kibana-plugin-plugins-expressions-public.execution.md) > [resolveArgs](./kibana-plugin-plugins-expressions-public.execution.resolveargs.md) + +## Execution.resolveArgs() method + +Signature: + +```typescript +resolveArgs(fnDef: ExpressionFunction, input: unknown, argAsts: any): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| fnDef | ExpressionFunction | | +| input | unknown | | +| argAsts | any | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.result.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.result.md new file mode 100644 index 0000000000000..e0167a3a378fe --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.result.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Execution](./kibana-plugin-plugins-expressions-public.execution.md) > [result](./kibana-plugin-plugins-expressions-public.execution.result.md) + +## Execution.result property + +Signature: + +```typescript +get result(): Promise; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.start.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.start.md new file mode 100644 index 0000000000000..c6edc43d423dc --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.start.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Execution](./kibana-plugin-plugins-expressions-public.execution.md) > [start](./kibana-plugin-plugins-expressions-public.execution.start.md) + +## Execution.start() method + +Call this method to start execution. + +N.B. `input` is initialized to `null` rather than `undefined` for legacy reasons, because in legacy interpreter it was set to `null` by default. + +Signature: + +```typescript +start(input?: Input): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| input | Input | | + +Returns: + +`void` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.state.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.state.md new file mode 100644 index 0000000000000..ca8b57b760f29 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.execution.state.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Execution](./kibana-plugin-plugins-expressions-public.execution.md) > [state](./kibana-plugin-plugins-expressions-public.execution.state.md) + +## Execution.state property + +Dynamic state of the execution. + +Signature: + +```typescript +readonly state: ExecutionContainer; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontainer.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontainer.md new file mode 100644 index 0000000000000..5cea6c4bc4b8f --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontainer.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionContainer](./kibana-plugin-plugins-expressions-public.executioncontainer.md) + +## ExecutionContainer type + +Signature: + +```typescript +export declare type ExecutionContainer = StateContainer, ExecutionPureTransitions>; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.abortsignal.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.abortsignal.md new file mode 100644 index 0000000000000..caedf4344dc35 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.abortsignal.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionContext](./kibana-plugin-plugins-expressions-public.executioncontext.md) > [abortSignal](./kibana-plugin-plugins-expressions-public.executioncontext.abortsignal.md) + +## ExecutionContext.abortSignal property + +Adds ability to abort current execution. + +Signature: + +```typescript +abortSignal: AbortSignal; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.getinitialinput.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.getinitialinput.md new file mode 100644 index 0000000000000..460b1622c6fbd --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.getinitialinput.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionContext](./kibana-plugin-plugins-expressions-public.executioncontext.md) > [getInitialInput](./kibana-plugin-plugins-expressions-public.executioncontext.getinitialinput.md) + +## ExecutionContext.getInitialInput property + +Get initial input with which execution started. + +Signature: + +```typescript +getInitialInput: () => Input; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.getsavedobject.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.getsavedobject.md new file mode 100644 index 0000000000000..dffce4a091718 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.getsavedobject.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionContext](./kibana-plugin-plugins-expressions-public.executioncontext.md) > [getSavedObject](./kibana-plugin-plugins-expressions-public.executioncontext.getsavedobject.md) + +## ExecutionContext.getSavedObject property + +Allows to fetch saved objects from ElasticSearch. In browser `getSavedObject` function is provided automatically by the Expressions plugin. On the server the caller of the expression has to provide this context function. The reason is because on the browser we always know the user who tries to fetch a saved object, thus saved object client is scoped automatically to that user. However, on the server we can scope that saved object client to any user, or even not scope it at all and execute it as an "internal" user. + +Signature: + +```typescript +getSavedObject?: (type: string, id: string) => Promise>; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.inspectoradapters.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.inspectoradapters.md new file mode 100644 index 0000000000000..6f0db6af5616e --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.inspectoradapters.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionContext](./kibana-plugin-plugins-expressions-public.executioncontext.md) > [inspectorAdapters](./kibana-plugin-plugins-expressions-public.executioncontext.inspectoradapters.md) + +## ExecutionContext.inspectorAdapters property + +Adapters for `inspector` plugin. + +Signature: + +```typescript +inspectorAdapters: InspectorAdapters; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.md new file mode 100644 index 0000000000000..786e94455c600 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionContext](./kibana-plugin-plugins-expressions-public.executioncontext.md) + +## ExecutionContext interface + +`ExecutionContext` is an object available to all functions during a single execution; it provides various methods to perform side-effects. + +Signature: + +```typescript +export interface ExecutionContext +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [abortSignal](./kibana-plugin-plugins-expressions-public.executioncontext.abortsignal.md) | AbortSignal | Adds ability to abort current execution. | +| [getInitialInput](./kibana-plugin-plugins-expressions-public.executioncontext.getinitialinput.md) | () => Input | Get initial input with which execution started. | +| [getSavedObject](./kibana-plugin-plugins-expressions-public.executioncontext.getsavedobject.md) | <T extends SavedObjectAttributes = SavedObjectAttributes>(type: string, id: string) => Promise<SavedObject<T>> | Allows to fetch saved objects from ElasticSearch. In browser getSavedObject function is provided automatically by the Expressions plugin. On the server the caller of the expression has to provide this context function. The reason is because on the browser we always know the user who tries to fetch a saved object, thus saved object client is scoped automatically to that user. However, on the server we can scope that saved object client to any user, or even not scope it at all and execute it as an "internal" user. | +| [inspectorAdapters](./kibana-plugin-plugins-expressions-public.executioncontext.inspectoradapters.md) | InspectorAdapters | Adapters for inspector plugin. | +| [search](./kibana-plugin-plugins-expressions-public.executioncontext.search.md) | ExecutionContextSearch | Search context in which expression should operate. | +| [types](./kibana-plugin-plugins-expressions-public.executioncontext.types.md) | Record<string, ExpressionType> | A map of available expression types. | +| [variables](./kibana-plugin-plugins-expressions-public.executioncontext.variables.md) | Record<string, unknown> | Context variables that can be consumed using var and var_set functions. | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.search.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.search.md new file mode 100644 index 0000000000000..05501a475cbd4 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.search.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionContext](./kibana-plugin-plugins-expressions-public.executioncontext.md) > [search](./kibana-plugin-plugins-expressions-public.executioncontext.search.md) + +## ExecutionContext.search property + +Search context in which expression should operate. + +Signature: + +```typescript +search?: ExecutionContextSearch; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.types.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.types.md new file mode 100644 index 0000000000000..0bddaf8455635 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.types.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionContext](./kibana-plugin-plugins-expressions-public.executioncontext.md) > [types](./kibana-plugin-plugins-expressions-public.executioncontext.types.md) + +## ExecutionContext.types property + +A map of available expression types. + +Signature: + +```typescript +types: Record; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.variables.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.variables.md new file mode 100644 index 0000000000000..3f8a87152f9fe --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontext.variables.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionContext](./kibana-plugin-plugins-expressions-public.executioncontext.md) > [variables](./kibana-plugin-plugins-expressions-public.executioncontext.variables.md) + +## ExecutionContext.variables property + +Context variables that can be consumed using `var` and `var_set` functions. + +Signature: + +```typescript +variables: Record; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract._constructor_.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract._constructor_.md new file mode 100644 index 0000000000000..89a99ef2f8ef8 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionContract](./kibana-plugin-plugins-expressions-public.executioncontract.md) > [(constructor)](./kibana-plugin-plugins-expressions-public.executioncontract._constructor_.md) + +## ExecutionContract.(constructor) + +Constructs a new instance of the `ExecutionContract` class + +Signature: + +```typescript +constructor(execution: Execution); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| execution | Execution<ExtraContext, Input, Output, InspectorAdapters> | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.cancel.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.cancel.md new file mode 100644 index 0000000000000..7ddfb824288d1 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.cancel.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionContract](./kibana-plugin-plugins-expressions-public.executioncontract.md) > [cancel](./kibana-plugin-plugins-expressions-public.executioncontract.cancel.md) + +## ExecutionContract.cancel property + +Cancel the execution of the expression. This will set abort signal (available in execution context) to aborted state, letting expression functions to stop their execution. + +Signature: + +```typescript +cancel: () => void; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.execution.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.execution.md new file mode 100644 index 0000000000000..f7911250488f2 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.execution.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionContract](./kibana-plugin-plugins-expressions-public.executioncontract.md) > [execution](./kibana-plugin-plugins-expressions-public.executioncontract.execution.md) + +## ExecutionContract.execution property + +Signature: + +```typescript +protected readonly execution: Execution; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.getast.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.getast.md new file mode 100644 index 0000000000000..d873614d779a9 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.getast.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionContract](./kibana-plugin-plugins-expressions-public.executioncontract.md) > [getAst](./kibana-plugin-plugins-expressions-public.executioncontract.getast.md) + +## ExecutionContract.getAst property + +Get AST used to execute the expression. + +Signature: + +```typescript +getAst: () => ExpressionAstExpression; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.getdata.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.getdata.md new file mode 100644 index 0000000000000..dcd96cf5767bf --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.getdata.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionContract](./kibana-plugin-plugins-expressions-public.executioncontract.md) > [getData](./kibana-plugin-plugins-expressions-public.executioncontract.getdata.md) + +## ExecutionContract.getData property + +Returns the final output of expression, if any error happens still wraps that error into `ExpressionValueError` type and returns that. This function never throws. + +Signature: + +```typescript +getData: () => Promise; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.getexpression.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.getexpression.md new file mode 100644 index 0000000000000..41dbe72fa69b2 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.getexpression.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionContract](./kibana-plugin-plugins-expressions-public.executioncontract.md) > [getExpression](./kibana-plugin-plugins-expressions-public.executioncontract.getexpression.md) + +## ExecutionContract.getExpression property + +Get string representation of the expression. Returns the original string if execution was started from a string. If execution was started from an AST this method returns a string generated from AST. + +Signature: + +```typescript +getExpression: () => string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.inspect.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.inspect.md new file mode 100644 index 0000000000000..d5202b02b0dfd --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.inspect.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionContract](./kibana-plugin-plugins-expressions-public.executioncontract.md) > [inspect](./kibana-plugin-plugins-expressions-public.executioncontract.inspect.md) + +## ExecutionContract.inspect property + +Get Inspector adapters provided to all functions of expression through execution context. + +Signature: + +```typescript +inspect: () => InspectorAdapters; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.ispending.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.ispending.md new file mode 100644 index 0000000000000..409c31b3fbc2c --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.ispending.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionContract](./kibana-plugin-plugins-expressions-public.executioncontract.md) > [isPending](./kibana-plugin-plugins-expressions-public.executioncontract.ispending.md) + +## ExecutionContract.isPending property + +Signature: + +```typescript +get isPending(): boolean; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.md new file mode 100644 index 0000000000000..d05620eace208 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executioncontract.md @@ -0,0 +1,32 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionContract](./kibana-plugin-plugins-expressions-public.executioncontract.md) + +## ExecutionContract class + +`ExecutionContract` is a wrapper around `Execution` class. It provides the same functionality but does not expose Expressions plugin internals. + +Signature: + +```typescript +export declare class ExecutionContract = Record, Input = unknown, Output = unknown, InspectorAdapters = unknown> +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(execution)](./kibana-plugin-plugins-expressions-public.executioncontract._constructor_.md) | | Constructs a new instance of the ExecutionContract class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [cancel](./kibana-plugin-plugins-expressions-public.executioncontract.cancel.md) | | () => void | Cancel the execution of the expression. This will set abort signal (available in execution context) to aborted state, letting expression functions to stop their execution. | +| [execution](./kibana-plugin-plugins-expressions-public.executioncontract.execution.md) | | Execution<ExtraContext, Input, Output, InspectorAdapters> | | +| [getAst](./kibana-plugin-plugins-expressions-public.executioncontract.getast.md) | | () => ExpressionAstExpression | Get AST used to execute the expression. | +| [getData](./kibana-plugin-plugins-expressions-public.executioncontract.getdata.md) | | () => Promise<Output | ExpressionValueError> | Returns the final output of expression, if any error happens still wraps that error into ExpressionValueError type and returns that. This function never throws. | +| [getExpression](./kibana-plugin-plugins-expressions-public.executioncontract.getexpression.md) | | () => string | Get string representation of the expression. Returns the original string if execution was started from a string. If execution was started from an AST this method returns a string generated from AST. | +| [inspect](./kibana-plugin-plugins-expressions-public.executioncontract.inspect.md) | | () => InspectorAdapters | Get Inspector adapters provided to all functions of expression through execution context. | +| [isPending](./kibana-plugin-plugins-expressions-public.executioncontract.ispending.md) | | boolean | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionparams.ast.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionparams.ast.md new file mode 100644 index 0000000000000..63487bc4c753e --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionparams.ast.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionParams](./kibana-plugin-plugins-expressions-public.executionparams.md) > [ast](./kibana-plugin-plugins-expressions-public.executionparams.ast.md) + +## ExecutionParams.ast property + +Signature: + +```typescript +ast?: ExpressionAstExpression; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionparams.context.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionparams.context.md new file mode 100644 index 0000000000000..b6013162ef2ae --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionparams.context.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionParams](./kibana-plugin-plugins-expressions-public.executionparams.md) > [context](./kibana-plugin-plugins-expressions-public.executionparams.context.md) + +## ExecutionParams.context property + +Signature: + +```typescript +context?: ExtraContext; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionparams.debug.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionparams.debug.md new file mode 100644 index 0000000000000..61ec72465f55e --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionparams.debug.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionParams](./kibana-plugin-plugins-expressions-public.executionparams.md) > [debug](./kibana-plugin-plugins-expressions-public.executionparams.debug.md) + +## ExecutionParams.debug property + +Whether to execute expression in \*debug mode\*. In \*debug mode\* inputs and outputs as well as all resolved arguments and time it took to execute each function are saved and are available for introspection. + +Signature: + +```typescript +debug?: boolean; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionparams.executor.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionparams.executor.md new file mode 100644 index 0000000000000..ec070842692fe --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionparams.executor.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionParams](./kibana-plugin-plugins-expressions-public.executionparams.md) > [executor](./kibana-plugin-plugins-expressions-public.executionparams.executor.md) + +## ExecutionParams.executor property + +Signature: + +```typescript +executor: Executor; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionparams.expression.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionparams.expression.md new file mode 100644 index 0000000000000..f79728bacd336 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionparams.expression.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionParams](./kibana-plugin-plugins-expressions-public.executionparams.md) > [expression](./kibana-plugin-plugins-expressions-public.executionparams.expression.md) + +## ExecutionParams.expression property + +Signature: + +```typescript +expression?: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionparams.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionparams.md new file mode 100644 index 0000000000000..e39dc231fbf96 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionparams.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionParams](./kibana-plugin-plugins-expressions-public.executionparams.md) + +## ExecutionParams interface + +Signature: + +```typescript +export interface ExecutionParams = Record> +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [ast](./kibana-plugin-plugins-expressions-public.executionparams.ast.md) | ExpressionAstExpression | | +| [context](./kibana-plugin-plugins-expressions-public.executionparams.context.md) | ExtraContext | | +| [debug](./kibana-plugin-plugins-expressions-public.executionparams.debug.md) | boolean | Whether to execute expression in \*debug mode\*. In \*debug mode\* inputs and outputs as well as all resolved arguments and time it took to execute each function are saved and are available for introspection. | +| [executor](./kibana-plugin-plugins-expressions-public.executionparams.executor.md) | Executor<any> | | +| [expression](./kibana-plugin-plugins-expressions-public.executionparams.expression.md) | string | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionstate.ast.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionstate.ast.md new file mode 100644 index 0000000000000..bd77c959bde63 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionstate.ast.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionState](./kibana-plugin-plugins-expressions-public.executionstate.md) > [ast](./kibana-plugin-plugins-expressions-public.executionstate.ast.md) + +## ExecutionState.ast property + +Signature: + +```typescript +ast: ExpressionAstExpression; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionstate.error.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionstate.error.md new file mode 100644 index 0000000000000..3ec804b3f0f2e --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionstate.error.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionState](./kibana-plugin-plugins-expressions-public.executionstate.md) > [error](./kibana-plugin-plugins-expressions-public.executionstate.error.md) + +## ExecutionState.error property + +Error happened during the execution. + +Signature: + +```typescript +error?: Error; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionstate.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionstate.md new file mode 100644 index 0000000000000..a7848a65fb94b --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionstate.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionState](./kibana-plugin-plugins-expressions-public.executionstate.md) + +## ExecutionState interface + +Signature: + +```typescript +export interface ExecutionState extends ExecutorState +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [ast](./kibana-plugin-plugins-expressions-public.executionstate.ast.md) | ExpressionAstExpression | | +| [error](./kibana-plugin-plugins-expressions-public.executionstate.error.md) | Error | Error happened during the execution. | +| [result](./kibana-plugin-plugins-expressions-public.executionstate.result.md) | Output | Result of the expression execution. | +| [state](./kibana-plugin-plugins-expressions-public.executionstate.state.md) | 'not-started' | 'pending' | 'result' | 'error' | Tracks state of execution.- not-started - before .start() method was called. - pending - immediately after .start() method is called. - result - when expression execution completed. - error - when execution failed with error. | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionstate.result.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionstate.result.md new file mode 100644 index 0000000000000..571f95211b8bf --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionstate.result.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionState](./kibana-plugin-plugins-expressions-public.executionstate.md) > [result](./kibana-plugin-plugins-expressions-public.executionstate.result.md) + +## ExecutionState.result property + +Result of the expression execution. + +Signature: + +```typescript +result?: Output; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionstate.state.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionstate.state.md new file mode 100644 index 0000000000000..9b6403590e60b --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executionstate.state.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutionState](./kibana-plugin-plugins-expressions-public.executionstate.md) > [state](./kibana-plugin-plugins-expressions-public.executionstate.state.md) + +## ExecutionState.state property + +Tracks state of execution. + +- `not-started` - before .start() method was called. - `pending` - immediately after .start() method is called. - `result` - when expression execution completed. - `error` - when execution failed with error. + +Signature: + +```typescript +state: 'not-started' | 'pending' | 'result' | 'error'; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor._constructor_.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor._constructor_.md new file mode 100644 index 0000000000000..2d776c9536c82 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Executor](./kibana-plugin-plugins-expressions-public.executor.md) > [(constructor)](./kibana-plugin-plugins-expressions-public.executor._constructor_.md) + +## Executor.(constructor) + +Constructs a new instance of the `Executor` class + +Signature: + +```typescript +constructor(state?: ExecutorState); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| state | ExecutorState<Context> | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.context.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.context.md new file mode 100644 index 0000000000000..9a35931bbb26b --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.context.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Executor](./kibana-plugin-plugins-expressions-public.executor.md) > [context](./kibana-plugin-plugins-expressions-public.executor.context.md) + +## Executor.context property + +Signature: + +```typescript +get context(): Record; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.createexecution.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.createexecution.md new file mode 100644 index 0000000000000..e6765064d4a27 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.createexecution.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Executor](./kibana-plugin-plugins-expressions-public.executor.md) > [createExecution](./kibana-plugin-plugins-expressions-public.executor.createexecution.md) + +## Executor.createExecution() method + +Signature: + +```typescript +createExecution = Record, Input = unknown, Output = unknown>(ast: string | ExpressionAstExpression, context?: ExtraContext, { debug }?: ExpressionExecOptions): Execution; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| ast | string | ExpressionAstExpression | | +| context | ExtraContext | | +| { debug } | ExpressionExecOptions | | + +Returns: + +`Execution` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.createwithdefaults.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.createwithdefaults.md new file mode 100644 index 0000000000000..a058d1c9f830e --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.createwithdefaults.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Executor](./kibana-plugin-plugins-expressions-public.executor.md) > [createWithDefaults](./kibana-plugin-plugins-expressions-public.executor.createwithdefaults.md) + +## Executor.createWithDefaults() method + +Signature: + +```typescript +static createWithDefaults = Record>(state?: ExecutorState): Executor; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| state | ExecutorState<Ctx> | | + +Returns: + +`Executor` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.extendcontext.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.extendcontext.md new file mode 100644 index 0000000000000..a08fcc839110d --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.extendcontext.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Executor](./kibana-plugin-plugins-expressions-public.executor.md) > [extendContext](./kibana-plugin-plugins-expressions-public.executor.extendcontext.md) + +## Executor.extendContext() method + +Signature: + +```typescript +extendContext(extraContext: Record): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| extraContext | Record<string, unknown> | | + +Returns: + +`void` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.fork.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.fork.md new file mode 100644 index 0000000000000..65aa7978a5910 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.fork.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Executor](./kibana-plugin-plugins-expressions-public.executor.md) > [fork](./kibana-plugin-plugins-expressions-public.executor.fork.md) + +## Executor.fork() method + +Signature: + +```typescript +fork(): Executor; +``` +Returns: + +`Executor` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.functions.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.functions.md new file mode 100644 index 0000000000000..3c55c246c91f8 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.functions.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Executor](./kibana-plugin-plugins-expressions-public.executor.md) > [functions](./kibana-plugin-plugins-expressions-public.executor.functions.md) + +## Executor.functions property + +> Warning: This API is now obsolete. +> +> + +Signature: + +```typescript +readonly functions: FunctionsRegistry; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.getfunction.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.getfunction.md new file mode 100644 index 0000000000000..11d04edc9c97d --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.getfunction.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Executor](./kibana-plugin-plugins-expressions-public.executor.md) > [getFunction](./kibana-plugin-plugins-expressions-public.executor.getfunction.md) + +## Executor.getFunction() method + +Signature: + +```typescript +getFunction(name: string): ExpressionFunction | undefined; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| name | string | | + +Returns: + +`ExpressionFunction | undefined` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.getfunctions.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.getfunctions.md new file mode 100644 index 0000000000000..1098c867e4c86 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.getfunctions.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Executor](./kibana-plugin-plugins-expressions-public.executor.md) > [getFunctions](./kibana-plugin-plugins-expressions-public.executor.getfunctions.md) + +## Executor.getFunctions() method + +Signature: + +```typescript +getFunctions(): Record; +``` +Returns: + +`Record` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.gettype.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.gettype.md new file mode 100644 index 0000000000000..a0dc6deb21d2c --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.gettype.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Executor](./kibana-plugin-plugins-expressions-public.executor.md) > [getType](./kibana-plugin-plugins-expressions-public.executor.gettype.md) + +## Executor.getType() method + +Signature: + +```typescript +getType(name: string): ExpressionType | undefined; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| name | string | | + +Returns: + +`ExpressionType | undefined` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.gettypes.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.gettypes.md new file mode 100644 index 0000000000000..a3c72b135cd31 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.gettypes.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Executor](./kibana-plugin-plugins-expressions-public.executor.md) > [getTypes](./kibana-plugin-plugins-expressions-public.executor.gettypes.md) + +## Executor.getTypes() method + +Signature: + +```typescript +getTypes(): Record; +``` +Returns: + +`Record` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.md new file mode 100644 index 0000000000000..b71c8c79c068f --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.md @@ -0,0 +1,43 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Executor](./kibana-plugin-plugins-expressions-public.executor.md) + +## Executor class + +Signature: + +```typescript +export declare class Executor = Record> +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(state)](./kibana-plugin-plugins-expressions-public.executor._constructor_.md) | | Constructs a new instance of the Executor class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [context](./kibana-plugin-plugins-expressions-public.executor.context.md) | | Record<string, unknown> | | +| [functions](./kibana-plugin-plugins-expressions-public.executor.functions.md) | | FunctionsRegistry | | +| [state](./kibana-plugin-plugins-expressions-public.executor.state.md) | | ExecutorContainer<Context> | | +| [types](./kibana-plugin-plugins-expressions-public.executor.types.md) | | TypesRegistry | | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [createExecution(ast, context, { debug })](./kibana-plugin-plugins-expressions-public.executor.createexecution.md) | | | +| [createWithDefaults(state)](./kibana-plugin-plugins-expressions-public.executor.createwithdefaults.md) | static | | +| [extendContext(extraContext)](./kibana-plugin-plugins-expressions-public.executor.extendcontext.md) | | | +| [fork()](./kibana-plugin-plugins-expressions-public.executor.fork.md) | | | +| [getFunction(name)](./kibana-plugin-plugins-expressions-public.executor.getfunction.md) | | | +| [getFunctions()](./kibana-plugin-plugins-expressions-public.executor.getfunctions.md) | | | +| [getType(name)](./kibana-plugin-plugins-expressions-public.executor.gettype.md) | | | +| [getTypes()](./kibana-plugin-plugins-expressions-public.executor.gettypes.md) | | | +| [registerFunction(functionDefinition)](./kibana-plugin-plugins-expressions-public.executor.registerfunction.md) | | | +| [registerType(typeDefinition)](./kibana-plugin-plugins-expressions-public.executor.registertype.md) | | | +| [run(ast, input, context)](./kibana-plugin-plugins-expressions-public.executor.run.md) | | Execute expression and return result. | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.registerfunction.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.registerfunction.md new file mode 100644 index 0000000000000..b4217fa492a20 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.registerfunction.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Executor](./kibana-plugin-plugins-expressions-public.executor.md) > [registerFunction](./kibana-plugin-plugins-expressions-public.executor.registerfunction.md) + +## Executor.registerFunction() method + +Signature: + +```typescript +registerFunction(functionDefinition: AnyExpressionFunctionDefinition | (() => AnyExpressionFunctionDefinition)): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| functionDefinition | AnyExpressionFunctionDefinition | (() => AnyExpressionFunctionDefinition) | | + +Returns: + +`void` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.registertype.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.registertype.md new file mode 100644 index 0000000000000..f56e5ffcfb9ee --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.registertype.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Executor](./kibana-plugin-plugins-expressions-public.executor.md) > [registerType](./kibana-plugin-plugins-expressions-public.executor.registertype.md) + +## Executor.registerType() method + +Signature: + +```typescript +registerType(typeDefinition: AnyExpressionTypeDefinition | (() => AnyExpressionTypeDefinition)): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| typeDefinition | AnyExpressionTypeDefinition | (() => AnyExpressionTypeDefinition) | | + +Returns: + +`void` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.run.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.run.md new file mode 100644 index 0000000000000..e06ce733acd43 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.run.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Executor](./kibana-plugin-plugins-expressions-public.executor.md) > [run](./kibana-plugin-plugins-expressions-public.executor.run.md) + +## Executor.run() method + +Execute expression and return result. + +Signature: + +```typescript +run = Record>(ast: string | ExpressionAstExpression, input: Input, context?: ExtraContext): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| ast | string | ExpressionAstExpression | | +| input | Input | | +| context | ExtraContext | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.state.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.state.md new file mode 100644 index 0000000000000..e9b7006980ceb --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.state.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Executor](./kibana-plugin-plugins-expressions-public.executor.md) > [state](./kibana-plugin-plugins-expressions-public.executor.state.md) + +## Executor.state property + +Signature: + +```typescript +readonly state: ExecutorContainer; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.types.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.types.md new file mode 100644 index 0000000000000..1ab9a5c4621be --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executor.types.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Executor](./kibana-plugin-plugins-expressions-public.executor.md) > [types](./kibana-plugin-plugins-expressions-public.executor.types.md) + +## Executor.types property + +> Warning: This API is now obsolete. +> +> + +Signature: + +```typescript +readonly types: TypesRegistry; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executorcontainer.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executorcontainer.md new file mode 100644 index 0000000000000..f48b001593f94 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executorcontainer.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutorContainer](./kibana-plugin-plugins-expressions-public.executorcontainer.md) + +## ExecutorContainer type + +Signature: + +```typescript +export declare type ExecutorContainer = Record> = StateContainer, ExecutorPureTransitions, ExecutorPureSelectors>; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executorstate.context.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executorstate.context.md new file mode 100644 index 0000000000000..d52074b0eecdd --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executorstate.context.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutorState](./kibana-plugin-plugins-expressions-public.executorstate.md) > [context](./kibana-plugin-plugins-expressions-public.executorstate.context.md) + +## ExecutorState.context property + +Signature: + +```typescript +context: Context; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executorstate.functions.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executorstate.functions.md new file mode 100644 index 0000000000000..034caf27aaef7 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executorstate.functions.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutorState](./kibana-plugin-plugins-expressions-public.executorstate.md) > [functions](./kibana-plugin-plugins-expressions-public.executorstate.functions.md) + +## ExecutorState.functions property + +Signature: + +```typescript +functions: Record; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executorstate.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executorstate.md new file mode 100644 index 0000000000000..e120631285887 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executorstate.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutorState](./kibana-plugin-plugins-expressions-public.executorstate.md) + +## ExecutorState interface + +Signature: + +```typescript +export interface ExecutorState = Record> +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [context](./kibana-plugin-plugins-expressions-public.executorstate.context.md) | Context | | +| [functions](./kibana-plugin-plugins-expressions-public.executorstate.functions.md) | Record<string, ExpressionFunction> | | +| [types](./kibana-plugin-plugins-expressions-public.executorstate.types.md) | Record<string, ExpressionType> | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executorstate.types.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executorstate.types.md new file mode 100644 index 0000000000000..00cf80c271684 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.executorstate.types.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExecutorState](./kibana-plugin-plugins-expressions-public.executorstate.md) > [types](./kibana-plugin-plugins-expressions-public.executorstate.types.md) + +## ExecutorState.types property + +Signature: + +```typescript +types: Record; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastargument.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastargument.md new file mode 100644 index 0000000000000..559cec0e841ac --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastargument.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstArgument](./kibana-plugin-plugins-expressions-public.expressionastargument.md) + +## ExpressionAstArgument type + +Signature: + +```typescript +export declare type ExpressionAstArgument = string | boolean | number | ExpressionAstExpression; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpression.chain.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpression.chain.md new file mode 100644 index 0000000000000..b50ac83036ffe --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpression.chain.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstExpression](./kibana-plugin-plugins-expressions-public.expressionastexpression.md) > [chain](./kibana-plugin-plugins-expressions-public.expressionastexpression.chain.md) + +## ExpressionAstExpression.chain property + +Signature: + +```typescript +chain: ExpressionAstFunction[]; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpression.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpression.md new file mode 100644 index 0000000000000..537659c51dce8 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpression.md @@ -0,0 +1,19 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstExpression](./kibana-plugin-plugins-expressions-public.expressionastexpression.md) + +## ExpressionAstExpression interface + +Signature: + +```typescript +export interface ExpressionAstExpression +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [chain](./kibana-plugin-plugins-expressions-public.expressionastexpression.chain.md) | ExpressionAstFunction[] | | +| [type](./kibana-plugin-plugins-expressions-public.expressionastexpression.type.md) | 'expression' | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpression.type.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpression.type.md new file mode 100644 index 0000000000000..34a86e235a911 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpression.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstExpression](./kibana-plugin-plugins-expressions-public.expressionastexpression.md) > [type](./kibana-plugin-plugins-expressions-public.expressionastexpression.type.md) + +## ExpressionAstExpression.type property + +Signature: + +```typescript +type: 'expression'; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.findfunction.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.findfunction.md new file mode 100644 index 0000000000000..d31f04ad5bf77 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.findfunction.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstExpressionBuilder](./kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.md) > [findFunction](./kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.findfunction.md) + +## ExpressionAstExpressionBuilder.findFunction property + +Recursively searches expression for all ocurrences of the function, including in subexpressions. + +Useful when performing migrations on a specific function, as you can iterate over the array of references and update all functions at once. + +Signature: + +```typescript +findFunction: (fnName: InferFunctionDefinition['name']) => Array> | []; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.functions.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.functions.md new file mode 100644 index 0000000000000..ceaa4c89fb237 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.functions.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstExpressionBuilder](./kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.md) > [functions](./kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.functions.md) + +## ExpressionAstExpressionBuilder.functions property + +Array of each of the `buildExpressionFunction()` instances in this expression. Use this to remove or reorder functions in the expression. + +Signature: + +```typescript +functions: ExpressionAstFunctionBuilder[]; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.md new file mode 100644 index 0000000000000..079e0b3dd8ac1 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstExpressionBuilder](./kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.md) + +## ExpressionAstExpressionBuilder interface + +Signature: + +```typescript +export interface ExpressionAstExpressionBuilder +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [findFunction](./kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.findfunction.md) | <FnDef extends AnyExpressionFunctionDefinition = AnyExpressionFunctionDefinition>(fnName: InferFunctionDefinition<FnDef>['name']) => Array<ExpressionAstFunctionBuilder<FnDef>> | [] | Recursively searches expression for all ocurrences of the function, including in subexpressions.Useful when performing migrations on a specific function, as you can iterate over the array of references and update all functions at once. | +| [functions](./kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.functions.md) | ExpressionAstFunctionBuilder[] | Array of each of the buildExpressionFunction() instances in this expression. Use this to remove or reorder functions in the expression. | +| [toAst](./kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.toast.md) | () => ExpressionAstExpression | Converts expression to an AST. ExpressionAstExpression | +| [toString](./kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.tostring.md) | () => string | Converts expression to an expression string. string | +| [type](./kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.type.md) | 'expression_builder' | Used to identify expression builder objects. | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.toast.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.toast.md new file mode 100644 index 0000000000000..e0b10033f6f3a --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.toast.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstExpressionBuilder](./kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.md) > [toAst](./kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.toast.md) + +## ExpressionAstExpressionBuilder.toAst property + +Converts expression to an AST. + + `ExpressionAstExpression` + +Signature: + +```typescript +toAst: () => ExpressionAstExpression; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.tostring.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.tostring.md new file mode 100644 index 0000000000000..6a9a25256c0a3 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.tostring.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstExpressionBuilder](./kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.md) > [toString](./kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.tostring.md) + +## ExpressionAstExpressionBuilder.toString property + +Converts expression to an expression string. + + `string` + +Signature: + +```typescript +toString: () => string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.type.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.type.md new file mode 100644 index 0000000000000..2aa8d5089aa29 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.type.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstExpressionBuilder](./kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.md) > [type](./kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.type.md) + +## ExpressionAstExpressionBuilder.type property + +Used to identify expression builder objects. + +Signature: + +```typescript +type: 'expression_builder'; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunction.arguments.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunction.arguments.md new file mode 100644 index 0000000000000..72b44e8319542 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunction.arguments.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstFunction](./kibana-plugin-plugins-expressions-public.expressionastfunction.md) > [arguments](./kibana-plugin-plugins-expressions-public.expressionastfunction.arguments.md) + +## ExpressionAstFunction.arguments property + +Signature: + +```typescript +arguments: Record; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunction.debug.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunction.debug.md new file mode 100644 index 0000000000000..36101a110979a --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunction.debug.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstFunction](./kibana-plugin-plugins-expressions-public.expressionastfunction.md) > [debug](./kibana-plugin-plugins-expressions-public.expressionastfunction.debug.md) + +## ExpressionAstFunction.debug property + +Debug information added to each function when expression is executed in \*debug mode\*. + +Signature: + +```typescript +debug?: ExpressionAstFunctionDebug; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunction.function.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunction.function.md new file mode 100644 index 0000000000000..1840fff4b625f --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunction.function.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstFunction](./kibana-plugin-plugins-expressions-public.expressionastfunction.md) > [function](./kibana-plugin-plugins-expressions-public.expressionastfunction.function.md) + +## ExpressionAstFunction.function property + +Signature: + +```typescript +function: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunction.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunction.md new file mode 100644 index 0000000000000..1004e58759806 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunction.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstFunction](./kibana-plugin-plugins-expressions-public.expressionastfunction.md) + +## ExpressionAstFunction interface + +Signature: + +```typescript +export interface ExpressionAstFunction +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [arguments](./kibana-plugin-plugins-expressions-public.expressionastfunction.arguments.md) | Record<string, ExpressionAstArgument[]> | | +| [debug](./kibana-plugin-plugins-expressions-public.expressionastfunction.debug.md) | ExpressionAstFunctionDebug | Debug information added to each function when expression is executed in \*debug mode\*. | +| [function](./kibana-plugin-plugins-expressions-public.expressionastfunction.function.md) | string | | +| [type](./kibana-plugin-plugins-expressions-public.expressionastfunction.type.md) | 'function' | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunction.type.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunction.type.md new file mode 100644 index 0000000000000..f7f8786430191 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunction.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstFunction](./kibana-plugin-plugins-expressions-public.expressionastfunction.md) > [type](./kibana-plugin-plugins-expressions-public.expressionastfunction.type.md) + +## ExpressionAstFunction.type property + +Signature: + +```typescript +type: 'function'; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.addargument.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.addargument.md new file mode 100644 index 0000000000000..da7f0ebc826c1 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.addargument.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.md) > [addArgument](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.addargument.md) + +## ExpressionAstFunctionBuilder.addArgument property + +Adds an additional argument to the function. For multi-args, this should be called once for each new arg. Note that TS will not enforce whether multi-args are available, so only use this to update an existing arg if you are certain it is a multi-arg. + +Signature: + +```typescript +addArgument: >(name: A, value: FunctionArgs[A] | ExpressionAstExpressionBuilder) => this; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.arguments.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.arguments.md new file mode 100644 index 0000000000000..4a95d20d6c983 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.arguments.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.md) > [arguments](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.arguments.md) + +## ExpressionAstFunctionBuilder.arguments property + +Object of all args currently added to the function. This is structured similarly to `ExpressionAstFunction['arguments']`, however any subexpressions are returned as expression builder instances instead of expression ASTs. + +Signature: + +```typescript +arguments: FunctionBuilderArguments; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.getargument.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.getargument.md new file mode 100644 index 0000000000000..0df9c80c632b1 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.getargument.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.md) > [getArgument](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.getargument.md) + +## ExpressionAstFunctionBuilder.getArgument property + +Retrieves an existing argument by name. Useful when you want to retrieve the current array of args and add something to it before calling `replaceArgument`. Any subexpression arguments will be returned as expression builder instances. + +Signature: + +```typescript +getArgument: >(name: A) => Array[A] | ExpressionAstExpressionBuilder> | undefined; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.md new file mode 100644 index 0000000000000..b05504af28d9b --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.md) + +## ExpressionAstFunctionBuilder interface + +Signature: + +```typescript +export interface ExpressionAstFunctionBuilder +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [addArgument](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.addargument.md) | <A extends FunctionArgName<FnDef>>(name: A, value: FunctionArgs<FnDef>[A] | ExpressionAstExpressionBuilder) => this | Adds an additional argument to the function. For multi-args, this should be called once for each new arg. Note that TS will not enforce whether multi-args are available, so only use this to update an existing arg if you are certain it is a multi-arg. | +| [arguments](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.arguments.md) | FunctionBuilderArguments<FnDef> | Object of all args currently added to the function. This is structured similarly to ExpressionAstFunction['arguments'], however any subexpressions are returned as expression builder instances instead of expression ASTs. | +| [getArgument](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.getargument.md) | <A extends FunctionArgName<FnDef>>(name: A) => Array<FunctionArgs<FnDef>[A] | ExpressionAstExpressionBuilder> | undefined | Retrieves an existing argument by name. Useful when you want to retrieve the current array of args and add something to it before calling replaceArgument. Any subexpression arguments will be returned as expression builder instances. | +| [name](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.name.md) | InferFunctionDefinition<FnDef>['name'] | Name of this expression function. | +| [removeArgument](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.removeargument.md) | <A extends OptionalKeys<FunctionArgs<FnDef>>>(name: A) => this | Removes an (optional) argument from the function.TypeScript will enforce that you only remove optional arguments. For manipulating required args, use replaceArgument. | +| [replaceArgument](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.replaceargument.md) | <A extends FunctionArgName<FnDef>>(name: A, value: Array<FunctionArgs<FnDef>[A] | ExpressionAstExpressionBuilder>) => this | Overwrites an existing argument with a new value. In order to support multi-args, the value given must always be an array. | +| [toAst](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.toast.md) | () => ExpressionAstFunction | Converts function to an AST. ExpressionAstFunction | +| [toString](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.tostring.md) | () => string | Converts function to an expression string. string | +| [type](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.type.md) | 'expression_function_builder' | Used to identify expression function builder objects. | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.name.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.name.md new file mode 100644 index 0000000000000..5bcf965426dbd --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.name.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.md) > [name](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.name.md) + +## ExpressionAstFunctionBuilder.name property + +Name of this expression function. + +Signature: + +```typescript +name: InferFunctionDefinition['name']; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.removeargument.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.removeargument.md new file mode 100644 index 0000000000000..1883618c96d53 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.removeargument.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.md) > [removeArgument](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.removeargument.md) + +## ExpressionAstFunctionBuilder.removeArgument property + +Removes an (optional) argument from the function. + +TypeScript will enforce that you only remove optional arguments. For manipulating required args, use `replaceArgument`. + +Signature: + +```typescript +removeArgument: >>(name: A) => this; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.replaceargument.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.replaceargument.md new file mode 100644 index 0000000000000..81709f6e94f0a --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.replaceargument.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.md) > [replaceArgument](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.replaceargument.md) + +## ExpressionAstFunctionBuilder.replaceArgument property + +Overwrites an existing argument with a new value. In order to support multi-args, the value given must always be an array. + +Signature: + +```typescript +replaceArgument: >(name: A, value: Array[A] | ExpressionAstExpressionBuilder>) => this; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.toast.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.toast.md new file mode 100644 index 0000000000000..bf79726c881ae --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.toast.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.md) > [toAst](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.toast.md) + +## ExpressionAstFunctionBuilder.toAst property + +Converts function to an AST. + + `ExpressionAstFunction` + +Signature: + +```typescript +toAst: () => ExpressionAstFunction; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.tostring.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.tostring.md new file mode 100644 index 0000000000000..5c8d0c806d372 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.tostring.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.md) > [toString](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.tostring.md) + +## ExpressionAstFunctionBuilder.toString property + +Converts function to an expression string. + + `string` + +Signature: + +```typescript +toString: () => string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.type.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.type.md new file mode 100644 index 0000000000000..b88876b14f367 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.type.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.md) > [type](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.type.md) + +## ExpressionAstFunctionBuilder.type property + +Used to identify expression function builder objects. + +Signature: + +```typescript +type: 'expression_function_builder'; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastnode.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastnode.md new file mode 100644 index 0000000000000..4e05b6a18374c --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionastnode.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionAstNode](./kibana-plugin-plugins-expressions-public.expressionastnode.md) + +## ExpressionAstNode type + +Signature: + +```typescript +export declare type ExpressionAstNode = ExpressionAstExpression | ExpressionAstFunction | ExpressionAstArgument; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionexecutor.interpreter.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionexecutor.interpreter.md new file mode 100644 index 0000000000000..6741634379dc1 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionexecutor.interpreter.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionExecutor](./kibana-plugin-plugins-expressions-public.expressionexecutor.md) > [interpreter](./kibana-plugin-plugins-expressions-public.expressionexecutor.interpreter.md) + +## ExpressionExecutor.interpreter property + +Signature: + +```typescript +interpreter: ExpressionInterpreter; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionexecutor.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionexecutor.md new file mode 100644 index 0000000000000..f0c457af52d22 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionexecutor.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionExecutor](./kibana-plugin-plugins-expressions-public.expressionexecutor.md) + +## ExpressionExecutor interface + +> Warning: This API is now obsolete. +> +> This type if remainder from legacy platform, will be deleted going further. +> + +Signature: + +```typescript +export interface ExpressionExecutor +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [interpreter](./kibana-plugin-plugins-expressions-public.expressionexecutor.interpreter.md) | ExpressionInterpreter | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction._constructor_.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction._constructor_.md new file mode 100644 index 0000000000000..9c711b47c89d0 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunction](./kibana-plugin-plugins-expressions-public.expressionfunction.md) > [(constructor)](./kibana-plugin-plugins-expressions-public.expressionfunction._constructor_.md) + +## ExpressionFunction.(constructor) + +Constructs a new instance of the `ExpressionFunction` class + +Signature: + +```typescript +constructor(functionDefinition: AnyExpressionFunctionDefinition); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| functionDefinition | AnyExpressionFunctionDefinition | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.accepts.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.accepts.md new file mode 100644 index 0000000000000..7a65878cd5a2d --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.accepts.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunction](./kibana-plugin-plugins-expressions-public.expressionfunction.md) > [accepts](./kibana-plugin-plugins-expressions-public.expressionfunction.accepts.md) + +## ExpressionFunction.accepts property + +Signature: + +```typescript +accepts: (type: string) => boolean; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.aliases.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.aliases.md new file mode 100644 index 0000000000000..550620386a892 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.aliases.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunction](./kibana-plugin-plugins-expressions-public.expressionfunction.md) > [aliases](./kibana-plugin-plugins-expressions-public.expressionfunction.aliases.md) + +## ExpressionFunction.aliases property + +Aliases that can be used instead of `name`. + +Signature: + +```typescript +aliases: string[]; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.args.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.args.md new file mode 100644 index 0000000000000..e14c08b8b7079 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.args.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunction](./kibana-plugin-plugins-expressions-public.expressionfunction.md) > [args](./kibana-plugin-plugins-expressions-public.expressionfunction.args.md) + +## ExpressionFunction.args property + +Specification of expression function parameters. + +Signature: + +```typescript +args: Record; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.fn.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.fn.md new file mode 100644 index 0000000000000..d94d9af9bf0f9 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.fn.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunction](./kibana-plugin-plugins-expressions-public.expressionfunction.md) > [fn](./kibana-plugin-plugins-expressions-public.expressionfunction.fn.md) + +## ExpressionFunction.fn property + +Function to run function (context, args) + +Signature: + +```typescript +fn: (input: ExpressionValue, params: Record, handlers: object) => ExpressionValue; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.help.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.help.md new file mode 100644 index 0000000000000..bbf70e11192eb --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.help.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunction](./kibana-plugin-plugins-expressions-public.expressionfunction.md) > [help](./kibana-plugin-plugins-expressions-public.expressionfunction.help.md) + +## ExpressionFunction.help property + +A short help text. + +Signature: + +```typescript +help: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.inputtypes.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.inputtypes.md new file mode 100644 index 0000000000000..865c856746062 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.inputtypes.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunction](./kibana-plugin-plugins-expressions-public.expressionfunction.md) > [inputTypes](./kibana-plugin-plugins-expressions-public.expressionfunction.inputtypes.md) + +## ExpressionFunction.inputTypes property + +Type of inputs that this function supports. + +Signature: + +```typescript +inputTypes: string[] | undefined; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.md new file mode 100644 index 0000000000000..5ca67e40c93ec --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.md @@ -0,0 +1,31 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunction](./kibana-plugin-plugins-expressions-public.expressionfunction.md) + +## ExpressionFunction class + +Signature: + +```typescript +export declare class ExpressionFunction +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(functionDefinition)](./kibana-plugin-plugins-expressions-public.expressionfunction._constructor_.md) | | Constructs a new instance of the ExpressionFunction class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [accepts](./kibana-plugin-plugins-expressions-public.expressionfunction.accepts.md) | | (type: string) => boolean | | +| [aliases](./kibana-plugin-plugins-expressions-public.expressionfunction.aliases.md) | | string[] | Aliases that can be used instead of name. | +| [args](./kibana-plugin-plugins-expressions-public.expressionfunction.args.md) | | Record<string, ExpressionFunctionParameter> | Specification of expression function parameters. | +| [fn](./kibana-plugin-plugins-expressions-public.expressionfunction.fn.md) | | (input: ExpressionValue, params: Record<string, any>, handlers: object) => ExpressionValue | Function to run function (context, args) | +| [help](./kibana-plugin-plugins-expressions-public.expressionfunction.help.md) | | string | A short help text. | +| [inputTypes](./kibana-plugin-plugins-expressions-public.expressionfunction.inputtypes.md) | | string[] | undefined | Type of inputs that this function supports. | +| [name](./kibana-plugin-plugins-expressions-public.expressionfunction.name.md) | | string | Name of function | +| [type](./kibana-plugin-plugins-expressions-public.expressionfunction.type.md) | | string | Return type of function. This SHOULD be supplied. We use it for UI and autocomplete hinting. We may also use it for optimizations in the future. | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.name.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.name.md new file mode 100644 index 0000000000000..2858089ea67de --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.name.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunction](./kibana-plugin-plugins-expressions-public.expressionfunction.md) > [name](./kibana-plugin-plugins-expressions-public.expressionfunction.name.md) + +## ExpressionFunction.name property + +Name of function + +Signature: + +```typescript +name: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.type.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.type.md new file mode 100644 index 0000000000000..7a7bc129a1719 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunction.type.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunction](./kibana-plugin-plugins-expressions-public.expressionfunction.md) > [type](./kibana-plugin-plugins-expressions-public.expressionfunction.type.md) + +## ExpressionFunction.type property + +Return type of function. This SHOULD be supplied. We use it for UI and autocomplete hinting. We may also use it for optimizations in the future. + +Signature: + +```typescript +type: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.aliases.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.aliases.md new file mode 100644 index 0000000000000..bca3600b6d416 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.aliases.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.md) > [aliases](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.aliases.md) + +## ExpressionFunctionDefinition.aliases property + + What is this? + +Signature: + +```typescript +aliases?: string[]; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.args.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.args.md new file mode 100644 index 0000000000000..65ead35adf0d6 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.args.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.md) > [args](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.args.md) + +## ExpressionFunctionDefinition.args property + +Specification of arguments that function supports. This list will also be used for autocomplete functionality when your function is being edited. + +Signature: + +```typescript +args: { + [key in keyof Arguments]: ArgumentType; + }; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.context.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.context.md new file mode 100644 index 0000000000000..34bbfc7976007 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.context.md @@ -0,0 +1,18 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.md) > [context](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.context.md) + +## ExpressionFunctionDefinition.context property + +> Warning: This API is now obsolete. +> +> Use `inputTypes` instead. +> + +Signature: + +```typescript +context?: { + types: AnyExpressionFunctionDefinition['inputTypes']; + }; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.fn.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.fn.md new file mode 100644 index 0000000000000..a2180c0cee665 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.fn.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.md) > [fn](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.fn.md) + +## ExpressionFunctionDefinition.fn() method + +The actual implementation of the function. + +Signature: + +```typescript +fn(input: Input, args: Arguments, context: Context): Output; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| input | Input | | +| args | Arguments | | +| context | Context | | + +Returns: + +`Output` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.help.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.help.md new file mode 100644 index 0000000000000..ad99bb3a14a0b --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.help.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.md) > [help](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.help.md) + +## ExpressionFunctionDefinition.help property + +Help text displayed in the Expression editor. This text should be internationalized. + +Signature: + +```typescript +help: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.inputtypes.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.inputtypes.md new file mode 100644 index 0000000000000..06c15dba514c2 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.inputtypes.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.md) > [inputTypes](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.inputtypes.md) + +## ExpressionFunctionDefinition.inputTypes property + +List of allowed type names for input value of this function. If this property is set the input of function will be cast to the first possible type in this list. If this property is missing the input will be provided to the function as-is. + +Signature: + +```typescript +inputTypes?: Array>; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.md new file mode 100644 index 0000000000000..bc801542f81ac --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.md @@ -0,0 +1,32 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.md) + +## ExpressionFunctionDefinition interface + +`ExpressionFunctionDefinition` is the interface plugins have to implement to register a function in `expressions` plugin. + +Signature: + +```typescript +export interface ExpressionFunctionDefinition, Output, Context extends ExecutionContext = ExecutionContext> +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [aliases](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.aliases.md) | string[] | What is this? | +| [args](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.args.md) | {
[key in keyof Arguments]: ArgumentType<Arguments[key]>;
} | Specification of arguments that function supports. This list will also be used for autocomplete functionality when your function is being edited. | +| [context](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.context.md) | {
types: AnyExpressionFunctionDefinition['inputTypes'];
} | | +| [help](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.help.md) | string | Help text displayed in the Expression editor. This text should be internationalized. | +| [inputTypes](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.inputtypes.md) | Array<TypeToString<Input>> | List of allowed type names for input value of this function. If this property is set the input of function will be cast to the first possible type in this list. If this property is missing the input will be provided to the function as-is. | +| [name](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.name.md) | Name | The name of the function, as will be used in expression. | +| [type](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.type.md) | TypeToString<UnwrapPromiseOrReturn<Output>> | Name of type of value this function outputs. | + +## Methods + +| Method | Description | +| --- | --- | +| [fn(input, args, context)](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.fn.md) | The actual implementation of the function. | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.name.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.name.md new file mode 100644 index 0000000000000..1c74a25851c96 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.name.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.md) > [name](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.name.md) + +## ExpressionFunctionDefinition.name property + +The name of the function, as will be used in expression. + +Signature: + +```typescript +name: Name; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.type.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.type.md new file mode 100644 index 0000000000000..4831f24a418bc --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.type.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.md) > [type](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.type.md) + +## ExpressionFunctionDefinition.type property + +Name of type of value this function outputs. + +Signature: + +```typescript +type?: TypeToString>; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.clog.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.clog.md new file mode 100644 index 0000000000000..3b3b5520ab3ab --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.clog.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionDefinitions](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.md) > [clog](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.clog.md) + +## ExpressionFunctionDefinitions.clog property + +Signature: + +```typescript +clog: ExpressionFunctionClog; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.font.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.font.md new file mode 100644 index 0000000000000..06674eeaf9d7a --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.font.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionDefinitions](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.md) > [font](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.font.md) + +## ExpressionFunctionDefinitions.font property + +Signature: + +```typescript +font: ExpressionFunctionFont; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.kibana.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.kibana.md new file mode 100644 index 0000000000000..abe8e0ae161ad --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.kibana.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionDefinitions](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.md) > [kibana](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.kibana.md) + +## ExpressionFunctionDefinitions.kibana property + +Signature: + +```typescript +kibana: ExpressionFunctionKibana; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.kibana_context.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.kibana_context.md new file mode 100644 index 0000000000000..4b58fd84e160d --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.kibana_context.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionDefinitions](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.md) > [kibana\_context](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.kibana_context.md) + +## ExpressionFunctionDefinitions.kibana\_context property + +Signature: + +```typescript +kibana_context: ExpressionFunctionKibanaContext; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.md new file mode 100644 index 0000000000000..914c5d6ebe2f6 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionDefinitions](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.md) + +## ExpressionFunctionDefinitions interface + +A mapping of `ExpressionFunctionDefinition`s for functions which the Expressions services provides out-of-the-box. Any new functions registered by the Expressions plugin should have their types added here. + +Signature: + +```typescript +export interface ExpressionFunctionDefinitions +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [clog](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.clog.md) | ExpressionFunctionClog | | +| [font](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.font.md) | ExpressionFunctionFont | | +| [kibana\_context](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.kibana_context.md) | ExpressionFunctionKibanaContext | | +| [kibana](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.kibana.md) | ExpressionFunctionKibana | | +| [theme](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.theme.md) | ExpressionFunctionTheme | | +| [var\_set](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.var_set.md) | ExpressionFunctionVarSet | | +| [var](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.var.md) | ExpressionFunctionVar | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.theme.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.theme.md new file mode 100644 index 0000000000000..766aee8f80809 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.theme.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionDefinitions](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.md) > [theme](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.theme.md) + +## ExpressionFunctionDefinitions.theme property + +Signature: + +```typescript +theme: ExpressionFunctionTheme; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.var.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.var.md new file mode 100644 index 0000000000000..4c3f4bb98a51e --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.var.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionDefinitions](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.md) > [var](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.var.md) + +## ExpressionFunctionDefinitions.var property + +Signature: + +```typescript +var: ExpressionFunctionVar; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.var_set.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.var_set.md new file mode 100644 index 0000000000000..a45d58242e4f3 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.var_set.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionDefinitions](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.md) > [var\_set](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.var_set.md) + +## ExpressionFunctionDefinitions.var\_set property + +Signature: + +```typescript +var_set: ExpressionFunctionVarSet; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionkibana.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionkibana.md new file mode 100644 index 0000000000000..8ccf48ba28527 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionkibana.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionKibana](./kibana-plugin-plugins-expressions-public.expressionfunctionkibana.md) + +## ExpressionFunctionKibana type + +Signature: + +```typescript +export declare type ExpressionFunctionKibana = ExpressionFunctionDefinition<'kibana', ExpressionValueSearchContext | null, object, ExpressionValueSearchContext>; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter._constructor_.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter._constructor_.md new file mode 100644 index 0000000000000..476ae51dd50f7 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter._constructor_.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.md) > [(constructor)](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter._constructor_.md) + +## ExpressionFunctionParameter.(constructor) + +Constructs a new instance of the `ExpressionFunctionParameter` class + +Signature: + +```typescript +constructor(name: string, arg: ArgumentType); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| name | string | | +| arg | ArgumentType<any> | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.accepts.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.accepts.md new file mode 100644 index 0000000000000..13b658d86855e --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.accepts.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.md) > [accepts](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.accepts.md) + +## ExpressionFunctionParameter.accepts() method + +Signature: + +```typescript +accepts(type: string): boolean; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| type | string | | + +Returns: + +`boolean` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.aliases.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.aliases.md new file mode 100644 index 0000000000000..03d6daac044b8 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.aliases.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.md) > [aliases](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.aliases.md) + +## ExpressionFunctionParameter.aliases property + +Signature: + +```typescript +aliases: string[]; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.default.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.default.md new file mode 100644 index 0000000000000..20cb697c182ae --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.default.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.md) > [default](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.default.md) + +## ExpressionFunctionParameter.default property + +Signature: + +```typescript +default: any; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.help.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.help.md new file mode 100644 index 0000000000000..102715264d5a9 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.help.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.md) > [help](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.help.md) + +## ExpressionFunctionParameter.help property + +Signature: + +```typescript +help: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.md new file mode 100644 index 0000000000000..eb99255b09328 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.md @@ -0,0 +1,38 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.md) + +## ExpressionFunctionParameter class + +Signature: + +```typescript +export declare class ExpressionFunctionParameter +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(name, arg)](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter._constructor_.md) | | Constructs a new instance of the ExpressionFunctionParameter class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [aliases](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.aliases.md) | | string[] | | +| [default](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.default.md) | | any | | +| [help](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.help.md) | | string | | +| [multi](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.multi.md) | | boolean | | +| [name](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.name.md) | | string | | +| [options](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.options.md) | | any[] | | +| [required](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.required.md) | | boolean | | +| [resolve](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.resolve.md) | | boolean | | +| [types](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.types.md) | | string[] | | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [accepts(type)](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.accepts.md) | | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.multi.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.multi.md new file mode 100644 index 0000000000000..cc0bfbaac05a1 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.multi.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.md) > [multi](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.multi.md) + +## ExpressionFunctionParameter.multi property + +Signature: + +```typescript +multi: boolean; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.name.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.name.md new file mode 100644 index 0000000000000..6a7d120a169dc --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.name.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.md) > [name](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.name.md) + +## ExpressionFunctionParameter.name property + +Signature: + +```typescript +name: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.options.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.options.md new file mode 100644 index 0000000000000..c1596becd2f5b --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.options.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.md) > [options](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.options.md) + +## ExpressionFunctionParameter.options property + +Signature: + +```typescript +options: any[]; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.required.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.required.md new file mode 100644 index 0000000000000..b4c494704edd7 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.required.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.md) > [required](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.required.md) + +## ExpressionFunctionParameter.required property + +Signature: + +```typescript +required: boolean; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.resolve.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.resolve.md new file mode 100644 index 0000000000000..a5689aa2d4226 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.resolve.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.md) > [resolve](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.resolve.md) + +## ExpressionFunctionParameter.resolve property + +Signature: + +```typescript +resolve: boolean; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.types.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.types.md new file mode 100644 index 0000000000000..63d73001b7285 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionfunctionparameter.types.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.md) > [types](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.types.md) + +## ExpressionFunctionParameter.types property + +Signature: + +```typescript +types: string[]; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionimage.dataurl.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionimage.dataurl.md new file mode 100644 index 0000000000000..b6b34720a7dd8 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionimage.dataurl.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionImage](./kibana-plugin-plugins-expressions-public.expressionimage.md) > [dataurl](./kibana-plugin-plugins-expressions-public.expressionimage.dataurl.md) + +## ExpressionImage.dataurl property + +Signature: + +```typescript +dataurl: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionimage.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionimage.md new file mode 100644 index 0000000000000..430273cca7edd --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionimage.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionImage](./kibana-plugin-plugins-expressions-public.expressionimage.md) + +## ExpressionImage interface + +Signature: + +```typescript +export interface ExpressionImage +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [dataurl](./kibana-plugin-plugins-expressions-public.expressionimage.dataurl.md) | string | | +| [mode](./kibana-plugin-plugins-expressions-public.expressionimage.mode.md) | string | | +| [type](./kibana-plugin-plugins-expressions-public.expressionimage.type.md) | 'image' | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionimage.mode.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionimage.mode.md new file mode 100644 index 0000000000000..f56a58ee71e98 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionimage.mode.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionImage](./kibana-plugin-plugins-expressions-public.expressionimage.md) > [mode](./kibana-plugin-plugins-expressions-public.expressionimage.mode.md) + +## ExpressionImage.mode property + +Signature: + +```typescript +mode: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionimage.type.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionimage.type.md new file mode 100644 index 0000000000000..e3b6e135233ef --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionimage.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionImage](./kibana-plugin-plugins-expressions-public.expressionimage.md) > [type](./kibana-plugin-plugins-expressions-public.expressionimage.type.md) + +## ExpressionImage.type property + +Signature: + +```typescript +type: 'image'; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.displayname.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.displayname.md new file mode 100644 index 0000000000000..9d5f7609ee6cd --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.displayname.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderDefinition](./kibana-plugin-plugins-expressions-public.expressionrenderdefinition.md) > [displayName](./kibana-plugin-plugins-expressions-public.expressionrenderdefinition.displayname.md) + +## ExpressionRenderDefinition.displayName property + +A user friendly name of the renderer as will be displayed to user in UI. + +Signature: + +```typescript +displayName: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.help.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.help.md new file mode 100644 index 0000000000000..ca67f18c0591f --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.help.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderDefinition](./kibana-plugin-plugins-expressions-public.expressionrenderdefinition.md) > [help](./kibana-plugin-plugins-expressions-public.expressionrenderdefinition.help.md) + +## ExpressionRenderDefinition.help property + +Help text as will be displayed to user. A sentence or few about what this element does. + +Signature: + +```typescript +help?: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.md new file mode 100644 index 0000000000000..3c3322914cebe --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderDefinition](./kibana-plugin-plugins-expressions-public.expressionrenderdefinition.md) + +## ExpressionRenderDefinition interface + +Signature: + +```typescript +export interface ExpressionRenderDefinition +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [displayName](./kibana-plugin-plugins-expressions-public.expressionrenderdefinition.displayname.md) | string | A user friendly name of the renderer as will be displayed to user in UI. | +| [help](./kibana-plugin-plugins-expressions-public.expressionrenderdefinition.help.md) | string | Help text as will be displayed to user. A sentence or few about what this element does. | +| [name](./kibana-plugin-plugins-expressions-public.expressionrenderdefinition.name.md) | string | Technical name of the renderer, used as ID to identify renderer in expression renderer registry. This must match the name of the expression function that is used to create the type: render object. | +| [render](./kibana-plugin-plugins-expressions-public.expressionrenderdefinition.render.md) | (domNode: HTMLElement, config: Config, handlers: IInterpreterRenderHandlers) => void | Promise<void> | The function called to render the output data of an expression. | +| [reuseDomNode](./kibana-plugin-plugins-expressions-public.expressionrenderdefinition.reusedomnode.md) | boolean | Tell the renderer if the dom node should be reused, it's recreated each time by default. | +| [validate](./kibana-plugin-plugins-expressions-public.expressionrenderdefinition.validate.md) | () => undefined | Error | Used to validate the data before calling the render function. | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.name.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.name.md new file mode 100644 index 0000000000000..25b782549fe7b --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.name.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderDefinition](./kibana-plugin-plugins-expressions-public.expressionrenderdefinition.md) > [name](./kibana-plugin-plugins-expressions-public.expressionrenderdefinition.name.md) + +## ExpressionRenderDefinition.name property + +Technical name of the renderer, used as ID to identify renderer in expression renderer registry. This must match the name of the expression function that is used to create the `type: render` object. + +Signature: + +```typescript +name: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.render.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.render.md new file mode 100644 index 0000000000000..d476ae15d4237 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.render.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderDefinition](./kibana-plugin-plugins-expressions-public.expressionrenderdefinition.md) > [render](./kibana-plugin-plugins-expressions-public.expressionrenderdefinition.render.md) + +## ExpressionRenderDefinition.render property + +The function called to render the output data of an expression. + +Signature: + +```typescript +render: (domNode: HTMLElement, config: Config, handlers: IInterpreterRenderHandlers) => void | Promise; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.reusedomnode.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.reusedomnode.md new file mode 100644 index 0000000000000..515cb2c1c078d --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.reusedomnode.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderDefinition](./kibana-plugin-plugins-expressions-public.expressionrenderdefinition.md) > [reuseDomNode](./kibana-plugin-plugins-expressions-public.expressionrenderdefinition.reusedomnode.md) + +## ExpressionRenderDefinition.reuseDomNode property + +Tell the renderer if the dom node should be reused, it's recreated each time by default. + +Signature: + +```typescript +reuseDomNode: boolean; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.validate.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.validate.md new file mode 100644 index 0000000000000..616a0dcc0a94f --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderdefinition.validate.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderDefinition](./kibana-plugin-plugins-expressions-public.expressionrenderdefinition.md) > [validate](./kibana-plugin-plugins-expressions-public.expressionrenderdefinition.validate.md) + +## ExpressionRenderDefinition.validate property + +Used to validate the data before calling the render function. + +Signature: + +```typescript +validate?: () => undefined | Error; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer._constructor_.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer._constructor_.md new file mode 100644 index 0000000000000..de74ee631fcf1 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderer](./kibana-plugin-plugins-expressions-public.expressionrenderer.md) > [(constructor)](./kibana-plugin-plugins-expressions-public.expressionrenderer._constructor_.md) + +## ExpressionRenderer.(constructor) + +Constructs a new instance of the `ExpressionRenderer` class + +Signature: + +```typescript +constructor(config: ExpressionRenderDefinition); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| config | ExpressionRenderDefinition<Config> | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.displayname.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.displayname.md new file mode 100644 index 0000000000000..710bcc60a47e7 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.displayname.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderer](./kibana-plugin-plugins-expressions-public.expressionrenderer.md) > [displayName](./kibana-plugin-plugins-expressions-public.expressionrenderer.displayname.md) + +## ExpressionRenderer.displayName property + +Signature: + +```typescript +readonly displayName: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.help.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.help.md new file mode 100644 index 0000000000000..f5b3f248e71fe --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.help.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderer](./kibana-plugin-plugins-expressions-public.expressionrenderer.md) > [help](./kibana-plugin-plugins-expressions-public.expressionrenderer.help.md) + +## ExpressionRenderer.help property + +Signature: + +```typescript +readonly help: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.md new file mode 100644 index 0000000000000..017d88c0cda69 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.md @@ -0,0 +1,29 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderer](./kibana-plugin-plugins-expressions-public.expressionrenderer.md) + +## ExpressionRenderer class + +Signature: + +```typescript +export declare class ExpressionRenderer +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(config)](./kibana-plugin-plugins-expressions-public.expressionrenderer._constructor_.md) | | Constructs a new instance of the ExpressionRenderer class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [displayName](./kibana-plugin-plugins-expressions-public.expressionrenderer.displayname.md) | | string | | +| [help](./kibana-plugin-plugins-expressions-public.expressionrenderer.help.md) | | string | | +| [name](./kibana-plugin-plugins-expressions-public.expressionrenderer.name.md) | | string | | +| [render](./kibana-plugin-plugins-expressions-public.expressionrenderer.render.md) | | ExpressionRenderDefinition<Config>['render'] | | +| [reuseDomNode](./kibana-plugin-plugins-expressions-public.expressionrenderer.reusedomnode.md) | | boolean | | +| [validate](./kibana-plugin-plugins-expressions-public.expressionrenderer.validate.md) | | () => void | Error | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.name.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.name.md new file mode 100644 index 0000000000000..2ed6677cf6ec4 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.name.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderer](./kibana-plugin-plugins-expressions-public.expressionrenderer.md) > [name](./kibana-plugin-plugins-expressions-public.expressionrenderer.name.md) + +## ExpressionRenderer.name property + +Signature: + +```typescript +readonly name: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.render.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.render.md new file mode 100644 index 0000000000000..2491cb31d7659 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.render.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderer](./kibana-plugin-plugins-expressions-public.expressionrenderer.md) > [render](./kibana-plugin-plugins-expressions-public.expressionrenderer.render.md) + +## ExpressionRenderer.render property + +Signature: + +```typescript +readonly render: ExpressionRenderDefinition['render']; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.reusedomnode.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.reusedomnode.md new file mode 100644 index 0000000000000..b5c3a89cc3ed1 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.reusedomnode.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderer](./kibana-plugin-plugins-expressions-public.expressionrenderer.md) > [reuseDomNode](./kibana-plugin-plugins-expressions-public.expressionrenderer.reusedomnode.md) + +## ExpressionRenderer.reuseDomNode property + +Signature: + +```typescript +readonly reuseDomNode: boolean; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.validate.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.validate.md new file mode 100644 index 0000000000000..7c1a7ac65809f --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderer.validate.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderer](./kibana-plugin-plugins-expressions-public.expressionrenderer.md) > [validate](./kibana-plugin-plugins-expressions-public.expressionrenderer.validate.md) + +## ExpressionRenderer.validate property + +Signature: + +```typescript +readonly validate: () => void | Error; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderercomponent.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderercomponent.md new file mode 100644 index 0000000000000..c49a74abe57f3 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderercomponent.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRendererComponent](./kibana-plugin-plugins-expressions-public.expressionrenderercomponent.md) + +## ExpressionRendererComponent type + +Signature: + +```typescript +export declare type ExpressionRendererComponent = React.FC; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererevent.data.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererevent.data.md new file mode 100644 index 0000000000000..537a3f278863d --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererevent.data.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRendererEvent](./kibana-plugin-plugins-expressions-public.expressionrendererevent.md) > [data](./kibana-plugin-plugins-expressions-public.expressionrendererevent.data.md) + +## ExpressionRendererEvent.data property + +Signature: + +```typescript +data: any; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererevent.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererevent.md new file mode 100644 index 0000000000000..952d2f92496c3 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererevent.md @@ -0,0 +1,19 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRendererEvent](./kibana-plugin-plugins-expressions-public.expressionrendererevent.md) + +## ExpressionRendererEvent interface + +Signature: + +```typescript +export interface ExpressionRendererEvent +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [data](./kibana-plugin-plugins-expressions-public.expressionrendererevent.data.md) | any | | +| [name](./kibana-plugin-plugins-expressions-public.expressionrendererevent.name.md) | string | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererevent.name.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererevent.name.md new file mode 100644 index 0000000000000..bbff92108358a --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererevent.name.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRendererEvent](./kibana-plugin-plugins-expressions-public.expressionrendererevent.md) > [name](./kibana-plugin-plugins-expressions-public.expressionrendererevent.name.md) + +## ExpressionRendererEvent.name property + +Signature: + +```typescript +name: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererregistry.get.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererregistry.get.md new file mode 100644 index 0000000000000..cff44001f0a1f --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererregistry.get.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRendererRegistry](./kibana-plugin-plugins-expressions-public.expressionrendererregistry.md) > [get](./kibana-plugin-plugins-expressions-public.expressionrendererregistry.get.md) + +## ExpressionRendererRegistry.get() method + +Signature: + +```typescript +get(id: string): ExpressionRenderer | null; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| id | string | | + +Returns: + +`ExpressionRenderer | null` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererregistry.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererregistry.md new file mode 100644 index 0000000000000..e53f2a7970723 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererregistry.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRendererRegistry](./kibana-plugin-plugins-expressions-public.expressionrendererregistry.md) + +## ExpressionRendererRegistry class + +Signature: + +```typescript +export declare class ExpressionRendererRegistry implements IRegistry +``` + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [get(id)](./kibana-plugin-plugins-expressions-public.expressionrendererregistry.get.md) | | | +| [register(definition)](./kibana-plugin-plugins-expressions-public.expressionrendererregistry.register.md) | | | +| [toArray()](./kibana-plugin-plugins-expressions-public.expressionrendererregistry.toarray.md) | | | +| [toJS()](./kibana-plugin-plugins-expressions-public.expressionrendererregistry.tojs.md) | | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererregistry.register.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererregistry.register.md new file mode 100644 index 0000000000000..13cabb0410861 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererregistry.register.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRendererRegistry](./kibana-plugin-plugins-expressions-public.expressionrendererregistry.md) > [register](./kibana-plugin-plugins-expressions-public.expressionrendererregistry.register.md) + +## ExpressionRendererRegistry.register() method + +Signature: + +```typescript +register(definition: AnyExpressionRenderDefinition | (() => AnyExpressionRenderDefinition)): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| definition | AnyExpressionRenderDefinition | (() => AnyExpressionRenderDefinition) | | + +Returns: + +`void` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererregistry.toarray.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererregistry.toarray.md new file mode 100644 index 0000000000000..b29fd46265d16 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererregistry.toarray.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRendererRegistry](./kibana-plugin-plugins-expressions-public.expressionrendererregistry.md) > [toArray](./kibana-plugin-plugins-expressions-public.expressionrendererregistry.toarray.md) + +## ExpressionRendererRegistry.toArray() method + +Signature: + +```typescript +toArray(): ExpressionRenderer[]; +``` +Returns: + +`ExpressionRenderer[]` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererregistry.tojs.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererregistry.tojs.md new file mode 100644 index 0000000000000..930ef7f8d89d2 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererregistry.tojs.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRendererRegistry](./kibana-plugin-plugins-expressions-public.expressionrendererregistry.md) > [toJS](./kibana-plugin-plugins-expressions-public.expressionrendererregistry.tojs.md) + +## ExpressionRendererRegistry.toJS() method + +Signature: + +```typescript +toJS(): Record; +``` +Returns: + +`Record` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererror.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererror.md new file mode 100644 index 0000000000000..3b3c1644adbef --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererror.md @@ -0,0 +1,18 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderError](./kibana-plugin-plugins-expressions-public.expressionrendererror.md) + +## ExpressionRenderError interface + +Signature: + +```typescript +export interface ExpressionRenderError extends Error +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [type](./kibana-plugin-plugins-expressions-public.expressionrendererror.type.md) | string | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererror.type.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererror.type.md new file mode 100644 index 0000000000000..b1939299a9d37 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrendererror.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderError](./kibana-plugin-plugins-expressions-public.expressionrendererror.md) > [type](./kibana-plugin-plugins-expressions-public.expressionrendererror.type.md) + +## ExpressionRenderError.type property + +Signature: + +```typescript +type?: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler._constructor_.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler._constructor_.md new file mode 100644 index 0000000000000..fb6ba7ee2621c --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler._constructor_.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderHandler](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.md) > [(constructor)](./kibana-plugin-plugins-expressions-public.expressionrenderhandler._constructor_.md) + +## ExpressionRenderHandler.(constructor) + +Constructs a new instance of the `ExpressionRenderHandler` class + +Signature: + +```typescript +constructor(element: HTMLElement, { onRenderError }?: Partial); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| element | HTMLElement | | +| { onRenderError } | Partial<ExpressionRenderHandlerParams> | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.destroy.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.destroy.md new file mode 100644 index 0000000000000..df949324b3b45 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.destroy.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderHandler](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.md) > [destroy](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.destroy.md) + +## ExpressionRenderHandler.destroy property + +Signature: + +```typescript +destroy: () => void; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.events_.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.events_.md new file mode 100644 index 0000000000000..c462724a4fdd9 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.events_.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderHandler](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.md) > [events$](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.events_.md) + +## ExpressionRenderHandler.events$ property + +Signature: + +```typescript +events$: Observable; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.getelement.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.getelement.md new file mode 100644 index 0000000000000..42262938502d8 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.getelement.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderHandler](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.md) > [getElement](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.getelement.md) + +## ExpressionRenderHandler.getElement property + +Signature: + +```typescript +getElement: () => HTMLElement; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.handlerendererror.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.handlerendererror.md new file mode 100644 index 0000000000000..6a70cac98ef8a --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.handlerendererror.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderHandler](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.md) > [handleRenderError](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.handlerendererror.md) + +## ExpressionRenderHandler.handleRenderError property + +Signature: + +```typescript +handleRenderError: (error: ExpressionRenderError) => void; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.md new file mode 100644 index 0000000000000..7f7d5792ba684 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.md @@ -0,0 +1,30 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderHandler](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.md) + +## ExpressionRenderHandler class + +Signature: + +```typescript +export declare class ExpressionRenderHandler +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(element, { onRenderError })](./kibana-plugin-plugins-expressions-public.expressionrenderhandler._constructor_.md) | | Constructs a new instance of the ExpressionRenderHandler class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [destroy](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.destroy.md) | | () => void | | +| [events$](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.events_.md) | | Observable<ExpressionRendererEvent> | | +| [getElement](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.getelement.md) | | () => HTMLElement | | +| [handleRenderError](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.handlerendererror.md) | | (error: ExpressionRenderError) => void | | +| [render](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.render.md) | | (data: any, uiState?: any) => Promise<void> | | +| [render$](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.render_.md) | | Observable<number> | | +| [update$](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.update_.md) | | Observable<UpdateValue | null> | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.render.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.render.md new file mode 100644 index 0000000000000..dec17d60ffd14 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.render.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderHandler](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.md) > [render](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.render.md) + +## ExpressionRenderHandler.render property + +Signature: + +```typescript +render: (data: any, uiState?: any) => Promise; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.render_.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.render_.md new file mode 100644 index 0000000000000..631dcbfcf89c1 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.render_.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderHandler](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.md) > [render$](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.render_.md) + +## ExpressionRenderHandler.render$ property + +Signature: + +```typescript +render$: Observable; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.update_.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.update_.md new file mode 100644 index 0000000000000..527e64f8e4815 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionrenderhandler.update_.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionRenderHandler](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.md) > [update$](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.update_.md) + +## ExpressionRenderHandler.update$ property + +Signature: + +```typescript +update$: Observable; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionspublicplugin._constructor_.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionspublicplugin._constructor_.md new file mode 100644 index 0000000000000..f49ae9b8166e7 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionspublicplugin._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsPublicPlugin](./kibana-plugin-plugins-expressions-public.expressionspublicplugin.md) > [(constructor)](./kibana-plugin-plugins-expressions-public.expressionspublicplugin._constructor_.md) + +## ExpressionsPublicPlugin.(constructor) + +Constructs a new instance of the `ExpressionsPublicPlugin` class + +Signature: + +```typescript +constructor(initializerContext: PluginInitializerContext); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| initializerContext | PluginInitializerContext | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionspublicplugin.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionspublicplugin.md new file mode 100644 index 0000000000000..dc8c961ceecc4 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionspublicplugin.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsPublicPlugin](./kibana-plugin-plugins-expressions-public.expressionspublicplugin.md) + +## ExpressionsPublicPlugin class + +Signature: + +```typescript +export declare class ExpressionsPublicPlugin implements Plugin +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(initializerContext)](./kibana-plugin-plugins-expressions-public.expressionspublicplugin._constructor_.md) | | Constructs a new instance of the ExpressionsPublicPlugin class | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [setup(core)](./kibana-plugin-plugins-expressions-public.expressionspublicplugin.setup.md) | | | +| [start(core)](./kibana-plugin-plugins-expressions-public.expressionspublicplugin.start.md) | | | +| [stop()](./kibana-plugin-plugins-expressions-public.expressionspublicplugin.stop.md) | | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionspublicplugin.setup.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionspublicplugin.setup.md new file mode 100644 index 0000000000000..11f72a737aa44 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionspublicplugin.setup.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsPublicPlugin](./kibana-plugin-plugins-expressions-public.expressionspublicplugin.md) > [setup](./kibana-plugin-plugins-expressions-public.expressionspublicplugin.setup.md) + +## ExpressionsPublicPlugin.setup() method + +Signature: + +```typescript +setup(core: CoreSetup): ExpressionsSetup; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| core | CoreSetup | | + +Returns: + +`ExpressionsSetup` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionspublicplugin.start.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionspublicplugin.start.md new file mode 100644 index 0000000000000..75599e2575809 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionspublicplugin.start.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsPublicPlugin](./kibana-plugin-plugins-expressions-public.expressionspublicplugin.md) > [start](./kibana-plugin-plugins-expressions-public.expressionspublicplugin.start.md) + +## ExpressionsPublicPlugin.start() method + +Signature: + +```typescript +start(core: CoreStart): ExpressionsStart; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| core | CoreStart | | + +Returns: + +`ExpressionsStart` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionspublicplugin.stop.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionspublicplugin.stop.md new file mode 100644 index 0000000000000..2de33ef166b96 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionspublicplugin.stop.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsPublicPlugin](./kibana-plugin-plugins-expressions-public.expressionspublicplugin.md) > [stop](./kibana-plugin-plugins-expressions-public.expressionspublicplugin.stop.md) + +## ExpressionsPublicPlugin.stop() method + +Signature: + +```typescript +stop(): void; +``` +Returns: + +`void` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice._constructor_.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice._constructor_.md new file mode 100644 index 0000000000000..695adad8cbeaf --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsService](./kibana-plugin-plugins-expressions-public.expressionsservice.md) > [(constructor)](./kibana-plugin-plugins-expressions-public.expressionsservice._constructor_.md) + +## ExpressionsService.(constructor) + +Constructs a new instance of the `ExpressionsService` class + +Signature: + +```typescript +constructor({ executor, renderers, }?: ExpressionServiceParams); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| { executor, renderers, } | ExpressionServiceParams | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.execute.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.execute.md new file mode 100644 index 0000000000000..e4ab0aa32516c --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.execute.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsService](./kibana-plugin-plugins-expressions-public.expressionsservice.md) > [execute](./kibana-plugin-plugins-expressions-public.expressionsservice.execute.md) + +## ExpressionsService.execute property + +Signature: + +```typescript +readonly execute: ExpressionsServiceStart['execute']; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.executor.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.executor.md new file mode 100644 index 0000000000000..f206a0a5c4bb3 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.executor.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsService](./kibana-plugin-plugins-expressions-public.expressionsservice.md) > [executor](./kibana-plugin-plugins-expressions-public.expressionsservice.executor.md) + +## ExpressionsService.executor property + +Signature: + +```typescript +readonly executor: Executor; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.fork.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.fork.md new file mode 100644 index 0000000000000..5273f8d79f5cf --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.fork.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsService](./kibana-plugin-plugins-expressions-public.expressionsservice.md) > [fork](./kibana-plugin-plugins-expressions-public.expressionsservice.fork.md) + +## ExpressionsService.fork property + +Signature: + +```typescript +readonly fork: () => ExpressionsService; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.getfunction.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.getfunction.md new file mode 100644 index 0000000000000..7d79a1e407a46 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.getfunction.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsService](./kibana-plugin-plugins-expressions-public.expressionsservice.md) > [getFunction](./kibana-plugin-plugins-expressions-public.expressionsservice.getfunction.md) + +## ExpressionsService.getFunction property + +Signature: + +```typescript +readonly getFunction: ExpressionsServiceStart['getFunction']; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.getfunctions.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.getfunctions.md new file mode 100644 index 0000000000000..6e1b1ca3e1c6d --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.getfunctions.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsService](./kibana-plugin-plugins-expressions-public.expressionsservice.md) > [getFunctions](./kibana-plugin-plugins-expressions-public.expressionsservice.getfunctions.md) + +## ExpressionsService.getFunctions property + +Returns POJO map of all registered expression functions, where keys are names of the functions and values are `ExpressionFunction` instances. + +Signature: + +```typescript +readonly getFunctions: () => ReturnType; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.getrenderer.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.getrenderer.md new file mode 100644 index 0000000000000..5821654cf8ec5 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.getrenderer.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsService](./kibana-plugin-plugins-expressions-public.expressionsservice.md) > [getRenderer](./kibana-plugin-plugins-expressions-public.expressionsservice.getrenderer.md) + +## ExpressionsService.getRenderer property + +Signature: + +```typescript +readonly getRenderer: ExpressionsServiceStart['getRenderer']; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.getrenderers.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.getrenderers.md new file mode 100644 index 0000000000000..3258717759c90 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.getrenderers.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsService](./kibana-plugin-plugins-expressions-public.expressionsservice.md) > [getRenderers](./kibana-plugin-plugins-expressions-public.expressionsservice.getrenderers.md) + +## ExpressionsService.getRenderers property + +Returns POJO map of all registered expression renderers, where keys are names of the renderers and values are `ExpressionRenderer` instances. + +Signature: + +```typescript +readonly getRenderers: () => ReturnType; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.gettype.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.gettype.md new file mode 100644 index 0000000000000..e8c451ab88e9f --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.gettype.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsService](./kibana-plugin-plugins-expressions-public.expressionsservice.md) > [getType](./kibana-plugin-plugins-expressions-public.expressionsservice.gettype.md) + +## ExpressionsService.getType property + +Signature: + +```typescript +readonly getType: ExpressionsServiceStart['getType']; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.gettypes.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.gettypes.md new file mode 100644 index 0000000000000..844f581240d45 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.gettypes.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsService](./kibana-plugin-plugins-expressions-public.expressionsservice.md) > [getTypes](./kibana-plugin-plugins-expressions-public.expressionsservice.gettypes.md) + +## ExpressionsService.getTypes property + +Returns POJO map of all registered expression types, where keys are names of the types and values are `ExpressionType` instances. + +Signature: + +```typescript +readonly getTypes: () => ReturnType; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.md new file mode 100644 index 0000000000000..fa93435bffc38 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.md @@ -0,0 +1,72 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsService](./kibana-plugin-plugins-expressions-public.expressionsservice.md) + +## ExpressionsService class + +`ExpressionsService` class is used for multiple purposes: + +1. It implements the same Expressions service that can be used on both: (1) server-side and (2) browser-side. 2. It implements the same Expressions service that users can fork/clone, thus have their own instance of the Expressions plugin. 3. `ExpressionsService` defines the public contracts of \*setup\* and \*start\* Kibana Platform life-cycles for ease-of-use on server-side and browser-side. 4. `ExpressionsService` creates a bound version of all exported contract functions. 5. Functions are bound the way there are: + +\`\`\`ts registerFunction = (...args: Parameters<Executor\['registerFunction'\]> ): ReturnType<Executor\['registerFunction'\]> => this.executor.registerFunction(...args); \`\`\` + +so that JSDoc appears in developers IDE when they use those `plugins.expressions.registerFunction(`. + +Signature: + +```typescript +export declare class ExpressionsService +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)({ executor, renderers, })](./kibana-plugin-plugins-expressions-public.expressionsservice._constructor_.md) | | Constructs a new instance of the ExpressionsService class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [execute](./kibana-plugin-plugins-expressions-public.expressionsservice.execute.md) | | ExpressionsServiceStart['execute'] | | +| [executor](./kibana-plugin-plugins-expressions-public.expressionsservice.executor.md) | | Executor | | +| [fork](./kibana-plugin-plugins-expressions-public.expressionsservice.fork.md) | | () => ExpressionsService | | +| [getFunction](./kibana-plugin-plugins-expressions-public.expressionsservice.getfunction.md) | | ExpressionsServiceStart['getFunction'] | | +| [getFunctions](./kibana-plugin-plugins-expressions-public.expressionsservice.getfunctions.md) | | () => ReturnType<Executor['getFunctions']> | Returns POJO map of all registered expression functions, where keys are names of the functions and values are ExpressionFunction instances. | +| [getRenderer](./kibana-plugin-plugins-expressions-public.expressionsservice.getrenderer.md) | | ExpressionsServiceStart['getRenderer'] | | +| [getRenderers](./kibana-plugin-plugins-expressions-public.expressionsservice.getrenderers.md) | | () => ReturnType<ExpressionRendererRegistry['toJS']> | Returns POJO map of all registered expression renderers, where keys are names of the renderers and values are ExpressionRenderer instances. | +| [getType](./kibana-plugin-plugins-expressions-public.expressionsservice.gettype.md) | | ExpressionsServiceStart['getType'] | | +| [getTypes](./kibana-plugin-plugins-expressions-public.expressionsservice.gettypes.md) | | () => ReturnType<Executor['getTypes']> | Returns POJO map of all registered expression types, where keys are names of the types and values are ExpressionType instances. | +| [registerFunction](./kibana-plugin-plugins-expressions-public.expressionsservice.registerfunction.md) | | (functionDefinition: AnyExpressionFunctionDefinition | (() => AnyExpressionFunctionDefinition)) => void | Register an expression function, which will be possible to execute as part of the expression pipeline.Below we register a function which simply sleeps for given number of milliseconds to delay the execution and outputs its input as-is. +```ts +expressions.registerFunction({ + name: 'sleep', + args: { + time: { + aliases: ['_'], + help: 'Time in milliseconds for how long to sleep', + types: ['number'], + }, + }, + help: '', + fn: async (input, args, context) => { + await new Promise(r => setTimeout(r, args.time)); + return input; + }, +} + +``` +The actual function is defined in the fn key. The function can be \*async\*. It receives three arguments: (1) input is the output of the previous function or the initial input of the expression if the function is first in chain; (2) args are function arguments as defined in expression string, that can be edited by user (e.g in case of Canvas); (3) context is a shared object passed to all functions that can be used for side-effects. | +| [registerRenderer](./kibana-plugin-plugins-expressions-public.expressionsservice.registerrenderer.md) | | (definition: AnyExpressionRenderDefinition | (() => AnyExpressionRenderDefinition)) => void | | +| [registerType](./kibana-plugin-plugins-expressions-public.expressionsservice.registertype.md) | | (typeDefinition: AnyExpressionTypeDefinition | (() => AnyExpressionTypeDefinition)) => void | | +| [renderers](./kibana-plugin-plugins-expressions-public.expressionsservice.renderers.md) | | ExpressionRendererRegistry | | +| [run](./kibana-plugin-plugins-expressions-public.expressionsservice.run.md) | | ExpressionsServiceStart['run'] | | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [setup()](./kibana-plugin-plugins-expressions-public.expressionsservice.setup.md) | | Returns Kibana Platform \*setup\* life-cycle contract. Useful to return the same contract on server-side and browser-side. | +| [start()](./kibana-plugin-plugins-expressions-public.expressionsservice.start.md) | | Returns Kibana Platform \*start\* life-cycle contract. Useful to return the same contract on server-side and browser-side. | +| [stop()](./kibana-plugin-plugins-expressions-public.expressionsservice.stop.md) | | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.registerfunction.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.registerfunction.md new file mode 100644 index 0000000000000..0653e68bb4837 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.registerfunction.md @@ -0,0 +1,35 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsService](./kibana-plugin-plugins-expressions-public.expressionsservice.md) > [registerFunction](./kibana-plugin-plugins-expressions-public.expressionsservice.registerfunction.md) + +## ExpressionsService.registerFunction property + +Register an expression function, which will be possible to execute as part of the expression pipeline. + +Below we register a function which simply sleeps for given number of milliseconds to delay the execution and outputs its input as-is. + +```ts +expressions.registerFunction({ + name: 'sleep', + args: { + time: { + aliases: ['_'], + help: 'Time in milliseconds for how long to sleep', + types: ['number'], + }, + }, + help: '', + fn: async (input, args, context) => { + await new Promise(r => setTimeout(r, args.time)); + return input; + }, +} + +``` +The actual function is defined in the `fn` key. The function can be \*async\*. It receives three arguments: (1) `input` is the output of the previous function or the initial input of the expression if the function is first in chain; (2) `args` are function arguments as defined in expression string, that can be edited by user (e.g in case of Canvas); (3) `context` is a shared object passed to all functions that can be used for side-effects. + +Signature: + +```typescript +readonly registerFunction: (functionDefinition: AnyExpressionFunctionDefinition | (() => AnyExpressionFunctionDefinition)) => void; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.registerrenderer.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.registerrenderer.md new file mode 100644 index 0000000000000..7aff36e7fd817 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.registerrenderer.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsService](./kibana-plugin-plugins-expressions-public.expressionsservice.md) > [registerRenderer](./kibana-plugin-plugins-expressions-public.expressionsservice.registerrenderer.md) + +## ExpressionsService.registerRenderer property + +Signature: + +```typescript +readonly registerRenderer: (definition: AnyExpressionRenderDefinition | (() => AnyExpressionRenderDefinition)) => void; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.registertype.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.registertype.md new file mode 100644 index 0000000000000..e6e71e5e7e7e9 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.registertype.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsService](./kibana-plugin-plugins-expressions-public.expressionsservice.md) > [registerType](./kibana-plugin-plugins-expressions-public.expressionsservice.registertype.md) + +## ExpressionsService.registerType property + +Signature: + +```typescript +readonly registerType: (typeDefinition: AnyExpressionTypeDefinition | (() => AnyExpressionTypeDefinition)) => void; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.renderers.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.renderers.md new file mode 100644 index 0000000000000..e43e9a21050ea --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.renderers.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsService](./kibana-plugin-plugins-expressions-public.expressionsservice.md) > [renderers](./kibana-plugin-plugins-expressions-public.expressionsservice.renderers.md) + +## ExpressionsService.renderers property + +Signature: + +```typescript +readonly renderers: ExpressionRendererRegistry; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.run.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.run.md new file mode 100644 index 0000000000000..47469167f6360 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.run.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsService](./kibana-plugin-plugins-expressions-public.expressionsservice.md) > [run](./kibana-plugin-plugins-expressions-public.expressionsservice.run.md) + +## ExpressionsService.run property + +Signature: + +```typescript +readonly run: ExpressionsServiceStart['run']; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.setup.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.setup.md new file mode 100644 index 0000000000000..a51f3f073d518 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.setup.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsService](./kibana-plugin-plugins-expressions-public.expressionsservice.md) > [setup](./kibana-plugin-plugins-expressions-public.expressionsservice.setup.md) + +## ExpressionsService.setup() method + +Returns Kibana Platform \*setup\* life-cycle contract. Useful to return the same contract on server-side and browser-side. + +Signature: + +```typescript +setup(): ExpressionsServiceSetup; +``` +Returns: + +`ExpressionsServiceSetup` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.start.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.start.md new file mode 100644 index 0000000000000..766d703a0729d --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.start.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsService](./kibana-plugin-plugins-expressions-public.expressionsservice.md) > [start](./kibana-plugin-plugins-expressions-public.expressionsservice.start.md) + +## ExpressionsService.start() method + +Returns Kibana Platform \*start\* life-cycle contract. Useful to return the same contract on server-side and browser-side. + +Signature: + +```typescript +start(): ExpressionsServiceStart; +``` +Returns: + +`ExpressionsServiceStart` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.stop.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.stop.md new file mode 100644 index 0000000000000..a32bb4a8bb009 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservice.stop.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsService](./kibana-plugin-plugins-expressions-public.expressionsservice.md) > [stop](./kibana-plugin-plugins-expressions-public.expressionsservice.stop.md) + +## ExpressionsService.stop() method + +Signature: + +```typescript +stop(): void; +``` +Returns: + +`void` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicesetup.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicesetup.md new file mode 100644 index 0000000000000..4cf3fb9b53978 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicesetup.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsServiceSetup](./kibana-plugin-plugins-expressions-public.expressionsservicesetup.md) + +## ExpressionsServiceSetup type + +The public contract that `ExpressionsService` provides to other plugins in Kibana Platform in \*setup\* life-cycle. + +Signature: + +```typescript +export declare type ExpressionsServiceSetup = Pick; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.execute.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.execute.md new file mode 100644 index 0000000000000..b8211a6bff27c --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.execute.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsServiceStart](./kibana-plugin-plugins-expressions-public.expressionsservicestart.md) > [execute](./kibana-plugin-plugins-expressions-public.expressionsservicestart.execute.md) + +## ExpressionsServiceStart.execute property + +Starts expression execution and immediately returns `ExecutionContract` instance that tracks the progress of the execution and can be used to interact with the execution. + +Signature: + +```typescript +execute: = Record>(ast: string | ExpressionAstExpression, input: Input, context?: ExtraContext) => ExecutionContract; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.fork.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.fork.md new file mode 100644 index 0000000000000..dd18daceb9539 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.fork.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsServiceStart](./kibana-plugin-plugins-expressions-public.expressionsservicestart.md) > [fork](./kibana-plugin-plugins-expressions-public.expressionsservicestart.fork.md) + +## ExpressionsServiceStart.fork property + +Create a new instance of `ExpressionsService`. The new instance inherits all state of the original `ExpressionsService`, including all expression types, expression functions and context. Also, all new types and functions registered in the original services AFTER the forking event will be available in the forked instance. However, all new types and functions registered in the forked instances will NOT be available to the original service. + +Signature: + +```typescript +fork: () => ExpressionsService; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.getfunction.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.getfunction.md new file mode 100644 index 0000000000000..d1a9bbce2a27e --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.getfunction.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsServiceStart](./kibana-plugin-plugins-expressions-public.expressionsservicestart.md) > [getFunction](./kibana-plugin-plugins-expressions-public.expressionsservicestart.getfunction.md) + +## ExpressionsServiceStart.getFunction property + +Get a registered `ExpressionFunction` by its name, which was registered using the `registerFunction` method. The returned `ExpressionFunction` instance is an internal representation of the function in Expressions service - do not mutate that object. + +Signature: + +```typescript +getFunction: (name: string) => ReturnType; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.getrenderer.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.getrenderer.md new file mode 100644 index 0000000000000..ef98fd633cb0c --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.getrenderer.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsServiceStart](./kibana-plugin-plugins-expressions-public.expressionsservicestart.md) > [getRenderer](./kibana-plugin-plugins-expressions-public.expressionsservicestart.getrenderer.md) + +## ExpressionsServiceStart.getRenderer property + +Get a registered `ExpressionRenderer` by its name, which was registered using the `registerRenderer` method. The returned `ExpressionRenderer` instance is an internal representation of the renderer in Expressions service - do not mutate that object. + +Signature: + +```typescript +getRenderer: (name: string) => ReturnType; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.gettype.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.gettype.md new file mode 100644 index 0000000000000..e9ec1733513ba --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.gettype.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsServiceStart](./kibana-plugin-plugins-expressions-public.expressionsservicestart.md) > [getType](./kibana-plugin-plugins-expressions-public.expressionsservicestart.gettype.md) + +## ExpressionsServiceStart.getType property + +Get a registered `ExpressionType` by its name, which was registered using the `registerType` method. The returned `ExpressionType` instance is an internal representation of the type in Expressions service - do not mutate that object. + +Signature: + +```typescript +getType: (name: string) => ReturnType; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.md new file mode 100644 index 0000000000000..34bf16c121326 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.md @@ -0,0 +1,35 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsServiceStart](./kibana-plugin-plugins-expressions-public.expressionsservicestart.md) + +## ExpressionsServiceStart interface + +The public contract that `ExpressionsService` provides to other plugins in Kibana Platform in \*start\* life-cycle. + +Signature: + +```typescript +export interface ExpressionsServiceStart +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [execute](./kibana-plugin-plugins-expressions-public.expressionsservicestart.execute.md) | <Input = unknown, Output = unknown, ExtraContext extends Record<string, unknown> = Record<string, unknown>>(ast: string | ExpressionAstExpression, input: Input, context?: ExtraContext) => ExecutionContract<ExtraContext, Input, Output> | Starts expression execution and immediately returns ExecutionContract instance that tracks the progress of the execution and can be used to interact with the execution. | +| [fork](./kibana-plugin-plugins-expressions-public.expressionsservicestart.fork.md) | () => ExpressionsService | Create a new instance of ExpressionsService. The new instance inherits all state of the original ExpressionsService, including all expression types, expression functions and context. Also, all new types and functions registered in the original services AFTER the forking event will be available in the forked instance. However, all new types and functions registered in the forked instances will NOT be available to the original service. | +| [getFunction](./kibana-plugin-plugins-expressions-public.expressionsservicestart.getfunction.md) | (name: string) => ReturnType<Executor['getFunction']> | Get a registered ExpressionFunction by its name, which was registered using the registerFunction method. The returned ExpressionFunction instance is an internal representation of the function in Expressions service - do not mutate that object. | +| [getRenderer](./kibana-plugin-plugins-expressions-public.expressionsservicestart.getrenderer.md) | (name: string) => ReturnType<ExpressionRendererRegistry['get']> | Get a registered ExpressionRenderer by its name, which was registered using the registerRenderer method. The returned ExpressionRenderer instance is an internal representation of the renderer in Expressions service - do not mutate that object. | +| [getType](./kibana-plugin-plugins-expressions-public.expressionsservicestart.gettype.md) | (name: string) => ReturnType<Executor['getType']> | Get a registered ExpressionType by its name, which was registered using the registerType method. The returned ExpressionType instance is an internal representation of the type in Expressions service - do not mutate that object. | +| [run](./kibana-plugin-plugins-expressions-public.expressionsservicestart.run.md) | <Input, Output, ExtraContext extends Record<string, unknown> = Record<string, unknown>>(ast: string | ExpressionAstExpression, input: Input, context?: ExtraContext) => Promise<Output> | Executes expression string or a parsed expression AST and immediately returns the result.Below example will execute sleep 100 | clog expression with 123 initial input to the first function. +```ts +expressions.run('sleep 100 | clog', 123); + +``` +- sleep 100 will delay execution by 100 milliseconds and pass the 123 input as its output. - clog will print to console 123 and pass it as its output. - The final result of the execution will be 123.Optionally, you can pass an object as the third argument which will be used to extend the ExecutionContext&mdash;an object passed to each function as the third argument, that allows functions to perform side-effects. +```ts +expressions.run('...', null, { elasticsearchClient }); + +``` + | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.run.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.run.md new file mode 100644 index 0000000000000..578c583624ad0 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicestart.run.md @@ -0,0 +1,28 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsServiceStart](./kibana-plugin-plugins-expressions-public.expressionsservicestart.md) > [run](./kibana-plugin-plugins-expressions-public.expressionsservicestart.run.md) + +## ExpressionsServiceStart.run property + +Executes expression string or a parsed expression AST and immediately returns the result. + +Below example will execute `sleep 100 | clog` expression with `123` initial input to the first function. + +```ts +expressions.run('sleep 100 | clog', 123); + +``` +- `sleep 100` will delay execution by 100 milliseconds and pass the `123` input as its output. - `clog` will print to console `123` and pass it as its output. - The final result of the execution will be `123`. + +Optionally, you can pass an object as the third argument which will be used to extend the `ExecutionContext`&mdash;an object passed to each function as the third argument, that allows functions to perform side-effects. + +```ts +expressions.run('...', null, { elasticsearchClient }); + +``` + +Signature: + +```typescript +run: = Record>(ast: string | ExpressionAstExpression, input: Input, context?: ExtraContext) => Promise; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionssetup.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionssetup.md new file mode 100644 index 0000000000000..01a894ae8fba6 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionssetup.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsSetup](./kibana-plugin-plugins-expressions-public.expressionssetup.md) + +## ExpressionsSetup type + +Expressions public setup contract, extends [ExpressionsServiceSetup](./kibana-plugin-plugins-expressions-public.expressionsservicesetup.md) + +Signature: + +```typescript +export declare type ExpressionsSetup = ExpressionsServiceSetup; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsstart.expressionloader.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsstart.expressionloader.md new file mode 100644 index 0000000000000..b7226b12b0d2b --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsstart.expressionloader.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsStart](./kibana-plugin-plugins-expressions-public.expressionsstart.md) > [ExpressionLoader](./kibana-plugin-plugins-expressions-public.expressionsstart.expressionloader.md) + +## ExpressionsStart.ExpressionLoader property + +Signature: + +```typescript +ExpressionLoader: typeof ExpressionLoader; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsstart.expressionrenderhandler.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsstart.expressionrenderhandler.md new file mode 100644 index 0000000000000..a78bb6f154c46 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsstart.expressionrenderhandler.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsStart](./kibana-plugin-plugins-expressions-public.expressionsstart.md) > [ExpressionRenderHandler](./kibana-plugin-plugins-expressions-public.expressionsstart.expressionrenderhandler.md) + +## ExpressionsStart.ExpressionRenderHandler property + +Signature: + +```typescript +ExpressionRenderHandler: typeof ExpressionRenderHandler; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsstart.loader.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsstart.loader.md new file mode 100644 index 0000000000000..109d8e8bcab66 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsstart.loader.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsStart](./kibana-plugin-plugins-expressions-public.expressionsstart.md) > [loader](./kibana-plugin-plugins-expressions-public.expressionsstart.loader.md) + +## ExpressionsStart.loader property + +Signature: + +```typescript +loader: IExpressionLoader; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsstart.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsstart.md new file mode 100644 index 0000000000000..ac4004590b5a6 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsstart.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsStart](./kibana-plugin-plugins-expressions-public.expressionsstart.md) + +## ExpressionsStart interface + +Expressions public start contrect, extends + +Signature: + +```typescript +export interface ExpressionsStart extends ExpressionsServiceStart +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [ExpressionLoader](./kibana-plugin-plugins-expressions-public.expressionsstart.expressionloader.md) | typeof ExpressionLoader | | +| [ExpressionRenderHandler](./kibana-plugin-plugins-expressions-public.expressionsstart.expressionrenderhandler.md) | typeof ExpressionRenderHandler | | +| [loader](./kibana-plugin-plugins-expressions-public.expressionsstart.loader.md) | IExpressionLoader | | +| [ReactExpressionRenderer](./kibana-plugin-plugins-expressions-public.expressionsstart.reactexpressionrenderer.md) | typeof ReactExpressionRenderer | | +| [render](./kibana-plugin-plugins-expressions-public.expressionsstart.render.md) | typeof render | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsstart.reactexpressionrenderer.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsstart.reactexpressionrenderer.md new file mode 100644 index 0000000000000..bbd7253a747c4 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsstart.reactexpressionrenderer.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsStart](./kibana-plugin-plugins-expressions-public.expressionsstart.md) > [ReactExpressionRenderer](./kibana-plugin-plugins-expressions-public.expressionsstart.reactexpressionrenderer.md) + +## ExpressionsStart.ReactExpressionRenderer property + +Signature: + +```typescript +ReactExpressionRenderer: typeof ReactExpressionRenderer; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsstart.render.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsstart.render.md new file mode 100644 index 0000000000000..fcf279206119e --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsstart.render.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionsStart](./kibana-plugin-plugins-expressions-public.expressionsstart.md) > [render](./kibana-plugin-plugins-expressions-public.expressionsstart.render.md) + +## ExpressionsStart.render property + +Signature: + +```typescript +render: typeof render; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype._constructor_.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype._constructor_.md new file mode 100644 index 0000000000000..2302be5643722 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionType](./kibana-plugin-plugins-expressions-public.expressiontype.md) > [(constructor)](./kibana-plugin-plugins-expressions-public.expressiontype._constructor_.md) + +## ExpressionType.(constructor) + +Constructs a new instance of the `ExpressionType` class + +Signature: + +```typescript +constructor(definition: AnyExpressionTypeDefinition); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| definition | AnyExpressionTypeDefinition | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.castsfrom.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.castsfrom.md new file mode 100644 index 0000000000000..e238db1b45086 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.castsfrom.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionType](./kibana-plugin-plugins-expressions-public.expressiontype.md) > [castsFrom](./kibana-plugin-plugins-expressions-public.expressiontype.castsfrom.md) + +## ExpressionType.castsFrom property + +Signature: + +```typescript +castsFrom: (value: ExpressionValue) => boolean; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.caststo.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.caststo.md new file mode 100644 index 0000000000000..36e03e6f3d53f --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.caststo.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionType](./kibana-plugin-plugins-expressions-public.expressiontype.md) > [castsTo](./kibana-plugin-plugins-expressions-public.expressiontype.caststo.md) + +## ExpressionType.castsTo property + +Signature: + +```typescript +castsTo: (value: ExpressionValue) => boolean; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.create.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.create.md new file mode 100644 index 0000000000000..e2da70b50b0d4 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.create.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionType](./kibana-plugin-plugins-expressions-public.expressiontype.md) > [create](./kibana-plugin-plugins-expressions-public.expressiontype.create.md) + +## ExpressionType.create property + +Signature: + +```typescript +create: unknown; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.deserialize.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.deserialize.md new file mode 100644 index 0000000000000..d47056817358c --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.deserialize.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionType](./kibana-plugin-plugins-expressions-public.expressiontype.md) > [deserialize](./kibana-plugin-plugins-expressions-public.expressiontype.deserialize.md) + +## ExpressionType.deserialize property + +Signature: + +```typescript +deserialize?: (serialized: any) => ExpressionValue; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.from.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.from.md new file mode 100644 index 0000000000000..51a36f614fbbf --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.from.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionType](./kibana-plugin-plugins-expressions-public.expressiontype.md) > [from](./kibana-plugin-plugins-expressions-public.expressiontype.from.md) + +## ExpressionType.from property + +Signature: + +```typescript +from: (value: ExpressionValue, types: Record) => any; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.getfromfn.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.getfromfn.md new file mode 100644 index 0000000000000..10d7bb4331916 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.getfromfn.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionType](./kibana-plugin-plugins-expressions-public.expressiontype.md) > [getFromFn](./kibana-plugin-plugins-expressions-public.expressiontype.getfromfn.md) + +## ExpressionType.getFromFn property + +Signature: + +```typescript +getFromFn: (typeName: string) => undefined | ExpressionValueConverter; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.gettofn.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.gettofn.md new file mode 100644 index 0000000000000..25b71163e5709 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.gettofn.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionType](./kibana-plugin-plugins-expressions-public.expressiontype.md) > [getToFn](./kibana-plugin-plugins-expressions-public.expressiontype.gettofn.md) + +## ExpressionType.getToFn property + +Signature: + +```typescript +getToFn: (typeName: string) => undefined | ExpressionValueConverter; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.help.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.help.md new file mode 100644 index 0000000000000..e27e1dea2a872 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.help.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionType](./kibana-plugin-plugins-expressions-public.expressiontype.md) > [help](./kibana-plugin-plugins-expressions-public.expressiontype.help.md) + +## ExpressionType.help property + +A short help text. + +Signature: + +```typescript +help: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.md new file mode 100644 index 0000000000000..acb72b796cf1d --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.md @@ -0,0 +1,35 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionType](./kibana-plugin-plugins-expressions-public.expressiontype.md) + +## ExpressionType class + +Signature: + +```typescript +export declare class ExpressionType +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(definition)](./kibana-plugin-plugins-expressions-public.expressiontype._constructor_.md) | | Constructs a new instance of the ExpressionType class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [castsFrom](./kibana-plugin-plugins-expressions-public.expressiontype.castsfrom.md) | | (value: ExpressionValue) => boolean | | +| [castsTo](./kibana-plugin-plugins-expressions-public.expressiontype.caststo.md) | | (value: ExpressionValue) => boolean | | +| [create](./kibana-plugin-plugins-expressions-public.expressiontype.create.md) | | unknown | | +| [deserialize](./kibana-plugin-plugins-expressions-public.expressiontype.deserialize.md) | | (serialized: any) => ExpressionValue | | +| [from](./kibana-plugin-plugins-expressions-public.expressiontype.from.md) | | (value: ExpressionValue, types: Record<string, ExpressionType>) => any | | +| [getFromFn](./kibana-plugin-plugins-expressions-public.expressiontype.getfromfn.md) | | (typeName: string) => undefined | ExpressionValueConverter<ExpressionValue, ExpressionValue> | | +| [getToFn](./kibana-plugin-plugins-expressions-public.expressiontype.gettofn.md) | | (typeName: string) => undefined | ExpressionValueConverter<ExpressionValue, ExpressionValue> | | +| [help](./kibana-plugin-plugins-expressions-public.expressiontype.help.md) | | string | A short help text. | +| [name](./kibana-plugin-plugins-expressions-public.expressiontype.name.md) | | string | | +| [serialize](./kibana-plugin-plugins-expressions-public.expressiontype.serialize.md) | | (value: ExpressionValue) => any | Optional serialization (used when passing context around client/server). | +| [to](./kibana-plugin-plugins-expressions-public.expressiontype.to.md) | | (value: ExpressionValue, toTypeName: string, types: Record<string, ExpressionType>) => any | | +| [validate](./kibana-plugin-plugins-expressions-public.expressiontype.validate.md) | | (type: any) => void | Error | Type validation, useful for checking function output. | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.name.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.name.md new file mode 100644 index 0000000000000..8d14f6e4f6bd8 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.name.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionType](./kibana-plugin-plugins-expressions-public.expressiontype.md) > [name](./kibana-plugin-plugins-expressions-public.expressiontype.name.md) + +## ExpressionType.name property + +Signature: + +```typescript +name: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.serialize.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.serialize.md new file mode 100644 index 0000000000000..cb4821b97e022 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.serialize.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionType](./kibana-plugin-plugins-expressions-public.expressiontype.md) > [serialize](./kibana-plugin-plugins-expressions-public.expressiontype.serialize.md) + +## ExpressionType.serialize property + +Optional serialization (used when passing context around client/server). + +Signature: + +```typescript +serialize?: (value: ExpressionValue) => any; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.to.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.to.md new file mode 100644 index 0000000000000..8045c5df638b0 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.to.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionType](./kibana-plugin-plugins-expressions-public.expressiontype.md) > [to](./kibana-plugin-plugins-expressions-public.expressiontype.to.md) + +## ExpressionType.to property + +Signature: + +```typescript +to: (value: ExpressionValue, toTypeName: string, types: Record) => any; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.validate.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.validate.md new file mode 100644 index 0000000000000..7214467b2b444 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontype.validate.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionType](./kibana-plugin-plugins-expressions-public.expressiontype.md) > [validate](./kibana-plugin-plugins-expressions-public.expressiontype.validate.md) + +## ExpressionType.validate property + +Type validation, useful for checking function output. + +Signature: + +```typescript +validate: (type: any) => void | Error; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.deserialize.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.deserialize.md new file mode 100644 index 0000000000000..75dac1e991f65 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.deserialize.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionTypeDefinition](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.md) > [deserialize](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.deserialize.md) + +## ExpressionTypeDefinition.deserialize property + +Signature: + +```typescript +deserialize?: (type: SerializedType) => Value; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.from.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.from.md new file mode 100644 index 0000000000000..ac8920066eda7 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.from.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionTypeDefinition](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.md) > [from](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.from.md) + +## ExpressionTypeDefinition.from property + +Signature: + +```typescript +from?: { + [type: string]: ExpressionValueConverter; + }; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.help.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.help.md new file mode 100644 index 0000000000000..ad5e5eb38fa72 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.help.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionTypeDefinition](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.md) > [help](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.help.md) + +## ExpressionTypeDefinition.help property + +Signature: + +```typescript +help?: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.md new file mode 100644 index 0000000000000..8c183e9a6de80 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionTypeDefinition](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.md) + +## ExpressionTypeDefinition interface + +A generic type which represents a custom Expression Type Definition that's registered to the Interpreter. + +Signature: + +```typescript +export interface ExpressionTypeDefinition +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [deserialize](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.deserialize.md) | (type: SerializedType) => Value | | +| [from](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.from.md) | {
[type: string]: ExpressionValueConverter<any, Value>;
} | | +| [help](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.help.md) | string | | +| [name](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.name.md) | Name | | +| [serialize](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.serialize.md) | (type: Value) => SerializedType | | +| [to](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.to.md) | {
[type: string]: ExpressionValueConverter<Value, any>;
} | | +| [validate](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.validate.md) | (type: any) => void | Error | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.name.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.name.md new file mode 100644 index 0000000000000..eb79d01040373 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.name.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionTypeDefinition](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.md) > [name](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.name.md) + +## ExpressionTypeDefinition.name property + +Signature: + +```typescript +name: Name; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.serialize.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.serialize.md new file mode 100644 index 0000000000000..5881ddbe5a6c4 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.serialize.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionTypeDefinition](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.md) > [serialize](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.serialize.md) + +## ExpressionTypeDefinition.serialize property + +Signature: + +```typescript +serialize?: (type: Value) => SerializedType; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.to.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.to.md new file mode 100644 index 0000000000000..282cdcdfb342d --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.to.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionTypeDefinition](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.md) > [to](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.to.md) + +## ExpressionTypeDefinition.to property + +Signature: + +```typescript +to?: { + [type: string]: ExpressionValueConverter; + }; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.validate.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.validate.md new file mode 100644 index 0000000000000..67d5e832c6284 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypedefinition.validate.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionTypeDefinition](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.md) > [validate](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.validate.md) + +## ExpressionTypeDefinition.validate property + +Signature: + +```typescript +validate?: (type: any) => void | Error; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypestyle.css.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypestyle.css.md new file mode 100644 index 0000000000000..ca8e881ef7e46 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypestyle.css.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionTypeStyle](./kibana-plugin-plugins-expressions-public.expressiontypestyle.md) > [css](./kibana-plugin-plugins-expressions-public.expressiontypestyle.css.md) + +## ExpressionTypeStyle.css property + +Signature: + +```typescript +css: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypestyle.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypestyle.md new file mode 100644 index 0000000000000..4e1cc86699f2d --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypestyle.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionTypeStyle](./kibana-plugin-plugins-expressions-public.expressiontypestyle.md) + +## ExpressionTypeStyle interface + +An object that represents style information, typically CSS. + +Signature: + +```typescript +export interface ExpressionTypeStyle +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [css](./kibana-plugin-plugins-expressions-public.expressiontypestyle.css.md) | string | | +| [spec](./kibana-plugin-plugins-expressions-public.expressiontypestyle.spec.md) | CSSStyle | | +| [type](./kibana-plugin-plugins-expressions-public.expressiontypestyle.type.md) | 'style' | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypestyle.spec.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypestyle.spec.md new file mode 100644 index 0000000000000..e732893366a36 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypestyle.spec.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionTypeStyle](./kibana-plugin-plugins-expressions-public.expressiontypestyle.md) > [spec](./kibana-plugin-plugins-expressions-public.expressiontypestyle.spec.md) + +## ExpressionTypeStyle.spec property + +Signature: + +```typescript +spec: CSSStyle; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypestyle.type.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypestyle.type.md new file mode 100644 index 0000000000000..01dd9b0da1072 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressiontypestyle.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionTypeStyle](./kibana-plugin-plugins-expressions-public.expressiontypestyle.md) > [type](./kibana-plugin-plugins-expressions-public.expressiontypestyle.type.md) + +## ExpressionTypeStyle.type property + +Signature: + +```typescript +type: 'style'; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvalue.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvalue.md new file mode 100644 index 0000000000000..53ab339df902a --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvalue.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionValue](./kibana-plugin-plugins-expressions-public.expressionvalue.md) + +## ExpressionValue type + +Signature: + +```typescript +export declare type ExpressionValue = ExpressionValueUnboxed | ExpressionValueBoxed; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvalueboxed.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvalueboxed.md new file mode 100644 index 0000000000000..6d8f060d4f91f --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvalueboxed.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionValueBoxed](./kibana-plugin-plugins-expressions-public.expressionvalueboxed.md) + +## ExpressionValueBoxed type + +Signature: + +```typescript +export declare type ExpressionValueBoxed = { + type: Type; +} & Value; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvalueconverter.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvalueconverter.md new file mode 100644 index 0000000000000..95e69645b53ee --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvalueconverter.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionValueConverter](./kibana-plugin-plugins-expressions-public.expressionvalueconverter.md) + +## ExpressionValueConverter type + +Signature: + +```typescript +export declare type ExpressionValueConverter = (input: I, availableTypes: Record) => O; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvalueerror.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvalueerror.md new file mode 100644 index 0000000000000..4a714fe62424f --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvalueerror.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionValueError](./kibana-plugin-plugins-expressions-public.expressionvalueerror.md) + +## ExpressionValueError type + +Signature: + +```typescript +export declare type ExpressionValueError = ExpressionValueBoxed<'error', { + error: { + message: string; + type?: string; + name?: string; + stack?: string; + original?: Error; + }; + info?: unknown; +}>; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvaluefilter.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvaluefilter.md new file mode 100644 index 0000000000000..07c1bfe9a96d6 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvaluefilter.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionValueFilter](./kibana-plugin-plugins-expressions-public.expressionvaluefilter.md) + +## ExpressionValueFilter type + +Represents an object that is a Filter. + +Signature: + +```typescript +export declare type ExpressionValueFilter = ExpressionValueBoxed<'filter', { + filterType?: string; + value?: string; + column?: string; + and: ExpressionValueFilter[]; + to?: string; + from?: string; + query?: string | null; +}>; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvaluenum.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvaluenum.md new file mode 100644 index 0000000000000..fc92777ffd5b6 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvaluenum.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionValueNum](./kibana-plugin-plugins-expressions-public.expressionvaluenum.md) + +## ExpressionValueNum type + +Signature: + +```typescript +export declare type ExpressionValueNum = ExpressionValueBoxed<'num', { + value: number; +}>; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvaluerender.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvaluerender.md new file mode 100644 index 0000000000000..be9e7f859daec --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvaluerender.md @@ -0,0 +1,16 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionValueRender](./kibana-plugin-plugins-expressions-public.expressionvaluerender.md) + +## ExpressionValueRender type + +Represents an object that is intended to be rendered. + +Signature: + +```typescript +export declare type ExpressionValueRender = ExpressionValueBoxed; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvaluesearchcontext.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvaluesearchcontext.md new file mode 100644 index 0000000000000..bf64dfe4c86f7 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvaluesearchcontext.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionValueSearchContext](./kibana-plugin-plugins-expressions-public.expressionvaluesearchcontext.md) + +## ExpressionValueSearchContext type + +Signature: + +```typescript +export declare type ExpressionValueSearchContext = ExpressionValueBoxed<'kibana_context', ExecutionContextSearch>; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvalueunboxed.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvalueunboxed.md new file mode 100644 index 0000000000000..fbc37fe667d5e --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionvalueunboxed.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ExpressionValueUnboxed](./kibana-plugin-plugins-expressions-public.expressionvalueunboxed.md) + +## ExpressionValueUnboxed type + +Signature: + +```typescript +export declare type ExpressionValueUnboxed = any; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.font.label.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.font.label.md new file mode 100644 index 0000000000000..87294ce59feb6 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.font.label.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Font](./kibana-plugin-plugins-expressions-public.font.md) > [label](./kibana-plugin-plugins-expressions-public.font.label.md) + +## Font.label property + +Signature: + +```typescript +label: FontLabel; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.font.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.font.md new file mode 100644 index 0000000000000..ef63d28fe6fba --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.font.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Font](./kibana-plugin-plugins-expressions-public.font.md) + +## Font interface + +An interface representing a font in Canvas, with a textual label and the CSS `font-value`. + +Signature: + +```typescript +export interface Font +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [label](./kibana-plugin-plugins-expressions-public.font.label.md) | FontLabel | | +| [value](./kibana-plugin-plugins-expressions-public.font.value.md) | FontValue | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.font.value.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.font.value.md new file mode 100644 index 0000000000000..cada244174785 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.font.value.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Font](./kibana-plugin-plugins-expressions-public.font.md) > [value](./kibana-plugin-plugins-expressions-public.font.value.md) + +## Font.value property + +Signature: + +```typescript +value: FontValue; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.fontlabel.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.fontlabel.md new file mode 100644 index 0000000000000..5af3427730ad1 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.fontlabel.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [FontLabel](./kibana-plugin-plugins-expressions-public.fontlabel.md) + +## FontLabel type + +This type contains a unions of all supported font labels, or the the name of the font the user would see in a UI. + +Signature: + +```typescript +export declare type FontLabel = typeof fonts[number]['label']; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.fontstyle.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.fontstyle.md new file mode 100644 index 0000000000000..9f70d91c7ac9b --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.fontstyle.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [FontStyle](./kibana-plugin-plugins-expressions-public.fontstyle.md) + +## FontStyle enum + +Enum of supported CSS `font-style` properties. + +Signature: + +```typescript +export declare enum FontStyle +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| ITALIC | "italic" | | +| NORMAL | "normal" | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.fontvalue.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.fontvalue.md new file mode 100644 index 0000000000000..f03c9b61cb733 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.fontvalue.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [FontValue](./kibana-plugin-plugins-expressions-public.fontvalue.md) + +## FontValue type + +This type contains a union of all supported font values, equivalent to the CSS `font-value` property. + +Signature: + +```typescript +export declare type FontValue = typeof fonts[number]['value']; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.fontweight.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.fontweight.md new file mode 100644 index 0000000000000..43388a3de11cc --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.fontweight.md @@ -0,0 +1,32 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [FontWeight](./kibana-plugin-plugins-expressions-public.fontweight.md) + +## FontWeight enum + +Enum of supported CSS `font-weight` properties. + +Signature: + +```typescript +export declare enum FontWeight +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| BOLD | "bold" | | +| BOLDER | "bolder" | | +| EIGHT | "800" | | +| FIVE | "500" | | +| FOUR | "400" | | +| LIGHTER | "lighter" | | +| NINE | "900" | | +| NORMAL | "normal" | | +| ONE | "100" | | +| SEVEN | "700" | | +| SIX | "600" | | +| THREE | "300" | | +| TWO | "200" | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.format.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.format.md new file mode 100644 index 0000000000000..27a9690e6fb0d --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.format.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [format](./kibana-plugin-plugins-expressions-public.format.md) + +## format() function + +Signature: + +```typescript +export declare function format(ast: T, type: T extends ExpressionAstExpression ? 'expression' : 'argument'): string; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| ast | T | | +| type | T extends ExpressionAstExpression ? 'expression' : 'argument' | | + +Returns: + +`string` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.formatexpression.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.formatexpression.md new file mode 100644 index 0000000000000..425aa9c6171fc --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.formatexpression.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [formatExpression](./kibana-plugin-plugins-expressions-public.formatexpression.md) + +## formatExpression() function + +Given expression pipeline AST, returns formatted string. + +Signature: + +```typescript +export declare function formatExpression(ast: ExpressionAstExpression): string; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| ast | ExpressionAstExpression | | + +Returns: + +`string` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.functionsregistry._constructor_.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.functionsregistry._constructor_.md new file mode 100644 index 0000000000000..2ab299e3d32f4 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.functionsregistry._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [FunctionsRegistry](./kibana-plugin-plugins-expressions-public.functionsregistry.md) > [(constructor)](./kibana-plugin-plugins-expressions-public.functionsregistry._constructor_.md) + +## FunctionsRegistry.(constructor) + +Constructs a new instance of the `FunctionsRegistry` class + +Signature: + +```typescript +constructor(executor: Executor); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| executor | Executor<any> | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.functionsregistry.get.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.functionsregistry.get.md new file mode 100644 index 0000000000000..3ed2807028299 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.functionsregistry.get.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [FunctionsRegistry](./kibana-plugin-plugins-expressions-public.functionsregistry.md) > [get](./kibana-plugin-plugins-expressions-public.functionsregistry.get.md) + +## FunctionsRegistry.get() method + +Signature: + +```typescript +get(id: string): ExpressionFunction | null; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| id | string | | + +Returns: + +`ExpressionFunction | null` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.functionsregistry.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.functionsregistry.md new file mode 100644 index 0000000000000..b32623934ee92 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.functionsregistry.md @@ -0,0 +1,27 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [FunctionsRegistry](./kibana-plugin-plugins-expressions-public.functionsregistry.md) + +## FunctionsRegistry class + +Signature: + +```typescript +export declare class FunctionsRegistry implements IRegistry +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(executor)](./kibana-plugin-plugins-expressions-public.functionsregistry._constructor_.md) | | Constructs a new instance of the FunctionsRegistry class | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [get(id)](./kibana-plugin-plugins-expressions-public.functionsregistry.get.md) | | | +| [register(functionDefinition)](./kibana-plugin-plugins-expressions-public.functionsregistry.register.md) | | | +| [toArray()](./kibana-plugin-plugins-expressions-public.functionsregistry.toarray.md) | | | +| [toJS()](./kibana-plugin-plugins-expressions-public.functionsregistry.tojs.md) | | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.functionsregistry.register.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.functionsregistry.register.md new file mode 100644 index 0000000000000..32f7f389e8958 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.functionsregistry.register.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [FunctionsRegistry](./kibana-plugin-plugins-expressions-public.functionsregistry.md) > [register](./kibana-plugin-plugins-expressions-public.functionsregistry.register.md) + +## FunctionsRegistry.register() method + +Signature: + +```typescript +register(functionDefinition: AnyExpressionFunctionDefinition | (() => AnyExpressionFunctionDefinition)): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| functionDefinition | AnyExpressionFunctionDefinition | (() => AnyExpressionFunctionDefinition) | | + +Returns: + +`void` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.functionsregistry.toarray.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.functionsregistry.toarray.md new file mode 100644 index 0000000000000..5bc482097a175 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.functionsregistry.toarray.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [FunctionsRegistry](./kibana-plugin-plugins-expressions-public.functionsregistry.md) > [toArray](./kibana-plugin-plugins-expressions-public.functionsregistry.toarray.md) + +## FunctionsRegistry.toArray() method + +Signature: + +```typescript +toArray(): ExpressionFunction[]; +``` +Returns: + +`ExpressionFunction[]` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.functionsregistry.tojs.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.functionsregistry.tojs.md new file mode 100644 index 0000000000000..d6790fb8f726e --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.functionsregistry.tojs.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [FunctionsRegistry](./kibana-plugin-plugins-expressions-public.functionsregistry.md) > [toJS](./kibana-plugin-plugins-expressions-public.functionsregistry.tojs.md) + +## FunctionsRegistry.toJS() method + +Signature: + +```typescript +toJS(): Record; +``` +Returns: + +`Record` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.context.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.context.md new file mode 100644 index 0000000000000..40dcf07667b1b --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.context.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [IExpressionLoaderParams](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.md) > [context](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.context.md) + +## IExpressionLoaderParams.context property + +Signature: + +```typescript +context?: ExpressionValue; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.customfunctions.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.customfunctions.md new file mode 100644 index 0000000000000..00ff3d498eb5c --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.customfunctions.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [IExpressionLoaderParams](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.md) > [customFunctions](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.customfunctions.md) + +## IExpressionLoaderParams.customFunctions property + +Signature: + +```typescript +customFunctions?: []; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.customrenderers.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.customrenderers.md new file mode 100644 index 0000000000000..72b82e2d41b05 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.customrenderers.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [IExpressionLoaderParams](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.md) > [customRenderers](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.customrenderers.md) + +## IExpressionLoaderParams.customRenderers property + +Signature: + +```typescript +customRenderers?: []; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.disablecaching.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.disablecaching.md new file mode 100644 index 0000000000000..62483016d3aee --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.disablecaching.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [IExpressionLoaderParams](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.md) > [disableCaching](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.disablecaching.md) + +## IExpressionLoaderParams.disableCaching property + +Signature: + +```typescript +disableCaching?: boolean; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.inspectoradapters.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.inspectoradapters.md new file mode 100644 index 0000000000000..52f2a6e56d133 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.inspectoradapters.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [IExpressionLoaderParams](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.md) > [inspectorAdapters](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.inspectoradapters.md) + +## IExpressionLoaderParams.inspectorAdapters property + +Signature: + +```typescript +inspectorAdapters?: Adapters; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.md new file mode 100644 index 0000000000000..b8a174f93fb99 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [IExpressionLoaderParams](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.md) + +## IExpressionLoaderParams interface + +Signature: + +```typescript +export interface IExpressionLoaderParams +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [context](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.context.md) | ExpressionValue | | +| [customFunctions](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.customfunctions.md) | [] | | +| [customRenderers](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.customrenderers.md) | [] | | +| [disableCaching](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.disablecaching.md) | boolean | | +| [inspectorAdapters](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.inspectoradapters.md) | Adapters | | +| [onRenderError](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.onrendererror.md) | RenderErrorHandlerFnType | | +| [searchContext](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.searchcontext.md) | ExecutionContextSearch | | +| [uiState](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.uistate.md) | unknown | | +| [variables](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.variables.md) | Record<string, any> | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.onrendererror.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.onrendererror.md new file mode 100644 index 0000000000000..f45a9c76242c4 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.onrendererror.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [IExpressionLoaderParams](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.md) > [onRenderError](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.onrendererror.md) + +## IExpressionLoaderParams.onRenderError property + +Signature: + +```typescript +onRenderError?: RenderErrorHandlerFnType; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.searchcontext.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.searchcontext.md new file mode 100644 index 0000000000000..523d0c562f7ca --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.searchcontext.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [IExpressionLoaderParams](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.md) > [searchContext](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.searchcontext.md) + +## IExpressionLoaderParams.searchContext property + +Signature: + +```typescript +searchContext?: ExecutionContextSearch; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.uistate.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.uistate.md new file mode 100644 index 0000000000000..dca5032dabc78 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.uistate.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [IExpressionLoaderParams](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.md) > [uiState](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.uistate.md) + +## IExpressionLoaderParams.uiState property + +Signature: + +```typescript +uiState?: unknown; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.variables.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.variables.md new file mode 100644 index 0000000000000..0a04671919bd0 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iexpressionloaderparams.variables.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [IExpressionLoaderParams](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.md) > [variables](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.variables.md) + +## IExpressionLoaderParams.variables property + +Signature: + +```typescript +variables?: Record; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.done.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.done.md new file mode 100644 index 0000000000000..533cf498d72cf --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.done.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [IInterpreterRenderHandlers](./kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.md) > [done](./kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.done.md) + +## IInterpreterRenderHandlers.done property + +Done increments the number of rendering successes + +Signature: + +```typescript +done: () => void; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.event.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.event.md new file mode 100644 index 0000000000000..476167965927d --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.event.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [IInterpreterRenderHandlers](./kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.md) > [event](./kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.event.md) + +## IInterpreterRenderHandlers.event property + +Signature: + +```typescript +event: (event: any) => void; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.md new file mode 100644 index 0000000000000..9dbd18ae687b4 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [IInterpreterRenderHandlers](./kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.md) + +## IInterpreterRenderHandlers interface + +Signature: + +```typescript +export interface IInterpreterRenderHandlers +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [done](./kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.done.md) | () => void | Done increments the number of rendering successes | +| [event](./kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.event.md) | (event: any) => void | | +| [onDestroy](./kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.ondestroy.md) | (fn: () => void) => void | | +| [reload](./kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.reload.md) | () => void | | +| [update](./kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.update.md) | (params: any) => void | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.ondestroy.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.ondestroy.md new file mode 100644 index 0000000000000..b68c2023fdc8a --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.ondestroy.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [IInterpreterRenderHandlers](./kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.md) > [onDestroy](./kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.ondestroy.md) + +## IInterpreterRenderHandlers.onDestroy property + +Signature: + +```typescript +onDestroy: (fn: () => void) => void; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.reload.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.reload.md new file mode 100644 index 0000000000000..0acd440e84f12 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.reload.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [IInterpreterRenderHandlers](./kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.md) > [reload](./kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.reload.md) + +## IInterpreterRenderHandlers.reload property + +Signature: + +```typescript +reload: () => void; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.update.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.update.md new file mode 100644 index 0000000000000..28fcb58fb3c10 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.update.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [IInterpreterRenderHandlers](./kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.md) > [update](./kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.update.md) + +## IInterpreterRenderHandlers.update property + +Signature: + +```typescript +update: (params: any) => void; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.interpretererrortype.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.interpretererrortype.md new file mode 100644 index 0000000000000..8cb346eda4d74 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.interpretererrortype.md @@ -0,0 +1,16 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [InterpreterErrorType](./kibana-plugin-plugins-expressions-public.interpretererrortype.md) + +## InterpreterErrorType type + +> Warning: This API is now obsolete. +> +> Exported for backwards compatibility. +> + +Signature: + +```typescript +export declare type InterpreterErrorType = ExpressionValueError; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iregistry.get.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iregistry.get.md new file mode 100644 index 0000000000000..9aa696869eaa3 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iregistry.get.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [IRegistry](./kibana-plugin-plugins-expressions-public.iregistry.md) > [get](./kibana-plugin-plugins-expressions-public.iregistry.get.md) + +## IRegistry.get() method + +Signature: + +```typescript +get(id: string): T | null; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| id | string | | + +Returns: + +`T | null` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iregistry.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iregistry.md new file mode 100644 index 0000000000000..64991d90f2ae0 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iregistry.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [IRegistry](./kibana-plugin-plugins-expressions-public.iregistry.md) + +## IRegistry interface + +Signature: + +```typescript +export interface IRegistry +``` + +## Methods + +| Method | Description | +| --- | --- | +| [get(id)](./kibana-plugin-plugins-expressions-public.iregistry.get.md) | | +| [toArray()](./kibana-plugin-plugins-expressions-public.iregistry.toarray.md) | | +| [toJS()](./kibana-plugin-plugins-expressions-public.iregistry.tojs.md) | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iregistry.toarray.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iregistry.toarray.md new file mode 100644 index 0000000000000..36b16ca48323f --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iregistry.toarray.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [IRegistry](./kibana-plugin-plugins-expressions-public.iregistry.md) > [toArray](./kibana-plugin-plugins-expressions-public.iregistry.toarray.md) + +## IRegistry.toArray() method + +Signature: + +```typescript +toArray(): T[]; +``` +Returns: + +`T[]` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iregistry.tojs.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iregistry.tojs.md new file mode 100644 index 0000000000000..2f7a3597c1f02 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.iregistry.tojs.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [IRegistry](./kibana-plugin-plugins-expressions-public.iregistry.md) > [toJS](./kibana-plugin-plugins-expressions-public.iregistry.tojs.md) + +## IRegistry.toJS() method + +Signature: + +```typescript +toJS(): Record; +``` +Returns: + +`Record` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.isexpressionastbuilder.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.isexpressionastbuilder.md new file mode 100644 index 0000000000000..f35e7122caeb5 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.isexpressionastbuilder.md @@ -0,0 +1,28 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [isExpressionAstBuilder](./kibana-plugin-plugins-expressions-public.isexpressionastbuilder.md) + +## isExpressionAstBuilder() function + +Type guard that checks whether a given value is an `ExpressionAstExpressionBuilder`. This is useful when working with subexpressions, where you might be retrieving a function argument, and need to know whether it is an expression builder instance which you can perform operations on. + +Signature: + +```typescript +export declare function isExpressionAstBuilder(val: any): val is ExpressionAstExpressionBuilder; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| val | any | | + +Returns: + +`val is ExpressionAstExpressionBuilder` + +## Example + +const arg = myFunction.getArgument('foo'); if (isExpressionAstBuilder(foo)) { foo.toAst(); } + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibana_context_name.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibana_context_name.md new file mode 100644 index 0000000000000..e568db84f383d --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibana_context_name.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [KIBANA\_CONTEXT\_NAME](./kibana-plugin-plugins-expressions-public.kibana_context_name.md) + +## KIBANA\_CONTEXT\_NAME type + +Signature: + +```typescript +export declare type KIBANA_CONTEXT_NAME = 'kibana_context'; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanacontext.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanacontext.md new file mode 100644 index 0000000000000..108533e8de357 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanacontext.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [KibanaContext](./kibana-plugin-plugins-expressions-public.kibanacontext.md) + +## KibanaContext type + +Signature: + +```typescript +export declare type KibanaContext = ExpressionValueSearchContext; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatable.columns.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatable.columns.md new file mode 100644 index 0000000000000..c8aa768a883d6 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatable.columns.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [KibanaDatatable](./kibana-plugin-plugins-expressions-public.kibanadatatable.md) > [columns](./kibana-plugin-plugins-expressions-public.kibanadatatable.columns.md) + +## KibanaDatatable.columns property + +Signature: + +```typescript +columns: KibanaDatatableColumn[]; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatable.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatable.md new file mode 100644 index 0000000000000..4ea1d6f42b66d --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatable.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [KibanaDatatable](./kibana-plugin-plugins-expressions-public.kibanadatatable.md) + +## KibanaDatatable interface + +Signature: + +```typescript +export interface KibanaDatatable +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [columns](./kibana-plugin-plugins-expressions-public.kibanadatatable.columns.md) | KibanaDatatableColumn[] | | +| [rows](./kibana-plugin-plugins-expressions-public.kibanadatatable.rows.md) | KibanaDatatableRow[] | | +| [type](./kibana-plugin-plugins-expressions-public.kibanadatatable.type.md) | typeof name | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatable.rows.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatable.rows.md new file mode 100644 index 0000000000000..43f3243dc4fa7 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatable.rows.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [KibanaDatatable](./kibana-plugin-plugins-expressions-public.kibanadatatable.md) > [rows](./kibana-plugin-plugins-expressions-public.kibanadatatable.rows.md) + +## KibanaDatatable.rows property + +Signature: + +```typescript +rows: KibanaDatatableRow[]; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatable.type.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatable.type.md new file mode 100644 index 0000000000000..996f59cbb77a1 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatable.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [KibanaDatatable](./kibana-plugin-plugins-expressions-public.kibanadatatable.md) > [type](./kibana-plugin-plugins-expressions-public.kibanadatatable.type.md) + +## KibanaDatatable.type property + +Signature: + +```typescript +type: typeof name; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.formathint.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.formathint.md new file mode 100644 index 0000000000000..b517c1610261b --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.formathint.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [KibanaDatatableColumn](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.md) > [formatHint](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.formathint.md) + +## KibanaDatatableColumn.formatHint property + +Signature: + +```typescript +formatHint?: SerializedFieldFormat; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.id.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.id.md new file mode 100644 index 0000000000000..e7d43190589a7 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.id.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [KibanaDatatableColumn](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.md) > [id](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.id.md) + +## KibanaDatatableColumn.id property + +Signature: + +```typescript +id: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.md new file mode 100644 index 0000000000000..138c19f0ec7bd --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [KibanaDatatableColumn](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.md) + +## KibanaDatatableColumn interface + +Signature: + +```typescript +export interface KibanaDatatableColumn +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [formatHint](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.formathint.md) | SerializedFieldFormat | | +| [id](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.id.md) | string | | +| [meta](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.meta.md) | KibanaDatatableColumnMeta | | +| [name](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.name.md) | string | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.meta.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.meta.md new file mode 100644 index 0000000000000..df2d09bf3cc55 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.meta.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [KibanaDatatableColumn](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.md) > [meta](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.meta.md) + +## KibanaDatatableColumn.meta property + +Signature: + +```typescript +meta?: KibanaDatatableColumnMeta; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.name.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.name.md new file mode 100644 index 0000000000000..841ad67f3f521 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.name.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [KibanaDatatableColumn](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.md) > [name](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.name.md) + +## KibanaDatatableColumn.name property + +Signature: + +```typescript +name: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.aggconfigparams.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.aggconfigparams.md new file mode 100644 index 0000000000000..2ec6edda4cbca --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.aggconfigparams.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [KibanaDatatableColumnMeta](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.md) > [aggConfigParams](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.aggconfigparams.md) + +## KibanaDatatableColumnMeta.aggConfigParams property + +Signature: + +```typescript +aggConfigParams?: Record; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.indexpatternid.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.indexpatternid.md new file mode 100644 index 0000000000000..2287c28398f7f --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.indexpatternid.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [KibanaDatatableColumnMeta](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.md) > [indexPatternId](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.indexpatternid.md) + +## KibanaDatatableColumnMeta.indexPatternId property + +Signature: + +```typescript +indexPatternId?: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.md new file mode 100644 index 0000000000000..b2f8c9d06a727 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [KibanaDatatableColumnMeta](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.md) + +## KibanaDatatableColumnMeta interface + +Signature: + +```typescript +export interface KibanaDatatableColumnMeta +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [aggConfigParams](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.aggconfigparams.md) | Record<string, any> | | +| [indexPatternId](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.indexpatternid.md) | string | | +| [type](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.type.md) | string | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.type.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.type.md new file mode 100644 index 0000000000000..98d4a0c2d43c3 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [KibanaDatatableColumnMeta](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.md) > [type](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.type.md) + +## KibanaDatatableColumnMeta.type property + +Signature: + +```typescript +type: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablerow.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablerow.md new file mode 100644 index 0000000000000..cb5f1ad70f628 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.kibanadatatablerow.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [KibanaDatatableRow](./kibana-plugin-plugins-expressions-public.kibanadatatablerow.md) + +## KibanaDatatableRow interface + +Signature: + +```typescript +export interface KibanaDatatableRow +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.knowntypetostring.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.knowntypetostring.md new file mode 100644 index 0000000000000..39c24760ca6ca --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.knowntypetostring.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [KnownTypeToString](./kibana-plugin-plugins-expressions-public.knowntypetostring.md) + +## KnownTypeToString type + +Map the type of the generic to a string-based representation of the type. + +If the provided generic is its own type interface, we use the value of the `type` key as a string literal type for it. + +Signature: + +```typescript +export declare type KnownTypeToString = T extends string ? 'string' : T extends boolean ? 'boolean' : T extends number ? 'number' : T extends null ? 'null' : T extends { + type: string; +} ? T['type'] : never; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.md new file mode 100644 index 0000000000000..ead6f14e0d1d7 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.md @@ -0,0 +1,134 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) + +## kibana-plugin-plugins-expressions-public package + +## Classes + +| Class | Description | +| --- | --- | +| [Execution](./kibana-plugin-plugins-expressions-public.execution.md) | | +| [ExecutionContract](./kibana-plugin-plugins-expressions-public.executioncontract.md) | ExecutionContract is a wrapper around Execution class. It provides the same functionality but does not expose Expressions plugin internals. | +| [Executor](./kibana-plugin-plugins-expressions-public.executor.md) | | +| [ExpressionFunction](./kibana-plugin-plugins-expressions-public.expressionfunction.md) | | +| [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-public.expressionfunctionparameter.md) | | +| [ExpressionRenderer](./kibana-plugin-plugins-expressions-public.expressionrenderer.md) | | +| [ExpressionRendererRegistry](./kibana-plugin-plugins-expressions-public.expressionrendererregistry.md) | | +| [ExpressionRenderHandler](./kibana-plugin-plugins-expressions-public.expressionrenderhandler.md) | | +| [ExpressionsPublicPlugin](./kibana-plugin-plugins-expressions-public.expressionspublicplugin.md) | | +| [ExpressionsService](./kibana-plugin-plugins-expressions-public.expressionsservice.md) | ExpressionsService class is used for multiple purposes:1. It implements the same Expressions service that can be used on both: (1) server-side and (2) browser-side. 2. It implements the same Expressions service that users can fork/clone, thus have their own instance of the Expressions plugin. 3. ExpressionsService defines the public contracts of \*setup\* and \*start\* Kibana Platform life-cycles for ease-of-use on server-side and browser-side. 4. ExpressionsService creates a bound version of all exported contract functions. 5. Functions are bound the way there are:\`\`\`ts registerFunction = (...args: Parameters<Executor\['registerFunction'\]> ): ReturnType<Executor\['registerFunction'\]> => this.executor.registerFunction(...args); \`\`\`so that JSDoc appears in developers IDE when they use those plugins.expressions.registerFunction(. | +| [ExpressionType](./kibana-plugin-plugins-expressions-public.expressiontype.md) | | +| [FunctionsRegistry](./kibana-plugin-plugins-expressions-public.functionsregistry.md) | | +| [TypesRegistry](./kibana-plugin-plugins-expressions-public.typesregistry.md) | | + +## Enumerations + +| Enumeration | Description | +| --- | --- | +| [FontStyle](./kibana-plugin-plugins-expressions-public.fontstyle.md) | Enum of supported CSS font-style properties. | +| [FontWeight](./kibana-plugin-plugins-expressions-public.fontweight.md) | Enum of supported CSS font-weight properties. | +| [Overflow](./kibana-plugin-plugins-expressions-public.overflow.md) | Enum of supported CSS overflow properties. | +| [TextAlignment](./kibana-plugin-plugins-expressions-public.textalignment.md) | Enum of supported CSS text-align properties. | +| [TextDecoration](./kibana-plugin-plugins-expressions-public.textdecoration.md) | Enum of supported CSS text-decoration properties. | + +## Functions + +| Function | Description | +| --- | --- | +| [buildExpression(initialState)](./kibana-plugin-plugins-expressions-public.buildexpression.md) | Makes it easy to progressively build, update, and traverse an expression AST. You can either start with an empty AST, or provide an expression string, AST, or array of expression function builders to use as initial state. | +| [buildExpressionFunction(fnName, initialArgs)](./kibana-plugin-plugins-expressions-public.buildexpressionfunction.md) | Manages an AST for a single expression function. The return value can be provided to buildExpression to add this function to an expression.Note that to preserve type safety and ensure no args are missing, all required arguments for the specified function must be provided up front. If desired, they can be changed or removed later. | +| [format(ast, type)](./kibana-plugin-plugins-expressions-public.format.md) | | +| [formatExpression(ast)](./kibana-plugin-plugins-expressions-public.formatexpression.md) | Given expression pipeline AST, returns formatted string. | +| [isExpressionAstBuilder(val)](./kibana-plugin-plugins-expressions-public.isexpressionastbuilder.md) | Type guard that checks whether a given value is an ExpressionAstExpressionBuilder. This is useful when working with subexpressions, where you might be retrieving a function argument, and need to know whether it is an expression builder instance which you can perform operations on. | +| [parse(expression, startRule)](./kibana-plugin-plugins-expressions-public.parse.md) | | +| [parseExpression(expression)](./kibana-plugin-plugins-expressions-public.parseexpression.md) | Given expression pipeline string, returns parsed AST. | +| [plugin(initializerContext)](./kibana-plugin-plugins-expressions-public.plugin.md) | | + +## Interfaces + +| Interface | Description | +| --- | --- | +| [Datatable](./kibana-plugin-plugins-expressions-public.datatable.md) | A Datatable in Canvas is a unique structure that represents tabulated data. | +| [DatatableColumn](./kibana-plugin-plugins-expressions-public.datatablecolumn.md) | This type represents the shape of a column in a Datatable. | +| [ExecutionContext](./kibana-plugin-plugins-expressions-public.executioncontext.md) | ExecutionContext is an object available to all functions during a single execution; it provides various methods to perform side-effects. | +| [ExecutionParams](./kibana-plugin-plugins-expressions-public.executionparams.md) | | +| [ExecutionState](./kibana-plugin-plugins-expressions-public.executionstate.md) | | +| [ExecutorState](./kibana-plugin-plugins-expressions-public.executorstate.md) | | +| [ExpressionAstExpression](./kibana-plugin-plugins-expressions-public.expressionastexpression.md) | | +| [ExpressionAstExpressionBuilder](./kibana-plugin-plugins-expressions-public.expressionastexpressionbuilder.md) | | +| [ExpressionAstFunction](./kibana-plugin-plugins-expressions-public.expressionastfunction.md) | | +| [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-public.expressionastfunctionbuilder.md) | | +| [ExpressionExecutor](./kibana-plugin-plugins-expressions-public.expressionexecutor.md) | | +| [ExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinition.md) | ExpressionFunctionDefinition is the interface plugins have to implement to register a function in expressions plugin. | +| [ExpressionFunctionDefinitions](./kibana-plugin-plugins-expressions-public.expressionfunctiondefinitions.md) | A mapping of ExpressionFunctionDefinitions for functions which the Expressions services provides out-of-the-box. Any new functions registered by the Expressions plugin should have their types added here. | +| [ExpressionImage](./kibana-plugin-plugins-expressions-public.expressionimage.md) | | +| [ExpressionRenderDefinition](./kibana-plugin-plugins-expressions-public.expressionrenderdefinition.md) | | +| [ExpressionRendererEvent](./kibana-plugin-plugins-expressions-public.expressionrendererevent.md) | | +| [ExpressionRenderError](./kibana-plugin-plugins-expressions-public.expressionrendererror.md) | | +| [ExpressionsServiceStart](./kibana-plugin-plugins-expressions-public.expressionsservicestart.md) | The public contract that ExpressionsService provides to other plugins in Kibana Platform in \*start\* life-cycle. | +| [ExpressionsStart](./kibana-plugin-plugins-expressions-public.expressionsstart.md) | Expressions public start contrect, extends | +| [ExpressionTypeDefinition](./kibana-plugin-plugins-expressions-public.expressiontypedefinition.md) | A generic type which represents a custom Expression Type Definition that's registered to the Interpreter. | +| [ExpressionTypeStyle](./kibana-plugin-plugins-expressions-public.expressiontypestyle.md) | An object that represents style information, typically CSS. | +| [Font](./kibana-plugin-plugins-expressions-public.font.md) | An interface representing a font in Canvas, with a textual label and the CSS font-value. | +| [IExpressionLoaderParams](./kibana-plugin-plugins-expressions-public.iexpressionloaderparams.md) | | +| [IInterpreterRenderHandlers](./kibana-plugin-plugins-expressions-public.iinterpreterrenderhandlers.md) | | +| [IRegistry](./kibana-plugin-plugins-expressions-public.iregistry.md) | | +| [KibanaDatatable](./kibana-plugin-plugins-expressions-public.kibanadatatable.md) | | +| [KibanaDatatableColumn](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumn.md) | | +| [KibanaDatatableColumnMeta](./kibana-plugin-plugins-expressions-public.kibanadatatablecolumnmeta.md) | | +| [KibanaDatatableRow](./kibana-plugin-plugins-expressions-public.kibanadatatablerow.md) | | +| [PointSeriesColumn](./kibana-plugin-plugins-expressions-public.pointseriescolumn.md) | Column in a PointSeries | +| [Range](./kibana-plugin-plugins-expressions-public.range.md) | | +| [ReactExpressionRendererProps](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.md) | | +| [SerializedDatatable](./kibana-plugin-plugins-expressions-public.serializeddatatable.md) | | +| [SerializedFieldFormat](./kibana-plugin-plugins-expressions-public.serializedfieldformat.md) | JSON representation of a field formatter configuration. Is used to carry information about how to format data in a data table as part of the column definition. | + +## Variables + +| Variable | Description | +| --- | --- | +| [ReactExpressionRenderer](./kibana-plugin-plugins-expressions-public.reactexpressionrenderer.md) | | + +## Type Aliases + +| Type Alias | Description | +| --- | --- | +| [AnyExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-public.anyexpressionfunctiondefinition.md) | Type to capture every possible expression function definition. | +| [AnyExpressionTypeDefinition](./kibana-plugin-plugins-expressions-public.anyexpressiontypedefinition.md) | | +| [ArgumentType](./kibana-plugin-plugins-expressions-public.argumenttype.md) | This type represents all of the possible combinations of properties of an Argument in an Expression Function. The presence or absence of certain fields influence the shape and presence of others within each arg in the specification. | +| [DatatableColumnType](./kibana-plugin-plugins-expressions-public.datatablecolumntype.md) | This type represents the type of any DatatableColumn in a Datatable. | +| [DatatableRow](./kibana-plugin-plugins-expressions-public.datatablerow.md) | This type represents a row in a Datatable. | +| [ExecutionContainer](./kibana-plugin-plugins-expressions-public.executioncontainer.md) | | +| [ExecutorContainer](./kibana-plugin-plugins-expressions-public.executorcontainer.md) | | +| [ExpressionAstArgument](./kibana-plugin-plugins-expressions-public.expressionastargument.md) | | +| [ExpressionAstNode](./kibana-plugin-plugins-expressions-public.expressionastnode.md) | | +| [ExpressionFunctionKibana](./kibana-plugin-plugins-expressions-public.expressionfunctionkibana.md) | | +| [ExpressionRendererComponent](./kibana-plugin-plugins-expressions-public.expressionrenderercomponent.md) | | +| [ExpressionsServiceSetup](./kibana-plugin-plugins-expressions-public.expressionsservicesetup.md) | The public contract that ExpressionsService provides to other plugins in Kibana Platform in \*setup\* life-cycle. | +| [ExpressionsSetup](./kibana-plugin-plugins-expressions-public.expressionssetup.md) | Expressions public setup contract, extends [ExpressionsServiceSetup](./kibana-plugin-plugins-expressions-public.expressionsservicesetup.md) | +| [ExpressionValue](./kibana-plugin-plugins-expressions-public.expressionvalue.md) | | +| [ExpressionValueBoxed](./kibana-plugin-plugins-expressions-public.expressionvalueboxed.md) | | +| [ExpressionValueConverter](./kibana-plugin-plugins-expressions-public.expressionvalueconverter.md) | | +| [ExpressionValueError](./kibana-plugin-plugins-expressions-public.expressionvalueerror.md) | | +| [ExpressionValueFilter](./kibana-plugin-plugins-expressions-public.expressionvaluefilter.md) | Represents an object that is a Filter. | +| [ExpressionValueNum](./kibana-plugin-plugins-expressions-public.expressionvaluenum.md) | | +| [ExpressionValueRender](./kibana-plugin-plugins-expressions-public.expressionvaluerender.md) | Represents an object that is intended to be rendered. | +| [ExpressionValueSearchContext](./kibana-plugin-plugins-expressions-public.expressionvaluesearchcontext.md) | | +| [ExpressionValueUnboxed](./kibana-plugin-plugins-expressions-public.expressionvalueunboxed.md) | | +| [FontLabel](./kibana-plugin-plugins-expressions-public.fontlabel.md) | This type contains a unions of all supported font labels, or the the name of the font the user would see in a UI. | +| [FontValue](./kibana-plugin-plugins-expressions-public.fontvalue.md) | This type contains a union of all supported font values, equivalent to the CSS font-value property. | +| [InterpreterErrorType](./kibana-plugin-plugins-expressions-public.interpretererrortype.md) | | +| [KIBANA\_CONTEXT\_NAME](./kibana-plugin-plugins-expressions-public.kibana_context_name.md) | | +| [KibanaContext](./kibana-plugin-plugins-expressions-public.kibanacontext.md) | | +| [KnownTypeToString](./kibana-plugin-plugins-expressions-public.knowntypetostring.md) | Map the type of the generic to a string-based representation of the type.If the provided generic is its own type interface, we use the value of the type key as a string literal type for it. | +| [PointSeries](./kibana-plugin-plugins-expressions-public.pointseries.md) | A PointSeries is a unique structure that represents dots on a chart. | +| [PointSeriesColumnName](./kibana-plugin-plugins-expressions-public.pointseriescolumnname.md) | Allowed column names in a PointSeries | +| [PointSeriesColumns](./kibana-plugin-plugins-expressions-public.pointseriescolumns.md) | Represents a collection of valid Columns in a PointSeries | +| [PointSeriesRow](./kibana-plugin-plugins-expressions-public.pointseriesrow.md) | | +| [ReactExpressionRendererType](./kibana-plugin-plugins-expressions-public.reactexpressionrenderertype.md) | | +| [Style](./kibana-plugin-plugins-expressions-public.style.md) | | +| [TypeString](./kibana-plugin-plugins-expressions-public.typestring.md) | If the type extends a Promise, we still need to return the string representation:someArgument: Promise<boolean | string> results in types: ['boolean', 'string'] | +| [TypeToString](./kibana-plugin-plugins-expressions-public.typetostring.md) | This can convert a type into a known Expression string representation of that type. For example, TypeToString<Datatable> will resolve to 'datatable'. This allows Expression Functions to continue to specify their type in a simple string format. | +| [UnmappedTypeStrings](./kibana-plugin-plugins-expressions-public.unmappedtypestrings.md) | Types used in Expressions that don't map to a primitive cleanly:date is typed as a number or string, and represents a date | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.overflow.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.overflow.md new file mode 100644 index 0000000000000..e33f1554a23d3 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.overflow.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Overflow](./kibana-plugin-plugins-expressions-public.overflow.md) + +## Overflow enum + +Enum of supported CSS `overflow` properties. + +Signature: + +```typescript +export declare enum Overflow +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| AUTO | "auto" | | +| HIDDEN | "hidden" | | +| SCROLL | "scroll" | | +| VISIBLE | "visible" | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.parse.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.parse.md new file mode 100644 index 0000000000000..0cbc2c15b6f54 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.parse.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [parse](./kibana-plugin-plugins-expressions-public.parse.md) + +## parse() function + +Signature: + +```typescript +export declare function parse(expression: E, startRule: S): S extends 'expression' ? ExpressionAstExpression : ExpressionAstArgument; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| expression | E | | +| startRule | S | | + +Returns: + +`S extends 'expression' ? ExpressionAstExpression : ExpressionAstArgument` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.parseexpression.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.parseexpression.md new file mode 100644 index 0000000000000..c4474b150dcc2 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.parseexpression.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [parseExpression](./kibana-plugin-plugins-expressions-public.parseexpression.md) + +## parseExpression() function + +Given expression pipeline string, returns parsed AST. + +Signature: + +```typescript +export declare function parseExpression(expression: string): ExpressionAstExpression; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| expression | string | | + +Returns: + +`ExpressionAstExpression` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.plugin.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.plugin.md new file mode 100644 index 0000000000000..ef707992a0a54 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.plugin.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [plugin](./kibana-plugin-plugins-expressions-public.plugin.md) + +## plugin() function + +Signature: + +```typescript +export declare function plugin(initializerContext: PluginInitializerContext): ExpressionsPublicPlugin; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| initializerContext | PluginInitializerContext | | + +Returns: + +`ExpressionsPublicPlugin` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseries.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseries.md new file mode 100644 index 0000000000000..14ba955ac2cc2 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseries.md @@ -0,0 +1,16 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [PointSeries](./kibana-plugin-plugins-expressions-public.pointseries.md) + +## PointSeries type + +A `PointSeries` is a unique structure that represents dots on a chart. + +Signature: + +```typescript +export declare type PointSeries = ExpressionValueBoxed<'pointseries', { + columns: PointSeriesColumns; + rows: PointSeriesRow[]; +}>; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriescolumn.expression.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriescolumn.expression.md new file mode 100644 index 0000000000000..5c034265f4f94 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriescolumn.expression.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [PointSeriesColumn](./kibana-plugin-plugins-expressions-public.pointseriescolumn.md) > [expression](./kibana-plugin-plugins-expressions-public.pointseriescolumn.expression.md) + +## PointSeriesColumn.expression property + +Signature: + +```typescript +expression: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriescolumn.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriescolumn.md new file mode 100644 index 0000000000000..09ce5444caabf --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriescolumn.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [PointSeriesColumn](./kibana-plugin-plugins-expressions-public.pointseriescolumn.md) + +## PointSeriesColumn interface + +Column in a PointSeries + +Signature: + +```typescript +export interface PointSeriesColumn +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [expression](./kibana-plugin-plugins-expressions-public.pointseriescolumn.expression.md) | string | | +| [role](./kibana-plugin-plugins-expressions-public.pointseriescolumn.role.md) | 'measure' | 'dimension' | | +| [type](./kibana-plugin-plugins-expressions-public.pointseriescolumn.type.md) | 'number' | 'string' | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriescolumn.role.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriescolumn.role.md new file mode 100644 index 0000000000000..715f66a43cd62 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriescolumn.role.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [PointSeriesColumn](./kibana-plugin-plugins-expressions-public.pointseriescolumn.md) > [role](./kibana-plugin-plugins-expressions-public.pointseriescolumn.role.md) + +## PointSeriesColumn.role property + +Signature: + +```typescript +role: 'measure' | 'dimension'; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriescolumn.type.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriescolumn.type.md new file mode 100644 index 0000000000000..36a8128967cdd --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriescolumn.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [PointSeriesColumn](./kibana-plugin-plugins-expressions-public.pointseriescolumn.md) > [type](./kibana-plugin-plugins-expressions-public.pointseriescolumn.type.md) + +## PointSeriesColumn.type property + +Signature: + +```typescript +type: 'number' | 'string'; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriescolumnname.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriescolumnname.md new file mode 100644 index 0000000000000..bc39c694307c0 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriescolumnname.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [PointSeriesColumnName](./kibana-plugin-plugins-expressions-public.pointseriescolumnname.md) + +## PointSeriesColumnName type + +Allowed column names in a PointSeries + +Signature: + +```typescript +export declare type PointSeriesColumnName = 'x' | 'y' | 'color' | 'size' | 'text'; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriescolumns.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriescolumns.md new file mode 100644 index 0000000000000..c920a254645bd --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriescolumns.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [PointSeriesColumns](./kibana-plugin-plugins-expressions-public.pointseriescolumns.md) + +## PointSeriesColumns type + +Represents a collection of valid Columns in a PointSeries + +Signature: + +```typescript +export declare type PointSeriesColumns = Record | {}; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriesrow.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriesrow.md new file mode 100644 index 0000000000000..6e3b29572b6f4 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.pointseriesrow.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [PointSeriesRow](./kibana-plugin-plugins-expressions-public.pointseriesrow.md) + +## PointSeriesRow type + +Signature: + +```typescript +export declare type PointSeriesRow = Record; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.range.from.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.range.from.md new file mode 100644 index 0000000000000..5113a798864e9 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.range.from.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Range](./kibana-plugin-plugins-expressions-public.range.md) > [from](./kibana-plugin-plugins-expressions-public.range.from.md) + +## Range.from property + +Signature: + +```typescript +from: number; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.range.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.range.md new file mode 100644 index 0000000000000..cf0cf4cb50b71 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.range.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Range](./kibana-plugin-plugins-expressions-public.range.md) + +## Range interface + +Signature: + +```typescript +export interface Range +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [from](./kibana-plugin-plugins-expressions-public.range.from.md) | number | | +| [to](./kibana-plugin-plugins-expressions-public.range.to.md) | number | | +| [type](./kibana-plugin-plugins-expressions-public.range.type.md) | typeof name | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.range.to.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.range.to.md new file mode 100644 index 0000000000000..bd79997e65fc7 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.range.to.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Range](./kibana-plugin-plugins-expressions-public.range.md) > [to](./kibana-plugin-plugins-expressions-public.range.to.md) + +## Range.to property + +Signature: + +```typescript +to: number; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.range.type.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.range.type.md new file mode 100644 index 0000000000000..4d5476516655d --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.range.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Range](./kibana-plugin-plugins-expressions-public.range.md) > [type](./kibana-plugin-plugins-expressions-public.range.type.md) + +## Range.type property + +Signature: + +```typescript +type: typeof name; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrenderer.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrenderer.md new file mode 100644 index 0000000000000..66c2e1e3c0c8d --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrenderer.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ReactExpressionRenderer](./kibana-plugin-plugins-expressions-public.reactexpressionrenderer.md) + +## ReactExpressionRenderer variable + +Signature: + +```typescript +ReactExpressionRenderer: ({ className, dataAttrs, padding, renderError, expression, onEvent, reload$, ...expressionLoaderOptions }: ReactExpressionRendererProps) => JSX.Element +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.classname.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.classname.md new file mode 100644 index 0000000000000..b5b1391ae72fd --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.classname.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ReactExpressionRendererProps](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.md) > [className](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.classname.md) + +## ReactExpressionRendererProps.className property + +Signature: + +```typescript +className?: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.dataattrs.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.dataattrs.md new file mode 100644 index 0000000000000..a0914ce37299f --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.dataattrs.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ReactExpressionRendererProps](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.md) > [dataAttrs](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.dataattrs.md) + +## ReactExpressionRendererProps.dataAttrs property + +Signature: + +```typescript +dataAttrs?: string[]; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.expression.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.expression.md new file mode 100644 index 0000000000000..21f4294db5aeb --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.expression.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ReactExpressionRendererProps](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.md) > [expression](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.expression.md) + +## ReactExpressionRendererProps.expression property + +Signature: + +```typescript +expression: string | ExpressionAstExpression; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.md new file mode 100644 index 0000000000000..bd6c8cba5f784 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ReactExpressionRendererProps](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.md) + +## ReactExpressionRendererProps interface + +Signature: + +```typescript +export interface ReactExpressionRendererProps extends IExpressionLoaderParams +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [className](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.classname.md) | string | | +| [dataAttrs](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.dataattrs.md) | string[] | | +| [expression](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.expression.md) | string | ExpressionAstExpression | | +| [onEvent](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.onevent.md) | (event: ExpressionRendererEvent) => void | | +| [padding](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.padding.md) | 'xs' | 's' | 'm' | 'l' | 'xl' | | +| [reload$](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.reload_.md) | Observable<unknown> | An observable which can be used to re-run the expression without destroying the component | +| [renderError](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.rendererror.md) | (error?: string | null) => React.ReactElement | React.ReactElement[] | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.onevent.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.onevent.md new file mode 100644 index 0000000000000..4fe1e158df1b8 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.onevent.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ReactExpressionRendererProps](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.md) > [onEvent](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.onevent.md) + +## ReactExpressionRendererProps.onEvent property + +Signature: + +```typescript +onEvent?: (event: ExpressionRendererEvent) => void; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.padding.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.padding.md new file mode 100644 index 0000000000000..47a23f5c1088b --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.padding.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ReactExpressionRendererProps](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.md) > [padding](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.padding.md) + +## ReactExpressionRendererProps.padding property + +Signature: + +```typescript +padding?: 'xs' | 's' | 'm' | 'l' | 'xl'; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.reload_.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.reload_.md new file mode 100644 index 0000000000000..a7991d559377d --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.reload_.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ReactExpressionRendererProps](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.md) > [reload$](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.reload_.md) + +## ReactExpressionRendererProps.reload$ property + +An observable which can be used to re-run the expression without destroying the component + +Signature: + +```typescript +reload$?: Observable; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.rendererror.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.rendererror.md new file mode 100644 index 0000000000000..48bfe1ee5c7c7 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.rendererror.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ReactExpressionRendererProps](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.md) > [renderError](./kibana-plugin-plugins-expressions-public.reactexpressionrendererprops.rendererror.md) + +## ReactExpressionRendererProps.renderError property + +Signature: + +```typescript +renderError?: (error?: string | null) => React.ReactElement | React.ReactElement[]; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrenderertype.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrenderertype.md new file mode 100644 index 0000000000000..4ca56d534b84a --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.reactexpressionrenderertype.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [ReactExpressionRendererType](./kibana-plugin-plugins-expressions-public.reactexpressionrenderertype.md) + +## ReactExpressionRendererType type + +Signature: + +```typescript +export declare type ReactExpressionRendererType = React.ComponentType; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.serializeddatatable.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.serializeddatatable.md new file mode 100644 index 0000000000000..632cd1de2a0c2 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.serializeddatatable.md @@ -0,0 +1,18 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [SerializedDatatable](./kibana-plugin-plugins-expressions-public.serializeddatatable.md) + +## SerializedDatatable interface + +Signature: + +```typescript +export interface SerializedDatatable extends Datatable +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [rows](./kibana-plugin-plugins-expressions-public.serializeddatatable.rows.md) | string[][] | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.serializeddatatable.rows.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.serializeddatatable.rows.md new file mode 100644 index 0000000000000..00d4323ae7025 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.serializeddatatable.rows.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [SerializedDatatable](./kibana-plugin-plugins-expressions-public.serializeddatatable.md) > [rows](./kibana-plugin-plugins-expressions-public.serializeddatatable.rows.md) + +## SerializedDatatable.rows property + +Signature: + +```typescript +rows: string[][]; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.serializedfieldformat.id.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.serializedfieldformat.id.md new file mode 100644 index 0000000000000..40a45d50e9b19 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.serializedfieldformat.id.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [SerializedFieldFormat](./kibana-plugin-plugins-expressions-public.serializedfieldformat.md) > [id](./kibana-plugin-plugins-expressions-public.serializedfieldformat.id.md) + +## SerializedFieldFormat.id property + +Signature: + +```typescript +id?: string; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.serializedfieldformat.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.serializedfieldformat.md new file mode 100644 index 0000000000000..74fa132ec1189 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.serializedfieldformat.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [SerializedFieldFormat](./kibana-plugin-plugins-expressions-public.serializedfieldformat.md) + +## SerializedFieldFormat interface + +JSON representation of a field formatter configuration. Is used to carry information about how to format data in a data table as part of the column definition. + +Signature: + +```typescript +export interface SerializedFieldFormat> +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [id](./kibana-plugin-plugins-expressions-public.serializedfieldformat.id.md) | string | | +| [params](./kibana-plugin-plugins-expressions-public.serializedfieldformat.params.md) | TParams | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.serializedfieldformat.params.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.serializedfieldformat.params.md new file mode 100644 index 0000000000000..32d7e54cbc884 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.serializedfieldformat.params.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [SerializedFieldFormat](./kibana-plugin-plugins-expressions-public.serializedfieldformat.md) > [params](./kibana-plugin-plugins-expressions-public.serializedfieldformat.params.md) + +## SerializedFieldFormat.params property + +Signature: + +```typescript +params?: TParams; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.style.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.style.md new file mode 100644 index 0000000000000..f42df4b8b314e --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.style.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [Style](./kibana-plugin-plugins-expressions-public.style.md) + +## Style type + +Signature: + +```typescript +export declare type Style = ExpressionTypeStyle; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.textalignment.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.textalignment.md new file mode 100644 index 0000000000000..351a7ba6e1f27 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.textalignment.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [TextAlignment](./kibana-plugin-plugins-expressions-public.textalignment.md) + +## TextAlignment enum + +Enum of supported CSS `text-align` properties. + +Signature: + +```typescript +export declare enum TextAlignment +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| CENTER | "center" | | +| JUSTIFY | "justify" | | +| LEFT | "left" | | +| RIGHT | "right" | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.textdecoration.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.textdecoration.md new file mode 100644 index 0000000000000..3cd8e89f4cd8c --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.textdecoration.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [TextDecoration](./kibana-plugin-plugins-expressions-public.textdecoration.md) + +## TextDecoration enum + +Enum of supported CSS `text-decoration` properties. + +Signature: + +```typescript +export declare enum TextDecoration +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| NONE | "none" | | +| UNDERLINE | "underline" | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typesregistry._constructor_.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typesregistry._constructor_.md new file mode 100644 index 0000000000000..856bf2bf05ad1 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typesregistry._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [TypesRegistry](./kibana-plugin-plugins-expressions-public.typesregistry.md) > [(constructor)](./kibana-plugin-plugins-expressions-public.typesregistry._constructor_.md) + +## TypesRegistry.(constructor) + +Constructs a new instance of the `TypesRegistry` class + +Signature: + +```typescript +constructor(executor: Executor); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| executor | Executor<any> | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typesregistry.get.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typesregistry.get.md new file mode 100644 index 0000000000000..f83e7435485c5 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typesregistry.get.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [TypesRegistry](./kibana-plugin-plugins-expressions-public.typesregistry.md) > [get](./kibana-plugin-plugins-expressions-public.typesregistry.get.md) + +## TypesRegistry.get() method + +Signature: + +```typescript +get(id: string): ExpressionType | null; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| id | string | | + +Returns: + +`ExpressionType | null` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typesregistry.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typesregistry.md new file mode 100644 index 0000000000000..f1f386ec4210f --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typesregistry.md @@ -0,0 +1,27 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [TypesRegistry](./kibana-plugin-plugins-expressions-public.typesregistry.md) + +## TypesRegistry class + +Signature: + +```typescript +export declare class TypesRegistry implements IRegistry +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(executor)](./kibana-plugin-plugins-expressions-public.typesregistry._constructor_.md) | | Constructs a new instance of the TypesRegistry class | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [get(id)](./kibana-plugin-plugins-expressions-public.typesregistry.get.md) | | | +| [register(typeDefinition)](./kibana-plugin-plugins-expressions-public.typesregistry.register.md) | | | +| [toArray()](./kibana-plugin-plugins-expressions-public.typesregistry.toarray.md) | | | +| [toJS()](./kibana-plugin-plugins-expressions-public.typesregistry.tojs.md) | | | + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typesregistry.register.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typesregistry.register.md new file mode 100644 index 0000000000000..b328f26aa50e2 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typesregistry.register.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [TypesRegistry](./kibana-plugin-plugins-expressions-public.typesregistry.md) > [register](./kibana-plugin-plugins-expressions-public.typesregistry.register.md) + +## TypesRegistry.register() method + +Signature: + +```typescript +register(typeDefinition: AnyExpressionTypeDefinition | (() => AnyExpressionTypeDefinition)): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| typeDefinition | AnyExpressionTypeDefinition | (() => AnyExpressionTypeDefinition) | | + +Returns: + +`void` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typesregistry.toarray.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typesregistry.toarray.md new file mode 100644 index 0000000000000..2e9c8799cbd61 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typesregistry.toarray.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [TypesRegistry](./kibana-plugin-plugins-expressions-public.typesregistry.md) > [toArray](./kibana-plugin-plugins-expressions-public.typesregistry.toarray.md) + +## TypesRegistry.toArray() method + +Signature: + +```typescript +toArray(): ExpressionType[]; +``` +Returns: + +`ExpressionType[]` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typesregistry.tojs.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typesregistry.tojs.md new file mode 100644 index 0000000000000..14a22a890f0d1 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typesregistry.tojs.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [TypesRegistry](./kibana-plugin-plugins-expressions-public.typesregistry.md) > [toJS](./kibana-plugin-plugins-expressions-public.typesregistry.tojs.md) + +## TypesRegistry.toJS() method + +Signature: + +```typescript +toJS(): Record; +``` +Returns: + +`Record` + diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typestring.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typestring.md new file mode 100644 index 0000000000000..1e85625907bb0 --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typestring.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [TypeString](./kibana-plugin-plugins-expressions-public.typestring.md) + +## TypeString type + +If the type extends a Promise, we still need to return the string representation: + +`someArgument: Promise` results in `types: ['boolean', 'string']` + +Signature: + +```typescript +export declare type TypeString = KnownTypeToString>; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typetostring.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typetostring.md new file mode 100644 index 0000000000000..78f350a0c06ec --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.typetostring.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [TypeToString](./kibana-plugin-plugins-expressions-public.typetostring.md) + +## TypeToString type + +This can convert a type into a known Expression string representation of that type. For example, `TypeToString` will resolve to `'datatable'`. This allows Expression Functions to continue to specify their type in a simple string format. + +Signature: + +```typescript +export declare type TypeToString = KnownTypeToString | UnmappedTypeStrings; +``` diff --git a/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.unmappedtypestrings.md b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.unmappedtypestrings.md new file mode 100644 index 0000000000000..6455d6520bcec --- /dev/null +++ b/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.unmappedtypestrings.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-public](./kibana-plugin-plugins-expressions-public.md) > [UnmappedTypeStrings](./kibana-plugin-plugins-expressions-public.unmappedtypestrings.md) + +## UnmappedTypeStrings type + +Types used in Expressions that don't map to a primitive cleanly: + +`date` is typed as a number or string, and represents a date + +Signature: + +```typescript +export declare type UnmappedTypeStrings = 'date' | 'filter'; +``` diff --git a/docs/development/plugins/expressions/server/index.md b/docs/development/plugins/expressions/server/index.md new file mode 100644 index 0000000000000..8c35c1631ba04 --- /dev/null +++ b/docs/development/plugins/expressions/server/index.md @@ -0,0 +1,12 @@ + + +[Home](./index.md) + +## API Reference + +## Packages + +| Package | Description | +| --- | --- | +| [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.anyexpressionfunctiondefinition.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.anyexpressionfunctiondefinition.md new file mode 100644 index 0000000000000..04e652a66aa5c --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.anyexpressionfunctiondefinition.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [AnyExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-server.anyexpressionfunctiondefinition.md) + +## AnyExpressionFunctionDefinition type + +Type to capture every possible expression function definition. + +Signature: + +```typescript +export declare type AnyExpressionFunctionDefinition = ExpressionFunctionDefinition, any>; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.anyexpressiontypedefinition.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.anyexpressiontypedefinition.md new file mode 100644 index 0000000000000..c28e1aa411a34 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.anyexpressiontypedefinition.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [AnyExpressionTypeDefinition](./kibana-plugin-plugins-expressions-server.anyexpressiontypedefinition.md) + +## AnyExpressionTypeDefinition type + +Signature: + +```typescript +export declare type AnyExpressionTypeDefinition = ExpressionTypeDefinition; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.argumenttype.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.argumenttype.md new file mode 100644 index 0000000000000..360b8999f2053 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.argumenttype.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ArgumentType](./kibana-plugin-plugins-expressions-server.argumenttype.md) + +## ArgumentType type + +This type represents all of the possible combinations of properties of an Argument in an Expression Function. The presence or absence of certain fields influence the shape and presence of others within each `arg` in the specification. + +Signature: + +```typescript +export declare type ArgumentType = SingleArgumentType | MultipleArgumentType | UnresolvedSingleArgumentType | UnresolvedMultipleArgumentType; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.buildexpression.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.buildexpression.md new file mode 100644 index 0000000000000..2e84c2b706bfc --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.buildexpression.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [buildExpression](./kibana-plugin-plugins-expressions-server.buildexpression.md) + +## buildExpression() function + +Makes it easy to progressively build, update, and traverse an expression AST. You can either start with an empty AST, or provide an expression string, AST, or array of expression function builders to use as initial state. + +Signature: + +```typescript +export declare function buildExpression(initialState?: ExpressionAstFunctionBuilder[] | ExpressionAstExpression | string): ExpressionAstExpressionBuilder; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| initialState | ExpressionAstFunctionBuilder[] | ExpressionAstExpression | string | | + +Returns: + +`ExpressionAstExpressionBuilder` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.buildexpressionfunction.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.buildexpressionfunction.md new file mode 100644 index 0000000000000..09afd3d59a070 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.buildexpressionfunction.md @@ -0,0 +1,30 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [buildExpressionFunction](./kibana-plugin-plugins-expressions-server.buildexpressionfunction.md) + +## buildExpressionFunction() function + +Manages an AST for a single expression function. The return value can be provided to `buildExpression` to add this function to an expression. + +Note that to preserve type safety and ensure no args are missing, all required arguments for the specified function must be provided up front. If desired, they can be changed or removed later. + +Signature: + +```typescript +export declare function buildExpressionFunction(fnName: InferFunctionDefinition['name'], +initialArgs: { + [K in keyof FunctionArgs]: FunctionArgs[K] | ExpressionAstExpressionBuilder | ExpressionAstExpressionBuilder[]; +}): ExpressionAstFunctionBuilder; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| fnName | InferFunctionDefinition<FnDef>['name'] | | +| initialArgs | {
[K in keyof FunctionArgs<FnDef>]: FunctionArgs<FnDef>[K] | ExpressionAstExpressionBuilder | ExpressionAstExpressionBuilder[];
} | | + +Returns: + +`ExpressionAstFunctionBuilder` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatable.columns.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatable.columns.md new file mode 100644 index 0000000000000..1bd089af13c6c --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatable.columns.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Datatable](./kibana-plugin-plugins-expressions-server.datatable.md) > [columns](./kibana-plugin-plugins-expressions-server.datatable.columns.md) + +## Datatable.columns property + +Signature: + +```typescript +columns: DatatableColumn[]; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatable.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatable.md new file mode 100644 index 0000000000000..7dc2ab2596e12 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatable.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Datatable](./kibana-plugin-plugins-expressions-server.datatable.md) + +## Datatable interface + +A `Datatable` in Canvas is a unique structure that represents tabulated data. + +Signature: + +```typescript +export interface Datatable +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [columns](./kibana-plugin-plugins-expressions-server.datatable.columns.md) | DatatableColumn[] | | +| [rows](./kibana-plugin-plugins-expressions-server.datatable.rows.md) | DatatableRow[] | | +| [type](./kibana-plugin-plugins-expressions-server.datatable.type.md) | typeof name | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatable.rows.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatable.rows.md new file mode 100644 index 0000000000000..75bd8e2f56bde --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatable.rows.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Datatable](./kibana-plugin-plugins-expressions-server.datatable.md) > [rows](./kibana-plugin-plugins-expressions-server.datatable.rows.md) + +## Datatable.rows property + +Signature: + +```typescript +rows: DatatableRow[]; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatable.type.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatable.type.md new file mode 100644 index 0000000000000..bcd250c5a9f9e --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatable.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Datatable](./kibana-plugin-plugins-expressions-server.datatable.md) > [type](./kibana-plugin-plugins-expressions-server.datatable.type.md) + +## Datatable.type property + +Signature: + +```typescript +type: typeof name; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatablecolumn.id.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatablecolumn.id.md new file mode 100644 index 0000000000000..1f246825fa30a --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatablecolumn.id.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [DatatableColumn](./kibana-plugin-plugins-expressions-server.datatablecolumn.md) > [id](./kibana-plugin-plugins-expressions-server.datatablecolumn.id.md) + +## DatatableColumn.id property + +Signature: + +```typescript +id: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatablecolumn.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatablecolumn.md new file mode 100644 index 0000000000000..662f65d6fad21 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatablecolumn.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [DatatableColumn](./kibana-plugin-plugins-expressions-server.datatablecolumn.md) + +## DatatableColumn interface + +This type represents the shape of a column in a `Datatable`. + +Signature: + +```typescript +export interface DatatableColumn +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [id](./kibana-plugin-plugins-expressions-server.datatablecolumn.id.md) | string | | +| [meta](./kibana-plugin-plugins-expressions-server.datatablecolumn.meta.md) | DatatableColumnMeta | | +| [name](./kibana-plugin-plugins-expressions-server.datatablecolumn.name.md) | string | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatablecolumn.meta.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatablecolumn.meta.md new file mode 100644 index 0000000000000..ef47c67a8d606 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatablecolumn.meta.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [DatatableColumn](./kibana-plugin-plugins-expressions-server.datatablecolumn.md) > [meta](./kibana-plugin-plugins-expressions-server.datatablecolumn.meta.md) + +## DatatableColumn.meta property + +Signature: + +```typescript +meta: DatatableColumnMeta; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatablecolumn.name.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatablecolumn.name.md new file mode 100644 index 0000000000000..112b4ac3b9941 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatablecolumn.name.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [DatatableColumn](./kibana-plugin-plugins-expressions-server.datatablecolumn.md) > [name](./kibana-plugin-plugins-expressions-server.datatablecolumn.name.md) + +## DatatableColumn.name property + +Signature: + +```typescript +name: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatablecolumntype.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatablecolumntype.md new file mode 100644 index 0000000000000..4afce913526de --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatablecolumntype.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [DatatableColumnType](./kibana-plugin-plugins-expressions-server.datatablecolumntype.md) + +## DatatableColumnType type + +This type represents the `type` of any `DatatableColumn` in a `Datatable`. + +Signature: + +```typescript +export declare type DatatableColumnType = 'string' | 'number' | 'boolean' | 'date' | 'null'; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatablerow.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatablerow.md new file mode 100644 index 0000000000000..56ef342b22a28 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.datatablerow.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [DatatableRow](./kibana-plugin-plugins-expressions-server.datatablerow.md) + +## DatatableRow type + +This type represents a row in a `Datatable`. + +Signature: + +```typescript +export declare type DatatableRow = Record; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution._constructor_.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution._constructor_.md new file mode 100644 index 0000000000000..75f4cc4c2a017 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Execution](./kibana-plugin-plugins-expressions-server.execution.md) > [(constructor)](./kibana-plugin-plugins-expressions-server.execution._constructor_.md) + +## Execution.(constructor) + +Constructs a new instance of the `Execution` class + +Signature: + +```typescript +constructor(params: ExecutionParams); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| params | ExecutionParams<ExtraContext> | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.cancel.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.cancel.md new file mode 100644 index 0000000000000..2ee091da80504 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.cancel.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Execution](./kibana-plugin-plugins-expressions-server.execution.md) > [cancel](./kibana-plugin-plugins-expressions-server.execution.cancel.md) + +## Execution.cancel() method + +Stop execution of expression. + +Signature: + +```typescript +cancel(): void; +``` +Returns: + +`void` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.cast.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.cast.md new file mode 100644 index 0000000000000..22b876332efb4 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.cast.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Execution](./kibana-plugin-plugins-expressions-server.execution.md) > [cast](./kibana-plugin-plugins-expressions-server.execution.cast.md) + +## Execution.cast() method + +Signature: + +```typescript +cast(value: any, toTypeNames?: string[]): any; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| value | any | | +| toTypeNames | string[] | | + +Returns: + +`any` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.context.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.context.md new file mode 100644 index 0000000000000..d1969fb0859b7 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.context.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Execution](./kibana-plugin-plugins-expressions-server.execution.md) > [context](./kibana-plugin-plugins-expressions-server.execution.context.md) + +## Execution.context property + +Execution context - object that allows to do side-effects. Context is passed to every function. + +Signature: + +```typescript +readonly context: ExecutionContext & ExtraContext; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.contract.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.contract.md new file mode 100644 index 0000000000000..149b5a7ced9cb --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.contract.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Execution](./kibana-plugin-plugins-expressions-server.execution.md) > [contract](./kibana-plugin-plugins-expressions-server.execution.contract.md) + +## Execution.contract property + +Contract is a public representation of `Execution` instances. Contract we can return to other plugins for their consumption. + +Signature: + +```typescript +readonly contract: ExecutionContract; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.expression.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.expression.md new file mode 100644 index 0000000000000..0487378ce1bba --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.expression.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Execution](./kibana-plugin-plugins-expressions-server.execution.md) > [expression](./kibana-plugin-plugins-expressions-server.execution.expression.md) + +## Execution.expression property + +Signature: + +```typescript +readonly expression: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.input.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.input.md new file mode 100644 index 0000000000000..ea411523a2b0b --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.input.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Execution](./kibana-plugin-plugins-expressions-server.execution.md) > [input](./kibana-plugin-plugins-expressions-server.execution.input.md) + +## Execution.input property + +Initial input of the execution. + +N.B. It is initialized to `null` rather than `undefined` for legacy reasons, because in legacy interpreter it was set to `null` by default. + +Signature: + +```typescript +input: Input; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.inspectoradapters.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.inspectoradapters.md new file mode 100644 index 0000000000000..99bcca267f8ed --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.inspectoradapters.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Execution](./kibana-plugin-plugins-expressions-server.execution.md) > [inspectorAdapters](./kibana-plugin-plugins-expressions-server.execution.inspectoradapters.md) + +## Execution.inspectorAdapters property + +Signature: + +```typescript +get inspectorAdapters(): InspectorAdapters; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.interpret.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.interpret.md new file mode 100644 index 0000000000000..cf59e796e6120 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.interpret.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Execution](./kibana-plugin-plugins-expressions-server.execution.md) > [interpret](./kibana-plugin-plugins-expressions-server.execution.interpret.md) + +## Execution.interpret() method + +Signature: + +```typescript +interpret(ast: ExpressionAstNode, input: T, options?: ExpressionExecOptions): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| ast | ExpressionAstNode | | +| input | T | | +| options | ExpressionExecOptions | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.invokechain.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.invokechain.md new file mode 100644 index 0000000000000..9ada611f32bf2 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.invokechain.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Execution](./kibana-plugin-plugins-expressions-server.execution.md) > [invokeChain](./kibana-plugin-plugins-expressions-server.execution.invokechain.md) + +## Execution.invokeChain() method + +Signature: + +```typescript +invokeChain(chainArr: ExpressionAstFunction[], input: unknown): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| chainArr | ExpressionAstFunction[] | | +| input | unknown | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.invokefunction.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.invokefunction.md new file mode 100644 index 0000000000000..4519d21ee250a --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.invokefunction.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Execution](./kibana-plugin-plugins-expressions-server.execution.md) > [invokeFunction](./kibana-plugin-plugins-expressions-server.execution.invokefunction.md) + +## Execution.invokeFunction() method + +Signature: + +```typescript +invokeFunction(fn: ExpressionFunction, input: unknown, args: Record): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| fn | ExpressionFunction | | +| input | unknown | | +| args | Record<string, unknown> | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.md new file mode 100644 index 0000000000000..fc663dd115580 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.md @@ -0,0 +1,43 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Execution](./kibana-plugin-plugins-expressions-server.execution.md) + +## Execution class + +Signature: + +```typescript +export declare class Execution = Record, Input = unknown, Output = unknown, InspectorAdapters extends Adapters = ExtraContext['inspectorAdapters'] extends object ? ExtraContext['inspectorAdapters'] : DefaultInspectorAdapters> +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(params)](./kibana-plugin-plugins-expressions-server.execution._constructor_.md) | | Constructs a new instance of the Execution class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [context](./kibana-plugin-plugins-expressions-server.execution.context.md) | | ExecutionContext<Input, InspectorAdapters> & ExtraContext | Execution context - object that allows to do side-effects. Context is passed to every function. | +| [contract](./kibana-plugin-plugins-expressions-server.execution.contract.md) | | ExecutionContract<ExtraContext, Input, Output, InspectorAdapters> | Contract is a public representation of Execution instances. Contract we can return to other plugins for their consumption. | +| [expression](./kibana-plugin-plugins-expressions-server.execution.expression.md) | | string | | +| [input](./kibana-plugin-plugins-expressions-server.execution.input.md) | | Input | Initial input of the execution.N.B. It is initialized to null rather than undefined for legacy reasons, because in legacy interpreter it was set to null by default. | +| [inspectorAdapters](./kibana-plugin-plugins-expressions-server.execution.inspectoradapters.md) | | InspectorAdapters | | +| [params](./kibana-plugin-plugins-expressions-server.execution.params.md) | | ExecutionParams<ExtraContext> | | +| [result](./kibana-plugin-plugins-expressions-server.execution.result.md) | | Promise<Output | ExpressionValueError> | | +| [state](./kibana-plugin-plugins-expressions-server.execution.state.md) | | ExecutionContainer<Output | ExpressionValueError> | Dynamic state of the execution. | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [cancel()](./kibana-plugin-plugins-expressions-server.execution.cancel.md) | | Stop execution of expression. | +| [cast(value, toTypeNames)](./kibana-plugin-plugins-expressions-server.execution.cast.md) | | | +| [interpret(ast, input, options)](./kibana-plugin-plugins-expressions-server.execution.interpret.md) | | | +| [invokeChain(chainArr, input)](./kibana-plugin-plugins-expressions-server.execution.invokechain.md) | | | +| [invokeFunction(fn, input, args)](./kibana-plugin-plugins-expressions-server.execution.invokefunction.md) | | | +| [resolveArgs(fnDef, input, argAsts)](./kibana-plugin-plugins-expressions-server.execution.resolveargs.md) | | | +| [start(input)](./kibana-plugin-plugins-expressions-server.execution.start.md) | | Call this method to start execution.N.B. input is initialized to null rather than undefined for legacy reasons, because in legacy interpreter it was set to null by default. | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.params.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.params.md new file mode 100644 index 0000000000000..498f9bbfccfa4 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.params.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Execution](./kibana-plugin-plugins-expressions-server.execution.md) > [params](./kibana-plugin-plugins-expressions-server.execution.params.md) + +## Execution.params property + +Signature: + +```typescript +readonly params: ExecutionParams; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.resolveargs.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.resolveargs.md new file mode 100644 index 0000000000000..48cc43b2d7767 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.resolveargs.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Execution](./kibana-plugin-plugins-expressions-server.execution.md) > [resolveArgs](./kibana-plugin-plugins-expressions-server.execution.resolveargs.md) + +## Execution.resolveArgs() method + +Signature: + +```typescript +resolveArgs(fnDef: ExpressionFunction, input: unknown, argAsts: any): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| fnDef | ExpressionFunction | | +| input | unknown | | +| argAsts | any | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.result.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.result.md new file mode 100644 index 0000000000000..be0134cd2542e --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.result.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Execution](./kibana-plugin-plugins-expressions-server.execution.md) > [result](./kibana-plugin-plugins-expressions-server.execution.result.md) + +## Execution.result property + +Signature: + +```typescript +get result(): Promise; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.start.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.start.md new file mode 100644 index 0000000000000..9a4e93fe6a9af --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.start.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Execution](./kibana-plugin-plugins-expressions-server.execution.md) > [start](./kibana-plugin-plugins-expressions-server.execution.start.md) + +## Execution.start() method + +Call this method to start execution. + +N.B. `input` is initialized to `null` rather than `undefined` for legacy reasons, because in legacy interpreter it was set to `null` by default. + +Signature: + +```typescript +start(input?: Input): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| input | Input | | + +Returns: + +`void` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.state.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.state.md new file mode 100644 index 0000000000000..41e7e693a1da4 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.execution.state.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Execution](./kibana-plugin-plugins-expressions-server.execution.md) > [state](./kibana-plugin-plugins-expressions-server.execution.state.md) + +## Execution.state property + +Dynamic state of the execution. + +Signature: + +```typescript +readonly state: ExecutionContainer; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontainer.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontainer.md new file mode 100644 index 0000000000000..5dc82fcbb9dd8 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontainer.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutionContainer](./kibana-plugin-plugins-expressions-server.executioncontainer.md) + +## ExecutionContainer type + +Signature: + +```typescript +export declare type ExecutionContainer = StateContainer, ExecutionPureTransitions>; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.abortsignal.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.abortsignal.md new file mode 100644 index 0000000000000..5c43623c8e603 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.abortsignal.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutionContext](./kibana-plugin-plugins-expressions-server.executioncontext.md) > [abortSignal](./kibana-plugin-plugins-expressions-server.executioncontext.abortsignal.md) + +## ExecutionContext.abortSignal property + +Adds ability to abort current execution. + +Signature: + +```typescript +abortSignal: AbortSignal; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.getinitialinput.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.getinitialinput.md new file mode 100644 index 0000000000000..b5f9b91e1c7b7 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.getinitialinput.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutionContext](./kibana-plugin-plugins-expressions-server.executioncontext.md) > [getInitialInput](./kibana-plugin-plugins-expressions-server.executioncontext.getinitialinput.md) + +## ExecutionContext.getInitialInput property + +Get initial input with which execution started. + +Signature: + +```typescript +getInitialInput: () => Input; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.getsavedobject.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.getsavedobject.md new file mode 100644 index 0000000000000..b8c8f4f3bb067 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.getsavedobject.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutionContext](./kibana-plugin-plugins-expressions-server.executioncontext.md) > [getSavedObject](./kibana-plugin-plugins-expressions-server.executioncontext.getsavedobject.md) + +## ExecutionContext.getSavedObject property + +Allows to fetch saved objects from ElasticSearch. In browser `getSavedObject` function is provided automatically by the Expressions plugin. On the server the caller of the expression has to provide this context function. The reason is because on the browser we always know the user who tries to fetch a saved object, thus saved object client is scoped automatically to that user. However, on the server we can scope that saved object client to any user, or even not scope it at all and execute it as an "internal" user. + +Signature: + +```typescript +getSavedObject?: (type: string, id: string) => Promise>; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.inspectoradapters.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.inspectoradapters.md new file mode 100644 index 0000000000000..b937432e4c180 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.inspectoradapters.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutionContext](./kibana-plugin-plugins-expressions-server.executioncontext.md) > [inspectorAdapters](./kibana-plugin-plugins-expressions-server.executioncontext.inspectoradapters.md) + +## ExecutionContext.inspectorAdapters property + +Adapters for `inspector` plugin. + +Signature: + +```typescript +inspectorAdapters: InspectorAdapters; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.md new file mode 100644 index 0000000000000..0128ba934da73 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutionContext](./kibana-plugin-plugins-expressions-server.executioncontext.md) + +## ExecutionContext interface + +`ExecutionContext` is an object available to all functions during a single execution; it provides various methods to perform side-effects. + +Signature: + +```typescript +export interface ExecutionContext +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [abortSignal](./kibana-plugin-plugins-expressions-server.executioncontext.abortsignal.md) | AbortSignal | Adds ability to abort current execution. | +| [getInitialInput](./kibana-plugin-plugins-expressions-server.executioncontext.getinitialinput.md) | () => Input | Get initial input with which execution started. | +| [getSavedObject](./kibana-plugin-plugins-expressions-server.executioncontext.getsavedobject.md) | <T extends SavedObjectAttributes = SavedObjectAttributes>(type: string, id: string) => Promise<SavedObject<T>> | Allows to fetch saved objects from ElasticSearch. In browser getSavedObject function is provided automatically by the Expressions plugin. On the server the caller of the expression has to provide this context function. The reason is because on the browser we always know the user who tries to fetch a saved object, thus saved object client is scoped automatically to that user. However, on the server we can scope that saved object client to any user, or even not scope it at all and execute it as an "internal" user. | +| [inspectorAdapters](./kibana-plugin-plugins-expressions-server.executioncontext.inspectoradapters.md) | InspectorAdapters | Adapters for inspector plugin. | +| [search](./kibana-plugin-plugins-expressions-server.executioncontext.search.md) | ExecutionContextSearch | Search context in which expression should operate. | +| [types](./kibana-plugin-plugins-expressions-server.executioncontext.types.md) | Record<string, ExpressionType> | A map of available expression types. | +| [variables](./kibana-plugin-plugins-expressions-server.executioncontext.variables.md) | Record<string, unknown> | Context variables that can be consumed using var and var_set functions. | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.search.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.search.md new file mode 100644 index 0000000000000..641e50696f6e0 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.search.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutionContext](./kibana-plugin-plugins-expressions-server.executioncontext.md) > [search](./kibana-plugin-plugins-expressions-server.executioncontext.search.md) + +## ExecutionContext.search property + +Search context in which expression should operate. + +Signature: + +```typescript +search?: ExecutionContextSearch; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.types.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.types.md new file mode 100644 index 0000000000000..9f594a588b200 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.types.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutionContext](./kibana-plugin-plugins-expressions-server.executioncontext.md) > [types](./kibana-plugin-plugins-expressions-server.executioncontext.types.md) + +## ExecutionContext.types property + +A map of available expression types. + +Signature: + +```typescript +types: Record; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.variables.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.variables.md new file mode 100644 index 0000000000000..bce3b7bb1bc4d --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executioncontext.variables.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutionContext](./kibana-plugin-plugins-expressions-server.executioncontext.md) > [variables](./kibana-plugin-plugins-expressions-server.executioncontext.variables.md) + +## ExecutionContext.variables property + +Context variables that can be consumed using `var` and `var_set` functions. + +Signature: + +```typescript +variables: Record; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionparams.ast.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionparams.ast.md new file mode 100644 index 0000000000000..adaccf091bc5e --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionparams.ast.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutionParams](./kibana-plugin-plugins-expressions-server.executionparams.md) > [ast](./kibana-plugin-plugins-expressions-server.executionparams.ast.md) + +## ExecutionParams.ast property + +Signature: + +```typescript +ast?: ExpressionAstExpression; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionparams.context.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionparams.context.md new file mode 100644 index 0000000000000..8b9a210416dd6 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionparams.context.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutionParams](./kibana-plugin-plugins-expressions-server.executionparams.md) > [context](./kibana-plugin-plugins-expressions-server.executionparams.context.md) + +## ExecutionParams.context property + +Signature: + +```typescript +context?: ExtraContext; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionparams.debug.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionparams.debug.md new file mode 100644 index 0000000000000..b3631e0aeebe6 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionparams.debug.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutionParams](./kibana-plugin-plugins-expressions-server.executionparams.md) > [debug](./kibana-plugin-plugins-expressions-server.executionparams.debug.md) + +## ExecutionParams.debug property + +Whether to execute expression in \*debug mode\*. In \*debug mode\* inputs and outputs as well as all resolved arguments and time it took to execute each function are saved and are available for introspection. + +Signature: + +```typescript +debug?: boolean; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionparams.executor.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionparams.executor.md new file mode 100644 index 0000000000000..fef0f6f8e2495 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionparams.executor.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutionParams](./kibana-plugin-plugins-expressions-server.executionparams.md) > [executor](./kibana-plugin-plugins-expressions-server.executionparams.executor.md) + +## ExecutionParams.executor property + +Signature: + +```typescript +executor: Executor; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionparams.expression.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionparams.expression.md new file mode 100644 index 0000000000000..7d75bd51a611b --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionparams.expression.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutionParams](./kibana-plugin-plugins-expressions-server.executionparams.md) > [expression](./kibana-plugin-plugins-expressions-server.executionparams.expression.md) + +## ExecutionParams.expression property + +Signature: + +```typescript +expression?: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionparams.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionparams.md new file mode 100644 index 0000000000000..a7594bff48c1a --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionparams.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutionParams](./kibana-plugin-plugins-expressions-server.executionparams.md) + +## ExecutionParams interface + +Signature: + +```typescript +export interface ExecutionParams = Record> +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [ast](./kibana-plugin-plugins-expressions-server.executionparams.ast.md) | ExpressionAstExpression | | +| [context](./kibana-plugin-plugins-expressions-server.executionparams.context.md) | ExtraContext | | +| [debug](./kibana-plugin-plugins-expressions-server.executionparams.debug.md) | boolean | Whether to execute expression in \*debug mode\*. In \*debug mode\* inputs and outputs as well as all resolved arguments and time it took to execute each function are saved and are available for introspection. | +| [executor](./kibana-plugin-plugins-expressions-server.executionparams.executor.md) | Executor<any> | | +| [expression](./kibana-plugin-plugins-expressions-server.executionparams.expression.md) | string | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionstate.ast.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionstate.ast.md new file mode 100644 index 0000000000000..0eab94589a75e --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionstate.ast.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutionState](./kibana-plugin-plugins-expressions-server.executionstate.md) > [ast](./kibana-plugin-plugins-expressions-server.executionstate.ast.md) + +## ExecutionState.ast property + +Signature: + +```typescript +ast: ExpressionAstExpression; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionstate.error.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionstate.error.md new file mode 100644 index 0000000000000..350d38697571a --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionstate.error.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutionState](./kibana-plugin-plugins-expressions-server.executionstate.md) > [error](./kibana-plugin-plugins-expressions-server.executionstate.error.md) + +## ExecutionState.error property + +Error happened during the execution. + +Signature: + +```typescript +error?: Error; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionstate.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionstate.md new file mode 100644 index 0000000000000..a3b28bda8c864 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionstate.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutionState](./kibana-plugin-plugins-expressions-server.executionstate.md) + +## ExecutionState interface + +Signature: + +```typescript +export interface ExecutionState extends ExecutorState +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [ast](./kibana-plugin-plugins-expressions-server.executionstate.ast.md) | ExpressionAstExpression | | +| [error](./kibana-plugin-plugins-expressions-server.executionstate.error.md) | Error | Error happened during the execution. | +| [result](./kibana-plugin-plugins-expressions-server.executionstate.result.md) | Output | Result of the expression execution. | +| [state](./kibana-plugin-plugins-expressions-server.executionstate.state.md) | 'not-started' | 'pending' | 'result' | 'error' | Tracks state of execution.- not-started - before .start() method was called. - pending - immediately after .start() method is called. - result - when expression execution completed. - error - when execution failed with error. | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionstate.result.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionstate.result.md new file mode 100644 index 0000000000000..b23ba17172a10 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionstate.result.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutionState](./kibana-plugin-plugins-expressions-server.executionstate.md) > [result](./kibana-plugin-plugins-expressions-server.executionstate.result.md) + +## ExecutionState.result property + +Result of the expression execution. + +Signature: + +```typescript +result?: Output; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionstate.state.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionstate.state.md new file mode 100644 index 0000000000000..6dcfca1a4fa0e --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executionstate.state.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutionState](./kibana-plugin-plugins-expressions-server.executionstate.md) > [state](./kibana-plugin-plugins-expressions-server.executionstate.state.md) + +## ExecutionState.state property + +Tracks state of execution. + +- `not-started` - before .start() method was called. - `pending` - immediately after .start() method is called. - `result` - when expression execution completed. - `error` - when execution failed with error. + +Signature: + +```typescript +state: 'not-started' | 'pending' | 'result' | 'error'; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor._constructor_.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor._constructor_.md new file mode 100644 index 0000000000000..f9b6759ef5529 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Executor](./kibana-plugin-plugins-expressions-server.executor.md) > [(constructor)](./kibana-plugin-plugins-expressions-server.executor._constructor_.md) + +## Executor.(constructor) + +Constructs a new instance of the `Executor` class + +Signature: + +```typescript +constructor(state?: ExecutorState); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| state | ExecutorState<Context> | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.context.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.context.md new file mode 100644 index 0000000000000..d53401c6d0419 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.context.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Executor](./kibana-plugin-plugins-expressions-server.executor.md) > [context](./kibana-plugin-plugins-expressions-server.executor.context.md) + +## Executor.context property + +Signature: + +```typescript +get context(): Record; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.createexecution.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.createexecution.md new file mode 100644 index 0000000000000..8ed228d70ff37 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.createexecution.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Executor](./kibana-plugin-plugins-expressions-server.executor.md) > [createExecution](./kibana-plugin-plugins-expressions-server.executor.createexecution.md) + +## Executor.createExecution() method + +Signature: + +```typescript +createExecution = Record, Input = unknown, Output = unknown>(ast: string | ExpressionAstExpression, context?: ExtraContext, { debug }?: ExpressionExecOptions): Execution; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| ast | string | ExpressionAstExpression | | +| context | ExtraContext | | +| { debug } | ExpressionExecOptions | | + +Returns: + +`Execution` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.createwithdefaults.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.createwithdefaults.md new file mode 100644 index 0000000000000..67863cc9e9ebe --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.createwithdefaults.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Executor](./kibana-plugin-plugins-expressions-server.executor.md) > [createWithDefaults](./kibana-plugin-plugins-expressions-server.executor.createwithdefaults.md) + +## Executor.createWithDefaults() method + +Signature: + +```typescript +static createWithDefaults = Record>(state?: ExecutorState): Executor; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| state | ExecutorState<Ctx> | | + +Returns: + +`Executor` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.extendcontext.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.extendcontext.md new file mode 100644 index 0000000000000..d78b4193b62fa --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.extendcontext.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Executor](./kibana-plugin-plugins-expressions-server.executor.md) > [extendContext](./kibana-plugin-plugins-expressions-server.executor.extendcontext.md) + +## Executor.extendContext() method + +Signature: + +```typescript +extendContext(extraContext: Record): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| extraContext | Record<string, unknown> | | + +Returns: + +`void` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.fork.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.fork.md new file mode 100644 index 0000000000000..8cfec983e6cbd --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.fork.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Executor](./kibana-plugin-plugins-expressions-server.executor.md) > [fork](./kibana-plugin-plugins-expressions-server.executor.fork.md) + +## Executor.fork() method + +Signature: + +```typescript +fork(): Executor; +``` +Returns: + +`Executor` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.functions.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.functions.md new file mode 100644 index 0000000000000..36cbe8608c872 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.functions.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Executor](./kibana-plugin-plugins-expressions-server.executor.md) > [functions](./kibana-plugin-plugins-expressions-server.executor.functions.md) + +## Executor.functions property + +> Warning: This API is now obsolete. +> +> + +Signature: + +```typescript +readonly functions: FunctionsRegistry; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.getfunction.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.getfunction.md new file mode 100644 index 0000000000000..0c3f307214d01 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.getfunction.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Executor](./kibana-plugin-plugins-expressions-server.executor.md) > [getFunction](./kibana-plugin-plugins-expressions-server.executor.getfunction.md) + +## Executor.getFunction() method + +Signature: + +```typescript +getFunction(name: string): ExpressionFunction | undefined; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| name | string | | + +Returns: + +`ExpressionFunction | undefined` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.getfunctions.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.getfunctions.md new file mode 100644 index 0000000000000..9f4132e30297d --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.getfunctions.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Executor](./kibana-plugin-plugins-expressions-server.executor.md) > [getFunctions](./kibana-plugin-plugins-expressions-server.executor.getfunctions.md) + +## Executor.getFunctions() method + +Signature: + +```typescript +getFunctions(): Record; +``` +Returns: + +`Record` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.gettype.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.gettype.md new file mode 100644 index 0000000000000..ccff4bc632284 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.gettype.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Executor](./kibana-plugin-plugins-expressions-server.executor.md) > [getType](./kibana-plugin-plugins-expressions-server.executor.gettype.md) + +## Executor.getType() method + +Signature: + +```typescript +getType(name: string): ExpressionType | undefined; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| name | string | | + +Returns: + +`ExpressionType | undefined` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.gettypes.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.gettypes.md new file mode 100644 index 0000000000000..8658f36867971 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.gettypes.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Executor](./kibana-plugin-plugins-expressions-server.executor.md) > [getTypes](./kibana-plugin-plugins-expressions-server.executor.gettypes.md) + +## Executor.getTypes() method + +Signature: + +```typescript +getTypes(): Record; +``` +Returns: + +`Record` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.md new file mode 100644 index 0000000000000..7e6bb8c7ded5e --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.md @@ -0,0 +1,43 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Executor](./kibana-plugin-plugins-expressions-server.executor.md) + +## Executor class + +Signature: + +```typescript +export declare class Executor = Record> +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(state)](./kibana-plugin-plugins-expressions-server.executor._constructor_.md) | | Constructs a new instance of the Executor class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [context](./kibana-plugin-plugins-expressions-server.executor.context.md) | | Record<string, unknown> | | +| [functions](./kibana-plugin-plugins-expressions-server.executor.functions.md) | | FunctionsRegistry | | +| [state](./kibana-plugin-plugins-expressions-server.executor.state.md) | | ExecutorContainer<Context> | | +| [types](./kibana-plugin-plugins-expressions-server.executor.types.md) | | TypesRegistry | | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [createExecution(ast, context, { debug })](./kibana-plugin-plugins-expressions-server.executor.createexecution.md) | | | +| [createWithDefaults(state)](./kibana-plugin-plugins-expressions-server.executor.createwithdefaults.md) | static | | +| [extendContext(extraContext)](./kibana-plugin-plugins-expressions-server.executor.extendcontext.md) | | | +| [fork()](./kibana-plugin-plugins-expressions-server.executor.fork.md) | | | +| [getFunction(name)](./kibana-plugin-plugins-expressions-server.executor.getfunction.md) | | | +| [getFunctions()](./kibana-plugin-plugins-expressions-server.executor.getfunctions.md) | | | +| [getType(name)](./kibana-plugin-plugins-expressions-server.executor.gettype.md) | | | +| [getTypes()](./kibana-plugin-plugins-expressions-server.executor.gettypes.md) | | | +| [registerFunction(functionDefinition)](./kibana-plugin-plugins-expressions-server.executor.registerfunction.md) | | | +| [registerType(typeDefinition)](./kibana-plugin-plugins-expressions-server.executor.registertype.md) | | | +| [run(ast, input, context)](./kibana-plugin-plugins-expressions-server.executor.run.md) | | Execute expression and return result. | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.registerfunction.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.registerfunction.md new file mode 100644 index 0000000000000..0cdd62735980c --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.registerfunction.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Executor](./kibana-plugin-plugins-expressions-server.executor.md) > [registerFunction](./kibana-plugin-plugins-expressions-server.executor.registerfunction.md) + +## Executor.registerFunction() method + +Signature: + +```typescript +registerFunction(functionDefinition: AnyExpressionFunctionDefinition | (() => AnyExpressionFunctionDefinition)): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| functionDefinition | AnyExpressionFunctionDefinition | (() => AnyExpressionFunctionDefinition) | | + +Returns: + +`void` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.registertype.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.registertype.md new file mode 100644 index 0000000000000..355ff92921f10 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.registertype.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Executor](./kibana-plugin-plugins-expressions-server.executor.md) > [registerType](./kibana-plugin-plugins-expressions-server.executor.registertype.md) + +## Executor.registerType() method + +Signature: + +```typescript +registerType(typeDefinition: AnyExpressionTypeDefinition | (() => AnyExpressionTypeDefinition)): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| typeDefinition | AnyExpressionTypeDefinition | (() => AnyExpressionTypeDefinition) | | + +Returns: + +`void` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.run.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.run.md new file mode 100644 index 0000000000000..784a1df5d3ac2 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.run.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Executor](./kibana-plugin-plugins-expressions-server.executor.md) > [run](./kibana-plugin-plugins-expressions-server.executor.run.md) + +## Executor.run() method + +Execute expression and return result. + +Signature: + +```typescript +run = Record>(ast: string | ExpressionAstExpression, input: Input, context?: ExtraContext): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| ast | string | ExpressionAstExpression | | +| input | Input | | +| context | ExtraContext | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.state.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.state.md new file mode 100644 index 0000000000000..2c3041484712a --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.state.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Executor](./kibana-plugin-plugins-expressions-server.executor.md) > [state](./kibana-plugin-plugins-expressions-server.executor.state.md) + +## Executor.state property + +Signature: + +```typescript +readonly state: ExecutorContainer; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.types.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.types.md new file mode 100644 index 0000000000000..2082917cf0624 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executor.types.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Executor](./kibana-plugin-plugins-expressions-server.executor.md) > [types](./kibana-plugin-plugins-expressions-server.executor.types.md) + +## Executor.types property + +> Warning: This API is now obsolete. +> +> + +Signature: + +```typescript +readonly types: TypesRegistry; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executorcontainer.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executorcontainer.md new file mode 100644 index 0000000000000..a3847c5ad9a77 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executorcontainer.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutorContainer](./kibana-plugin-plugins-expressions-server.executorcontainer.md) + +## ExecutorContainer type + +Signature: + +```typescript +export declare type ExecutorContainer = Record> = StateContainer, ExecutorPureTransitions, ExecutorPureSelectors>; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executorstate.context.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executorstate.context.md new file mode 100644 index 0000000000000..0829f2d6caf04 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executorstate.context.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutorState](./kibana-plugin-plugins-expressions-server.executorstate.md) > [context](./kibana-plugin-plugins-expressions-server.executorstate.context.md) + +## ExecutorState.context property + +Signature: + +```typescript +context: Context; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executorstate.functions.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executorstate.functions.md new file mode 100644 index 0000000000000..92a0865a7bb2f --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executorstate.functions.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutorState](./kibana-plugin-plugins-expressions-server.executorstate.md) > [functions](./kibana-plugin-plugins-expressions-server.executorstate.functions.md) + +## ExecutorState.functions property + +Signature: + +```typescript +functions: Record; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executorstate.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executorstate.md new file mode 100644 index 0000000000000..5faa326ee3534 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executorstate.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutorState](./kibana-plugin-plugins-expressions-server.executorstate.md) + +## ExecutorState interface + +Signature: + +```typescript +export interface ExecutorState = Record> +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [context](./kibana-plugin-plugins-expressions-server.executorstate.context.md) | Context | | +| [functions](./kibana-plugin-plugins-expressions-server.executorstate.functions.md) | Record<string, ExpressionFunction> | | +| [types](./kibana-plugin-plugins-expressions-server.executorstate.types.md) | Record<string, ExpressionType> | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executorstate.types.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executorstate.types.md new file mode 100644 index 0000000000000..a435fabfedf92 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.executorstate.types.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExecutorState](./kibana-plugin-plugins-expressions-server.executorstate.md) > [types](./kibana-plugin-plugins-expressions-server.executorstate.types.md) + +## ExecutorState.types property + +Signature: + +```typescript +types: Record; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastargument.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastargument.md new file mode 100644 index 0000000000000..0518949ad612f --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastargument.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstArgument](./kibana-plugin-plugins-expressions-server.expressionastargument.md) + +## ExpressionAstArgument type + +Signature: + +```typescript +export declare type ExpressionAstArgument = string | boolean | number | ExpressionAstExpression; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpression.chain.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpression.chain.md new file mode 100644 index 0000000000000..cc8006b918dec --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpression.chain.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstExpression](./kibana-plugin-plugins-expressions-server.expressionastexpression.md) > [chain](./kibana-plugin-plugins-expressions-server.expressionastexpression.chain.md) + +## ExpressionAstExpression.chain property + +Signature: + +```typescript +chain: ExpressionAstFunction[]; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpression.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpression.md new file mode 100644 index 0000000000000..b5f83d1af7cb7 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpression.md @@ -0,0 +1,19 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstExpression](./kibana-plugin-plugins-expressions-server.expressionastexpression.md) + +## ExpressionAstExpression interface + +Signature: + +```typescript +export interface ExpressionAstExpression +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [chain](./kibana-plugin-plugins-expressions-server.expressionastexpression.chain.md) | ExpressionAstFunction[] | | +| [type](./kibana-plugin-plugins-expressions-server.expressionastexpression.type.md) | 'expression' | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpression.type.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpression.type.md new file mode 100644 index 0000000000000..46cd60cecaa84 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpression.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstExpression](./kibana-plugin-plugins-expressions-server.expressionastexpression.md) > [type](./kibana-plugin-plugins-expressions-server.expressionastexpression.type.md) + +## ExpressionAstExpression.type property + +Signature: + +```typescript +type: 'expression'; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.findfunction.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.findfunction.md new file mode 100644 index 0000000000000..28cf8707c17d6 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.findfunction.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstExpressionBuilder](./kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.md) > [findFunction](./kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.findfunction.md) + +## ExpressionAstExpressionBuilder.findFunction property + +Recursively searches expression for all ocurrences of the function, including in subexpressions. + +Useful when performing migrations on a specific function, as you can iterate over the array of references and update all functions at once. + +Signature: + +```typescript +findFunction: (fnName: InferFunctionDefinition['name']) => Array> | []; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.functions.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.functions.md new file mode 100644 index 0000000000000..c3e1add70511b --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.functions.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstExpressionBuilder](./kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.md) > [functions](./kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.functions.md) + +## ExpressionAstExpressionBuilder.functions property + +Array of each of the `buildExpressionFunction()` instances in this expression. Use this to remove or reorder functions in the expression. + +Signature: + +```typescript +functions: ExpressionAstFunctionBuilder[]; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.md new file mode 100644 index 0000000000000..50a9c76daaa2b --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstExpressionBuilder](./kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.md) + +## ExpressionAstExpressionBuilder interface + +Signature: + +```typescript +export interface ExpressionAstExpressionBuilder +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [findFunction](./kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.findfunction.md) | <FnDef extends AnyExpressionFunctionDefinition = AnyExpressionFunctionDefinition>(fnName: InferFunctionDefinition<FnDef>['name']) => Array<ExpressionAstFunctionBuilder<FnDef>> | [] | Recursively searches expression for all ocurrences of the function, including in subexpressions.Useful when performing migrations on a specific function, as you can iterate over the array of references and update all functions at once. | +| [functions](./kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.functions.md) | ExpressionAstFunctionBuilder[] | Array of each of the buildExpressionFunction() instances in this expression. Use this to remove or reorder functions in the expression. | +| [toAst](./kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.toast.md) | () => ExpressionAstExpression | Converts expression to an AST. ExpressionAstExpression | +| [toString](./kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.tostring.md) | () => string | Converts expression to an expression string. string | +| [type](./kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.type.md) | 'expression_builder' | Used to identify expression builder objects. | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.toast.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.toast.md new file mode 100644 index 0000000000000..5c6189e6a46c4 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.toast.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstExpressionBuilder](./kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.md) > [toAst](./kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.toast.md) + +## ExpressionAstExpressionBuilder.toAst property + +Converts expression to an AST. + + `ExpressionAstExpression` + +Signature: + +```typescript +toAst: () => ExpressionAstExpression; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.tostring.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.tostring.md new file mode 100644 index 0000000000000..80aaeef1700c3 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.tostring.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstExpressionBuilder](./kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.md) > [toString](./kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.tostring.md) + +## ExpressionAstExpressionBuilder.toString property + +Converts expression to an expression string. + + `string` + +Signature: + +```typescript +toString: () => string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.type.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.type.md new file mode 100644 index 0000000000000..401b2e3725e84 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.type.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstExpressionBuilder](./kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.md) > [type](./kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.type.md) + +## ExpressionAstExpressionBuilder.type property + +Used to identify expression builder objects. + +Signature: + +```typescript +type: 'expression_builder'; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunction.arguments.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunction.arguments.md new file mode 100644 index 0000000000000..052cadffb9bdb --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunction.arguments.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstFunction](./kibana-plugin-plugins-expressions-server.expressionastfunction.md) > [arguments](./kibana-plugin-plugins-expressions-server.expressionastfunction.arguments.md) + +## ExpressionAstFunction.arguments property + +Signature: + +```typescript +arguments: Record; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunction.debug.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunction.debug.md new file mode 100644 index 0000000000000..b3227c2ac5822 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunction.debug.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstFunction](./kibana-plugin-plugins-expressions-server.expressionastfunction.md) > [debug](./kibana-plugin-plugins-expressions-server.expressionastfunction.debug.md) + +## ExpressionAstFunction.debug property + +Debug information added to each function when expression is executed in \*debug mode\*. + +Signature: + +```typescript +debug?: ExpressionAstFunctionDebug; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunction.function.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunction.function.md new file mode 100644 index 0000000000000..9964409f49119 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunction.function.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstFunction](./kibana-plugin-plugins-expressions-server.expressionastfunction.md) > [function](./kibana-plugin-plugins-expressions-server.expressionastfunction.function.md) + +## ExpressionAstFunction.function property + +Signature: + +```typescript +function: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunction.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunction.md new file mode 100644 index 0000000000000..1d49de44b571d --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunction.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstFunction](./kibana-plugin-plugins-expressions-server.expressionastfunction.md) + +## ExpressionAstFunction interface + +Signature: + +```typescript +export interface ExpressionAstFunction +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [arguments](./kibana-plugin-plugins-expressions-server.expressionastfunction.arguments.md) | Record<string, ExpressionAstArgument[]> | | +| [debug](./kibana-plugin-plugins-expressions-server.expressionastfunction.debug.md) | ExpressionAstFunctionDebug | Debug information added to each function when expression is executed in \*debug mode\*. | +| [function](./kibana-plugin-plugins-expressions-server.expressionastfunction.function.md) | string | | +| [type](./kibana-plugin-plugins-expressions-server.expressionastfunction.type.md) | 'function' | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunction.type.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunction.type.md new file mode 100644 index 0000000000000..3fd10524c1599 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunction.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstFunction](./kibana-plugin-plugins-expressions-server.expressionastfunction.md) > [type](./kibana-plugin-plugins-expressions-server.expressionastfunction.type.md) + +## ExpressionAstFunction.type property + +Signature: + +```typescript +type: 'function'; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.addargument.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.addargument.md new file mode 100644 index 0000000000000..29e3baec18a2e --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.addargument.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.md) > [addArgument](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.addargument.md) + +## ExpressionAstFunctionBuilder.addArgument property + +Adds an additional argument to the function. For multi-args, this should be called once for each new arg. Note that TS will not enforce whether multi-args are available, so only use this to update an existing arg if you are certain it is a multi-arg. + +Signature: + +```typescript +addArgument:
>(name: A, value: FunctionArgs[A] | ExpressionAstExpressionBuilder) => this; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.arguments.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.arguments.md new file mode 100644 index 0000000000000..4c0eee637b3e1 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.arguments.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.md) > [arguments](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.arguments.md) + +## ExpressionAstFunctionBuilder.arguments property + +Object of all args currently added to the function. This is structured similarly to `ExpressionAstFunction['arguments']`, however any subexpressions are returned as expression builder instances instead of expression ASTs. + +Signature: + +```typescript +arguments: FunctionBuilderArguments; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.getargument.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.getargument.md new file mode 100644 index 0000000000000..09b76ccbf23d9 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.getargument.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.md) > [getArgument](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.getargument.md) + +## ExpressionAstFunctionBuilder.getArgument property + +Retrieves an existing argument by name. Useful when you want to retrieve the current array of args and add something to it before calling `replaceArgument`. Any subexpression arguments will be returned as expression builder instances. + +Signature: + +```typescript +getArgument: >(name: A) => Array[A] | ExpressionAstExpressionBuilder> | undefined; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.md new file mode 100644 index 0000000000000..2a502d6f05e0b --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.md) + +## ExpressionAstFunctionBuilder interface + +Signature: + +```typescript +export interface ExpressionAstFunctionBuilder +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [addArgument](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.addargument.md) | <A extends FunctionArgName<FnDef>>(name: A, value: FunctionArgs<FnDef>[A] | ExpressionAstExpressionBuilder) => this | Adds an additional argument to the function. For multi-args, this should be called once for each new arg. Note that TS will not enforce whether multi-args are available, so only use this to update an existing arg if you are certain it is a multi-arg. | +| [arguments](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.arguments.md) | FunctionBuilderArguments<FnDef> | Object of all args currently added to the function. This is structured similarly to ExpressionAstFunction['arguments'], however any subexpressions are returned as expression builder instances instead of expression ASTs. | +| [getArgument](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.getargument.md) | <A extends FunctionArgName<FnDef>>(name: A) => Array<FunctionArgs<FnDef>[A] | ExpressionAstExpressionBuilder> | undefined | Retrieves an existing argument by name. Useful when you want to retrieve the current array of args and add something to it before calling replaceArgument. Any subexpression arguments will be returned as expression builder instances. | +| [name](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.name.md) | InferFunctionDefinition<FnDef>['name'] | Name of this expression function. | +| [removeArgument](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.removeargument.md) | <A extends OptionalKeys<FunctionArgs<FnDef>>>(name: A) => this | Removes an (optional) argument from the function.TypeScript will enforce that you only remove optional arguments. For manipulating required args, use replaceArgument. | +| [replaceArgument](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.replaceargument.md) | <A extends FunctionArgName<FnDef>>(name: A, value: Array<FunctionArgs<FnDef>[A] | ExpressionAstExpressionBuilder>) => this | Overwrites an existing argument with a new value. In order to support multi-args, the value given must always be an array. | +| [toAst](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.toast.md) | () => ExpressionAstFunction | Converts function to an AST. ExpressionAstFunction | +| [toString](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.tostring.md) | () => string | Converts function to an expression string. string | +| [type](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.type.md) | 'expression_function_builder' | Used to identify expression function builder objects. | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.name.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.name.md new file mode 100644 index 0000000000000..a2b6a4128549f --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.name.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.md) > [name](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.name.md) + +## ExpressionAstFunctionBuilder.name property + +Name of this expression function. + +Signature: + +```typescript +name: InferFunctionDefinition['name']; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.removeargument.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.removeargument.md new file mode 100644 index 0000000000000..b5fd0cc7e3727 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.removeargument.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.md) > [removeArgument](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.removeargument.md) + +## ExpressionAstFunctionBuilder.removeArgument property + +Removes an (optional) argument from the function. + +TypeScript will enforce that you only remove optional arguments. For manipulating required args, use `replaceArgument`. + +Signature: + +```typescript +removeArgument: >>(name: A) => this; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.replaceargument.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.replaceargument.md new file mode 100644 index 0000000000000..943d8ea235763 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.replaceargument.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.md) > [replaceArgument](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.replaceargument.md) + +## ExpressionAstFunctionBuilder.replaceArgument property + +Overwrites an existing argument with a new value. In order to support multi-args, the value given must always be an array. + +Signature: + +```typescript +replaceArgument: >(name: A, value: Array[A] | ExpressionAstExpressionBuilder>) => this; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.toast.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.toast.md new file mode 100644 index 0000000000000..a8e9205610501 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.toast.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.md) > [toAst](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.toast.md) + +## ExpressionAstFunctionBuilder.toAst property + +Converts function to an AST. + + `ExpressionAstFunction` + +Signature: + +```typescript +toAst: () => ExpressionAstFunction; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.tostring.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.tostring.md new file mode 100644 index 0000000000000..af307cbc84c9f --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.tostring.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.md) > [toString](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.tostring.md) + +## ExpressionAstFunctionBuilder.toString property + +Converts function to an expression string. + + `string` + +Signature: + +```typescript +toString: () => string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.type.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.type.md new file mode 100644 index 0000000000000..ed1db54c6eeaa --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.type.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.md) > [type](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.type.md) + +## ExpressionAstFunctionBuilder.type property + +Used to identify expression function builder objects. + +Signature: + +```typescript +type: 'expression_function_builder'; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastnode.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastnode.md new file mode 100644 index 0000000000000..d04c5556ff0ff --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionastnode.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionAstNode](./kibana-plugin-plugins-expressions-server.expressionastnode.md) + +## ExpressionAstNode type + +Signature: + +```typescript +export declare type ExpressionAstNode = ExpressionAstExpression | ExpressionAstFunction | ExpressionAstArgument; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction._constructor_.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction._constructor_.md new file mode 100644 index 0000000000000..96ed22f3277b4 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunction](./kibana-plugin-plugins-expressions-server.expressionfunction.md) > [(constructor)](./kibana-plugin-plugins-expressions-server.expressionfunction._constructor_.md) + +## ExpressionFunction.(constructor) + +Constructs a new instance of the `ExpressionFunction` class + +Signature: + +```typescript +constructor(functionDefinition: AnyExpressionFunctionDefinition); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| functionDefinition | AnyExpressionFunctionDefinition | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.accepts.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.accepts.md new file mode 100644 index 0000000000000..25008a56e0465 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.accepts.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunction](./kibana-plugin-plugins-expressions-server.expressionfunction.md) > [accepts](./kibana-plugin-plugins-expressions-server.expressionfunction.accepts.md) + +## ExpressionFunction.accepts property + +Signature: + +```typescript +accepts: (type: string) => boolean; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.aliases.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.aliases.md new file mode 100644 index 0000000000000..6e11246275d04 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.aliases.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunction](./kibana-plugin-plugins-expressions-server.expressionfunction.md) > [aliases](./kibana-plugin-plugins-expressions-server.expressionfunction.aliases.md) + +## ExpressionFunction.aliases property + +Aliases that can be used instead of `name`. + +Signature: + +```typescript +aliases: string[]; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.args.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.args.md new file mode 100644 index 0000000000000..ffa8cd0d11f7a --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.args.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunction](./kibana-plugin-plugins-expressions-server.expressionfunction.md) > [args](./kibana-plugin-plugins-expressions-server.expressionfunction.args.md) + +## ExpressionFunction.args property + +Specification of expression function parameters. + +Signature: + +```typescript +args: Record; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.fn.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.fn.md new file mode 100644 index 0000000000000..12056cac12cce --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.fn.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunction](./kibana-plugin-plugins-expressions-server.expressionfunction.md) > [fn](./kibana-plugin-plugins-expressions-server.expressionfunction.fn.md) + +## ExpressionFunction.fn property + +Function to run function (context, args) + +Signature: + +```typescript +fn: (input: ExpressionValue, params: Record, handlers: object) => ExpressionValue; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.help.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.help.md new file mode 100644 index 0000000000000..0a20a1ec60860 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.help.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunction](./kibana-plugin-plugins-expressions-server.expressionfunction.md) > [help](./kibana-plugin-plugins-expressions-server.expressionfunction.help.md) + +## ExpressionFunction.help property + +A short help text. + +Signature: + +```typescript +help: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.inputtypes.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.inputtypes.md new file mode 100644 index 0000000000000..1fa11bbb77416 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.inputtypes.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunction](./kibana-plugin-plugins-expressions-server.expressionfunction.md) > [inputTypes](./kibana-plugin-plugins-expressions-server.expressionfunction.inputtypes.md) + +## ExpressionFunction.inputTypes property + +Type of inputs that this function supports. + +Signature: + +```typescript +inputTypes: string[] | undefined; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.md new file mode 100644 index 0000000000000..aac3878b8c859 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.md @@ -0,0 +1,31 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunction](./kibana-plugin-plugins-expressions-server.expressionfunction.md) + +## ExpressionFunction class + +Signature: + +```typescript +export declare class ExpressionFunction +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(functionDefinition)](./kibana-plugin-plugins-expressions-server.expressionfunction._constructor_.md) | | Constructs a new instance of the ExpressionFunction class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [accepts](./kibana-plugin-plugins-expressions-server.expressionfunction.accepts.md) | | (type: string) => boolean | | +| [aliases](./kibana-plugin-plugins-expressions-server.expressionfunction.aliases.md) | | string[] | Aliases that can be used instead of name. | +| [args](./kibana-plugin-plugins-expressions-server.expressionfunction.args.md) | | Record<string, ExpressionFunctionParameter> | Specification of expression function parameters. | +| [fn](./kibana-plugin-plugins-expressions-server.expressionfunction.fn.md) | | (input: ExpressionValue, params: Record<string, any>, handlers: object) => ExpressionValue | Function to run function (context, args) | +| [help](./kibana-plugin-plugins-expressions-server.expressionfunction.help.md) | | string | A short help text. | +| [inputTypes](./kibana-plugin-plugins-expressions-server.expressionfunction.inputtypes.md) | | string[] | undefined | Type of inputs that this function supports. | +| [name](./kibana-plugin-plugins-expressions-server.expressionfunction.name.md) | | string | Name of function | +| [type](./kibana-plugin-plugins-expressions-server.expressionfunction.type.md) | | string | Return type of function. This SHOULD be supplied. We use it for UI and autocomplete hinting. We may also use it for optimizations in the future. | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.name.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.name.md new file mode 100644 index 0000000000000..46115c10c79ad --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.name.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunction](./kibana-plugin-plugins-expressions-server.expressionfunction.md) > [name](./kibana-plugin-plugins-expressions-server.expressionfunction.name.md) + +## ExpressionFunction.name property + +Name of function + +Signature: + +```typescript +name: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.type.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.type.md new file mode 100644 index 0000000000000..82bfff184b7cf --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunction.type.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunction](./kibana-plugin-plugins-expressions-server.expressionfunction.md) > [type](./kibana-plugin-plugins-expressions-server.expressionfunction.type.md) + +## ExpressionFunction.type property + +Return type of function. This SHOULD be supplied. We use it for UI and autocomplete hinting. We may also use it for optimizations in the future. + +Signature: + +```typescript +type: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.aliases.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.aliases.md new file mode 100644 index 0000000000000..3f5a608cc9bd2 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.aliases.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.md) > [aliases](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.aliases.md) + +## ExpressionFunctionDefinition.aliases property + + What is this? + +Signature: + +```typescript +aliases?: string[]; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.args.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.args.md new file mode 100644 index 0000000000000..4ceb1d92bf8eb --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.args.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.md) > [args](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.args.md) + +## ExpressionFunctionDefinition.args property + +Specification of arguments that function supports. This list will also be used for autocomplete functionality when your function is being edited. + +Signature: + +```typescript +args: { + [key in keyof Arguments]: ArgumentType; + }; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.context.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.context.md new file mode 100644 index 0000000000000..54d5c7c8a688d --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.context.md @@ -0,0 +1,18 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.md) > [context](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.context.md) + +## ExpressionFunctionDefinition.context property + +> Warning: This API is now obsolete. +> +> Use `inputTypes` instead. +> + +Signature: + +```typescript +context?: { + types: AnyExpressionFunctionDefinition['inputTypes']; + }; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.fn.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.fn.md new file mode 100644 index 0000000000000..41f85be7141be --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.fn.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.md) > [fn](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.fn.md) + +## ExpressionFunctionDefinition.fn() method + +The actual implementation of the function. + +Signature: + +```typescript +fn(input: Input, args: Arguments, context: Context): Output; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| input | Input | | +| args | Arguments | | +| context | Context | | + +Returns: + +`Output` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.help.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.help.md new file mode 100644 index 0000000000000..594cb768f3caa --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.help.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.md) > [help](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.help.md) + +## ExpressionFunctionDefinition.help property + +Help text displayed in the Expression editor. This text should be internationalized. + +Signature: + +```typescript +help: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.inputtypes.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.inputtypes.md new file mode 100644 index 0000000000000..b47dc915cc72e --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.inputtypes.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.md) > [inputTypes](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.inputtypes.md) + +## ExpressionFunctionDefinition.inputTypes property + +List of allowed type names for input value of this function. If this property is set the input of function will be cast to the first possible type in this list. If this property is missing the input will be provided to the function as-is. + +Signature: + +```typescript +inputTypes?: Array>; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.md new file mode 100644 index 0000000000000..6463c6ac537b9 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.md @@ -0,0 +1,32 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.md) + +## ExpressionFunctionDefinition interface + +`ExpressionFunctionDefinition` is the interface plugins have to implement to register a function in `expressions` plugin. + +Signature: + +```typescript +export interface ExpressionFunctionDefinition, Output, Context extends ExecutionContext = ExecutionContext> +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [aliases](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.aliases.md) | string[] | What is this? | +| [args](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.args.md) | {
[key in keyof Arguments]: ArgumentType<Arguments[key]>;
} | Specification of arguments that function supports. This list will also be used for autocomplete functionality when your function is being edited. | +| [context](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.context.md) | {
types: AnyExpressionFunctionDefinition['inputTypes'];
} | | +| [help](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.help.md) | string | Help text displayed in the Expression editor. This text should be internationalized. | +| [inputTypes](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.inputtypes.md) | Array<TypeToString<Input>> | List of allowed type names for input value of this function. If this property is set the input of function will be cast to the first possible type in this list. If this property is missing the input will be provided to the function as-is. | +| [name](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.name.md) | Name | The name of the function, as will be used in expression. | +| [type](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.type.md) | TypeToString<UnwrapPromiseOrReturn<Output>> | Name of type of value this function outputs. | + +## Methods + +| Method | Description | +| --- | --- | +| [fn(input, args, context)](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.fn.md) | The actual implementation of the function. | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.name.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.name.md new file mode 100644 index 0000000000000..177b44aab4ce8 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.name.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.md) > [name](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.name.md) + +## ExpressionFunctionDefinition.name property + +The name of the function, as will be used in expression. + +Signature: + +```typescript +name: Name; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.type.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.type.md new file mode 100644 index 0000000000000..a73ded342f053 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.type.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.md) > [type](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.type.md) + +## ExpressionFunctionDefinition.type property + +Name of type of value this function outputs. + +Signature: + +```typescript +type?: TypeToString>; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.clog.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.clog.md new file mode 100644 index 0000000000000..0c01e93152c75 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.clog.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionDefinitions](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.md) > [clog](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.clog.md) + +## ExpressionFunctionDefinitions.clog property + +Signature: + +```typescript +clog: ExpressionFunctionClog; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.font.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.font.md new file mode 100644 index 0000000000000..842e3e069d91e --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.font.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionDefinitions](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.md) > [font](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.font.md) + +## ExpressionFunctionDefinitions.font property + +Signature: + +```typescript +font: ExpressionFunctionFont; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.kibana.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.kibana.md new file mode 100644 index 0000000000000..8e6d189f8f450 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.kibana.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionDefinitions](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.md) > [kibana](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.kibana.md) + +## ExpressionFunctionDefinitions.kibana property + +Signature: + +```typescript +kibana: ExpressionFunctionKibana; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.kibana_context.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.kibana_context.md new file mode 100644 index 0000000000000..f9e248ad6d913 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.kibana_context.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionDefinitions](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.md) > [kibana\_context](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.kibana_context.md) + +## ExpressionFunctionDefinitions.kibana\_context property + +Signature: + +```typescript +kibana_context: ExpressionFunctionKibanaContext; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.md new file mode 100644 index 0000000000000..71cd0b98a68c2 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionDefinitions](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.md) + +## ExpressionFunctionDefinitions interface + +A mapping of `ExpressionFunctionDefinition`s for functions which the Expressions services provides out-of-the-box. Any new functions registered by the Expressions plugin should have their types added here. + +Signature: + +```typescript +export interface ExpressionFunctionDefinitions +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [clog](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.clog.md) | ExpressionFunctionClog | | +| [font](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.font.md) | ExpressionFunctionFont | | +| [kibana\_context](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.kibana_context.md) | ExpressionFunctionKibanaContext | | +| [kibana](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.kibana.md) | ExpressionFunctionKibana | | +| [theme](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.theme.md) | ExpressionFunctionTheme | | +| [var\_set](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.var_set.md) | ExpressionFunctionVarSet | | +| [var](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.var.md) | ExpressionFunctionVar | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.theme.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.theme.md new file mode 100644 index 0000000000000..98291fe35c1aa --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.theme.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionDefinitions](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.md) > [theme](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.theme.md) + +## ExpressionFunctionDefinitions.theme property + +Signature: + +```typescript +theme: ExpressionFunctionTheme; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.var.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.var.md new file mode 100644 index 0000000000000..55d576193ba9c --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.var.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionDefinitions](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.md) > [var](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.var.md) + +## ExpressionFunctionDefinitions.var property + +Signature: + +```typescript +var: ExpressionFunctionVar; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.var_set.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.var_set.md new file mode 100644 index 0000000000000..3163cf1accab1 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.var_set.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionDefinitions](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.md) > [var\_set](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.var_set.md) + +## ExpressionFunctionDefinitions.var\_set property + +Signature: + +```typescript +var_set: ExpressionFunctionVarSet; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionkibana.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionkibana.md new file mode 100644 index 0000000000000..aac2ae1c3ca4e --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionkibana.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionKibana](./kibana-plugin-plugins-expressions-server.expressionfunctionkibana.md) + +## ExpressionFunctionKibana type + +Signature: + +```typescript +export declare type ExpressionFunctionKibana = ExpressionFunctionDefinition<'kibana', ExpressionValueSearchContext | null, object, ExpressionValueSearchContext>; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter._constructor_.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter._constructor_.md new file mode 100644 index 0000000000000..a9ad2069cfe15 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter._constructor_.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.md) > [(constructor)](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter._constructor_.md) + +## ExpressionFunctionParameter.(constructor) + +Constructs a new instance of the `ExpressionFunctionParameter` class + +Signature: + +```typescript +constructor(name: string, arg: ArgumentType); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| name | string | | +| arg | ArgumentType<any> | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.accepts.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.accepts.md new file mode 100644 index 0000000000000..083bbdf1da4e7 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.accepts.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.md) > [accepts](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.accepts.md) + +## ExpressionFunctionParameter.accepts() method + +Signature: + +```typescript +accepts(type: string): boolean; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| type | string | | + +Returns: + +`boolean` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.aliases.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.aliases.md new file mode 100644 index 0000000000000..c7d27a48bdad5 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.aliases.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.md) > [aliases](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.aliases.md) + +## ExpressionFunctionParameter.aliases property + +Signature: + +```typescript +aliases: string[]; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.default.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.default.md new file mode 100644 index 0000000000000..d4105febffe86 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.default.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.md) > [default](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.default.md) + +## ExpressionFunctionParameter.default property + +Signature: + +```typescript +default: any; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.help.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.help.md new file mode 100644 index 0000000000000..b21626df64121 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.help.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.md) > [help](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.help.md) + +## ExpressionFunctionParameter.help property + +Signature: + +```typescript +help: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.md new file mode 100644 index 0000000000000..e9e35183e4e76 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.md @@ -0,0 +1,38 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.md) + +## ExpressionFunctionParameter class + +Signature: + +```typescript +export declare class ExpressionFunctionParameter +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(name, arg)](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter._constructor_.md) | | Constructs a new instance of the ExpressionFunctionParameter class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [aliases](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.aliases.md) | | string[] | | +| [default](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.default.md) | | any | | +| [help](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.help.md) | | string | | +| [multi](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.multi.md) | | boolean | | +| [name](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.name.md) | | string | | +| [options](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.options.md) | | any[] | | +| [required](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.required.md) | | boolean | | +| [resolve](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.resolve.md) | | boolean | | +| [types](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.types.md) | | string[] | | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [accepts(type)](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.accepts.md) | | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.multi.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.multi.md new file mode 100644 index 0000000000000..86e1921910a30 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.multi.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.md) > [multi](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.multi.md) + +## ExpressionFunctionParameter.multi property + +Signature: + +```typescript +multi: boolean; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.name.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.name.md new file mode 100644 index 0000000000000..8aab81d92e65a --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.name.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.md) > [name](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.name.md) + +## ExpressionFunctionParameter.name property + +Signature: + +```typescript +name: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.options.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.options.md new file mode 100644 index 0000000000000..95369ebd5ce88 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.options.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.md) > [options](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.options.md) + +## ExpressionFunctionParameter.options property + +Signature: + +```typescript +options: any[]; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.required.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.required.md new file mode 100644 index 0000000000000..0e58b41e2a22c --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.required.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.md) > [required](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.required.md) + +## ExpressionFunctionParameter.required property + +Signature: + +```typescript +required: boolean; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.resolve.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.resolve.md new file mode 100644 index 0000000000000..3415c5f6a7639 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.resolve.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.md) > [resolve](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.resolve.md) + +## ExpressionFunctionParameter.resolve property + +Signature: + +```typescript +resolve: boolean; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.types.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.types.md new file mode 100644 index 0000000000000..f7d6079705e8e --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionfunctionparameter.types.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.md) > [types](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.types.md) + +## ExpressionFunctionParameter.types property + +Signature: + +```typescript +types: string[]; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionimage.dataurl.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionimage.dataurl.md new file mode 100644 index 0000000000000..a51dc1eaea66f --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionimage.dataurl.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionImage](./kibana-plugin-plugins-expressions-server.expressionimage.md) > [dataurl](./kibana-plugin-plugins-expressions-server.expressionimage.dataurl.md) + +## ExpressionImage.dataurl property + +Signature: + +```typescript +dataurl: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionimage.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionimage.md new file mode 100644 index 0000000000000..7f323fba7bfe1 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionimage.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionImage](./kibana-plugin-plugins-expressions-server.expressionimage.md) + +## ExpressionImage interface + +Signature: + +```typescript +export interface ExpressionImage +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [dataurl](./kibana-plugin-plugins-expressions-server.expressionimage.dataurl.md) | string | | +| [mode](./kibana-plugin-plugins-expressions-server.expressionimage.mode.md) | string | | +| [type](./kibana-plugin-plugins-expressions-server.expressionimage.type.md) | 'image' | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionimage.mode.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionimage.mode.md new file mode 100644 index 0000000000000..9aae0ed3ea8b4 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionimage.mode.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionImage](./kibana-plugin-plugins-expressions-server.expressionimage.md) > [mode](./kibana-plugin-plugins-expressions-server.expressionimage.mode.md) + +## ExpressionImage.mode property + +Signature: + +```typescript +mode: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionimage.type.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionimage.type.md new file mode 100644 index 0000000000000..0cc0418228281 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionimage.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionImage](./kibana-plugin-plugins-expressions-server.expressionimage.md) > [type](./kibana-plugin-plugins-expressions-server.expressionimage.type.md) + +## ExpressionImage.type property + +Signature: + +```typescript +type: 'image'; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.displayname.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.displayname.md new file mode 100644 index 0000000000000..e936e25cee6ca --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.displayname.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionRenderDefinition](./kibana-plugin-plugins-expressions-server.expressionrenderdefinition.md) > [displayName](./kibana-plugin-plugins-expressions-server.expressionrenderdefinition.displayname.md) + +## ExpressionRenderDefinition.displayName property + +A user friendly name of the renderer as will be displayed to user in UI. + +Signature: + +```typescript +displayName: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.help.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.help.md new file mode 100644 index 0000000000000..971abba04fdf9 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.help.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionRenderDefinition](./kibana-plugin-plugins-expressions-server.expressionrenderdefinition.md) > [help](./kibana-plugin-plugins-expressions-server.expressionrenderdefinition.help.md) + +## ExpressionRenderDefinition.help property + +Help text as will be displayed to user. A sentence or few about what this element does. + +Signature: + +```typescript +help?: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.md new file mode 100644 index 0000000000000..9cefb6ef196cf --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionRenderDefinition](./kibana-plugin-plugins-expressions-server.expressionrenderdefinition.md) + +## ExpressionRenderDefinition interface + +Signature: + +```typescript +export interface ExpressionRenderDefinition +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [displayName](./kibana-plugin-plugins-expressions-server.expressionrenderdefinition.displayname.md) | string | A user friendly name of the renderer as will be displayed to user in UI. | +| [help](./kibana-plugin-plugins-expressions-server.expressionrenderdefinition.help.md) | string | Help text as will be displayed to user. A sentence or few about what this element does. | +| [name](./kibana-plugin-plugins-expressions-server.expressionrenderdefinition.name.md) | string | Technical name of the renderer, used as ID to identify renderer in expression renderer registry. This must match the name of the expression function that is used to create the type: render object. | +| [render](./kibana-plugin-plugins-expressions-server.expressionrenderdefinition.render.md) | (domNode: HTMLElement, config: Config, handlers: IInterpreterRenderHandlers) => void | Promise<void> | The function called to render the output data of an expression. | +| [reuseDomNode](./kibana-plugin-plugins-expressions-server.expressionrenderdefinition.reusedomnode.md) | boolean | Tell the renderer if the dom node should be reused, it's recreated each time by default. | +| [validate](./kibana-plugin-plugins-expressions-server.expressionrenderdefinition.validate.md) | () => undefined | Error | Used to validate the data before calling the render function. | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.name.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.name.md new file mode 100644 index 0000000000000..62eec0109c374 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.name.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionRenderDefinition](./kibana-plugin-plugins-expressions-server.expressionrenderdefinition.md) > [name](./kibana-plugin-plugins-expressions-server.expressionrenderdefinition.name.md) + +## ExpressionRenderDefinition.name property + +Technical name of the renderer, used as ID to identify renderer in expression renderer registry. This must match the name of the expression function that is used to create the `type: render` object. + +Signature: + +```typescript +name: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.render.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.render.md new file mode 100644 index 0000000000000..99698e1828637 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.render.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionRenderDefinition](./kibana-plugin-plugins-expressions-server.expressionrenderdefinition.md) > [render](./kibana-plugin-plugins-expressions-server.expressionrenderdefinition.render.md) + +## ExpressionRenderDefinition.render property + +The function called to render the output data of an expression. + +Signature: + +```typescript +render: (domNode: HTMLElement, config: Config, handlers: IInterpreterRenderHandlers) => void | Promise; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.reusedomnode.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.reusedomnode.md new file mode 100644 index 0000000000000..435920cccc642 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.reusedomnode.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionRenderDefinition](./kibana-plugin-plugins-expressions-server.expressionrenderdefinition.md) > [reuseDomNode](./kibana-plugin-plugins-expressions-server.expressionrenderdefinition.reusedomnode.md) + +## ExpressionRenderDefinition.reuseDomNode property + +Tell the renderer if the dom node should be reused, it's recreated each time by default. + +Signature: + +```typescript +reuseDomNode: boolean; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.validate.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.validate.md new file mode 100644 index 0000000000000..f640744374eda --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderdefinition.validate.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionRenderDefinition](./kibana-plugin-plugins-expressions-server.expressionrenderdefinition.md) > [validate](./kibana-plugin-plugins-expressions-server.expressionrenderdefinition.validate.md) + +## ExpressionRenderDefinition.validate property + +Used to validate the data before calling the render function. + +Signature: + +```typescript +validate?: () => undefined | Error; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer._constructor_.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer._constructor_.md new file mode 100644 index 0000000000000..5db39853728af --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionRenderer](./kibana-plugin-plugins-expressions-server.expressionrenderer.md) > [(constructor)](./kibana-plugin-plugins-expressions-server.expressionrenderer._constructor_.md) + +## ExpressionRenderer.(constructor) + +Constructs a new instance of the `ExpressionRenderer` class + +Signature: + +```typescript +constructor(config: ExpressionRenderDefinition); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| config | ExpressionRenderDefinition<Config> | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.displayname.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.displayname.md new file mode 100644 index 0000000000000..41846bf41997f --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.displayname.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionRenderer](./kibana-plugin-plugins-expressions-server.expressionrenderer.md) > [displayName](./kibana-plugin-plugins-expressions-server.expressionrenderer.displayname.md) + +## ExpressionRenderer.displayName property + +Signature: + +```typescript +readonly displayName: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.help.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.help.md new file mode 100644 index 0000000000000..9cf60c832fb95 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.help.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionRenderer](./kibana-plugin-plugins-expressions-server.expressionrenderer.md) > [help](./kibana-plugin-plugins-expressions-server.expressionrenderer.help.md) + +## ExpressionRenderer.help property + +Signature: + +```typescript +readonly help: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.md new file mode 100644 index 0000000000000..6f5c336a89e5c --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.md @@ -0,0 +1,29 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionRenderer](./kibana-plugin-plugins-expressions-server.expressionrenderer.md) + +## ExpressionRenderer class + +Signature: + +```typescript +export declare class ExpressionRenderer +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(config)](./kibana-plugin-plugins-expressions-server.expressionrenderer._constructor_.md) | | Constructs a new instance of the ExpressionRenderer class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [displayName](./kibana-plugin-plugins-expressions-server.expressionrenderer.displayname.md) | | string | | +| [help](./kibana-plugin-plugins-expressions-server.expressionrenderer.help.md) | | string | | +| [name](./kibana-plugin-plugins-expressions-server.expressionrenderer.name.md) | | string | | +| [render](./kibana-plugin-plugins-expressions-server.expressionrenderer.render.md) | | ExpressionRenderDefinition<Config>['render'] | | +| [reuseDomNode](./kibana-plugin-plugins-expressions-server.expressionrenderer.reusedomnode.md) | | boolean | | +| [validate](./kibana-plugin-plugins-expressions-server.expressionrenderer.validate.md) | | () => void | Error | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.name.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.name.md new file mode 100644 index 0000000000000..f320fcd8408ab --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.name.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionRenderer](./kibana-plugin-plugins-expressions-server.expressionrenderer.md) > [name](./kibana-plugin-plugins-expressions-server.expressionrenderer.name.md) + +## ExpressionRenderer.name property + +Signature: + +```typescript +readonly name: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.render.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.render.md new file mode 100644 index 0000000000000..d7cf04e6d8bfa --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.render.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionRenderer](./kibana-plugin-plugins-expressions-server.expressionrenderer.md) > [render](./kibana-plugin-plugins-expressions-server.expressionrenderer.render.md) + +## ExpressionRenderer.render property + +Signature: + +```typescript +readonly render: ExpressionRenderDefinition['render']; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.reusedomnode.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.reusedomnode.md new file mode 100644 index 0000000000000..8fd9c5fa8e6ff --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.reusedomnode.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionRenderer](./kibana-plugin-plugins-expressions-server.expressionrenderer.md) > [reuseDomNode](./kibana-plugin-plugins-expressions-server.expressionrenderer.reusedomnode.md) + +## ExpressionRenderer.reuseDomNode property + +Signature: + +```typescript +readonly reuseDomNode: boolean; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.validate.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.validate.md new file mode 100644 index 0000000000000..d40945cfb88f1 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrenderer.validate.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionRenderer](./kibana-plugin-plugins-expressions-server.expressionrenderer.md) > [validate](./kibana-plugin-plugins-expressions-server.expressionrenderer.validate.md) + +## ExpressionRenderer.validate property + +Signature: + +```typescript +readonly validate: () => void | Error; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrendererregistry.get.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrendererregistry.get.md new file mode 100644 index 0000000000000..6f8e6c868ac9b --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrendererregistry.get.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionRendererRegistry](./kibana-plugin-plugins-expressions-server.expressionrendererregistry.md) > [get](./kibana-plugin-plugins-expressions-server.expressionrendererregistry.get.md) + +## ExpressionRendererRegistry.get() method + +Signature: + +```typescript +get(id: string): ExpressionRenderer | null; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| id | string | | + +Returns: + +`ExpressionRenderer | null` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrendererregistry.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrendererregistry.md new file mode 100644 index 0000000000000..d4a34ab140854 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrendererregistry.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionRendererRegistry](./kibana-plugin-plugins-expressions-server.expressionrendererregistry.md) + +## ExpressionRendererRegistry class + +Signature: + +```typescript +export declare class ExpressionRendererRegistry implements IRegistry +``` + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [get(id)](./kibana-plugin-plugins-expressions-server.expressionrendererregistry.get.md) | | | +| [register(definition)](./kibana-plugin-plugins-expressions-server.expressionrendererregistry.register.md) | | | +| [toArray()](./kibana-plugin-plugins-expressions-server.expressionrendererregistry.toarray.md) | | | +| [toJS()](./kibana-plugin-plugins-expressions-server.expressionrendererregistry.tojs.md) | | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrendererregistry.register.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrendererregistry.register.md new file mode 100644 index 0000000000000..d5411a327fbcd --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrendererregistry.register.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionRendererRegistry](./kibana-plugin-plugins-expressions-server.expressionrendererregistry.md) > [register](./kibana-plugin-plugins-expressions-server.expressionrendererregistry.register.md) + +## ExpressionRendererRegistry.register() method + +Signature: + +```typescript +register(definition: AnyExpressionRenderDefinition | (() => AnyExpressionRenderDefinition)): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| definition | AnyExpressionRenderDefinition | (() => AnyExpressionRenderDefinition) | | + +Returns: + +`void` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrendererregistry.toarray.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrendererregistry.toarray.md new file mode 100644 index 0000000000000..edb153000b458 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrendererregistry.toarray.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionRendererRegistry](./kibana-plugin-plugins-expressions-server.expressionrendererregistry.md) > [toArray](./kibana-plugin-plugins-expressions-server.expressionrendererregistry.toarray.md) + +## ExpressionRendererRegistry.toArray() method + +Signature: + +```typescript +toArray(): ExpressionRenderer[]; +``` +Returns: + +`ExpressionRenderer[]` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrendererregistry.tojs.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrendererregistry.tojs.md new file mode 100644 index 0000000000000..f7230e9102c8f --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionrendererregistry.tojs.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionRendererRegistry](./kibana-plugin-plugins-expressions-server.expressionrendererregistry.md) > [toJS](./kibana-plugin-plugins-expressions-server.expressionrendererregistry.tojs.md) + +## ExpressionRendererRegistry.toJS() method + +Signature: + +```typescript +toJS(): Record; +``` +Returns: + +`Record` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverplugin._constructor_.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverplugin._constructor_.md new file mode 100644 index 0000000000000..639ae379f0ed7 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverplugin._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionsServerPlugin](./kibana-plugin-plugins-expressions-server.expressionsserverplugin.md) > [(constructor)](./kibana-plugin-plugins-expressions-server.expressionsserverplugin._constructor_.md) + +## ExpressionsServerPlugin.(constructor) + +Constructs a new instance of the `ExpressionsServerPlugin` class + +Signature: + +```typescript +constructor(initializerContext: PluginInitializerContext); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| initializerContext | PluginInitializerContext | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverplugin.expressions.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverplugin.expressions.md new file mode 100644 index 0000000000000..a391220a6349e --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverplugin.expressions.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionsServerPlugin](./kibana-plugin-plugins-expressions-server.expressionsserverplugin.md) > [expressions](./kibana-plugin-plugins-expressions-server.expressionsserverplugin.expressions.md) + +## ExpressionsServerPlugin.expressions property + +Signature: + +```typescript +readonly expressions: ExpressionsService; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverplugin.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverplugin.md new file mode 100644 index 0000000000000..f92d572b1111a --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverplugin.md @@ -0,0 +1,32 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionsServerPlugin](./kibana-plugin-plugins-expressions-server.expressionsserverplugin.md) + +## ExpressionsServerPlugin class + +Signature: + +```typescript +export declare class ExpressionsServerPlugin implements Plugin +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(initializerContext)](./kibana-plugin-plugins-expressions-server.expressionsserverplugin._constructor_.md) | | Constructs a new instance of the ExpressionsServerPlugin class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [expressions](./kibana-plugin-plugins-expressions-server.expressionsserverplugin.expressions.md) | | ExpressionsService | | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [setup(core)](./kibana-plugin-plugins-expressions-server.expressionsserverplugin.setup.md) | | | +| [start(core)](./kibana-plugin-plugins-expressions-server.expressionsserverplugin.start.md) | | | +| [stop()](./kibana-plugin-plugins-expressions-server.expressionsserverplugin.stop.md) | | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverplugin.setup.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverplugin.setup.md new file mode 100644 index 0000000000000..18e33d4e0bc60 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverplugin.setup.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionsServerPlugin](./kibana-plugin-plugins-expressions-server.expressionsserverplugin.md) > [setup](./kibana-plugin-plugins-expressions-server.expressionsserverplugin.setup.md) + +## ExpressionsServerPlugin.setup() method + +Signature: + +```typescript +setup(core: CoreSetup): ExpressionsServerSetup; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| core | CoreSetup | | + +Returns: + +`ExpressionsServerSetup` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverplugin.start.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverplugin.start.md new file mode 100644 index 0000000000000..31578685ff386 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverplugin.start.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionsServerPlugin](./kibana-plugin-plugins-expressions-server.expressionsserverplugin.md) > [start](./kibana-plugin-plugins-expressions-server.expressionsserverplugin.start.md) + +## ExpressionsServerPlugin.start() method + +Signature: + +```typescript +start(core: CoreStart): ExpressionsServerStart; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| core | CoreStart | | + +Returns: + +`ExpressionsServerStart` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverplugin.stop.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverplugin.stop.md new file mode 100644 index 0000000000000..2f6abade901b1 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverplugin.stop.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionsServerPlugin](./kibana-plugin-plugins-expressions-server.expressionsserverplugin.md) > [stop](./kibana-plugin-plugins-expressions-server.expressionsserverplugin.stop.md) + +## ExpressionsServerPlugin.stop() method + +Signature: + +```typescript +stop(): void; +``` +Returns: + +`void` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserversetup.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserversetup.md new file mode 100644 index 0000000000000..2cf591a59c4f6 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserversetup.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionsServerSetup](./kibana-plugin-plugins-expressions-server.expressionsserversetup.md) + +## ExpressionsServerSetup type + +Signature: + +```typescript +export declare type ExpressionsServerSetup = ExpressionsServiceSetup; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverstart.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverstart.md new file mode 100644 index 0000000000000..9ceb261a7f689 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverstart.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionsServerStart](./kibana-plugin-plugins-expressions-server.expressionsserverstart.md) + +## ExpressionsServerStart type + +Signature: + +```typescript +export declare type ExpressionsServerStart = ExpressionsServiceStart; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype._constructor_.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype._constructor_.md new file mode 100644 index 0000000000000..966955c03ff08 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionType](./kibana-plugin-plugins-expressions-server.expressiontype.md) > [(constructor)](./kibana-plugin-plugins-expressions-server.expressiontype._constructor_.md) + +## ExpressionType.(constructor) + +Constructs a new instance of the `ExpressionType` class + +Signature: + +```typescript +constructor(definition: AnyExpressionTypeDefinition); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| definition | AnyExpressionTypeDefinition | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.castsfrom.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.castsfrom.md new file mode 100644 index 0000000000000..57758e8fa7788 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.castsfrom.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionType](./kibana-plugin-plugins-expressions-server.expressiontype.md) > [castsFrom](./kibana-plugin-plugins-expressions-server.expressiontype.castsfrom.md) + +## ExpressionType.castsFrom property + +Signature: + +```typescript +castsFrom: (value: ExpressionValue) => boolean; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.caststo.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.caststo.md new file mode 100644 index 0000000000000..eec17f8606817 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.caststo.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionType](./kibana-plugin-plugins-expressions-server.expressiontype.md) > [castsTo](./kibana-plugin-plugins-expressions-server.expressiontype.caststo.md) + +## ExpressionType.castsTo property + +Signature: + +```typescript +castsTo: (value: ExpressionValue) => boolean; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.create.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.create.md new file mode 100644 index 0000000000000..3fbd1f7986254 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.create.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionType](./kibana-plugin-plugins-expressions-server.expressiontype.md) > [create](./kibana-plugin-plugins-expressions-server.expressiontype.create.md) + +## ExpressionType.create property + +Signature: + +```typescript +create: unknown; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.deserialize.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.deserialize.md new file mode 100644 index 0000000000000..232d70b846092 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.deserialize.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionType](./kibana-plugin-plugins-expressions-server.expressiontype.md) > [deserialize](./kibana-plugin-plugins-expressions-server.expressiontype.deserialize.md) + +## ExpressionType.deserialize property + +Signature: + +```typescript +deserialize?: (serialized: any) => ExpressionValue; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.from.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.from.md new file mode 100644 index 0000000000000..4d24a4162c096 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.from.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionType](./kibana-plugin-plugins-expressions-server.expressiontype.md) > [from](./kibana-plugin-plugins-expressions-server.expressiontype.from.md) + +## ExpressionType.from property + +Signature: + +```typescript +from: (value: ExpressionValue, types: Record) => any; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.getfromfn.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.getfromfn.md new file mode 100644 index 0000000000000..092227af92a19 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.getfromfn.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionType](./kibana-plugin-plugins-expressions-server.expressiontype.md) > [getFromFn](./kibana-plugin-plugins-expressions-server.expressiontype.getfromfn.md) + +## ExpressionType.getFromFn property + +Signature: + +```typescript +getFromFn: (typeName: string) => undefined | ExpressionValueConverter; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.gettofn.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.gettofn.md new file mode 100644 index 0000000000000..8454116f50ac8 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.gettofn.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionType](./kibana-plugin-plugins-expressions-server.expressiontype.md) > [getToFn](./kibana-plugin-plugins-expressions-server.expressiontype.gettofn.md) + +## ExpressionType.getToFn property + +Signature: + +```typescript +getToFn: (typeName: string) => undefined | ExpressionValueConverter; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.help.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.help.md new file mode 100644 index 0000000000000..bd5be7329d6a4 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.help.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionType](./kibana-plugin-plugins-expressions-server.expressiontype.md) > [help](./kibana-plugin-plugins-expressions-server.expressiontype.help.md) + +## ExpressionType.help property + +A short help text. + +Signature: + +```typescript +help: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.md new file mode 100644 index 0000000000000..49f3f504c9419 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.md @@ -0,0 +1,35 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionType](./kibana-plugin-plugins-expressions-server.expressiontype.md) + +## ExpressionType class + +Signature: + +```typescript +export declare class ExpressionType +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(definition)](./kibana-plugin-plugins-expressions-server.expressiontype._constructor_.md) | | Constructs a new instance of the ExpressionType class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [castsFrom](./kibana-plugin-plugins-expressions-server.expressiontype.castsfrom.md) | | (value: ExpressionValue) => boolean | | +| [castsTo](./kibana-plugin-plugins-expressions-server.expressiontype.caststo.md) | | (value: ExpressionValue) => boolean | | +| [create](./kibana-plugin-plugins-expressions-server.expressiontype.create.md) | | unknown | | +| [deserialize](./kibana-plugin-plugins-expressions-server.expressiontype.deserialize.md) | | (serialized: any) => ExpressionValue | | +| [from](./kibana-plugin-plugins-expressions-server.expressiontype.from.md) | | (value: ExpressionValue, types: Record<string, ExpressionType>) => any | | +| [getFromFn](./kibana-plugin-plugins-expressions-server.expressiontype.getfromfn.md) | | (typeName: string) => undefined | ExpressionValueConverter<ExpressionValue, ExpressionValue> | | +| [getToFn](./kibana-plugin-plugins-expressions-server.expressiontype.gettofn.md) | | (typeName: string) => undefined | ExpressionValueConverter<ExpressionValue, ExpressionValue> | | +| [help](./kibana-plugin-plugins-expressions-server.expressiontype.help.md) | | string | A short help text. | +| [name](./kibana-plugin-plugins-expressions-server.expressiontype.name.md) | | string | | +| [serialize](./kibana-plugin-plugins-expressions-server.expressiontype.serialize.md) | | (value: ExpressionValue) => any | Optional serialization (used when passing context around client/server). | +| [to](./kibana-plugin-plugins-expressions-server.expressiontype.to.md) | | (value: ExpressionValue, toTypeName: string, types: Record<string, ExpressionType>) => any | | +| [validate](./kibana-plugin-plugins-expressions-server.expressiontype.validate.md) | | (type: any) => void | Error | Type validation, useful for checking function output. | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.name.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.name.md new file mode 100644 index 0000000000000..44e0e18270b14 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.name.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionType](./kibana-plugin-plugins-expressions-server.expressiontype.md) > [name](./kibana-plugin-plugins-expressions-server.expressiontype.name.md) + +## ExpressionType.name property + +Signature: + +```typescript +name: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.serialize.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.serialize.md new file mode 100644 index 0000000000000..013b95bf2d0ce --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.serialize.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionType](./kibana-plugin-plugins-expressions-server.expressiontype.md) > [serialize](./kibana-plugin-plugins-expressions-server.expressiontype.serialize.md) + +## ExpressionType.serialize property + +Optional serialization (used when passing context around client/server). + +Signature: + +```typescript +serialize?: (value: ExpressionValue) => any; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.to.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.to.md new file mode 100644 index 0000000000000..70e4504324f22 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.to.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionType](./kibana-plugin-plugins-expressions-server.expressiontype.md) > [to](./kibana-plugin-plugins-expressions-server.expressiontype.to.md) + +## ExpressionType.to property + +Signature: + +```typescript +to: (value: ExpressionValue, toTypeName: string, types: Record) => any; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.validate.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.validate.md new file mode 100644 index 0000000000000..6e1fd681a732b --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontype.validate.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionType](./kibana-plugin-plugins-expressions-server.expressiontype.md) > [validate](./kibana-plugin-plugins-expressions-server.expressiontype.validate.md) + +## ExpressionType.validate property + +Type validation, useful for checking function output. + +Signature: + +```typescript +validate: (type: any) => void | Error; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.deserialize.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.deserialize.md new file mode 100644 index 0000000000000..71e9ecd7270d9 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.deserialize.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionTypeDefinition](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.md) > [deserialize](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.deserialize.md) + +## ExpressionTypeDefinition.deserialize property + +Signature: + +```typescript +deserialize?: (type: SerializedType) => Value; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.from.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.from.md new file mode 100644 index 0000000000000..f3ad8791c7bac --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.from.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionTypeDefinition](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.md) > [from](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.from.md) + +## ExpressionTypeDefinition.from property + +Signature: + +```typescript +from?: { + [type: string]: ExpressionValueConverter; + }; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.help.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.help.md new file mode 100644 index 0000000000000..f1c4d48599da6 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.help.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionTypeDefinition](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.md) > [help](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.help.md) + +## ExpressionTypeDefinition.help property + +Signature: + +```typescript +help?: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.md new file mode 100644 index 0000000000000..5179bd1df7311 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionTypeDefinition](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.md) + +## ExpressionTypeDefinition interface + +A generic type which represents a custom Expression Type Definition that's registered to the Interpreter. + +Signature: + +```typescript +export interface ExpressionTypeDefinition +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [deserialize](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.deserialize.md) | (type: SerializedType) => Value | | +| [from](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.from.md) | {
[type: string]: ExpressionValueConverter<any, Value>;
} | | +| [help](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.help.md) | string | | +| [name](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.name.md) | Name | | +| [serialize](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.serialize.md) | (type: Value) => SerializedType | | +| [to](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.to.md) | {
[type: string]: ExpressionValueConverter<Value, any>;
} | | +| [validate](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.validate.md) | (type: any) => void | Error | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.name.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.name.md new file mode 100644 index 0000000000000..cfc1cebac16da --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.name.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionTypeDefinition](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.md) > [name](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.name.md) + +## ExpressionTypeDefinition.name property + +Signature: + +```typescript +name: Name; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.serialize.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.serialize.md new file mode 100644 index 0000000000000..05ec569f62638 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.serialize.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionTypeDefinition](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.md) > [serialize](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.serialize.md) + +## ExpressionTypeDefinition.serialize property + +Signature: + +```typescript +serialize?: (type: Value) => SerializedType; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.to.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.to.md new file mode 100644 index 0000000000000..6c2c22fc902c6 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.to.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionTypeDefinition](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.md) > [to](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.to.md) + +## ExpressionTypeDefinition.to property + +Signature: + +```typescript +to?: { + [type: string]: ExpressionValueConverter; + }; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.validate.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.validate.md new file mode 100644 index 0000000000000..acdcf089fcbe0 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypedefinition.validate.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionTypeDefinition](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.md) > [validate](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.validate.md) + +## ExpressionTypeDefinition.validate property + +Signature: + +```typescript +validate?: (type: any) => void | Error; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypestyle.css.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypestyle.css.md new file mode 100644 index 0000000000000..7cb6e9bc8b45d --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypestyle.css.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionTypeStyle](./kibana-plugin-plugins-expressions-server.expressiontypestyle.md) > [css](./kibana-plugin-plugins-expressions-server.expressiontypestyle.css.md) + +## ExpressionTypeStyle.css property + +Signature: + +```typescript +css: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypestyle.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypestyle.md new file mode 100644 index 0000000000000..274e9b7b6772c --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypestyle.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionTypeStyle](./kibana-plugin-plugins-expressions-server.expressiontypestyle.md) + +## ExpressionTypeStyle interface + +An object that represents style information, typically CSS. + +Signature: + +```typescript +export interface ExpressionTypeStyle +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [css](./kibana-plugin-plugins-expressions-server.expressiontypestyle.css.md) | string | | +| [spec](./kibana-plugin-plugins-expressions-server.expressiontypestyle.spec.md) | CSSStyle | | +| [type](./kibana-plugin-plugins-expressions-server.expressiontypestyle.type.md) | 'style' | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypestyle.spec.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypestyle.spec.md new file mode 100644 index 0000000000000..95f3edbc2b725 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypestyle.spec.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionTypeStyle](./kibana-plugin-plugins-expressions-server.expressiontypestyle.md) > [spec](./kibana-plugin-plugins-expressions-server.expressiontypestyle.spec.md) + +## ExpressionTypeStyle.spec property + +Signature: + +```typescript +spec: CSSStyle; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypestyle.type.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypestyle.type.md new file mode 100644 index 0000000000000..be3b476cb8b53 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressiontypestyle.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionTypeStyle](./kibana-plugin-plugins-expressions-server.expressiontypestyle.md) > [type](./kibana-plugin-plugins-expressions-server.expressiontypestyle.type.md) + +## ExpressionTypeStyle.type property + +Signature: + +```typescript +type: 'style'; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvalue.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvalue.md new file mode 100644 index 0000000000000..fc9af5fbc6695 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvalue.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionValue](./kibana-plugin-plugins-expressions-server.expressionvalue.md) + +## ExpressionValue type + +Signature: + +```typescript +export declare type ExpressionValue = ExpressionValueUnboxed | ExpressionValueBoxed; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvalueboxed.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvalueboxed.md new file mode 100644 index 0000000000000..ad84aec0dc6d5 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvalueboxed.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionValueBoxed](./kibana-plugin-plugins-expressions-server.expressionvalueboxed.md) + +## ExpressionValueBoxed type + +Signature: + +```typescript +export declare type ExpressionValueBoxed = { + type: Type; +} & Value; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvalueconverter.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvalueconverter.md new file mode 100644 index 0000000000000..d1b69590141cb --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvalueconverter.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionValueConverter](./kibana-plugin-plugins-expressions-server.expressionvalueconverter.md) + +## ExpressionValueConverter type + +Signature: + +```typescript +export declare type ExpressionValueConverter = (input: I, availableTypes: Record) => O; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvalueerror.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvalueerror.md new file mode 100644 index 0000000000000..b90e4360e055a --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvalueerror.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionValueError](./kibana-plugin-plugins-expressions-server.expressionvalueerror.md) + +## ExpressionValueError type + +Signature: + +```typescript +export declare type ExpressionValueError = ExpressionValueBoxed<'error', { + error: { + message: string; + type?: string; + name?: string; + stack?: string; + original?: Error; + }; + info?: unknown; +}>; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvaluefilter.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvaluefilter.md new file mode 100644 index 0000000000000..fb65bc2550513 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvaluefilter.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionValueFilter](./kibana-plugin-plugins-expressions-server.expressionvaluefilter.md) + +## ExpressionValueFilter type + +Represents an object that is a Filter. + +Signature: + +```typescript +export declare type ExpressionValueFilter = ExpressionValueBoxed<'filter', { + filterType?: string; + value?: string; + column?: string; + and: ExpressionValueFilter[]; + to?: string; + from?: string; + query?: string | null; +}>; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvaluenum.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvaluenum.md new file mode 100644 index 0000000000000..b109a23dc7259 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvaluenum.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionValueNum](./kibana-plugin-plugins-expressions-server.expressionvaluenum.md) + +## ExpressionValueNum type + +Signature: + +```typescript +export declare type ExpressionValueNum = ExpressionValueBoxed<'num', { + value: number; +}>; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvaluerender.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvaluerender.md new file mode 100644 index 0000000000000..96958d753a78e --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvaluerender.md @@ -0,0 +1,16 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionValueRender](./kibana-plugin-plugins-expressions-server.expressionvaluerender.md) + +## ExpressionValueRender type + +Represents an object that is intended to be rendered. + +Signature: + +```typescript +export declare type ExpressionValueRender = ExpressionValueBoxed; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvaluesearchcontext.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvaluesearchcontext.md new file mode 100644 index 0000000000000..6e38adde3ba91 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvaluesearchcontext.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionValueSearchContext](./kibana-plugin-plugins-expressions-server.expressionvaluesearchcontext.md) + +## ExpressionValueSearchContext type + +Signature: + +```typescript +export declare type ExpressionValueSearchContext = ExpressionValueBoxed<'kibana_context', ExecutionContextSearch>; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvalueunboxed.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvalueunboxed.md new file mode 100644 index 0000000000000..2393b2bb70e6b --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionvalueunboxed.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [ExpressionValueUnboxed](./kibana-plugin-plugins-expressions-server.expressionvalueunboxed.md) + +## ExpressionValueUnboxed type + +Signature: + +```typescript +export declare type ExpressionValueUnboxed = any; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.font.label.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.font.label.md new file mode 100644 index 0000000000000..5f11f866be2f6 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.font.label.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Font](./kibana-plugin-plugins-expressions-server.font.md) > [label](./kibana-plugin-plugins-expressions-server.font.label.md) + +## Font.label property + +Signature: + +```typescript +label: FontLabel; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.font.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.font.md new file mode 100644 index 0000000000000..f3ff25e034624 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.font.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Font](./kibana-plugin-plugins-expressions-server.font.md) + +## Font interface + +An interface representing a font in Canvas, with a textual label and the CSS `font-value`. + +Signature: + +```typescript +export interface Font +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [label](./kibana-plugin-plugins-expressions-server.font.label.md) | FontLabel | | +| [value](./kibana-plugin-plugins-expressions-server.font.value.md) | FontValue | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.font.value.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.font.value.md new file mode 100644 index 0000000000000..1bb1fac163661 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.font.value.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Font](./kibana-plugin-plugins-expressions-server.font.md) > [value](./kibana-plugin-plugins-expressions-server.font.value.md) + +## Font.value property + +Signature: + +```typescript +value: FontValue; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.fontlabel.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.fontlabel.md new file mode 100644 index 0000000000000..4837abb7542fa --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.fontlabel.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [FontLabel](./kibana-plugin-plugins-expressions-server.fontlabel.md) + +## FontLabel type + +This type contains a unions of all supported font labels, or the the name of the font the user would see in a UI. + +Signature: + +```typescript +export declare type FontLabel = typeof fonts[number]['label']; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.fontstyle.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.fontstyle.md new file mode 100644 index 0000000000000..26588096666df --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.fontstyle.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [FontStyle](./kibana-plugin-plugins-expressions-server.fontstyle.md) + +## FontStyle enum + +Enum of supported CSS `font-style` properties. + +Signature: + +```typescript +export declare enum FontStyle +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| ITALIC | "italic" | | +| NORMAL | "normal" | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.fontvalue.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.fontvalue.md new file mode 100644 index 0000000000000..6c0332067a369 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.fontvalue.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [FontValue](./kibana-plugin-plugins-expressions-server.fontvalue.md) + +## FontValue type + +This type contains a union of all supported font values, equivalent to the CSS `font-value` property. + +Signature: + +```typescript +export declare type FontValue = typeof fonts[number]['value']; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.fontweight.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.fontweight.md new file mode 100644 index 0000000000000..314e4b17df01e --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.fontweight.md @@ -0,0 +1,32 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [FontWeight](./kibana-plugin-plugins-expressions-server.fontweight.md) + +## FontWeight enum + +Enum of supported CSS `font-weight` properties. + +Signature: + +```typescript +export declare enum FontWeight +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| BOLD | "bold" | | +| BOLDER | "bolder" | | +| EIGHT | "800" | | +| FIVE | "500" | | +| FOUR | "400" | | +| LIGHTER | "lighter" | | +| NINE | "900" | | +| NORMAL | "normal" | | +| ONE | "100" | | +| SEVEN | "700" | | +| SIX | "600" | | +| THREE | "300" | | +| TWO | "200" | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.format.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.format.md new file mode 100644 index 0000000000000..aae8498bce03f --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.format.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [format](./kibana-plugin-plugins-expressions-server.format.md) + +## format() function + +Signature: + +```typescript +export declare function format(ast: T, type: T extends ExpressionAstExpression ? 'expression' : 'argument'): string; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| ast | T | | +| type | T extends ExpressionAstExpression ? 'expression' : 'argument' | | + +Returns: + +`string` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.formatexpression.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.formatexpression.md new file mode 100644 index 0000000000000..701d7b448f69f --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.formatexpression.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [formatExpression](./kibana-plugin-plugins-expressions-server.formatexpression.md) + +## formatExpression() function + +Given expression pipeline AST, returns formatted string. + +Signature: + +```typescript +export declare function formatExpression(ast: ExpressionAstExpression): string; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| ast | ExpressionAstExpression | | + +Returns: + +`string` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.functionsregistry._constructor_.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.functionsregistry._constructor_.md new file mode 100644 index 0000000000000..c3dc8b8e9b16f --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.functionsregistry._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [FunctionsRegistry](./kibana-plugin-plugins-expressions-server.functionsregistry.md) > [(constructor)](./kibana-plugin-plugins-expressions-server.functionsregistry._constructor_.md) + +## FunctionsRegistry.(constructor) + +Constructs a new instance of the `FunctionsRegistry` class + +Signature: + +```typescript +constructor(executor: Executor); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| executor | Executor<any> | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.functionsregistry.get.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.functionsregistry.get.md new file mode 100644 index 0000000000000..795b3a87eac09 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.functionsregistry.get.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [FunctionsRegistry](./kibana-plugin-plugins-expressions-server.functionsregistry.md) > [get](./kibana-plugin-plugins-expressions-server.functionsregistry.get.md) + +## FunctionsRegistry.get() method + +Signature: + +```typescript +get(id: string): ExpressionFunction | null; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| id | string | | + +Returns: + +`ExpressionFunction | null` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.functionsregistry.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.functionsregistry.md new file mode 100644 index 0000000000000..790105c68241a --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.functionsregistry.md @@ -0,0 +1,27 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [FunctionsRegistry](./kibana-plugin-plugins-expressions-server.functionsregistry.md) + +## FunctionsRegistry class + +Signature: + +```typescript +export declare class FunctionsRegistry implements IRegistry +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(executor)](./kibana-plugin-plugins-expressions-server.functionsregistry._constructor_.md) | | Constructs a new instance of the FunctionsRegistry class | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [get(id)](./kibana-plugin-plugins-expressions-server.functionsregistry.get.md) | | | +| [register(functionDefinition)](./kibana-plugin-plugins-expressions-server.functionsregistry.register.md) | | | +| [toArray()](./kibana-plugin-plugins-expressions-server.functionsregistry.toarray.md) | | | +| [toJS()](./kibana-plugin-plugins-expressions-server.functionsregistry.tojs.md) | | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.functionsregistry.register.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.functionsregistry.register.md new file mode 100644 index 0000000000000..7da47937e80f0 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.functionsregistry.register.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [FunctionsRegistry](./kibana-plugin-plugins-expressions-server.functionsregistry.md) > [register](./kibana-plugin-plugins-expressions-server.functionsregistry.register.md) + +## FunctionsRegistry.register() method + +Signature: + +```typescript +register(functionDefinition: AnyExpressionFunctionDefinition | (() => AnyExpressionFunctionDefinition)): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| functionDefinition | AnyExpressionFunctionDefinition | (() => AnyExpressionFunctionDefinition) | | + +Returns: + +`void` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.functionsregistry.toarray.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.functionsregistry.toarray.md new file mode 100644 index 0000000000000..5f9ca38990076 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.functionsregistry.toarray.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [FunctionsRegistry](./kibana-plugin-plugins-expressions-server.functionsregistry.md) > [toArray](./kibana-plugin-plugins-expressions-server.functionsregistry.toarray.md) + +## FunctionsRegistry.toArray() method + +Signature: + +```typescript +toArray(): ExpressionFunction[]; +``` +Returns: + +`ExpressionFunction[]` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.functionsregistry.tojs.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.functionsregistry.tojs.md new file mode 100644 index 0000000000000..35751bb534e58 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.functionsregistry.tojs.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [FunctionsRegistry](./kibana-plugin-plugins-expressions-server.functionsregistry.md) > [toJS](./kibana-plugin-plugins-expressions-server.functionsregistry.tojs.md) + +## FunctionsRegistry.toJS() method + +Signature: + +```typescript +toJS(): Record; +``` +Returns: + +`Record` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.done.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.done.md new file mode 100644 index 0000000000000..c6204769e893c --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.done.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [IInterpreterRenderHandlers](./kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.md) > [done](./kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.done.md) + +## IInterpreterRenderHandlers.done property + +Done increments the number of rendering successes + +Signature: + +```typescript +done: () => void; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.event.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.event.md new file mode 100644 index 0000000000000..6a011aaf7f132 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.event.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [IInterpreterRenderHandlers](./kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.md) > [event](./kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.event.md) + +## IInterpreterRenderHandlers.event property + +Signature: + +```typescript +event: (event: any) => void; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.md new file mode 100644 index 0000000000000..cbaffa04bae8f --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [IInterpreterRenderHandlers](./kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.md) + +## IInterpreterRenderHandlers interface + +Signature: + +```typescript +export interface IInterpreterRenderHandlers +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [done](./kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.done.md) | () => void | Done increments the number of rendering successes | +| [event](./kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.event.md) | (event: any) => void | | +| [onDestroy](./kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.ondestroy.md) | (fn: () => void) => void | | +| [reload](./kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.reload.md) | () => void | | +| [update](./kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.update.md) | (params: any) => void | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.ondestroy.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.ondestroy.md new file mode 100644 index 0000000000000..14ef98d17769c --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.ondestroy.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [IInterpreterRenderHandlers](./kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.md) > [onDestroy](./kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.ondestroy.md) + +## IInterpreterRenderHandlers.onDestroy property + +Signature: + +```typescript +onDestroy: (fn: () => void) => void; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.reload.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.reload.md new file mode 100644 index 0000000000000..c5e74e79f652b --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.reload.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [IInterpreterRenderHandlers](./kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.md) > [reload](./kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.reload.md) + +## IInterpreterRenderHandlers.reload property + +Signature: + +```typescript +reload: () => void; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.update.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.update.md new file mode 100644 index 0000000000000..2649ea99b3386 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.update.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [IInterpreterRenderHandlers](./kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.md) > [update](./kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.update.md) + +## IInterpreterRenderHandlers.update property + +Signature: + +```typescript +update: (params: any) => void; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.interpretererrortype.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.interpretererrortype.md new file mode 100644 index 0000000000000..032cea643c5bf --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.interpretererrortype.md @@ -0,0 +1,16 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [InterpreterErrorType](./kibana-plugin-plugins-expressions-server.interpretererrortype.md) + +## InterpreterErrorType type + +> Warning: This API is now obsolete. +> +> Exported for backwards compatibility. +> + +Signature: + +```typescript +export declare type InterpreterErrorType = ExpressionValueError; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iregistry.get.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iregistry.get.md new file mode 100644 index 0000000000000..b0b4524afe40a --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iregistry.get.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [IRegistry](./kibana-plugin-plugins-expressions-server.iregistry.md) > [get](./kibana-plugin-plugins-expressions-server.iregistry.get.md) + +## IRegistry.get() method + +Signature: + +```typescript +get(id: string): T | null; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| id | string | | + +Returns: + +`T | null` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iregistry.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iregistry.md new file mode 100644 index 0000000000000..71aafe2db2dd1 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iregistry.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [IRegistry](./kibana-plugin-plugins-expressions-server.iregistry.md) + +## IRegistry interface + +Signature: + +```typescript +export interface IRegistry +``` + +## Methods + +| Method | Description | +| --- | --- | +| [get(id)](./kibana-plugin-plugins-expressions-server.iregistry.get.md) | | +| [toArray()](./kibana-plugin-plugins-expressions-server.iregistry.toarray.md) | | +| [toJS()](./kibana-plugin-plugins-expressions-server.iregistry.tojs.md) | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iregistry.toarray.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iregistry.toarray.md new file mode 100644 index 0000000000000..73718cd036c85 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iregistry.toarray.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [IRegistry](./kibana-plugin-plugins-expressions-server.iregistry.md) > [toArray](./kibana-plugin-plugins-expressions-server.iregistry.toarray.md) + +## IRegistry.toArray() method + +Signature: + +```typescript +toArray(): T[]; +``` +Returns: + +`T[]` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iregistry.tojs.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iregistry.tojs.md new file mode 100644 index 0000000000000..af83efbd99aa7 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.iregistry.tojs.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [IRegistry](./kibana-plugin-plugins-expressions-server.iregistry.md) > [toJS](./kibana-plugin-plugins-expressions-server.iregistry.tojs.md) + +## IRegistry.toJS() method + +Signature: + +```typescript +toJS(): Record; +``` +Returns: + +`Record` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.isexpressionastbuilder.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.isexpressionastbuilder.md new file mode 100644 index 0000000000000..7692ff21ae934 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.isexpressionastbuilder.md @@ -0,0 +1,28 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [isExpressionAstBuilder](./kibana-plugin-plugins-expressions-server.isexpressionastbuilder.md) + +## isExpressionAstBuilder() function + +Type guard that checks whether a given value is an `ExpressionAstExpressionBuilder`. This is useful when working with subexpressions, where you might be retrieving a function argument, and need to know whether it is an expression builder instance which you can perform operations on. + +Signature: + +```typescript +export declare function isExpressionAstBuilder(val: any): val is ExpressionAstExpressionBuilder; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| val | any | | + +Returns: + +`val is ExpressionAstExpressionBuilder` + +## Example + +const arg = myFunction.getArgument('foo'); if (isExpressionAstBuilder(foo)) { foo.toAst(); } + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibana_context_name.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibana_context_name.md new file mode 100644 index 0000000000000..bd47c52e0d5ce --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibana_context_name.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [KIBANA\_CONTEXT\_NAME](./kibana-plugin-plugins-expressions-server.kibana_context_name.md) + +## KIBANA\_CONTEXT\_NAME type + +Signature: + +```typescript +export declare type KIBANA_CONTEXT_NAME = 'kibana_context'; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanacontext.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanacontext.md new file mode 100644 index 0000000000000..023748173e7dd --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanacontext.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [KibanaContext](./kibana-plugin-plugins-expressions-server.kibanacontext.md) + +## KibanaContext type + +Signature: + +```typescript +export declare type KibanaContext = ExpressionValueSearchContext; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatable.columns.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatable.columns.md new file mode 100644 index 0000000000000..423e543e4307a --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatable.columns.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [KibanaDatatable](./kibana-plugin-plugins-expressions-server.kibanadatatable.md) > [columns](./kibana-plugin-plugins-expressions-server.kibanadatatable.columns.md) + +## KibanaDatatable.columns property + +Signature: + +```typescript +columns: KibanaDatatableColumn[]; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatable.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatable.md new file mode 100644 index 0000000000000..30ee3ac2fcd13 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatable.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [KibanaDatatable](./kibana-plugin-plugins-expressions-server.kibanadatatable.md) + +## KibanaDatatable interface + +Signature: + +```typescript +export interface KibanaDatatable +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [columns](./kibana-plugin-plugins-expressions-server.kibanadatatable.columns.md) | KibanaDatatableColumn[] | | +| [rows](./kibana-plugin-plugins-expressions-server.kibanadatatable.rows.md) | KibanaDatatableRow[] | | +| [type](./kibana-plugin-plugins-expressions-server.kibanadatatable.type.md) | typeof name | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatable.rows.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatable.rows.md new file mode 100644 index 0000000000000..42170a83fc3c8 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatable.rows.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [KibanaDatatable](./kibana-plugin-plugins-expressions-server.kibanadatatable.md) > [rows](./kibana-plugin-plugins-expressions-server.kibanadatatable.rows.md) + +## KibanaDatatable.rows property + +Signature: + +```typescript +rows: KibanaDatatableRow[]; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatable.type.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatable.type.md new file mode 100644 index 0000000000000..c36674540a1ba --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatable.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [KibanaDatatable](./kibana-plugin-plugins-expressions-server.kibanadatatable.md) > [type](./kibana-plugin-plugins-expressions-server.kibanadatatable.type.md) + +## KibanaDatatable.type property + +Signature: + +```typescript +type: typeof name; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.formathint.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.formathint.md new file mode 100644 index 0000000000000..a1e6949019dcb --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.formathint.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [KibanaDatatableColumn](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.md) > [formatHint](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.formathint.md) + +## KibanaDatatableColumn.formatHint property + +Signature: + +```typescript +formatHint?: SerializedFieldFormat; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.id.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.id.md new file mode 100644 index 0000000000000..6f90da1ac9c94 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.id.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [KibanaDatatableColumn](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.md) > [id](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.id.md) + +## KibanaDatatableColumn.id property + +Signature: + +```typescript +id: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.md new file mode 100644 index 0000000000000..171477911502f --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [KibanaDatatableColumn](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.md) + +## KibanaDatatableColumn interface + +Signature: + +```typescript +export interface KibanaDatatableColumn +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [formatHint](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.formathint.md) | SerializedFieldFormat | | +| [id](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.id.md) | string | | +| [meta](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.meta.md) | KibanaDatatableColumnMeta | | +| [name](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.name.md) | string | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.meta.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.meta.md new file mode 100644 index 0000000000000..40b20d51e6ec6 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.meta.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [KibanaDatatableColumn](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.md) > [meta](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.meta.md) + +## KibanaDatatableColumn.meta property + +Signature: + +```typescript +meta?: KibanaDatatableColumnMeta; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.name.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.name.md new file mode 100644 index 0000000000000..3a85e2325483a --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.name.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [KibanaDatatableColumn](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.md) > [name](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.name.md) + +## KibanaDatatableColumn.name property + +Signature: + +```typescript +name: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.aggconfigparams.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.aggconfigparams.md new file mode 100644 index 0000000000000..539b24174f725 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.aggconfigparams.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [KibanaDatatableColumnMeta](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.md) > [aggConfigParams](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.aggconfigparams.md) + +## KibanaDatatableColumnMeta.aggConfigParams property + +Signature: + +```typescript +aggConfigParams?: Record; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.indexpatternid.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.indexpatternid.md new file mode 100644 index 0000000000000..2704915a15071 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.indexpatternid.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [KibanaDatatableColumnMeta](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.md) > [indexPatternId](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.indexpatternid.md) + +## KibanaDatatableColumnMeta.indexPatternId property + +Signature: + +```typescript +indexPatternId?: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.md new file mode 100644 index 0000000000000..d9a96e665f010 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [KibanaDatatableColumnMeta](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.md) + +## KibanaDatatableColumnMeta interface + +Signature: + +```typescript +export interface KibanaDatatableColumnMeta +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [aggConfigParams](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.aggconfigparams.md) | Record<string, any> | | +| [indexPatternId](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.indexpatternid.md) | string | | +| [type](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.type.md) | string | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.type.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.type.md new file mode 100644 index 0000000000000..56e3757ef621a --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [KibanaDatatableColumnMeta](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.md) > [type](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.type.md) + +## KibanaDatatableColumnMeta.type property + +Signature: + +```typescript +type: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablerow.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablerow.md new file mode 100644 index 0000000000000..dd0f3f4cb2f60 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.kibanadatatablerow.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [KibanaDatatableRow](./kibana-plugin-plugins-expressions-server.kibanadatatablerow.md) + +## KibanaDatatableRow interface + +Signature: + +```typescript +export interface KibanaDatatableRow +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.knowntypetostring.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.knowntypetostring.md new file mode 100644 index 0000000000000..ed536ac3b7173 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.knowntypetostring.md @@ -0,0 +1,17 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [KnownTypeToString](./kibana-plugin-plugins-expressions-server.knowntypetostring.md) + +## KnownTypeToString type + +Map the type of the generic to a string-based representation of the type. + +If the provided generic is its own type interface, we use the value of the `type` key as a string literal type for it. + +Signature: + +```typescript +export declare type KnownTypeToString = T extends string ? 'string' : T extends boolean ? 'boolean' : T extends number ? 'number' : T extends null ? 'null' : T extends { + type: string; +} ? T['type'] : never; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.md new file mode 100644 index 0000000000000..c9fed2e00c66c --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.md @@ -0,0 +1,116 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) + +## kibana-plugin-plugins-expressions-server package + +## Classes + +| Class | Description | +| --- | --- | +| [Execution](./kibana-plugin-plugins-expressions-server.execution.md) | | +| [Executor](./kibana-plugin-plugins-expressions-server.executor.md) | | +| [ExpressionFunction](./kibana-plugin-plugins-expressions-server.expressionfunction.md) | | +| [ExpressionFunctionParameter](./kibana-plugin-plugins-expressions-server.expressionfunctionparameter.md) | | +| [ExpressionRenderer](./kibana-plugin-plugins-expressions-server.expressionrenderer.md) | | +| [ExpressionRendererRegistry](./kibana-plugin-plugins-expressions-server.expressionrendererregistry.md) | | +| [ExpressionsServerPlugin](./kibana-plugin-plugins-expressions-server.expressionsserverplugin.md) | | +| [ExpressionType](./kibana-plugin-plugins-expressions-server.expressiontype.md) | | +| [FunctionsRegistry](./kibana-plugin-plugins-expressions-server.functionsregistry.md) | | +| [TypesRegistry](./kibana-plugin-plugins-expressions-server.typesregistry.md) | | + +## Enumerations + +| Enumeration | Description | +| --- | --- | +| [FontStyle](./kibana-plugin-plugins-expressions-server.fontstyle.md) | Enum of supported CSS font-style properties. | +| [FontWeight](./kibana-plugin-plugins-expressions-server.fontweight.md) | Enum of supported CSS font-weight properties. | +| [Overflow](./kibana-plugin-plugins-expressions-server.overflow.md) | Enum of supported CSS overflow properties. | +| [TextAlignment](./kibana-plugin-plugins-expressions-server.textalignment.md) | Enum of supported CSS text-align properties. | +| [TextDecoration](./kibana-plugin-plugins-expressions-server.textdecoration.md) | Enum of supported CSS text-decoration properties. | + +## Functions + +| Function | Description | +| --- | --- | +| [buildExpression(initialState)](./kibana-plugin-plugins-expressions-server.buildexpression.md) | Makes it easy to progressively build, update, and traverse an expression AST. You can either start with an empty AST, or provide an expression string, AST, or array of expression function builders to use as initial state. | +| [buildExpressionFunction(fnName, initialArgs)](./kibana-plugin-plugins-expressions-server.buildexpressionfunction.md) | Manages an AST for a single expression function. The return value can be provided to buildExpression to add this function to an expression.Note that to preserve type safety and ensure no args are missing, all required arguments for the specified function must be provided up front. If desired, they can be changed or removed later. | +| [format(ast, type)](./kibana-plugin-plugins-expressions-server.format.md) | | +| [formatExpression(ast)](./kibana-plugin-plugins-expressions-server.formatexpression.md) | Given expression pipeline AST, returns formatted string. | +| [isExpressionAstBuilder(val)](./kibana-plugin-plugins-expressions-server.isexpressionastbuilder.md) | Type guard that checks whether a given value is an ExpressionAstExpressionBuilder. This is useful when working with subexpressions, where you might be retrieving a function argument, and need to know whether it is an expression builder instance which you can perform operations on. | +| [parse(expression, startRule)](./kibana-plugin-plugins-expressions-server.parse.md) | | +| [parseExpression(expression)](./kibana-plugin-plugins-expressions-server.parseexpression.md) | Given expression pipeline string, returns parsed AST. | +| [plugin(initializerContext)](./kibana-plugin-plugins-expressions-server.plugin.md) | | + +## Interfaces + +| Interface | Description | +| --- | --- | +| [Datatable](./kibana-plugin-plugins-expressions-server.datatable.md) | A Datatable in Canvas is a unique structure that represents tabulated data. | +| [DatatableColumn](./kibana-plugin-plugins-expressions-server.datatablecolumn.md) | This type represents the shape of a column in a Datatable. | +| [ExecutionContext](./kibana-plugin-plugins-expressions-server.executioncontext.md) | ExecutionContext is an object available to all functions during a single execution; it provides various methods to perform side-effects. | +| [ExecutionParams](./kibana-plugin-plugins-expressions-server.executionparams.md) | | +| [ExecutionState](./kibana-plugin-plugins-expressions-server.executionstate.md) | | +| [ExecutorState](./kibana-plugin-plugins-expressions-server.executorstate.md) | | +| [ExpressionAstExpression](./kibana-plugin-plugins-expressions-server.expressionastexpression.md) | | +| [ExpressionAstExpressionBuilder](./kibana-plugin-plugins-expressions-server.expressionastexpressionbuilder.md) | | +| [ExpressionAstFunction](./kibana-plugin-plugins-expressions-server.expressionastfunction.md) | | +| [ExpressionAstFunctionBuilder](./kibana-plugin-plugins-expressions-server.expressionastfunctionbuilder.md) | | +| [ExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinition.md) | ExpressionFunctionDefinition is the interface plugins have to implement to register a function in expressions plugin. | +| [ExpressionFunctionDefinitions](./kibana-plugin-plugins-expressions-server.expressionfunctiondefinitions.md) | A mapping of ExpressionFunctionDefinitions for functions which the Expressions services provides out-of-the-box. Any new functions registered by the Expressions plugin should have their types added here. | +| [ExpressionImage](./kibana-plugin-plugins-expressions-server.expressionimage.md) | | +| [ExpressionRenderDefinition](./kibana-plugin-plugins-expressions-server.expressionrenderdefinition.md) | | +| [ExpressionTypeDefinition](./kibana-plugin-plugins-expressions-server.expressiontypedefinition.md) | A generic type which represents a custom Expression Type Definition that's registered to the Interpreter. | +| [ExpressionTypeStyle](./kibana-plugin-plugins-expressions-server.expressiontypestyle.md) | An object that represents style information, typically CSS. | +| [Font](./kibana-plugin-plugins-expressions-server.font.md) | An interface representing a font in Canvas, with a textual label and the CSS font-value. | +| [IInterpreterRenderHandlers](./kibana-plugin-plugins-expressions-server.iinterpreterrenderhandlers.md) | | +| [IRegistry](./kibana-plugin-plugins-expressions-server.iregistry.md) | | +| [KibanaDatatable](./kibana-plugin-plugins-expressions-server.kibanadatatable.md) | | +| [KibanaDatatableColumn](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumn.md) | | +| [KibanaDatatableColumnMeta](./kibana-plugin-plugins-expressions-server.kibanadatatablecolumnmeta.md) | | +| [KibanaDatatableRow](./kibana-plugin-plugins-expressions-server.kibanadatatablerow.md) | | +| [PointSeriesColumn](./kibana-plugin-plugins-expressions-server.pointseriescolumn.md) | Column in a PointSeries | +| [Range](./kibana-plugin-plugins-expressions-server.range.md) | | +| [SerializedDatatable](./kibana-plugin-plugins-expressions-server.serializeddatatable.md) | | +| [SerializedFieldFormat](./kibana-plugin-plugins-expressions-server.serializedfieldformat.md) | JSON representation of a field formatter configuration. Is used to carry information about how to format data in a data table as part of the column definition. | + +## Type Aliases + +| Type Alias | Description | +| --- | --- | +| [AnyExpressionFunctionDefinition](./kibana-plugin-plugins-expressions-server.anyexpressionfunctiondefinition.md) | Type to capture every possible expression function definition. | +| [AnyExpressionTypeDefinition](./kibana-plugin-plugins-expressions-server.anyexpressiontypedefinition.md) | | +| [ArgumentType](./kibana-plugin-plugins-expressions-server.argumenttype.md) | This type represents all of the possible combinations of properties of an Argument in an Expression Function. The presence or absence of certain fields influence the shape and presence of others within each arg in the specification. | +| [DatatableColumnType](./kibana-plugin-plugins-expressions-server.datatablecolumntype.md) | This type represents the type of any DatatableColumn in a Datatable. | +| [DatatableRow](./kibana-plugin-plugins-expressions-server.datatablerow.md) | This type represents a row in a Datatable. | +| [ExecutionContainer](./kibana-plugin-plugins-expressions-server.executioncontainer.md) | | +| [ExecutorContainer](./kibana-plugin-plugins-expressions-server.executorcontainer.md) | | +| [ExpressionAstArgument](./kibana-plugin-plugins-expressions-server.expressionastargument.md) | | +| [ExpressionAstNode](./kibana-plugin-plugins-expressions-server.expressionastnode.md) | | +| [ExpressionFunctionKibana](./kibana-plugin-plugins-expressions-server.expressionfunctionkibana.md) | | +| [ExpressionsServerSetup](./kibana-plugin-plugins-expressions-server.expressionsserversetup.md) | | +| [ExpressionsServerStart](./kibana-plugin-plugins-expressions-server.expressionsserverstart.md) | | +| [ExpressionValue](./kibana-plugin-plugins-expressions-server.expressionvalue.md) | | +| [ExpressionValueBoxed](./kibana-plugin-plugins-expressions-server.expressionvalueboxed.md) | | +| [ExpressionValueConverter](./kibana-plugin-plugins-expressions-server.expressionvalueconverter.md) | | +| [ExpressionValueError](./kibana-plugin-plugins-expressions-server.expressionvalueerror.md) | | +| [ExpressionValueFilter](./kibana-plugin-plugins-expressions-server.expressionvaluefilter.md) | Represents an object that is a Filter. | +| [ExpressionValueNum](./kibana-plugin-plugins-expressions-server.expressionvaluenum.md) | | +| [ExpressionValueRender](./kibana-plugin-plugins-expressions-server.expressionvaluerender.md) | Represents an object that is intended to be rendered. | +| [ExpressionValueSearchContext](./kibana-plugin-plugins-expressions-server.expressionvaluesearchcontext.md) | | +| [ExpressionValueUnboxed](./kibana-plugin-plugins-expressions-server.expressionvalueunboxed.md) | | +| [FontLabel](./kibana-plugin-plugins-expressions-server.fontlabel.md) | This type contains a unions of all supported font labels, or the the name of the font the user would see in a UI. | +| [FontValue](./kibana-plugin-plugins-expressions-server.fontvalue.md) | This type contains a union of all supported font values, equivalent to the CSS font-value property. | +| [InterpreterErrorType](./kibana-plugin-plugins-expressions-server.interpretererrortype.md) | | +| [KIBANA\_CONTEXT\_NAME](./kibana-plugin-plugins-expressions-server.kibana_context_name.md) | | +| [KibanaContext](./kibana-plugin-plugins-expressions-server.kibanacontext.md) | | +| [KnownTypeToString](./kibana-plugin-plugins-expressions-server.knowntypetostring.md) | Map the type of the generic to a string-based representation of the type.If the provided generic is its own type interface, we use the value of the type key as a string literal type for it. | +| [PointSeries](./kibana-plugin-plugins-expressions-server.pointseries.md) | A PointSeries is a unique structure that represents dots on a chart. | +| [PointSeriesColumnName](./kibana-plugin-plugins-expressions-server.pointseriescolumnname.md) | Allowed column names in a PointSeries | +| [PointSeriesColumns](./kibana-plugin-plugins-expressions-server.pointseriescolumns.md) | Represents a collection of valid Columns in a PointSeries | +| [PointSeriesRow](./kibana-plugin-plugins-expressions-server.pointseriesrow.md) | | +| [Style](./kibana-plugin-plugins-expressions-server.style.md) | | +| [TypeString](./kibana-plugin-plugins-expressions-server.typestring.md) | If the type extends a Promise, we still need to return the string representation:someArgument: Promise<boolean | string> results in types: ['boolean', 'string'] | +| [TypeToString](./kibana-plugin-plugins-expressions-server.typetostring.md) | This can convert a type into a known Expression string representation of that type. For example, TypeToString<Datatable> will resolve to 'datatable'. This allows Expression Functions to continue to specify their type in a simple string format. | +| [UnmappedTypeStrings](./kibana-plugin-plugins-expressions-server.unmappedtypestrings.md) | Types used in Expressions that don't map to a primitive cleanly:date is typed as a number or string, and represents a date | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.overflow.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.overflow.md new file mode 100644 index 0000000000000..2b1d1a34cd46a --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.overflow.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Overflow](./kibana-plugin-plugins-expressions-server.overflow.md) + +## Overflow enum + +Enum of supported CSS `overflow` properties. + +Signature: + +```typescript +export declare enum Overflow +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| AUTO | "auto" | | +| HIDDEN | "hidden" | | +| SCROLL | "scroll" | | +| VISIBLE | "visible" | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.parse.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.parse.md new file mode 100644 index 0000000000000..ec2534986006f --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.parse.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [parse](./kibana-plugin-plugins-expressions-server.parse.md) + +## parse() function + +Signature: + +```typescript +export declare function parse(expression: E, startRule: S): S extends 'expression' ? ExpressionAstExpression : ExpressionAstArgument; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| expression | E | | +| startRule | S | | + +Returns: + +`S extends 'expression' ? ExpressionAstExpression : ExpressionAstArgument` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.parseexpression.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.parseexpression.md new file mode 100644 index 0000000000000..0d8547fd5243b --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.parseexpression.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [parseExpression](./kibana-plugin-plugins-expressions-server.parseexpression.md) + +## parseExpression() function + +Given expression pipeline string, returns parsed AST. + +Signature: + +```typescript +export declare function parseExpression(expression: string): ExpressionAstExpression; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| expression | string | | + +Returns: + +`ExpressionAstExpression` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.plugin.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.plugin.md new file mode 100644 index 0000000000000..79a7100ebf540 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.plugin.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [plugin](./kibana-plugin-plugins-expressions-server.plugin.md) + +## plugin() function + +Signature: + +```typescript +export declare function plugin(initializerContext: PluginInitializerContext): ExpressionsServerPlugin; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| initializerContext | PluginInitializerContext | | + +Returns: + +`ExpressionsServerPlugin` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseries.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseries.md new file mode 100644 index 0000000000000..f65efd705666d --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseries.md @@ -0,0 +1,16 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [PointSeries](./kibana-plugin-plugins-expressions-server.pointseries.md) + +## PointSeries type + +A `PointSeries` is a unique structure that represents dots on a chart. + +Signature: + +```typescript +export declare type PointSeries = ExpressionValueBoxed<'pointseries', { + columns: PointSeriesColumns; + rows: PointSeriesRow[]; +}>; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriescolumn.expression.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriescolumn.expression.md new file mode 100644 index 0000000000000..c857a9f29fa60 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriescolumn.expression.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [PointSeriesColumn](./kibana-plugin-plugins-expressions-server.pointseriescolumn.md) > [expression](./kibana-plugin-plugins-expressions-server.pointseriescolumn.expression.md) + +## PointSeriesColumn.expression property + +Signature: + +```typescript +expression: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriescolumn.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriescolumn.md new file mode 100644 index 0000000000000..5aec683421dd1 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriescolumn.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [PointSeriesColumn](./kibana-plugin-plugins-expressions-server.pointseriescolumn.md) + +## PointSeriesColumn interface + +Column in a PointSeries + +Signature: + +```typescript +export interface PointSeriesColumn +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [expression](./kibana-plugin-plugins-expressions-server.pointseriescolumn.expression.md) | string | | +| [role](./kibana-plugin-plugins-expressions-server.pointseriescolumn.role.md) | 'measure' | 'dimension' | | +| [type](./kibana-plugin-plugins-expressions-server.pointseriescolumn.type.md) | 'number' | 'string' | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriescolumn.role.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriescolumn.role.md new file mode 100644 index 0000000000000..1f6b770ecba15 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriescolumn.role.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [PointSeriesColumn](./kibana-plugin-plugins-expressions-server.pointseriescolumn.md) > [role](./kibana-plugin-plugins-expressions-server.pointseriescolumn.role.md) + +## PointSeriesColumn.role property + +Signature: + +```typescript +role: 'measure' | 'dimension'; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriescolumn.type.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriescolumn.type.md new file mode 100644 index 0000000000000..5cb51f460d722 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriescolumn.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [PointSeriesColumn](./kibana-plugin-plugins-expressions-server.pointseriescolumn.md) > [type](./kibana-plugin-plugins-expressions-server.pointseriescolumn.type.md) + +## PointSeriesColumn.type property + +Signature: + +```typescript +type: 'number' | 'string'; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriescolumnname.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriescolumnname.md new file mode 100644 index 0000000000000..2d8522b30903c --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriescolumnname.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [PointSeriesColumnName](./kibana-plugin-plugins-expressions-server.pointseriescolumnname.md) + +## PointSeriesColumnName type + +Allowed column names in a PointSeries + +Signature: + +```typescript +export declare type PointSeriesColumnName = 'x' | 'y' | 'color' | 'size' | 'text'; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriescolumns.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriescolumns.md new file mode 100644 index 0000000000000..f6eee6e2bc9d1 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriescolumns.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [PointSeriesColumns](./kibana-plugin-plugins-expressions-server.pointseriescolumns.md) + +## PointSeriesColumns type + +Represents a collection of valid Columns in a PointSeries + +Signature: + +```typescript +export declare type PointSeriesColumns = Record | {}; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriesrow.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriesrow.md new file mode 100644 index 0000000000000..d9a77305e9f99 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.pointseriesrow.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [PointSeriesRow](./kibana-plugin-plugins-expressions-server.pointseriesrow.md) + +## PointSeriesRow type + +Signature: + +```typescript +export declare type PointSeriesRow = Record; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.range.from.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.range.from.md new file mode 100644 index 0000000000000..f349681c1472f --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.range.from.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Range](./kibana-plugin-plugins-expressions-server.range.md) > [from](./kibana-plugin-plugins-expressions-server.range.from.md) + +## Range.from property + +Signature: + +```typescript +from: number; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.range.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.range.md new file mode 100644 index 0000000000000..d369d882757fc --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.range.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Range](./kibana-plugin-plugins-expressions-server.range.md) + +## Range interface + +Signature: + +```typescript +export interface Range +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [from](./kibana-plugin-plugins-expressions-server.range.from.md) | number | | +| [to](./kibana-plugin-plugins-expressions-server.range.to.md) | number | | +| [type](./kibana-plugin-plugins-expressions-server.range.type.md) | typeof name | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.range.to.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.range.to.md new file mode 100644 index 0000000000000..c5a1fe2fe2080 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.range.to.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Range](./kibana-plugin-plugins-expressions-server.range.md) > [to](./kibana-plugin-plugins-expressions-server.range.to.md) + +## Range.to property + +Signature: + +```typescript +to: number; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.range.type.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.range.type.md new file mode 100644 index 0000000000000..dd856dc0eb713 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.range.type.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Range](./kibana-plugin-plugins-expressions-server.range.md) > [type](./kibana-plugin-plugins-expressions-server.range.type.md) + +## Range.type property + +Signature: + +```typescript +type: typeof name; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.serializeddatatable.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.serializeddatatable.md new file mode 100644 index 0000000000000..12951f9323503 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.serializeddatatable.md @@ -0,0 +1,18 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [SerializedDatatable](./kibana-plugin-plugins-expressions-server.serializeddatatable.md) + +## SerializedDatatable interface + +Signature: + +```typescript +export interface SerializedDatatable extends Datatable +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [rows](./kibana-plugin-plugins-expressions-server.serializeddatatable.rows.md) | string[][] | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.serializeddatatable.rows.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.serializeddatatable.rows.md new file mode 100644 index 0000000000000..e82504f153f6b --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.serializeddatatable.rows.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [SerializedDatatable](./kibana-plugin-plugins-expressions-server.serializeddatatable.md) > [rows](./kibana-plugin-plugins-expressions-server.serializeddatatable.rows.md) + +## SerializedDatatable.rows property + +Signature: + +```typescript +rows: string[][]; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.serializedfieldformat.id.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.serializedfieldformat.id.md new file mode 100644 index 0000000000000..def3296aedcf7 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.serializedfieldformat.id.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [SerializedFieldFormat](./kibana-plugin-plugins-expressions-server.serializedfieldformat.md) > [id](./kibana-plugin-plugins-expressions-server.serializedfieldformat.id.md) + +## SerializedFieldFormat.id property + +Signature: + +```typescript +id?: string; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.serializedfieldformat.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.serializedfieldformat.md new file mode 100644 index 0000000000000..c62e830ccf7b9 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.serializedfieldformat.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [SerializedFieldFormat](./kibana-plugin-plugins-expressions-server.serializedfieldformat.md) + +## SerializedFieldFormat interface + +JSON representation of a field formatter configuration. Is used to carry information about how to format data in a data table as part of the column definition. + +Signature: + +```typescript +export interface SerializedFieldFormat> +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [id](./kibana-plugin-plugins-expressions-server.serializedfieldformat.id.md) | string | | +| [params](./kibana-plugin-plugins-expressions-server.serializedfieldformat.params.md) | TParams | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.serializedfieldformat.params.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.serializedfieldformat.params.md new file mode 100644 index 0000000000000..8861f729aa2b1 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.serializedfieldformat.params.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [SerializedFieldFormat](./kibana-plugin-plugins-expressions-server.serializedfieldformat.md) > [params](./kibana-plugin-plugins-expressions-server.serializedfieldformat.params.md) + +## SerializedFieldFormat.params property + +Signature: + +```typescript +params?: TParams; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.style.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.style.md new file mode 100644 index 0000000000000..e43addfd5ff30 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.style.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [Style](./kibana-plugin-plugins-expressions-server.style.md) + +## Style type + +Signature: + +```typescript +export declare type Style = ExpressionTypeStyle; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.textalignment.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.textalignment.md new file mode 100644 index 0000000000000..2adc12371b4be --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.textalignment.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [TextAlignment](./kibana-plugin-plugins-expressions-server.textalignment.md) + +## TextAlignment enum + +Enum of supported CSS `text-align` properties. + +Signature: + +```typescript +export declare enum TextAlignment +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| CENTER | "center" | | +| JUSTIFY | "justify" | | +| LEFT | "left" | | +| RIGHT | "right" | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.textdecoration.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.textdecoration.md new file mode 100644 index 0000000000000..98d9b38547baf --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.textdecoration.md @@ -0,0 +1,21 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [TextDecoration](./kibana-plugin-plugins-expressions-server.textdecoration.md) + +## TextDecoration enum + +Enum of supported CSS `text-decoration` properties. + +Signature: + +```typescript +export declare enum TextDecoration +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| NONE | "none" | | +| UNDERLINE | "underline" | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typesregistry._constructor_.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typesregistry._constructor_.md new file mode 100644 index 0000000000000..87290d88214d0 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typesregistry._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [TypesRegistry](./kibana-plugin-plugins-expressions-server.typesregistry.md) > [(constructor)](./kibana-plugin-plugins-expressions-server.typesregistry._constructor_.md) + +## TypesRegistry.(constructor) + +Constructs a new instance of the `TypesRegistry` class + +Signature: + +```typescript +constructor(executor: Executor); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| executor | Executor<any> | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typesregistry.get.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typesregistry.get.md new file mode 100644 index 0000000000000..c8d674eab50cd --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typesregistry.get.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [TypesRegistry](./kibana-plugin-plugins-expressions-server.typesregistry.md) > [get](./kibana-plugin-plugins-expressions-server.typesregistry.get.md) + +## TypesRegistry.get() method + +Signature: + +```typescript +get(id: string): ExpressionType | null; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| id | string | | + +Returns: + +`ExpressionType | null` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typesregistry.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typesregistry.md new file mode 100644 index 0000000000000..2c4d75e020035 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typesregistry.md @@ -0,0 +1,27 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [TypesRegistry](./kibana-plugin-plugins-expressions-server.typesregistry.md) + +## TypesRegistry class + +Signature: + +```typescript +export declare class TypesRegistry implements IRegistry +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(executor)](./kibana-plugin-plugins-expressions-server.typesregistry._constructor_.md) | | Constructs a new instance of the TypesRegistry class | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [get(id)](./kibana-plugin-plugins-expressions-server.typesregistry.get.md) | | | +| [register(typeDefinition)](./kibana-plugin-plugins-expressions-server.typesregistry.register.md) | | | +| [toArray()](./kibana-plugin-plugins-expressions-server.typesregistry.toarray.md) | | | +| [toJS()](./kibana-plugin-plugins-expressions-server.typesregistry.tojs.md) | | | + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typesregistry.register.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typesregistry.register.md new file mode 100644 index 0000000000000..935a862407dfe --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typesregistry.register.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [TypesRegistry](./kibana-plugin-plugins-expressions-server.typesregistry.md) > [register](./kibana-plugin-plugins-expressions-server.typesregistry.register.md) + +## TypesRegistry.register() method + +Signature: + +```typescript +register(typeDefinition: AnyExpressionTypeDefinition | (() => AnyExpressionTypeDefinition)): void; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| typeDefinition | AnyExpressionTypeDefinition | (() => AnyExpressionTypeDefinition) | | + +Returns: + +`void` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typesregistry.toarray.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typesregistry.toarray.md new file mode 100644 index 0000000000000..e3c6b13a22a58 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typesregistry.toarray.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [TypesRegistry](./kibana-plugin-plugins-expressions-server.typesregistry.md) > [toArray](./kibana-plugin-plugins-expressions-server.typesregistry.toarray.md) + +## TypesRegistry.toArray() method + +Signature: + +```typescript +toArray(): ExpressionType[]; +``` +Returns: + +`ExpressionType[]` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typesregistry.tojs.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typesregistry.tojs.md new file mode 100644 index 0000000000000..2ff258bd54e44 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typesregistry.tojs.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [TypesRegistry](./kibana-plugin-plugins-expressions-server.typesregistry.md) > [toJS](./kibana-plugin-plugins-expressions-server.typesregistry.tojs.md) + +## TypesRegistry.toJS() method + +Signature: + +```typescript +toJS(): Record; +``` +Returns: + +`Record` + diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typestring.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typestring.md new file mode 100644 index 0000000000000..af4d5ae0bf814 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typestring.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [TypeString](./kibana-plugin-plugins-expressions-server.typestring.md) + +## TypeString type + +If the type extends a Promise, we still need to return the string representation: + +`someArgument: Promise` results in `types: ['boolean', 'string']` + +Signature: + +```typescript +export declare type TypeString = KnownTypeToString>; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typetostring.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typetostring.md new file mode 100644 index 0000000000000..578438c03a0e5 --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.typetostring.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [TypeToString](./kibana-plugin-plugins-expressions-server.typetostring.md) + +## TypeToString type + +This can convert a type into a known Expression string representation of that type. For example, `TypeToString` will resolve to `'datatable'`. This allows Expression Functions to continue to specify their type in a simple string format. + +Signature: + +```typescript +export declare type TypeToString = KnownTypeToString | UnmappedTypeStrings; +``` diff --git a/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.unmappedtypestrings.md b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.unmappedtypestrings.md new file mode 100644 index 0000000000000..da872bfabce4f --- /dev/null +++ b/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.unmappedtypestrings.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-expressions-server](./kibana-plugin-plugins-expressions-server.md) > [UnmappedTypeStrings](./kibana-plugin-plugins-expressions-server.unmappedtypestrings.md) + +## UnmappedTypeStrings type + +Types used in Expressions that don't map to a primitive cleanly: + +`date` is typed as a number or string, and represents a date + +Signature: + +```typescript +export declare type UnmappedTypeStrings = 'date' | 'filter'; +``` diff --git a/docs/development/plugins/ui_actions/public/index.md b/docs/development/plugins/ui_actions/public/index.md new file mode 100644 index 0000000000000..cbc7035b880fa --- /dev/null +++ b/docs/development/plugins/ui_actions/public/index.md @@ -0,0 +1,12 @@ + + +[Home](./index.md) + +## API Reference + +## Packages + +| Package | Description | +| --- | --- | +| [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) | | + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.execute.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.execute.md new file mode 100644 index 0000000000000..22a520123cf3f --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.execute.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [Action](./kibana-plugin-plugins-ui_actions-public.action.md) > [execute](./kibana-plugin-plugins-ui_actions-public.action.execute.md) + +## Action.execute() method + +Executes the action. + +Signature: + +```typescript +execute(context: ActionExecutionContext): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| context | ActionExecutionContext<Context> | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.getdisplayname.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.getdisplayname.md new file mode 100644 index 0000000000000..cd8cc527e96ec --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.getdisplayname.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [Action](./kibana-plugin-plugins-ui_actions-public.action.md) > [getDisplayName](./kibana-plugin-plugins-ui_actions-public.action.getdisplayname.md) + +## Action.getDisplayName() method + +Returns a title to be displayed to the user. + +Signature: + +```typescript +getDisplayName(context: ActionExecutionContext): string; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| context | ActionExecutionContext<Context> | | + +Returns: + +`string` + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.gethref.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.gethref.md new file mode 100644 index 0000000000000..5ad9d5e24cf87 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.gethref.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [Action](./kibana-plugin-plugins-ui_actions-public.action.md) > [getHref](./kibana-plugin-plugins-ui_actions-public.action.gethref.md) + +## Action.getHref() method + +This method should return a link if this item can be clicked on. The link is used to navigate user if user middle-clicks it or Ctrl + clicks or right-clicks and selects "Open in new tab". + +Signature: + +```typescript +getHref?(context: ActionExecutionContext): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| context | ActionExecutionContext<Context> | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.geticontype.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.geticontype.md new file mode 100644 index 0000000000000..34d45c4ec75c2 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.geticontype.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [Action](./kibana-plugin-plugins-ui_actions-public.action.md) > [getIconType](./kibana-plugin-plugins-ui_actions-public.action.geticontype.md) + +## Action.getIconType() method + +Optional EUI icon type that can be displayed along with the title. + +Signature: + +```typescript +getIconType(context: ActionExecutionContext): string | undefined; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| context | ActionExecutionContext<Context> | | + +Returns: + +`string | undefined` + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.id.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.id.md new file mode 100644 index 0000000000000..e32a5c8592cce --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.id.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [Action](./kibana-plugin-plugins-ui_actions-public.action.md) > [id](./kibana-plugin-plugins-ui_actions-public.action.id.md) + +## Action.id property + +A unique identifier for this action instance. + +Signature: + +```typescript +id: string; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.iscompatible.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.iscompatible.md new file mode 100644 index 0000000000000..7a1f6cd23be17 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.iscompatible.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [Action](./kibana-plugin-plugins-ui_actions-public.action.md) > [isCompatible](./kibana-plugin-plugins-ui_actions-public.action.iscompatible.md) + +## Action.isCompatible() method + +Returns a promise that resolves to true if this action is compatible given the context, otherwise resolves to false. + +Signature: + +```typescript +isCompatible(context: ActionExecutionContext): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| context | ActionExecutionContext<Context> | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.md new file mode 100644 index 0000000000000..19af63a679de8 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.md @@ -0,0 +1,32 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [Action](./kibana-plugin-plugins-ui_actions-public.action.md) + +## Action interface + +Signature: + +```typescript +export interface Action extends Partial>> +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [id](./kibana-plugin-plugins-ui_actions-public.action.id.md) | string | A unique identifier for this action instance. | +| [MenuItem](./kibana-plugin-plugins-ui_actions-public.action.menuitem.md) | UiComponent<{
context: ActionExecutionContext<Context>;
}> | UiComponent to render when displaying this action as a context menu item. If not provided, getDisplayName will be used instead. | +| [order](./kibana-plugin-plugins-ui_actions-public.action.order.md) | number | Determined the order when there is more than one action matched to a trigger. Higher numbers are displayed first. | +| [type](./kibana-plugin-plugins-ui_actions-public.action.type.md) | T | The action type is what determines the context shape. | + +## Methods + +| Method | Description | +| --- | --- | +| [execute(context)](./kibana-plugin-plugins-ui_actions-public.action.execute.md) | Executes the action. | +| [getDisplayName(context)](./kibana-plugin-plugins-ui_actions-public.action.getdisplayname.md) | Returns a title to be displayed to the user. | +| [getHref(context)](./kibana-plugin-plugins-ui_actions-public.action.gethref.md) | This method should return a link if this item can be clicked on. The link is used to navigate user if user middle-clicks it or Ctrl + clicks or right-clicks and selects "Open in new tab". | +| [getIconType(context)](./kibana-plugin-plugins-ui_actions-public.action.geticontype.md) | Optional EUI icon type that can be displayed along with the title. | +| [isCompatible(context)](./kibana-plugin-plugins-ui_actions-public.action.iscompatible.md) | Returns a promise that resolves to true if this action is compatible given the context, otherwise resolves to false. | +| [shouldAutoExecute(context)](./kibana-plugin-plugins-ui_actions-public.action.shouldautoexecute.md) | Determines if action should be executed automatically, without first showing up in context menu. false by default. | + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.menuitem.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.menuitem.md new file mode 100644 index 0000000000000..ac2168b88e3be --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.menuitem.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [Action](./kibana-plugin-plugins-ui_actions-public.action.md) > [MenuItem](./kibana-plugin-plugins-ui_actions-public.action.menuitem.md) + +## Action.MenuItem property + +`UiComponent` to render when displaying this action as a context menu item. If not provided, `getDisplayName` will be used instead. + +Signature: + +```typescript +MenuItem?: UiComponent<{ + context: ActionExecutionContext; + }>; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.order.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.order.md new file mode 100644 index 0000000000000..ce9f66cfe5143 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.order.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [Action](./kibana-plugin-plugins-ui_actions-public.action.md) > [order](./kibana-plugin-plugins-ui_actions-public.action.order.md) + +## Action.order property + +Determined the order when there is more than one action matched to a trigger. Higher numbers are displayed first. + +Signature: + +```typescript +order?: number; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.shouldautoexecute.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.shouldautoexecute.md new file mode 100644 index 0000000000000..1a784f5dad2d5 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.shouldautoexecute.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [Action](./kibana-plugin-plugins-ui_actions-public.action.md) > [shouldAutoExecute](./kibana-plugin-plugins-ui_actions-public.action.shouldautoexecute.md) + +## Action.shouldAutoExecute() method + +Determines if action should be executed automatically, without first showing up in context menu. false by default. + +Signature: + +```typescript +shouldAutoExecute?(context: ActionExecutionContext): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| context | ActionExecutionContext<Context> | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.type.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.type.md new file mode 100644 index 0000000000000..c423df9d1324c --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action.type.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [Action](./kibana-plugin-plugins-ui_actions-public.action.md) > [type](./kibana-plugin-plugins-ui_actions-public.action.type.md) + +## Action.type property + +The action type is what determines the context shape. + +Signature: + +```typescript +readonly type: T; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action_visualize_field.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action_visualize_field.md new file mode 100644 index 0000000000000..25788d7aecc9f --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action_visualize_field.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [ACTION\_VISUALIZE\_FIELD](./kibana-plugin-plugins-ui_actions-public.action_visualize_field.md) + +## ACTION\_VISUALIZE\_FIELD variable + +Signature: + +```typescript +ACTION_VISUALIZE_FIELD = "ACTION_VISUALIZE_FIELD" +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action_visualize_geo_field.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action_visualize_geo_field.md new file mode 100644 index 0000000000000..c9ef93eff934b --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.action_visualize_geo_field.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [ACTION\_VISUALIZE\_GEO\_FIELD](./kibana-plugin-plugins-ui_actions-public.action_visualize_geo_field.md) + +## ACTION\_VISUALIZE\_GEO\_FIELD variable + +Signature: + +```typescript +ACTION_VISUALIZE_GEO_FIELD = "ACTION_VISUALIZE_GEO_FIELD" +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actionbytype.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actionbytype.md new file mode 100644 index 0000000000000..3ceb96adadb1a --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actionbytype.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [ActionByType](./kibana-plugin-plugins-ui_actions-public.actionbytype.md) + +## ActionByType type + +Signature: + +```typescript +export declare type ActionByType = Action; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actioncontextmapping.__.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actioncontextmapping.__.md new file mode 100644 index 0000000000000..eb7b1e5954ed2 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actioncontextmapping.__.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [ActionContextMapping](./kibana-plugin-plugins-ui_actions-public.actioncontextmapping.md) > [""](./kibana-plugin-plugins-ui_actions-public.actioncontextmapping.__.md) + +## ActionContextMapping."" property + +Signature: + +```typescript +[DEFAULT_ACTION]: BaseContext; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actioncontextmapping.action_visualize_field.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actioncontextmapping.action_visualize_field.md new file mode 100644 index 0000000000000..eb0547bbf8261 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actioncontextmapping.action_visualize_field.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [ActionContextMapping](./kibana-plugin-plugins-ui_actions-public.actioncontextmapping.md) > [ACTION\_VISUALIZE\_FIELD](./kibana-plugin-plugins-ui_actions-public.actioncontextmapping.action_visualize_field.md) + +## ActionContextMapping.ACTION\_VISUALIZE\_FIELD property + +Signature: + +```typescript +[ACTION_VISUALIZE_FIELD]: VisualizeFieldContext; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actioncontextmapping.action_visualize_geo_field.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actioncontextmapping.action_visualize_geo_field.md new file mode 100644 index 0000000000000..b44ed75106423 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actioncontextmapping.action_visualize_geo_field.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [ActionContextMapping](./kibana-plugin-plugins-ui_actions-public.actioncontextmapping.md) > [ACTION\_VISUALIZE\_GEO\_FIELD](./kibana-plugin-plugins-ui_actions-public.actioncontextmapping.action_visualize_geo_field.md) + +## ActionContextMapping.ACTION\_VISUALIZE\_GEO\_FIELD property + +Signature: + +```typescript +[ACTION_VISUALIZE_GEO_FIELD]: VisualizeFieldContext; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actioncontextmapping.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actioncontextmapping.md new file mode 100644 index 0000000000000..740e6ac63bfba --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actioncontextmapping.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [ActionContextMapping](./kibana-plugin-plugins-ui_actions-public.actioncontextmapping.md) + +## ActionContextMapping interface + +Signature: + +```typescript +export interface ActionContextMapping +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [""](./kibana-plugin-plugins-ui_actions-public.actioncontextmapping.__.md) | BaseContext | | +| [ACTION\_VISUALIZE\_FIELD](./kibana-plugin-plugins-ui_actions-public.actioncontextmapping.action_visualize_field.md) | VisualizeFieldContext | | +| [ACTION\_VISUALIZE\_GEO\_FIELD](./kibana-plugin-plugins-ui_actions-public.actioncontextmapping.action_visualize_geo_field.md) | VisualizeFieldContext | | + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actiondefinitionbytype.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actiondefinitionbytype.md new file mode 100644 index 0000000000000..ba4dc39088fe4 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actiondefinitionbytype.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [ActionDefinitionByType](./kibana-plugin-plugins-ui_actions-public.actiondefinitionbytype.md) + +## ActionDefinitionByType type + +Signature: + +```typescript +export declare type ActionDefinitionByType = ActionDefinition; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actionexecutioncontext.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actionexecutioncontext.md new file mode 100644 index 0000000000000..3271d86779959 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actionexecutioncontext.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [ActionExecutionContext](./kibana-plugin-plugins-ui_actions-public.actionexecutioncontext.md) + +## ActionExecutionContext type + +Action methods are executed with Context from trigger + [ActionExecutionMeta](./kibana-plugin-plugins-ui_actions-public.actionexecutionmeta.md) + +Signature: + +```typescript +export declare type ActionExecutionContext = Context & ActionExecutionMeta; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actionexecutionmeta.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actionexecutionmeta.md new file mode 100644 index 0000000000000..2056d8f9c7fc6 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actionexecutionmeta.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [ActionExecutionMeta](./kibana-plugin-plugins-ui_actions-public.actionexecutionmeta.md) + +## ActionExecutionMeta interface + +During action execution we can provide additional information, for example, trigger, that caused the action execution + +Signature: + +```typescript +export interface ActionExecutionMeta +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [trigger](./kibana-plugin-plugins-ui_actions-public.actionexecutionmeta.trigger.md) | Trigger | Trigger that executed the action | + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actionexecutionmeta.trigger.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actionexecutionmeta.trigger.md new file mode 100644 index 0000000000000..530c2fe514d2c --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actionexecutionmeta.trigger.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [ActionExecutionMeta](./kibana-plugin-plugins-ui_actions-public.actionexecutionmeta.md) > [trigger](./kibana-plugin-plugins-ui_actions-public.actionexecutionmeta.trigger.md) + +## ActionExecutionMeta.trigger property + +Trigger that executed the action + +Signature: + +```typescript +trigger: Trigger; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actiontype.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actiontype.md new file mode 100644 index 0000000000000..4916585531004 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.actiontype.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [ActionType](./kibana-plugin-plugins-ui_actions-public.actiontype.md) + +## ActionType type + +Signature: + +```typescript +export declare type ActionType = keyof ActionContextMapping; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.apply_filter_trigger.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.apply_filter_trigger.md new file mode 100644 index 0000000000000..94e66bf404f5c --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.apply_filter_trigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [APPLY\_FILTER\_TRIGGER](./kibana-plugin-plugins-ui_actions-public.apply_filter_trigger.md) + +## APPLY\_FILTER\_TRIGGER variable + +Signature: + +```typescript +APPLY_FILTER_TRIGGER = "FILTER_TRIGGER" +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.applyfiltertrigger.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.applyfiltertrigger.md new file mode 100644 index 0000000000000..e1fb6d342457e --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.applyfiltertrigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [applyFilterTrigger](./kibana-plugin-plugins-ui_actions-public.applyfiltertrigger.md) + +## applyFilterTrigger variable + +Signature: + +```typescript +applyFilterTrigger: Trigger<'FILTER_TRIGGER'> +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.buildcontextmenuforactions.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.buildcontextmenuforactions.md new file mode 100644 index 0000000000000..2d6c0ff106072 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.buildcontextmenuforactions.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [buildContextMenuForActions](./kibana-plugin-plugins-ui_actions-public.buildcontextmenuforactions.md) + +## buildContextMenuForActions() function + +Transforms an array of Actions to the shape EuiContextMenuPanel expects. + +Signature: + +```typescript +export declare function buildContextMenuForActions({ actions, title, closeMenu, }: BuildContextMenuParams): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| { actions, title, closeMenu, } | BuildContextMenuParams | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.createaction.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.createaction.md new file mode 100644 index 0000000000000..04ab36c2e3f58 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.createaction.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [createAction](./kibana-plugin-plugins-ui_actions-public.createaction.md) + +## createAction() function + +Signature: + +```typescript +export declare function createAction(action: ActionDefinitionByType): ActionByType; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| action | ActionDefinitionByType<T> | | + +Returns: + +`ActionByType` + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.incompatibleactionerror._constructor_.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.incompatibleactionerror._constructor_.md new file mode 100644 index 0000000000000..f06bb05270ff0 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.incompatibleactionerror._constructor_.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [IncompatibleActionError](./kibana-plugin-plugins-ui_actions-public.incompatibleactionerror.md) > [(constructor)](./kibana-plugin-plugins-ui_actions-public.incompatibleactionerror._constructor_.md) + +## IncompatibleActionError.(constructor) + +Constructs a new instance of the `IncompatibleActionError` class + +Signature: + +```typescript +constructor(); +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.incompatibleactionerror.code.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.incompatibleactionerror.code.md new file mode 100644 index 0000000000000..f16aa47438d72 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.incompatibleactionerror.code.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [IncompatibleActionError](./kibana-plugin-plugins-ui_actions-public.incompatibleactionerror.md) > [code](./kibana-plugin-plugins-ui_actions-public.incompatibleactionerror.code.md) + +## IncompatibleActionError.code property + +Signature: + +```typescript +code: string; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.incompatibleactionerror.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.incompatibleactionerror.md new file mode 100644 index 0000000000000..7c9943a53c2bb --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.incompatibleactionerror.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [IncompatibleActionError](./kibana-plugin-plugins-ui_actions-public.incompatibleactionerror.md) + +## IncompatibleActionError class + +Signature: + +```typescript +export declare class IncompatibleActionError extends Error +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)()](./kibana-plugin-plugins-ui_actions-public.incompatibleactionerror._constructor_.md) | | Constructs a new instance of the IncompatibleActionError class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [code](./kibana-plugin-plugins-ui_actions-public.incompatibleactionerror.code.md) | | string | | + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.md new file mode 100644 index 0000000000000..ce4e8c17b9dff --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.md @@ -0,0 +1,66 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) + +## kibana-plugin-plugins-ui\_actions-public package + +## Classes + +| Class | Description | +| --- | --- | +| [IncompatibleActionError](./kibana-plugin-plugins-ui_actions-public.incompatibleactionerror.md) | | +| [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) | | + +## Functions + +| Function | Description | +| --- | --- | +| [buildContextMenuForActions({ actions, title, closeMenu, })](./kibana-plugin-plugins-ui_actions-public.buildcontextmenuforactions.md) | Transforms an array of Actions to the shape EuiContextMenuPanel expects. | +| [createAction(action)](./kibana-plugin-plugins-ui_actions-public.createaction.md) | | +| [plugin(initializerContext)](./kibana-plugin-plugins-ui_actions-public.plugin.md) | | + +## Interfaces + +| Interface | Description | +| --- | --- | +| [Action](./kibana-plugin-plugins-ui_actions-public.action.md) | | +| [ActionContextMapping](./kibana-plugin-plugins-ui_actions-public.actioncontextmapping.md) | | +| [ActionExecutionMeta](./kibana-plugin-plugins-ui_actions-public.actionexecutionmeta.md) | During action execution we can provide additional information, for example, trigger, that caused the action execution | +| [Trigger](./kibana-plugin-plugins-ui_actions-public.trigger.md) | This is a convenience interface used to register a \*trigger\*.Trigger specifies a named anchor to which Action can be attached. When Trigger is being \*called\* it creates a Context object and passes it to the execute method of an Action.More than one action can be attached to a single trigger, in which case when trigger is \*called\* it first displays a context menu for user to pick a single action to execute. | +| [TriggerContextMapping](./kibana-plugin-plugins-ui_actions-public.triggercontextmapping.md) | | +| [UiActionsActionDefinition](./kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.md) | A convenience interface used to register an action. | +| [UiActionsPresentable](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.md) | Represents something that can be displayed to user in UI. | +| [UiActionsServiceParams](./kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.md) | | +| [VisualizeFieldContext](./kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.md) | | + +## Variables + +| Variable | Description | +| --- | --- | +| [ACTION\_VISUALIZE\_FIELD](./kibana-plugin-plugins-ui_actions-public.action_visualize_field.md) | | +| [ACTION\_VISUALIZE\_GEO\_FIELD](./kibana-plugin-plugins-ui_actions-public.action_visualize_geo_field.md) | | +| [APPLY\_FILTER\_TRIGGER](./kibana-plugin-plugins-ui_actions-public.apply_filter_trigger.md) | | +| [applyFilterTrigger](./kibana-plugin-plugins-ui_actions-public.applyfiltertrigger.md) | | +| [SELECT\_RANGE\_TRIGGER](./kibana-plugin-plugins-ui_actions-public.select_range_trigger.md) | | +| [selectRangeTrigger](./kibana-plugin-plugins-ui_actions-public.selectrangetrigger.md) | | +| [VALUE\_CLICK\_TRIGGER](./kibana-plugin-plugins-ui_actions-public.value_click_trigger.md) | | +| [valueClickTrigger](./kibana-plugin-plugins-ui_actions-public.valueclicktrigger.md) | | +| [VISUALIZE\_FIELD\_TRIGGER](./kibana-plugin-plugins-ui_actions-public.visualize_field_trigger.md) | | +| [VISUALIZE\_GEO\_FIELD\_TRIGGER](./kibana-plugin-plugins-ui_actions-public.visualize_geo_field_trigger.md) | | +| [visualizeFieldTrigger](./kibana-plugin-plugins-ui_actions-public.visualizefieldtrigger.md) | | +| [visualizeGeoFieldTrigger](./kibana-plugin-plugins-ui_actions-public.visualizegeofieldtrigger.md) | | + +## Type Aliases + +| Type Alias | Description | +| --- | --- | +| [ActionByType](./kibana-plugin-plugins-ui_actions-public.actionbytype.md) | | +| [ActionDefinitionByType](./kibana-plugin-plugins-ui_actions-public.actiondefinitionbytype.md) | | +| [ActionExecutionContext](./kibana-plugin-plugins-ui_actions-public.actionexecutioncontext.md) | Action methods are executed with Context from trigger + [ActionExecutionMeta](./kibana-plugin-plugins-ui_actions-public.actionexecutionmeta.md) | +| [ActionType](./kibana-plugin-plugins-ui_actions-public.actiontype.md) | | +| [TriggerContext](./kibana-plugin-plugins-ui_actions-public.triggercontext.md) | | +| [TriggerId](./kibana-plugin-plugins-ui_actions-public.triggerid.md) | | +| [UiActionsPresentableGrouping](./kibana-plugin-plugins-ui_actions-public.uiactionspresentablegrouping.md) | | +| [UiActionsSetup](./kibana-plugin-plugins-ui_actions-public.uiactionssetup.md) | | +| [UiActionsStart](./kibana-plugin-plugins-ui_actions-public.uiactionsstart.md) | | + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.plugin.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.plugin.md new file mode 100644 index 0000000000000..d9427317d4fc6 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.plugin.md @@ -0,0 +1,22 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [plugin](./kibana-plugin-plugins-ui_actions-public.plugin.md) + +## plugin() function + +Signature: + +```typescript +export declare function plugin(initializerContext: PluginInitializerContext): UiActionsPlugin; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| initializerContext | PluginInitializerContext | | + +Returns: + +`UiActionsPlugin` + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.select_range_trigger.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.select_range_trigger.md new file mode 100644 index 0000000000000..fd784ff17fa84 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.select_range_trigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [SELECT\_RANGE\_TRIGGER](./kibana-plugin-plugins-ui_actions-public.select_range_trigger.md) + +## SELECT\_RANGE\_TRIGGER variable + +Signature: + +```typescript +SELECT_RANGE_TRIGGER = "SELECT_RANGE_TRIGGER" +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.selectrangetrigger.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.selectrangetrigger.md new file mode 100644 index 0000000000000..0d9fa2d83ee57 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.selectrangetrigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [selectRangeTrigger](./kibana-plugin-plugins-ui_actions-public.selectrangetrigger.md) + +## selectRangeTrigger variable + +Signature: + +```typescript +selectRangeTrigger: Trigger<'SELECT_RANGE_TRIGGER'> +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.trigger.description.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.trigger.description.md new file mode 100644 index 0000000000000..76faaf8e1a691 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.trigger.description.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [Trigger](./kibana-plugin-plugins-ui_actions-public.trigger.md) > [description](./kibana-plugin-plugins-ui_actions-public.trigger.description.md) + +## Trigger.description property + +A longer user friendly description of the trigger. + +Signature: + +```typescript +description?: string; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.trigger.id.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.trigger.id.md new file mode 100644 index 0000000000000..426f17f9a0352 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.trigger.id.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [Trigger](./kibana-plugin-plugins-ui_actions-public.trigger.md) > [id](./kibana-plugin-plugins-ui_actions-public.trigger.id.md) + +## Trigger.id property + +Unique name of the trigger as identified in `ui_actions` plugin trigger registry, such as "SELECT\_RANGE\_TRIGGER" or "VALUE\_CLICK\_TRIGGER". + +Signature: + +```typescript +id: ID; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.trigger.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.trigger.md new file mode 100644 index 0000000000000..b69bba892f475 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.trigger.md @@ -0,0 +1,26 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [Trigger](./kibana-plugin-plugins-ui_actions-public.trigger.md) + +## Trigger interface + +This is a convenience interface used to register a \*trigger\*. + +`Trigger` specifies a named anchor to which `Action` can be attached. When `Trigger` is being \*called\* it creates a `Context` object and passes it to the `execute` method of an `Action`. + +More than one action can be attached to a single trigger, in which case when trigger is \*called\* it first displays a context menu for user to pick a single action to execute. + +Signature: + +```typescript +export interface Trigger +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [description](./kibana-plugin-plugins-ui_actions-public.trigger.description.md) | string | A longer user friendly description of the trigger. | +| [id](./kibana-plugin-plugins-ui_actions-public.trigger.id.md) | ID | Unique name of the trigger as identified in ui_actions plugin trigger registry, such as "SELECT\_RANGE\_TRIGGER" or "VALUE\_CLICK\_TRIGGER". | +| [title](./kibana-plugin-plugins-ui_actions-public.trigger.title.md) | string | User friendly name of the trigger. | + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.trigger.title.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.trigger.title.md new file mode 100644 index 0000000000000..ded71c8d0c437 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.trigger.title.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [Trigger](./kibana-plugin-plugins-ui_actions-public.trigger.md) > [title](./kibana-plugin-plugins-ui_actions-public.trigger.title.md) + +## Trigger.title property + +User friendly name of the trigger. + +Signature: + +```typescript +title?: string; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontext.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontext.md new file mode 100644 index 0000000000000..4ce95d27ecffa --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontext.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [TriggerContext](./kibana-plugin-plugins-ui_actions-public.triggercontext.md) + +## TriggerContext type + +Signature: + +```typescript +export declare type TriggerContext = T extends TriggerId ? TriggerContextMapping[T] : never; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.__.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.__.md new file mode 100644 index 0000000000000..17ad926f8ee82 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.__.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [TriggerContextMapping](./kibana-plugin-plugins-ui_actions-public.triggercontextmapping.md) > [""](./kibana-plugin-plugins-ui_actions-public.triggercontextmapping.__.md) + +## TriggerContextMapping."" property + +Signature: + +```typescript +[DEFAULT_TRIGGER]: TriggerContext; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.filter_trigger.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.filter_trigger.md new file mode 100644 index 0000000000000..0ccf8aa3d7415 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.filter_trigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [TriggerContextMapping](./kibana-plugin-plugins-ui_actions-public.triggercontextmapping.md) > [FILTER\_TRIGGER](./kibana-plugin-plugins-ui_actions-public.triggercontextmapping.filter_trigger.md) + +## TriggerContextMapping.FILTER\_TRIGGER property + +Signature: + +```typescript +[APPLY_FILTER_TRIGGER]: ApplyGlobalFilterActionContext; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.md new file mode 100644 index 0000000000000..9db44d4dc7b05 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.md @@ -0,0 +1,23 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [TriggerContextMapping](./kibana-plugin-plugins-ui_actions-public.triggercontextmapping.md) + +## TriggerContextMapping interface + +Signature: + +```typescript +export interface TriggerContextMapping +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [""](./kibana-plugin-plugins-ui_actions-public.triggercontextmapping.__.md) | TriggerContext | | +| [FILTER\_TRIGGER](./kibana-plugin-plugins-ui_actions-public.triggercontextmapping.filter_trigger.md) | ApplyGlobalFilterActionContext | | +| [SELECT\_RANGE\_TRIGGER](./kibana-plugin-plugins-ui_actions-public.triggercontextmapping.select_range_trigger.md) | RangeSelectContext | | +| [VALUE\_CLICK\_TRIGGER](./kibana-plugin-plugins-ui_actions-public.triggercontextmapping.value_click_trigger.md) | ValueClickContext | | +| [VISUALIZE\_FIELD\_TRIGGER](./kibana-plugin-plugins-ui_actions-public.triggercontextmapping.visualize_field_trigger.md) | VisualizeFieldContext | | +| [VISUALIZE\_GEO\_FIELD\_TRIGGER](./kibana-plugin-plugins-ui_actions-public.triggercontextmapping.visualize_geo_field_trigger.md) | VisualizeFieldContext | | + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.select_range_trigger.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.select_range_trigger.md new file mode 100644 index 0000000000000..c5ef6843390b3 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.select_range_trigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [TriggerContextMapping](./kibana-plugin-plugins-ui_actions-public.triggercontextmapping.md) > [SELECT\_RANGE\_TRIGGER](./kibana-plugin-plugins-ui_actions-public.triggercontextmapping.select_range_trigger.md) + +## TriggerContextMapping.SELECT\_RANGE\_TRIGGER property + +Signature: + +```typescript +[SELECT_RANGE_TRIGGER]: RangeSelectContext; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.value_click_trigger.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.value_click_trigger.md new file mode 100644 index 0000000000000..129144a66cee5 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.value_click_trigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [TriggerContextMapping](./kibana-plugin-plugins-ui_actions-public.triggercontextmapping.md) > [VALUE\_CLICK\_TRIGGER](./kibana-plugin-plugins-ui_actions-public.triggercontextmapping.value_click_trigger.md) + +## TriggerContextMapping.VALUE\_CLICK\_TRIGGER property + +Signature: + +```typescript +[VALUE_CLICK_TRIGGER]: ValueClickContext; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.visualize_field_trigger.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.visualize_field_trigger.md new file mode 100644 index 0000000000000..feaaffac8a234 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.visualize_field_trigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [TriggerContextMapping](./kibana-plugin-plugins-ui_actions-public.triggercontextmapping.md) > [VISUALIZE\_FIELD\_TRIGGER](./kibana-plugin-plugins-ui_actions-public.triggercontextmapping.visualize_field_trigger.md) + +## TriggerContextMapping.VISUALIZE\_FIELD\_TRIGGER property + +Signature: + +```typescript +[VISUALIZE_FIELD_TRIGGER]: VisualizeFieldContext; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.visualize_geo_field_trigger.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.visualize_geo_field_trigger.md new file mode 100644 index 0000000000000..023490a2ae027 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggercontextmapping.visualize_geo_field_trigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [TriggerContextMapping](./kibana-plugin-plugins-ui_actions-public.triggercontextmapping.md) > [VISUALIZE\_GEO\_FIELD\_TRIGGER](./kibana-plugin-plugins-ui_actions-public.triggercontextmapping.visualize_geo_field_trigger.md) + +## TriggerContextMapping.VISUALIZE\_GEO\_FIELD\_TRIGGER property + +Signature: + +```typescript +[VISUALIZE_GEO_FIELD_TRIGGER]: VisualizeFieldContext; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggerid.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggerid.md new file mode 100644 index 0000000000000..6e5a234e286f9 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.triggerid.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [TriggerId](./kibana-plugin-plugins-ui_actions-public.triggerid.md) + +## TriggerId type + +Signature: + +```typescript +export declare type TriggerId = keyof TriggerContextMapping; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.execute.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.execute.md new file mode 100644 index 0000000000000..a2cf61ecc1306 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.execute.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsActionDefinition](./kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.md) > [execute](./kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.execute.md) + +## UiActionsActionDefinition.execute() method + +Executes the action. + +Signature: + +```typescript +execute(context: ActionDefinitionContext): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| context | ActionDefinitionContext<Context> | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.gethref.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.gethref.md new file mode 100644 index 0000000000000..83fee1233a206 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.gethref.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsActionDefinition](./kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.md) > [getHref](./kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.gethref.md) + +## UiActionsActionDefinition.getHref() method + +This method should return a link if this item can be clicked on. The link is used to navigate user if user middle-clicks it or Ctrl + clicks or right-clicks and selects "Open in new tab". + +Signature: + +```typescript +getHref?(context: ActionDefinitionContext): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| context | ActionDefinitionContext<Context> | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.id.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.id.md new file mode 100644 index 0000000000000..01fa6abce3b4a --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.id.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsActionDefinition](./kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.md) > [id](./kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.id.md) + +## UiActionsActionDefinition.id property + +ID of the action that uniquely identifies this action in the actions registry. + +Signature: + +```typescript +readonly id: string; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.iscompatible.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.iscompatible.md new file mode 100644 index 0000000000000..736cc40c4243f --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.iscompatible.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsActionDefinition](./kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.md) > [isCompatible](./kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.iscompatible.md) + +## UiActionsActionDefinition.isCompatible() method + +Returns a promise that resolves to true if this item is compatible given the context and should be displayed to user, otherwise resolves to false. + +Signature: + +```typescript +isCompatible?(context: ActionDefinitionContext): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| context | ActionDefinitionContext<Context> | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.md new file mode 100644 index 0000000000000..7c873715795e9 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.md @@ -0,0 +1,30 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsActionDefinition](./kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.md) + +## UiActionsActionDefinition interface + +A convenience interface used to register an action. + +Signature: + +```typescript +export interface ActionDefinition extends Partial>> +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [id](./kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.id.md) | string | ID of the action that uniquely identifies this action in the actions registry. | +| [type](./kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.type.md) | ActionType | ID of the factory for this action. Used to construct dynamic actions. | + +## Methods + +| Method | Description | +| --- | --- | +| [execute(context)](./kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.execute.md) | Executes the action. | +| [getHref(context)](./kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.gethref.md) | This method should return a link if this item can be clicked on. The link is used to navigate user if user middle-clicks it or Ctrl + clicks or right-clicks and selects "Open in new tab". | +| [isCompatible(context)](./kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.iscompatible.md) | Returns a promise that resolves to true if this item is compatible given the context and should be displayed to user, otherwise resolves to false. | +| [shouldAutoExecute(context)](./kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.shouldautoexecute.md) | Determines if action should be executed automatically, without first showing up in context menu. false by default. | + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.shouldautoexecute.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.shouldautoexecute.md new file mode 100644 index 0000000000000..04b9975f3b92e --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.shouldautoexecute.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsActionDefinition](./kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.md) > [shouldAutoExecute](./kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.shouldautoexecute.md) + +## UiActionsActionDefinition.shouldAutoExecute() method + +Determines if action should be executed automatically, without first showing up in context menu. false by default. + +Signature: + +```typescript +shouldAutoExecute?(context: ActionDefinitionContext): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| context | ActionDefinitionContext<Context> | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.type.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.type.md new file mode 100644 index 0000000000000..125f834e9036e --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.type.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsActionDefinition](./kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.md) > [type](./kibana-plugin-plugins-ui_actions-public.uiactionsactiondefinition.type.md) + +## UiActionsActionDefinition.type property + +ID of the factory for this action. Used to construct dynamic actions. + +Signature: + +```typescript +readonly type?: ActionType; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.getdisplayname.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.getdisplayname.md new file mode 100644 index 0000000000000..986ad4afa5a48 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.getdisplayname.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsPresentable](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.md) > [getDisplayName](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.getdisplayname.md) + +## UiActionsPresentable.getDisplayName() method + +Returns a title to be displayed to the user. + +Signature: + +```typescript +getDisplayName(context: Context): string; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| context | Context | | + +Returns: + +`string` + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.getdisplaynametooltip.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.getdisplaynametooltip.md new file mode 100644 index 0000000000000..8fc859d5713e6 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.getdisplaynametooltip.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsPresentable](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.md) > [getDisplayNameTooltip](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.getdisplaynametooltip.md) + +## UiActionsPresentable.getDisplayNameTooltip() method + +Returns tooltip text which should be displayed when user hovers this object. Should return empty string if tooltip should not be displayed. + +Signature: + +```typescript +getDisplayNameTooltip(context: Context): string; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| context | Context | | + +Returns: + +`string` + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.gethref.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.gethref.md new file mode 100644 index 0000000000000..0c9bd434ff331 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.gethref.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsPresentable](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.md) > [getHref](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.gethref.md) + +## UiActionsPresentable.getHref() method + +This method should return a link if this item can be clicked on. The link is used to navigate user if user middle-clicks it or Ctrl + clicks or right-clicks and selects "Open in new tab". + +Signature: + +```typescript +getHref?(context: Context): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| context | Context | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.geticontype.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.geticontype.md new file mode 100644 index 0000000000000..8bf5af0f3b7e2 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.geticontype.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsPresentable](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.md) > [getIconType](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.geticontype.md) + +## UiActionsPresentable.getIconType() method + +Optional EUI icon type that can be displayed along with the title. + +Signature: + +```typescript +getIconType(context: Context): string | undefined; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| context | Context | | + +Returns: + +`string | undefined` + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.grouping.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.grouping.md new file mode 100644 index 0000000000000..6b160becf1afc --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.grouping.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsPresentable](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.md) > [grouping](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.grouping.md) + +## UiActionsPresentable.grouping property + +Grouping where this item should appear as a submenu. Each entry is a new sub-menu level. For example, used to show drilldowns and sharing options in panel context menu in a sub-menu. + +Signature: + +```typescript +readonly grouping?: PresentableGrouping; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.id.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.id.md new file mode 100644 index 0000000000000..e98401d95cba8 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.id.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsPresentable](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.md) > [id](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.id.md) + +## UiActionsPresentable.id property + +ID that uniquely identifies this object. + +Signature: + +```typescript +readonly id: string; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.iscompatible.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.iscompatible.md new file mode 100644 index 0000000000000..073f75c840bcd --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.iscompatible.md @@ -0,0 +1,24 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsPresentable](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.md) > [isCompatible](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.iscompatible.md) + +## UiActionsPresentable.isCompatible() method + +Returns a promise that resolves to true if this item is compatible given the context and should be displayed to user, otherwise resolves to false. + +Signature: + +```typescript +isCompatible(context: Context): Promise; +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| context | Context | | + +Returns: + +`Promise` + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.md new file mode 100644 index 0000000000000..03fa7fb6e447e --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.md @@ -0,0 +1,33 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsPresentable](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.md) + +## UiActionsPresentable interface + +Represents something that can be displayed to user in UI. + +Signature: + +```typescript +export interface Presentable +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [grouping](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.grouping.md) | PresentableGrouping<Context> | Grouping where this item should appear as a submenu. Each entry is a new sub-menu level. For example, used to show drilldowns and sharing options in panel context menu in a sub-menu. | +| [id](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.id.md) | string | ID that uniquely identifies this object. | +| [MenuItem](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.menuitem.md) | UiComponent<{
context: Context;
}> | UiComponent to render when displaying this entity as a context menu item. If not provided, getDisplayName will be used instead. | +| [order](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.order.md) | number | Determines the display order in relation to other items. Higher numbers are displayed first. | + +## Methods + +| Method | Description | +| --- | --- | +| [getDisplayName(context)](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.getdisplayname.md) | Returns a title to be displayed to the user. | +| [getDisplayNameTooltip(context)](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.getdisplaynametooltip.md) | Returns tooltip text which should be displayed when user hovers this object. Should return empty string if tooltip should not be displayed. | +| [getHref(context)](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.gethref.md) | This method should return a link if this item can be clicked on. The link is used to navigate user if user middle-clicks it or Ctrl + clicks or right-clicks and selects "Open in new tab". | +| [getIconType(context)](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.geticontype.md) | Optional EUI icon type that can be displayed along with the title. | +| [isCompatible(context)](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.iscompatible.md) | Returns a promise that resolves to true if this item is compatible given the context and should be displayed to user, otherwise resolves to false. | + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.menuitem.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.menuitem.md new file mode 100644 index 0000000000000..42afe6b8361f0 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.menuitem.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsPresentable](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.md) > [MenuItem](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.menuitem.md) + +## UiActionsPresentable.MenuItem property + +`UiComponent` to render when displaying this entity as a context menu item. If not provided, `getDisplayName` will be used instead. + +Signature: + +```typescript +readonly MenuItem?: UiComponent<{ + context: Context; + }>; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.order.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.order.md new file mode 100644 index 0000000000000..0bbf80dc89211 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentable.order.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsPresentable](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.md) > [order](./kibana-plugin-plugins-ui_actions-public.uiactionspresentable.order.md) + +## UiActionsPresentable.order property + +Determines the display order in relation to other items. Higher numbers are displayed first. + +Signature: + +```typescript +readonly order: number; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentablegrouping.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentablegrouping.md new file mode 100644 index 0000000000000..a61ff65e39c69 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionspresentablegrouping.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsPresentableGrouping](./kibana-plugin-plugins-ui_actions-public.uiactionspresentablegrouping.md) + +## UiActionsPresentableGrouping type + +Signature: + +```typescript +export declare type PresentableGrouping = Array>; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice._constructor_.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice._constructor_.md new file mode 100644 index 0000000000000..ff272245dbbf9 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice._constructor_.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) > [(constructor)](./kibana-plugin-plugins-ui_actions-public.uiactionsservice._constructor_.md) + +## UiActionsService.(constructor) + +Constructs a new instance of the `UiActionsService` class + +Signature: + +```typescript +constructor({ triggers, actions, triggerToActions, }?: UiActionsServiceParams); +``` + +## Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| { triggers, actions, triggerToActions, } | UiActionsServiceParams | | + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.actions.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.actions.md new file mode 100644 index 0000000000000..aaf4cebaf841c --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.actions.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) > [actions](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.actions.md) + +## UiActionsService.actions property + +Signature: + +```typescript +protected readonly actions: ActionRegistry; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.addtriggeraction.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.addtriggeraction.md new file mode 100644 index 0000000000000..1782eef92442c --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.addtriggeraction.md @@ -0,0 +1,15 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) > [addTriggerAction](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.addtriggeraction.md) + +## UiActionsService.addTriggerAction property + +`addTriggerAction` is similar to `attachAction` as it attaches action to a trigger, but it also registers the action, if it has not been registered, yet. + +`addTriggerAction` also infers better typing of the `action` argument. + +Signature: + +```typescript +readonly addTriggerAction: (triggerId: T, action: ActionDefinition | Action) => void; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.attachaction.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.attachaction.md new file mode 100644 index 0000000000000..19f215a96b23b --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.attachaction.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) > [attachAction](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.attachaction.md) + +## UiActionsService.attachAction property + +Signature: + +```typescript +readonly attachAction: (triggerId: T, actionId: string) => void; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.clear.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.clear.md new file mode 100644 index 0000000000000..024c7e3c3f85a --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.clear.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) > [clear](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.clear.md) + +## UiActionsService.clear property + +Removes all registered triggers and actions. + +Signature: + +```typescript +readonly clear: () => void; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.detachaction.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.detachaction.md new file mode 100644 index 0000000000000..a6ff2489c6f0e --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.detachaction.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) > [detachAction](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.detachaction.md) + +## UiActionsService.detachAction property + +Signature: + +```typescript +readonly detachAction: (triggerId: TriggerId, actionId: string) => void; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.executetriggeractions.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.executetriggeractions.md new file mode 100644 index 0000000000000..1bb6ca1115248 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.executetriggeractions.md @@ -0,0 +1,16 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) > [executeTriggerActions](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.executetriggeractions.md) + +## UiActionsService.executeTriggerActions property + +> Warning: This API is now obsolete. +> +> Use `plugins.uiActions.getTrigger(triggerId).exec(params)` instead. +> + +Signature: + +```typescript +readonly executeTriggerActions: (triggerId: T, context: TriggerContext) => Promise; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.executionservice.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.executionservice.md new file mode 100644 index 0000000000000..06384cc110a59 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.executionservice.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) > [executionService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.executionservice.md) + +## UiActionsService.executionService property + +Signature: + +```typescript +readonly executionService: UiActionsExecutionService; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.fork.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.fork.md new file mode 100644 index 0000000000000..2b7a43a44cca6 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.fork.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) > [fork](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.fork.md) + +## UiActionsService.fork property + +"Fork" a separate instance of `UiActionsService` that inherits all existing triggers and actions, but going forward all new triggers and actions added to this instance of `UiActionsService` are only available within this instance. + +Signature: + +```typescript +readonly fork: () => UiActionsService; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.getaction.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.getaction.md new file mode 100644 index 0000000000000..0c4584a07b569 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.getaction.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) > [getAction](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.getaction.md) + +## UiActionsService.getAction property + +Signature: + +```typescript +readonly getAction: >(id: string) => Action, "" | "ACTION_VISUALIZE_FIELD" | "ACTION_VISUALIZE_GEO_FIELD" | "ACTION_CUSTOMIZE_PANEL" | "ACTION_ADD_PANEL" | "openInspector" | "deletePanel" | "editPanel" | "togglePanel" | "replacePanel" | "clonePanel" | "addToFromLibrary" | "unlinkFromLibrary" | "ACTION_LIBRARY_NOTIFICATION" | "ACTION_GLOBAL_APPLY_FILTER" | "ACTION_SELECT_RANGE" | "ACTION_VALUE_CLICK">; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.gettrigger.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.gettrigger.md new file mode 100644 index 0000000000000..d44dc4e43a52e --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.gettrigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) > [getTrigger](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.gettrigger.md) + +## UiActionsService.getTrigger property + +Signature: + +```typescript +readonly getTrigger: (triggerId: T) => TriggerContract; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.gettriggeractions.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.gettriggeractions.md new file mode 100644 index 0000000000000..c65a9a992da2e --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.gettriggeractions.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) > [getTriggerActions](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.gettriggeractions.md) + +## UiActionsService.getTriggerActions property + +Signature: + +```typescript +readonly getTriggerActions: (triggerId: T) => Action[]; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.gettriggercompatibleactions.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.gettriggercompatibleactions.md new file mode 100644 index 0000000000000..751abe332b08e --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.gettriggercompatibleactions.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) > [getTriggerCompatibleActions](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.gettriggercompatibleactions.md) + +## UiActionsService.getTriggerCompatibleActions property + +Signature: + +```typescript +readonly getTriggerCompatibleActions: (triggerId: T, context: TriggerContextMapping[T]) => Promise[]>; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.hasaction.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.hasaction.md new file mode 100644 index 0000000000000..2287cb3052864 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.hasaction.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) > [hasAction](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.hasaction.md) + +## UiActionsService.hasAction property + +Signature: + +```typescript +readonly hasAction: (actionId: string) => boolean; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.md new file mode 100644 index 0000000000000..c372eb113d682 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.md @@ -0,0 +1,41 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) + +## UiActionsService class + +Signature: + +```typescript +export declare class UiActionsService +``` + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)({ triggers, actions, triggerToActions, })](./kibana-plugin-plugins-ui_actions-public.uiactionsservice._constructor_.md) | | Constructs a new instance of the UiActionsService class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [actions](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.actions.md) | | ActionRegistry | | +| [addTriggerAction](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.addtriggeraction.md) | | <T extends "" | "SELECT_RANGE_TRIGGER" | "VALUE_CLICK_TRIGGER" | "FILTER_TRIGGER" | "VISUALIZE_FIELD_TRIGGER" | "VISUALIZE_GEO_FIELD_TRIGGER" | "CONTEXT_MENU_TRIGGER" | "PANEL_BADGE_TRIGGER" | "PANEL_NOTIFICATION_TRIGGER">(triggerId: T, action: ActionDefinition<TriggerContextMapping[T]> | Action<TriggerContextMapping[T], "" | "ACTION_VISUALIZE_FIELD" | "ACTION_VISUALIZE_GEO_FIELD" | "ACTION_CUSTOMIZE_PANEL" | "ACTION_ADD_PANEL" | "openInspector" | "deletePanel" | "editPanel" | "togglePanel" | "replacePanel" | "clonePanel" | "addToFromLibrary" | "unlinkFromLibrary" | "ACTION_LIBRARY_NOTIFICATION" | "ACTION_GLOBAL_APPLY_FILTER" | "ACTION_SELECT_RANGE" | "ACTION_VALUE_CLICK">) => void | addTriggerAction is similar to attachAction as it attaches action to a trigger, but it also registers the action, if it has not been registered, yet.addTriggerAction also infers better typing of the action argument. | +| [attachAction](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.attachaction.md) | | <T extends "" | "SELECT_RANGE_TRIGGER" | "VALUE_CLICK_TRIGGER" | "FILTER_TRIGGER" | "VISUALIZE_FIELD_TRIGGER" | "VISUALIZE_GEO_FIELD_TRIGGER" | "CONTEXT_MENU_TRIGGER" | "PANEL_BADGE_TRIGGER" | "PANEL_NOTIFICATION_TRIGGER">(triggerId: T, actionId: string) => void | | +| [clear](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.clear.md) | | () => void | Removes all registered triggers and actions. | +| [detachAction](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.detachaction.md) | | (triggerId: TriggerId, actionId: string) => void | | +| [executeTriggerActions](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.executetriggeractions.md) | | <T extends "" | "SELECT_RANGE_TRIGGER" | "VALUE_CLICK_TRIGGER" | "FILTER_TRIGGER" | "VISUALIZE_FIELD_TRIGGER" | "VISUALIZE_GEO_FIELD_TRIGGER" | "CONTEXT_MENU_TRIGGER" | "PANEL_BADGE_TRIGGER" | "PANEL_NOTIFICATION_TRIGGER">(triggerId: T, context: TriggerContext<T>) => Promise<void> | | +| [executionService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.executionservice.md) | | UiActionsExecutionService | | +| [fork](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.fork.md) | | () => UiActionsService | "Fork" a separate instance of UiActionsService that inherits all existing triggers and actions, but going forward all new triggers and actions added to this instance of UiActionsService are only available within this instance. | +| [getAction](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.getaction.md) | | <T extends ActionDefinition<{}>>(id: string) => Action<ActionContext<T>, "" | "ACTION_VISUALIZE_FIELD" | "ACTION_VISUALIZE_GEO_FIELD" | "ACTION_CUSTOMIZE_PANEL" | "ACTION_ADD_PANEL" | "openInspector" | "deletePanel" | "editPanel" | "togglePanel" | "replacePanel" | "clonePanel" | "addToFromLibrary" | "unlinkFromLibrary" | "ACTION_LIBRARY_NOTIFICATION" | "ACTION_GLOBAL_APPLY_FILTER" | "ACTION_SELECT_RANGE" | "ACTION_VALUE_CLICK"> | | +| [getTrigger](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.gettrigger.md) | | <T extends "" | "SELECT_RANGE_TRIGGER" | "VALUE_CLICK_TRIGGER" | "FILTER_TRIGGER" | "VISUALIZE_FIELD_TRIGGER" | "VISUALIZE_GEO_FIELD_TRIGGER" | "CONTEXT_MENU_TRIGGER" | "PANEL_BADGE_TRIGGER" | "PANEL_NOTIFICATION_TRIGGER">(triggerId: T) => TriggerContract<T> | | +| [getTriggerActions](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.gettriggeractions.md) | | <T extends "" | "SELECT_RANGE_TRIGGER" | "VALUE_CLICK_TRIGGER" | "FILTER_TRIGGER" | "VISUALIZE_FIELD_TRIGGER" | "VISUALIZE_GEO_FIELD_TRIGGER" | "CONTEXT_MENU_TRIGGER" | "PANEL_BADGE_TRIGGER" | "PANEL_NOTIFICATION_TRIGGER">(triggerId: T) => Action<TriggerContextMapping[T], "" | "ACTION_VISUALIZE_FIELD" | "ACTION_VISUALIZE_GEO_FIELD" | "ACTION_CUSTOMIZE_PANEL" | "ACTION_ADD_PANEL" | "openInspector" | "deletePanel" | "editPanel" | "togglePanel" | "replacePanel" | "clonePanel" | "addToFromLibrary" | "unlinkFromLibrary" | "ACTION_LIBRARY_NOTIFICATION" | "ACTION_GLOBAL_APPLY_FILTER" | "ACTION_SELECT_RANGE" | "ACTION_VALUE_CLICK">[] | | +| [getTriggerCompatibleActions](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.gettriggercompatibleactions.md) | | <T extends "" | "SELECT_RANGE_TRIGGER" | "VALUE_CLICK_TRIGGER" | "FILTER_TRIGGER" | "VISUALIZE_FIELD_TRIGGER" | "VISUALIZE_GEO_FIELD_TRIGGER" | "CONTEXT_MENU_TRIGGER" | "PANEL_BADGE_TRIGGER" | "PANEL_NOTIFICATION_TRIGGER">(triggerId: T, context: TriggerContextMapping[T]) => Promise<Action<TriggerContextMapping[T], "" | "ACTION_VISUALIZE_FIELD" | "ACTION_VISUALIZE_GEO_FIELD" | "ACTION_CUSTOMIZE_PANEL" | "ACTION_ADD_PANEL" | "openInspector" | "deletePanel" | "editPanel" | "togglePanel" | "replacePanel" | "clonePanel" | "addToFromLibrary" | "unlinkFromLibrary" | "ACTION_LIBRARY_NOTIFICATION" | "ACTION_GLOBAL_APPLY_FILTER" | "ACTION_SELECT_RANGE" | "ACTION_VALUE_CLICK">[]> | | +| [hasAction](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.hasaction.md) | | (actionId: string) => boolean | | +| [registerAction](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.registeraction.md) | | <A extends ActionDefinition<{}>>(definition: A) => Action<ActionContext<A>, "" | "ACTION_VISUALIZE_FIELD" | "ACTION_VISUALIZE_GEO_FIELD" | "ACTION_CUSTOMIZE_PANEL" | "ACTION_ADD_PANEL" | "openInspector" | "deletePanel" | "editPanel" | "togglePanel" | "replacePanel" | "clonePanel" | "addToFromLibrary" | "unlinkFromLibrary" | "ACTION_LIBRARY_NOTIFICATION" | "ACTION_GLOBAL_APPLY_FILTER" | "ACTION_SELECT_RANGE" | "ACTION_VALUE_CLICK"> | | +| [registerTrigger](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.registertrigger.md) | | (trigger: Trigger) => void | | +| [triggers](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.triggers.md) | | TriggerRegistry | | +| [triggerToActions](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.triggertoactions.md) | | TriggerToActionsRegistry | | +| [unregisterAction](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.unregisteraction.md) | | (actionId: string) => void | | + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.registeraction.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.registeraction.md new file mode 100644 index 0000000000000..c71e86fc09dc7 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.registeraction.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) > [registerAction](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.registeraction.md) + +## UiActionsService.registerAction property + +Signature: + +```typescript +readonly registerAction:
>(definition: A) => Action, "" | "ACTION_VISUALIZE_FIELD" | "ACTION_VISUALIZE_GEO_FIELD" | "ACTION_CUSTOMIZE_PANEL" | "ACTION_ADD_PANEL" | "openInspector" | "deletePanel" | "editPanel" | "togglePanel" | "replacePanel" | "clonePanel" | "addToFromLibrary" | "unlinkFromLibrary" | "ACTION_LIBRARY_NOTIFICATION" | "ACTION_GLOBAL_APPLY_FILTER" | "ACTION_SELECT_RANGE" | "ACTION_VALUE_CLICK">; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.registertrigger.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.registertrigger.md new file mode 100644 index 0000000000000..3002409c02304 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.registertrigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) > [registerTrigger](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.registertrigger.md) + +## UiActionsService.registerTrigger property + +Signature: + +```typescript +readonly registerTrigger: (trigger: Trigger) => void; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.triggers.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.triggers.md new file mode 100644 index 0000000000000..07d480286e771 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.triggers.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) > [triggers](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.triggers.md) + +## UiActionsService.triggers property + +Signature: + +```typescript +protected readonly triggers: TriggerRegistry; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.triggertoactions.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.triggertoactions.md new file mode 100644 index 0000000000000..1b79a1dd84593 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.triggertoactions.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) > [triggerToActions](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.triggertoactions.md) + +## UiActionsService.triggerToActions property + +Signature: + +```typescript +protected readonly triggerToActions: TriggerToActionsRegistry; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.unregisteraction.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.unregisteraction.md new file mode 100644 index 0000000000000..0e0eb971c1a7b --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsservice.unregisteraction.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsService](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.md) > [unregisterAction](./kibana-plugin-plugins-ui_actions-public.uiactionsservice.unregisteraction.md) + +## UiActionsService.unregisterAction property + +Signature: + +```typescript +readonly unregisterAction: (actionId: string) => void; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.actions.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.actions.md new file mode 100644 index 0000000000000..44d2957b0f8ba --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.actions.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsServiceParams](./kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.md) > [actions](./kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.actions.md) + +## UiActionsServiceParams.actions property + +Signature: + +```typescript +readonly actions?: ActionRegistry; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.md new file mode 100644 index 0000000000000..756cd3de92ef8 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsServiceParams](./kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.md) + +## UiActionsServiceParams interface + +Signature: + +```typescript +export interface UiActionsServiceParams +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [actions](./kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.actions.md) | ActionRegistry | | +| [triggers](./kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.triggers.md) | TriggerRegistry | | +| [triggerToActions](./kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.triggertoactions.md) | TriggerToActionsRegistry | A 1-to-N mapping from Trigger to zero or more Action. | + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.triggers.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.triggers.md new file mode 100644 index 0000000000000..061aa5eb68c5d --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.triggers.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsServiceParams](./kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.md) > [triggers](./kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.triggers.md) + +## UiActionsServiceParams.triggers property + +Signature: + +```typescript +readonly triggers?: TriggerRegistry; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.triggertoactions.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.triggertoactions.md new file mode 100644 index 0000000000000..bdf1acba484e6 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.triggertoactions.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsServiceParams](./kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.md) > [triggerToActions](./kibana-plugin-plugins-ui_actions-public.uiactionsserviceparams.triggertoactions.md) + +## UiActionsServiceParams.triggerToActions property + +A 1-to-N mapping from `Trigger` to zero or more `Action`. + +Signature: + +```typescript +readonly triggerToActions?: TriggerToActionsRegistry; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionssetup.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionssetup.md new file mode 100644 index 0000000000000..d03d4cf9f1ee2 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionssetup.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsSetup](./kibana-plugin-plugins-ui_actions-public.uiactionssetup.md) + +## UiActionsSetup type + +Signature: + +```typescript +export declare type UiActionsSetup = Pick; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsstart.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsstart.md new file mode 100644 index 0000000000000..41f5bbf705e20 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.uiactionsstart.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [UiActionsStart](./kibana-plugin-plugins-ui_actions-public.uiactionsstart.md) + +## UiActionsStart type + +Signature: + +```typescript +export declare type UiActionsStart = PublicMethodsOf; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.value_click_trigger.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.value_click_trigger.md new file mode 100644 index 0000000000000..bd8d4dc50b8fd --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.value_click_trigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [VALUE\_CLICK\_TRIGGER](./kibana-plugin-plugins-ui_actions-public.value_click_trigger.md) + +## VALUE\_CLICK\_TRIGGER variable + +Signature: + +```typescript +VALUE_CLICK_TRIGGER = "VALUE_CLICK_TRIGGER" +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.valueclicktrigger.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.valueclicktrigger.md new file mode 100644 index 0000000000000..5c4fc284d83b1 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.valueclicktrigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [valueClickTrigger](./kibana-plugin-plugins-ui_actions-public.valueclicktrigger.md) + +## valueClickTrigger variable + +Signature: + +```typescript +valueClickTrigger: Trigger<'VALUE_CLICK_TRIGGER'> +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualize_field_trigger.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualize_field_trigger.md new file mode 100644 index 0000000000000..c5d9f53557d6f --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualize_field_trigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [VISUALIZE\_FIELD\_TRIGGER](./kibana-plugin-plugins-ui_actions-public.visualize_field_trigger.md) + +## VISUALIZE\_FIELD\_TRIGGER variable + +Signature: + +```typescript +VISUALIZE_FIELD_TRIGGER = "VISUALIZE_FIELD_TRIGGER" +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualize_geo_field_trigger.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualize_geo_field_trigger.md new file mode 100644 index 0000000000000..a9396c1905485 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualize_geo_field_trigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [VISUALIZE\_GEO\_FIELD\_TRIGGER](./kibana-plugin-plugins-ui_actions-public.visualize_geo_field_trigger.md) + +## VISUALIZE\_GEO\_FIELD\_TRIGGER variable + +Signature: + +```typescript +VISUALIZE_GEO_FIELD_TRIGGER = "VISUALIZE_GEO_FIELD_TRIGGER" +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.contextualfields.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.contextualfields.md new file mode 100644 index 0000000000000..681d4127e4030 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.contextualfields.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [VisualizeFieldContext](./kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.md) > [contextualFields](./kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.contextualfields.md) + +## VisualizeFieldContext.contextualFields property + +Signature: + +```typescript +contextualFields?: string[]; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.fieldname.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.fieldname.md new file mode 100644 index 0000000000000..95f45b1fbee4a --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.fieldname.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [VisualizeFieldContext](./kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.md) > [fieldName](./kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.fieldname.md) + +## VisualizeFieldContext.fieldName property + +Signature: + +```typescript +fieldName: string; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.indexpatternid.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.indexpatternid.md new file mode 100644 index 0000000000000..588c115cd9885 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.indexpatternid.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [VisualizeFieldContext](./kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.md) > [indexPatternId](./kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.indexpatternid.md) + +## VisualizeFieldContext.indexPatternId property + +Signature: + +```typescript +indexPatternId: string; +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.md new file mode 100644 index 0000000000000..7aeb254db7771 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.md @@ -0,0 +1,20 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [VisualizeFieldContext](./kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.md) + +## VisualizeFieldContext interface + +Signature: + +```typescript +export interface VisualizeFieldContext +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [contextualFields](./kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.contextualfields.md) | string[] | | +| [fieldName](./kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.fieldname.md) | string | | +| [indexPatternId](./kibana-plugin-plugins-ui_actions-public.visualizefieldcontext.indexpatternid.md) | string | | + diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualizefieldtrigger.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualizefieldtrigger.md new file mode 100644 index 0000000000000..15510bd3eb4a3 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualizefieldtrigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [visualizeFieldTrigger](./kibana-plugin-plugins-ui_actions-public.visualizefieldtrigger.md) + +## visualizeFieldTrigger variable + +Signature: + +```typescript +visualizeFieldTrigger: Trigger<'VISUALIZE_FIELD_TRIGGER'> +``` diff --git a/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualizegeofieldtrigger.md b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualizegeofieldtrigger.md new file mode 100644 index 0000000000000..faec6a69b71f9 --- /dev/null +++ b/docs/development/plugins/ui_actions/public/kibana-plugin-plugins-ui_actions-public.visualizegeofieldtrigger.md @@ -0,0 +1,11 @@ + + +[Home](./index.md) > [kibana-plugin-plugins-ui\_actions-public](./kibana-plugin-plugins-ui_actions-public.md) > [visualizeGeoFieldTrigger](./kibana-plugin-plugins-ui_actions-public.visualizegeofieldtrigger.md) + +## visualizeGeoFieldTrigger variable + +Signature: + +```typescript +visualizeGeoFieldTrigger: Trigger<'VISUALIZE_GEO_FIELD_TRIGGER'> +``` diff --git a/docs/discover/images/kql-autocomplete.png b/docs/discover/images/kql-autocomplete.png new file mode 100644 index 0000000000000..60e2290c0bad7 Binary files /dev/null and b/docs/discover/images/kql-autocomplete.png differ diff --git a/docs/discover/kuery.asciidoc b/docs/discover/kuery.asciidoc index 1a481c46b3816..f306f2b8f763f 100644 --- a/docs/discover/kuery.asciidoc +++ b/docs/discover/kuery.asciidoc @@ -1,90 +1,170 @@ [[kuery-query]] === Kibana Query Language -In Kibana 6.3, we introduced a number of exciting experimental query language enhancements. These -features are now available by default in 7.0. Out of the box, Kibana's query language now includes scripted field support and a -simplified, easier to use syntax. If you have a Basic license or above, autocomplete functionality will also be enabled. +The Kibana Query Language (KQL) makes it easy to find +the fields and syntax for your {es} query. If you have the +https://www.elastic.co/subscriptions[Basic tier] or above, +simply place your cursor in the *Search* field. As you type, you’ll get suggestions for fields, +values, and operators. -==== Language syntax +[role="screenshot"] +image::images/kql-autocomplete.png[Autocomplete in Search bar] -If you're familiar with Kibana's old Lucene query syntax, you should feel right at home with the new syntax. The basics -stay the same, we've simply refined things to make the query language easier to use. +If you prefer to use Kibana’s legacy query language, based on the +<>, click *KQL* next to the *Search* field, and then turn off KQL. -`response:200` will match documents where the response field matches the value 200. +[discrete] +=== Terms query -Quotes around a search term will initiate a phrase search. For example, `message:"Quick brown fox"` will search -for the phrase "quick brown fox" in the message field. Without the quotes, your query will get broken down into tokens via -the message field's configured analyzer and will match documents that contain those tokens, regardless of the order in which -they appear. This means documents with "quick brown fox" will match, but so will "quick fox brown". Remember to use quotes if you want -to search for a phrase. +A terms query matches documents that contain one or more *exact* terms in a field. -The query parser will no longer split on whitespace. Multiple search terms must be separated by explicit -boolean operators. Lucene will combine search terms with an `or` by default, so `response:200 extension:php` would -become `response:200 or extension:php` in KQL. This will match documents where response matches 200, extension matches php, or both. -Note that boolean operators are not case sensitive. +To match documents where the response field is `200`: -We can make terms required by using `and`. +[source,yaml] +------------------- +response:200 +------------------- -`response:200 and extension:php` will match documents where response matches 200 and extension matches php. +To match documents with the phrase "quick brown fox" in the `message` field. -By default, `and` has a higher precedence than `or`. +[source,yaml] +------------------- +message:"quick brown fox" +------------------- -`response:200 and extension:php or extension:css` will match documents where response is 200 and extension is php OR documents where extension is css and response is anything. +Without the quotes, +the query matches documents regardless of the order in which +they appear. Documents with "quick brown fox" match, +and so does "quick fox brown". -We can override the default precedence with grouping. +NOTE: Terms without fields are matched against the default field in your index settings. +If a default field is not +set, terms are matched against all fields. For example, a query +for `response:200` searches for the value 200 +in the response field, but a query for just `200` searches for 200 +across all fields in your index. -`response:200 and (extension:php or extension:css)` will match documents where response is 200 and extension is either php or css. -A shorthand exists that allows us to easily search a single field for multiple values. +[discrete] +=== Boolean queries -`response:(200 or 404)` searches for docs where the `response` field matches 200 or 404. We can also search for docs -with multi-value fields that contain a list of terms, for example: `tags:(success and info and security)` +KQL supports `or`, `and`, and `not`. By default, `and` has a higher precedence than `or`. +To override the default precedence, group operators in parentheses. -Terms can be inverted by prefixing them with `not`. +To match documents where response is `200`, extension is `php`, or both: -`not response:200` will match all documents where response is not 200. +[source,yaml] +------------------- +response:200 or extension:php +------------------- -Entire groups can also be inverted. +To match documents where response is `200` and extension is `php`: -`response:200 and not (extension:php or extension:css)` +[source,yaml] +------------------- +response:200 and extension:php +------------------- -Ranges are similar to lucene with a small syntactical difference. +To match documents where response is `200` or `404`. -Instead of `bytes:>1000`, we omit the colon: `bytes > 1000`. +[source,yaml] +------------------- +response:(200 or 404) +------------------- -`>, >=, <, <=` are all valid range operators. +To match documents where response is `200` and extension is either `php` or `css`: -Exist queries are simple and do not require a special operator. `response:*` will find all docs where the response -field exists. +[source,yaml] +------------------- +response:200 and (extension:php or extension:css) +------------------- -Wildcard queries are available. `machine.os:win*` would match docs where the machine.os field starts with "win", which -would match values like "windows 7" and "windows 10". +To match documents where `response` is 200 and `extension` is +`php` or extension is `css`, and response is anything: -Wildcards also allow us to search multiple fields at once. This can come in handy when you have both `text` and `keyword` -versions of a field. Let's say we have `machine.os` and `machine.os.keyword` fields and we want to check both for the term -"windows 10". We can do it like this: `machine.os*:windows 10". +[source,yaml] +------------------- +response:200 and extension:php or extension:css +------------------- +To match documents where response is not `200`: -[NOTE] -============ -Terms without fields will be matched against the default field in your index settings. If a default field is not -set these terms will be matched against all fields. For example, a query for `response:200` will search for the value 200 -in the response field, but a query for just `200` will search for 200 across all fields in your index. -============ +[source,yaml] +------------------- +not response:200 +------------------- -==== Nested field support +To match documents where response is `200` but extension is not `php` or `css`. -KQL supports querying on {ref}/nested.html[nested fields] through a special syntax. You can query nested fields in subtly different -ways, depending on the results you want, so crafting nested queries requires extra thought. +[source,yaml] +------------------- +response:200 and not (extension:php or extension:css) +------------------- -One main consideration is how to match parts of the nested query to the individual nested documents. -There are two main approaches to take: +To match multi-value fields that contain a list of terms: -* *Parts of the query may only match a single nested document.* This is what most users want when querying on a nested field. -* *Parts of the query can match different nested documents.* This is how a regular object field works. - Although generally less useful, there might be occasions where you want to query a nested field in this way. +[source,yaml] +------------------- +tags:(success and info and security) +------------------- -Let's take a look at the first approach. In the following document, `items` is a nested field. Each document in the nested +[discrete] +=== Range queries + +KQL supports `>`, `>=`, `<`, and `<=`. For example: + +[source,yaml] +------------------- +account_number:>=100 and items_sold:<=200 +------------------- + +[discrete] +=== Exist queries + +An exist query matches documents that contain a value for a field, in this case, +response: + +[source,yaml] +------------------- +response:* +------------------- + +[discrete] +=== Wildcard queries + +To match documents where machine.os starts with `win`, such +as "windows 7" and "windows 10": + +[source,yaml] +------------------- +machine.os:win* +------------------- + +To match multiple fields: + +[source,yaml] +------------------- +machine.os*:windows 10 +------------------- + +This sytax is handy when you have text and keyword +versions of a field. The query checks machine.os and machine.os.keyword +for the term +`windows 10`. + + +[discrete] +=== Nested field queries + +A main consideration for querying {ref}/nested.html[nested fields] is how to +match parts of the nested query to the individual nested documents. +You can: + +* *Match parts of the query to a single nested document only.* This is what most users want when querying on a nested field. +* *Match parts of the query to different nested documents.* This is how a regular object field works. + This query is generally less useful than matching to a single document. + +In the following document, `items` is a nested field. Each document in the nested field contains a name, stock, and category. [source,json] @@ -116,40 +196,61 @@ field contains a name, stock, and category. } ---------------------------------- -===== Match a single nested document +[discrete] +==== Match a single document -To find stores that have more than 10 bananas in stock, you would write a query like this: +To match stores that have more than 10 bananas in stock: -`items:{ name:banana and stock > 10 }` +[source,yaml] +------------------- +items:{ name:banana and stock > 10 } +------------------- -`items` is the "nested path". Everything inside the curly braces (the "nested group") must match a single nested document. +`items` is the nested path. Everything inside the curly braces (the nested group) +must match a single nested document. -The following example returns no matches because no single nested document has bananas with a stock of 9. +The following query does not return any matches because no single nested +document has bananas with a stock of 9. -`items:{ name:banana and stock:9 }` +[source,yaml] +------------------- +items:{ name:banana and stock:9 } +------------------- -==== Match different nested documents +[discrete] +==== Match different documents -The subqueries in this example are in separate nested groups and can match different nested documents. +The following subqueries are in separate nested groups +and can match different nested documents: -`items:{ name:banana } and items:{ stock:9 }` +[source,yaml] +------------------- +items:{ name:banana } and items:{ stock:9 } +------------------- -`name:banana` matches the first document in the array and `stock:9` matches the third document in the array. +`name:banana` matches the first document in the array and `stock:9` +matches the third document in the array. -==== Combine approaches +[discrete] +==== Match single and different documents -You can combine these two approaches to create complex queries. What if you wanted to find a store with more than 10 -bananas that *also* stocks vegetables? You could do this: +To find a store with more than 10 +bananas that *also* stocks vegetables: -`items:{ name:banana and stock > 10 } and items:{ category:vegetable }` +[source,yaml] +------------------- +items:{ name:banana and stock > 10 } and items:{ category:vegetable } +------------------- -The first nested group (`name:banana and stock > 10`) must still match a single document, but the `category:vegetables` +The first nested group (`name:banana and stock > 10`) must match a single document, but the `category:vegetables` subquery can match a different nested document because it is in a separate group. +[discrete] ==== Nested fields inside other nested fields -KQL's syntax also supports nested fields inside of other nested fields—you simply have to specify the full path. Suppose you -have a document where `level1` and `level2` are both nested fields: +KQL supports nested fields inside other nested fields—you have to +specify the full path. In this document, +`level1` and `level2` are nested fields: [source,json] ---------------------------------- @@ -171,6 +272,9 @@ have a document where `level1` and `level2` are both nested fields: } ---------------------------------- -You can match on a single nested document by specifying the full path: +To match on a single nested document: -`level1.level2:{ prop1:foo and prop2:bar }` +[source,yaml] +------------------- +level1.level2:{ prop1:foo and prop2:bar } +------------------- diff --git a/docs/setup/settings.asciidoc b/docs/setup/settings.asciidoc index af68f3e541628..903bb59cef380 100644 --- a/docs/setup/settings.asciidoc +++ b/docs/setup/settings.asciidoc @@ -68,11 +68,6 @@ currently do not have an inspector, for example Timelion and Monitoring. | Time in milliseconds to wait for {es} to respond to pings. *Default: the value of the <> setting* -| `elasticsearch.preserveHost:` - | When the value is `true`, {kib} uses the hostname specified in the -<> setting. When the value is `false`, {kib} uses -the hostname of the host that connects to this {kib} instance. *Default: `true`* - |[[elasticsearch-requestHeadersWhitelist]] `elasticsearch.requestHeadersWhitelist:` | List of {kib} client-side headers to send to {es}. To send *no* client-side headers, set this value to [] (an empty list). Removing the `authorization` @@ -204,10 +199,6 @@ making an outbound SSL/TLS connection to {es}. Valid values are `"full"`, using `"certificate"` skips hostname verification, and using `"none"` skips verification entirely. *Default: `"full"`* -| `elasticsearch.startupTimeout:` - | Time in milliseconds to wait for {es} at {kib} startup before retrying. -*Default: `5000`* - |[[elasticsearch-user-passwd]] `elasticsearch.username:` and `elasticsearch.password:` | If your {es} is protected with basic authentication, these settings provide the username and password that the {kib} server uses to perform maintenance diff --git a/docs/user/reporting/reporting-troubleshooting.asciidoc b/docs/user/reporting/reporting-troubleshooting.asciidoc index 82f0aa7ca0f19..1f07b0b57d8c7 100644 --- a/docs/user/reporting/reporting-troubleshooting.asciidoc +++ b/docs/user/reporting/reporting-troubleshooting.asciidoc @@ -18,8 +18,11 @@ Having trouble? Here are solutions to common problems you might encounter while [float] [[reporting-diagnostics]] -=== Reporting Diagnostics -Reporting comes with a built-in utility to try to automatically find common issues. When Kibana is running, navigate to the Report Listing page, and click the "Run reporting diagnostics..." button. This will open up a diagnostic tool that checks various parts of the Kibana deployment to come up with any relevant recommendations. +=== Reporting diagnostics +Reporting comes with a built-in utility to try to automatically find common issues. +When {kib} is running, navigate to the Report Listing page, and click *Run reporting diagnostics*. +This will open up a diagnostic tool that checks various parts of the {kib} deployment and +come up with any relevant recommendations. [float] [[reporting-troubleshooting-system-dependencies]] diff --git a/docs/user/security/api-keys/index.asciidoc b/docs/user/security/api-keys/index.asciidoc index c93d7caec1b7d..7cf1b964082d9 100644 --- a/docs/user/security/api-keys/index.asciidoc +++ b/docs/user/security/api-keys/index.asciidoc @@ -72,9 +72,9 @@ The response should look something like this: "api_key" : "FD6P5UA4QCWlZZQhYF3YGw" } -Now, you can use the API key to request {kib} roles. You will need -to base64-encode the `id` and `api_key` provided in the response -and add it to your request as an authorization header. For example: +Now, you can use the API key to request {kib} roles. You'll need to send a request with a +`Authorization` header with a value having the prefix `ApiKey` followed by the credentials, +where credentials is the base64 encoding of `id` and `api_key` joined by a colon. For example: [source,js] curl --location --request GET 'http://localhost:5601/api/security/role' \ diff --git a/examples/bfetch_explorer/tsconfig.json b/examples/bfetch_explorer/tsconfig.json index 86b35c5e4943f..253fdd9ee6c89 100644 --- a/examples/bfetch_explorer/tsconfig.json +++ b/examples/bfetch_explorer/tsconfig.json @@ -13,6 +13,7 @@ ], "exclude": [], "references": [ - { "path": "../../src/core/tsconfig.json" } + { "path": "../../src/core/tsconfig.json" }, + { "path": "../../src/plugins/kibana_react/tsconfig.json" }, ] } diff --git a/examples/embeddable_examples/public/book/book_embeddable.tsx b/examples/embeddable_examples/public/book/book_embeddable.tsx index 48b81c27e8b8d..65ec22a2759e2 100644 --- a/examples/embeddable_examples/public/book/book_embeddable.tsx +++ b/examples/embeddable_examples/public/book/book_embeddable.tsx @@ -89,6 +89,7 @@ export class BookEmbeddable } else { this.updateOutput({ attributes: this.attributes, + defaultTitle: this.attributes.title, hasMatch: getHasMatch(this.input.search, this.attributes), }); } @@ -125,6 +126,7 @@ export class BookEmbeddable this.updateOutput({ attributes: this.attributes, + defaultTitle: this.attributes.title, hasMatch: getHasMatch(this.input.search, this.attributes), }); } diff --git a/examples/embeddable_examples/tsconfig.json b/examples/embeddable_examples/tsconfig.json index 78098339c16f5..a922c6defcd4c 100644 --- a/examples/embeddable_examples/tsconfig.json +++ b/examples/embeddable_examples/tsconfig.json @@ -14,6 +14,7 @@ ], "exclude": [], "references": [ - { "path": "../../src/core/tsconfig.json" } + { "path": "../../src/core/tsconfig.json" }, + { "path": "../../src/plugins/kibana_react/tsconfig.json" }, ] } diff --git a/examples/state_containers_examples/tsconfig.json b/examples/state_containers_examples/tsconfig.json index 6cfb9f9dc2321..442fa08022dc4 100644 --- a/examples/state_containers_examples/tsconfig.json +++ b/examples/state_containers_examples/tsconfig.json @@ -14,6 +14,8 @@ ], "exclude": [], "references": [ - { "path": "../../src/core/tsconfig.json" } + { "path": "../../src/core/tsconfig.json" }, + { "path": "../../src/plugins/kibana_utils/tsconfig.json" }, + { "path": "../../src/plugins/kibana_react/tsconfig.json" }, ] } diff --git a/examples/ui_action_examples/tsconfig.json b/examples/ui_action_examples/tsconfig.json index 86b35c5e4943f..253fdd9ee6c89 100644 --- a/examples/ui_action_examples/tsconfig.json +++ b/examples/ui_action_examples/tsconfig.json @@ -13,6 +13,7 @@ ], "exclude": [], "references": [ - { "path": "../../src/core/tsconfig.json" } + { "path": "../../src/core/tsconfig.json" }, + { "path": "../../src/plugins/kibana_react/tsconfig.json" }, ] } diff --git a/examples/ui_actions_explorer/tsconfig.json b/examples/ui_actions_explorer/tsconfig.json index 782b9cd57fa7b..b4449819b25a6 100644 --- a/examples/ui_actions_explorer/tsconfig.json +++ b/examples/ui_actions_explorer/tsconfig.json @@ -12,6 +12,7 @@ ], "exclude": [], "references": [ - { "path": "../../src/core/tsconfig.json" } + { "path": "../../src/core/tsconfig.json" }, + { "path": "../../src/plugins/kibana_react/tsconfig.json" }, ] } diff --git a/package.json b/package.json index 505fac1df935e..e70b0386bf5e7 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "kbn:watch": "node scripts/kibana --dev --logging.json=false", "build:types": "rm -rf ./target/types && tsc --p tsconfig.types.json", "docs:acceptApiChanges": "node --max-old-space-size=6144 scripts/check_published_api_changes.js --accept", - "kbn:bootstrap": "node scripts/build_ts_refs && node scripts/register_git_hook", + "kbn:bootstrap": "node scripts/build_ts_refs --project tsconfig.refs.json && node scripts/register_git_hook", "spec_to_console": "node scripts/spec_to_console", "backport-skip-ci": "backport --prDescription \"[skip-ci]\"", "storybook": "node scripts/storybook", @@ -153,9 +153,9 @@ "boom": "^7.2.0", "chalk": "^2.4.2", "check-disk-space": "^2.1.0", - "chokidar": "3.2.1", + "chokidar": "^3.4.2", "color": "1.0.3", - "commander": "3.0.2", + "commander": "^3.0.2", "core-js": "^3.6.4", "cypress-promise": "^1.1.0", "deep-freeze-strict": "^1.1.1", @@ -174,6 +174,7 @@ "handlebars": "4.7.6", "hapi": "^17.5.3", "hapi-auth-cookie": "^9.0.0", + "hjson": "3.2.1", "hoek": "^5.0.4", "http-proxy-agent": "^2.1.0", "https-proxy-agent": "^5.0.0", @@ -184,12 +185,12 @@ "json-stable-stringify": "^1.0.1", "json-stringify-safe": "5.0.1", "lodash": "^4.17.20", - "lru-cache": "4.1.5", + "lru-cache": "^4.1.5", "minimatch": "^3.0.4", "moment": "^2.24.0", "moment-timezone": "^0.5.27", - "mustache": "2.3.2", - "node-fetch": "2.6.1", + "mustache": "^2.3.2", + "node-fetch": "^2.6.1", "node-forge": "^0.10.0", "opn": "^5.5.0", "oppsy": "^2.0.0", @@ -212,7 +213,7 @@ "rison-node": "1.0.2", "rxjs": "^6.5.5", "seedrandom": "^3.0.5", - "semver": "^5.5.0", + "semver": "^5.7.0", "style-it": "^2.1.3", "symbol-observable": "^1.2.0", "tar": "4.4.13", @@ -223,7 +224,7 @@ "uuid": "3.3.2", "vision": "^5.3.3", "whatwg-fetch": "^3.0.0", - "yauzl": "2.10.0" + "yauzl": "^2.10.0" }, "devDependencies": { "@babel/parser": "^7.11.2", @@ -279,7 +280,7 @@ "@types/flot": "^0.0.31", "@types/getopts": "^2.0.1", "@types/getos": "^3.0.0", - "@types/glob": "^7.1.1", + "@types/glob": "^7.1.2", "@types/globby": "^8.0.0", "@types/graphql": "^0.13.2", "@types/h2o2": "^8.1.1", @@ -312,7 +313,7 @@ "@types/normalize-path": "^3.0.0", "@types/opn": "^5.1.0", "@types/pegjs": "^0.10.1", - "@types/pngjs": "^3.3.2", + "@types/pngjs": "^3.4.0", "@types/podium": "^1.0.0", "@types/prop-types": "^15.7.3", "@types/reach__router": "^1.2.6", @@ -334,6 +335,7 @@ "@types/styled-components": "^5.1.0", "@types/supertest": "^2.0.5", "@types/supertest-as-promised": "^2.0.38", + "@types/tapable": "^1.0.6", "@types/tar": "^4.0.3", "@types/testing-library__jest-dom": "^5.9.2", "@types/testing-library__react-hooks": "^3.4.0", @@ -341,6 +343,8 @@ "@types/uuid": "^3.4.4", "@types/vinyl": "^2.0.4", "@types/vinyl-fs": "^2.4.11", + "@types/webpack": "^4.41.21", + "@types/webpack-env": "^1.15.2", "@types/zen-observable": "^0.8.0", "@typescript-eslint/eslint-plugin": "^3.10.0", "@typescript-eslint/parser": "^3.10.0", @@ -350,7 +354,7 @@ "angular-route": "^1.8.0", "angular-sortable-view": "^0.0.17", "archiver": "^3.1.1", - "axe-core": "^3.4.1", + "axe-core": "^4.0.2", "babel-eslint": "^10.0.3", "babel-jest": "^25.5.1", "babel-plugin-istanbul": "^6.0.0", @@ -393,7 +397,7 @@ "fetch-mock": "^7.3.9", "fp-ts": "^2.3.1", "geckodriver": "^1.20.0", - "getopts": "^2.2.4", + "getopts": "^2.2.5", "grunt": "1.0.4", "grunt-available-tasks": "^0.6.3", "grunt-cli": "^1.2.0", @@ -404,7 +408,6 @@ "gulp-sourcemaps": "2.6.5", "has-ansi": "^3.0.0", "history": "^4.9.0", - "hjson": "3.2.1", "iedriver": "^3.14.2", "immer": "^1.5.0", "intl-messageformat-parser": "^1.4.0", @@ -439,7 +442,7 @@ "multistream": "^2.1.1", "murmurhash3js": "3.0.1", "mutation-observer": "^1.0.3", - "ngreact": "0.5.1", + "ngreact": "^0.5.1", "nock": "12.0.3", "normalize-path": "^3.0.0", "nyc": "^15.0.1", @@ -475,10 +478,10 @@ "tree-kill": "^1.2.2", "typescript": "4.0.2", "ui-select": "0.19.8", - "vega": "^5.13.0", - "vega-lite": "^4.13.1", - "vega-schema-url-parser": "^1.1.0", - "vega-tooltip": "^0.12.0", + "vega": "^5.16.1", + "vega-lite": "^4.16.8", + "vega-schema-url-parser": "^2.1.0", + "vega-tooltip": "^0.24.2", "vinyl-fs": "^3.0.3", "xml2js": "^0.4.22", "xmlbuilder": "13.0.2", diff --git a/packages/kbn-ace/package.json b/packages/kbn-ace/package.json index cf74d745f4cae..6f1cee764adf1 100644 --- a/packages/kbn-ace/package.json +++ b/packages/kbn-ace/package.json @@ -14,7 +14,7 @@ "devDependencies": { "@kbn/dev-utils": "1.0.0", "@kbn/babel-preset": "1.0.0", - "raw-loader": "3.1.0", + "raw-loader": "^3.1.0", "typescript": "4.0.2" } } diff --git a/packages/kbn-config/package.json b/packages/kbn-config/package.json index 2d9dbc3b7ab8f..062520f47f0f9 100644 --- a/packages/kbn-config/package.json +++ b/packages/kbn-config/package.json @@ -25,6 +25,6 @@ }, "devDependencies": { "typescript": "4.0.2", - "tsd": "^0.7.4" + "tsd": "^0.13.1" } } diff --git a/packages/kbn-dev-utils/package.json b/packages/kbn-dev-utils/package.json index a3fe8178822aa..a85f5924f0ea2 100644 --- a/packages/kbn-dev-utils/package.json +++ b/packages/kbn-dev-utils/package.json @@ -12,7 +12,7 @@ "dependencies": { "@babel/core": "^7.11.1", "@kbn/utils": "1.0.0", - "axios": "^0.19.0", + "axios": "^0.19.2", "chalk": "^4.1.0", "cheerio": "0.22.0", "dedent": "^0.7.0", diff --git a/packages/kbn-dev-utils/src/kbn_client/kbn_client.ts b/packages/kbn-dev-utils/src/kbn_client/kbn_client.ts index 861ea0988692c..7184727fc53de 100644 --- a/packages/kbn-dev-utils/src/kbn_client/kbn_client.ts +++ b/packages/kbn-dev-utils/src/kbn_client/kbn_client.ts @@ -54,8 +54,8 @@ export class KbnClient { /** * Make a direct request to the Kibana server */ - async request(options: ReqOptions) { - return await this.requester.request(options); + async request(options: ReqOptions) { + return await this.requester.request(options); } resolveUrl(relativeUrl: string) { diff --git a/packages/kbn-es-archiver/package.json b/packages/kbn-es-archiver/package.json index 13b5662519b19..81c1747bb2727 100644 --- a/packages/kbn-es-archiver/package.json +++ b/packages/kbn-es-archiver/package.json @@ -4,8 +4,8 @@ "license": "Apache-2.0", "main": "target/index.js", "scripts": { - "kbn:bootstrap": "tsc", - "kbn:watch": "tsc --watch" + "kbn:bootstrap": "rm -rf target && tsc", + "kbn:watch": "rm -rf target && tsc --watch" }, "dependencies": { "@kbn/dev-utils": "1.0.0", diff --git a/packages/kbn-es/package.json b/packages/kbn-es/package.json index fc6c888d1d41e..40d34c5d710bb 100644 --- a/packages/kbn-es/package.json +++ b/packages/kbn-es/package.json @@ -11,15 +11,15 @@ "dependencies": { "@elastic/elasticsearch": "7.9.0-rc.1", "@kbn/dev-utils": "1.0.0", - "abort-controller": "^2.0.3", + "abort-controller": "^3.0.0", "chalk": "^4.1.0", "dedent": "^0.7.0", "del": "^5.1.0", "execa": "^4.0.2", - "getopts": "^2.2.4", + "getopts": "^2.2.5", "glob": "^7.1.2", "node-fetch": "^2.6.1", - "simple-git": "^1.91.0", + "simple-git": "1.116.0", "tar-fs": "^2.1.0", "tree-kill": "^1.2.2", "yauzl": "^2.10.0" diff --git a/packages/kbn-eslint-import-resolver-kibana/package.json b/packages/kbn-eslint-import-resolver-kibana/package.json index 332f7e8a20cc2..223c73e97908e 100755 --- a/packages/kbn-eslint-import-resolver-kibana/package.json +++ b/packages/kbn-eslint-import-resolver-kibana/package.json @@ -13,7 +13,7 @@ "debug": "^2.6.9", "eslint-import-resolver-node": "0.3.2", "eslint-import-resolver-webpack": "0.11.1", - "glob-all": "^3.1.0", + "glob-all": "^3.2.1", "lru-cache": "^4.1.5", "resolve": "^1.7.1", "webpack": "^4.41.5" diff --git a/packages/kbn-i18n/package.json b/packages/kbn-i18n/package.json index eccdff9060cbe..9e0ec50fb838e 100644 --- a/packages/kbn-i18n/package.json +++ b/packages/kbn-i18n/package.json @@ -19,7 +19,7 @@ "@types/intl-relativeformat": "^2.1.0", "@types/react-intl": "^2.3.15", "del": "^5.1.0", - "getopts": "^2.2.4", + "getopts": "^2.2.5", "supports-color": "^7.0.0", "typescript": "4.0.2" }, diff --git a/packages/kbn-interpreter/package.json b/packages/kbn-interpreter/package.json index aef63229ebe96..430dac6cb2e00 100644 --- a/packages/kbn-interpreter/package.json +++ b/packages/kbn-interpreter/package.json @@ -11,7 +11,7 @@ "dependencies": { "@babel/runtime": "^7.11.2", "@kbn/i18n": "1.0.0", - "lodash": "^4.17.15", + "lodash": "^4.17.20", "uuid": "3.3.2" }, "devDependencies": { @@ -25,12 +25,12 @@ "copy-webpack-plugin": "^6.0.2", "css-loader": "^3.4.2", "del": "^5.1.0", - "getopts": "^2.2.4", + "getopts": "^2.2.5", "pegjs": "0.10.0", "sass-loader": "^8.0.2", "style-loader": "^1.1.3", "supports-color": "^7.0.0", - "url-loader": "2.2.0", + "url-loader": "^2.2.0", "webpack": "^4.41.5", "webpack-cli": "^3.3.10" } diff --git a/packages/kbn-monaco/package.json b/packages/kbn-monaco/package.json index ca133010fe230..fcea80c9b7110 100644 --- a/packages/kbn-monaco/package.json +++ b/packages/kbn-monaco/package.json @@ -18,7 +18,7 @@ "babel-loader": "^8.0.6", "css-loader": "^3.4.2", "del": "^5.1.0", - "raw-loader": "3.1.0", + "raw-loader": "^3.1.0", "supports-color": "^7.0.0", "typescript": "4.0.2", "webpack": "^4.41.5", diff --git a/packages/kbn-optimizer/package.json b/packages/kbn-optimizer/package.json index b80d1365659dd..f90fcaec79fe0 100644 --- a/packages/kbn-optimizer/package.json +++ b/packages/kbn-optimizer/package.json @@ -27,7 +27,7 @@ "jest-diff": "^25.5.0", "json-stable-stringify": "^1.0.1", "loader-utils": "^1.2.3", - "node-sass": "^4.13.0", + "node-sass": "^4.13.1", "normalize-path": "^3.0.0", "postcss": "^7.0.32", "postcss-loader": "^3.0.0", diff --git a/packages/kbn-plugin-helpers/package.json b/packages/kbn-plugin-helpers/package.json index f292387c12521..65b44b6965048 100644 --- a/packages/kbn-plugin-helpers/package.json +++ b/packages/kbn-plugin-helpers/package.json @@ -25,7 +25,7 @@ "devDependencies": { "@types/extract-zip": "^1.6.2", "@types/gulp-zip": "^4.0.1", - "@types/inquirer": "^6.5.0", + "@types/inquirer": "^7.3.1", "extract-zip": "^2.0.1", "typescript": "4.0.2" } diff --git a/packages/kbn-pm/dist/index.js b/packages/kbn-pm/dist/index.js index 902cc8839ac09..7dcfc1d778ea8 100644 --- a/packages/kbn-pm/dist/index.js +++ b/packages/kbn-pm/dist/index.js @@ -94,7 +94,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _cli__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "run", function() { return _cli__WEBPACK_IMPORTED_MODULE_0__["run"]; }); -/* harmony import */ var _production__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(504); +/* harmony import */ var _production__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(496); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buildProductionProjects", function() { return _production__WEBPACK_IMPORTED_MODULE_1__["buildProductionProjects"]; }); /* harmony import */ var _utils_projects__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(145); @@ -103,10 +103,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _utils_project__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(163); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Project", function() { return _utils_project__WEBPACK_IMPORTED_MODULE_3__["Project"]; }); -/* harmony import */ var _utils_workspaces__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(279); +/* harmony import */ var _utils_workspaces__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(275); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "copyWorkspacePackages", function() { return _utils_workspaces__WEBPACK_IMPORTED_MODULE_4__["copyWorkspacePackages"]; }); -/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(280); +/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(276); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getProjectPaths", function() { return _config__WEBPACK_IMPORTED_MODULE_5__["getProjectPaths"]; }); /* @@ -150,7 +150,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _kbn_dev_utils_tooling_log__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5); /* harmony import */ var _kbn_dev_utils_tooling_log__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_kbn_dev_utils_tooling_log__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _commands__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(127); -/* harmony import */ var _run__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(497); +/* harmony import */ var _run__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(489); /* harmony import */ var _utils_log__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(143); /* * Licensed to Elasticsearch B.V. under one or more contributor @@ -8763,9 +8763,9 @@ exports.ToolingLogCollectingWriter = ToolingLogCollectingWriter; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "commands", function() { return commands; }); /* harmony import */ var _bootstrap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(128); -/* harmony import */ var _clean__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(288); -/* harmony import */ var _run__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(396); -/* harmony import */ var _watch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(397); +/* harmony import */ var _clean__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(284); +/* harmony import */ var _run__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(388); +/* harmony import */ var _watch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(389); /* * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with @@ -8806,10 +8806,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _utils_log__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(143); /* harmony import */ var _utils_parallelize__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(144); /* harmony import */ var _utils_projects__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(145); -/* harmony import */ var _utils_project_checksums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(281); -/* harmony import */ var _utils_bootstrap_cache_file__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(286); -/* harmony import */ var _utils_yarn_lock__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(283); -/* harmony import */ var _utils_validate_yarn_lock__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(287); +/* harmony import */ var _utils_project_checksums__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(277); +/* harmony import */ var _utils_bootstrap_cache_file__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(282); +/* harmony import */ var _utils_yarn_lock__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(279); +/* harmony import */ var _utils_validate_yarn_lock__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(283); /* * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with @@ -10831,7 +10831,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var util__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(util__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(162); /* harmony import */ var _project__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(163); -/* harmony import */ var _workspaces__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(279); +/* harmony import */ var _workspaces__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(275); /* * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with @@ -23650,9 +23650,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var stream__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(stream__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var chalk__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227); /* harmony import */ var chalk__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(chalk__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(236); +/* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(232); /* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(execa__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var strong_log_transformer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(271); +/* harmony import */ var strong_log_transformer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(267); /* harmony import */ var strong_log_transformer__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(strong_log_transformer__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(143); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } @@ -23743,12 +23743,12 @@ function spawnStreaming(command, args, opts, { "use strict"; -const ansiStyles = __webpack_require__(228); -const {stdout: stdoutColor, stderr: stderrColor} = __webpack_require__(232); +const ansiStyles = __webpack_require__(113); +const {stdout: stdoutColor, stderr: stderrColor} = __webpack_require__(228); const { stringReplaceAll, stringEncaseCRLFWithFirstIndex -} = __webpack_require__(234); +} = __webpack_require__(230); const {isArray} = Array; @@ -23957,7 +23957,7 @@ const chalkTag = (chalk, ...strings) => { } if (template === undefined) { - template = __webpack_require__(235); + template = __webpack_require__(231); } return template(chalk, parts.join('')); @@ -23978,6604 +23978,6100 @@ module.exports = chalk; /***/ (function(module, exports, __webpack_require__) { "use strict"; -/* WEBPACK VAR INJECTION */(function(module) { -const wrapAnsi16 = (fn, offset) => (...args) => { - const code = fn(...args); - return `\u001B[${code + offset}m`; -}; +const os = __webpack_require__(120); +const tty = __webpack_require__(121); +const hasFlag = __webpack_require__(229); -const wrapAnsi256 = (fn, offset) => (...args) => { - const code = fn(...args); - return `\u001B[${38 + offset};5;${code}m`; -}; +const {env} = process; -const wrapAnsi16m = (fn, offset) => (...args) => { - const rgb = fn(...args); - return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; -}; +let forceColor; +if (hasFlag('no-color') || + hasFlag('no-colors') || + hasFlag('color=false') || + hasFlag('color=never')) { + forceColor = 0; +} else if (hasFlag('color') || + hasFlag('colors') || + hasFlag('color=true') || + hasFlag('color=always')) { + forceColor = 1; +} -const ansi2ansi = n => n; -const rgb2rgb = (r, g, b) => [r, g, b]; +if ('FORCE_COLOR' in env) { + if (env.FORCE_COLOR === 'true') { + forceColor = 1; + } else if (env.FORCE_COLOR === 'false') { + forceColor = 0; + } else { + forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3); + } +} -const setLazyProperty = (object, property, get) => { - Object.defineProperty(object, property, { - get: () => { - const value = get(); +function translateLevel(level) { + if (level === 0) { + return false; + } - Object.defineProperty(object, property, { - value, - enumerable: true, - configurable: true - }); + return { + level, + hasBasic: true, + has256: level >= 2, + has16m: level >= 3 + }; +} - return value; - }, - enumerable: true, - configurable: true - }); -}; +function supportsColor(haveStream, streamIsTTY) { + if (forceColor === 0) { + return 0; + } -/** @type {typeof import('color-convert')} */ -let colorConvert; -const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => { - if (colorConvert === undefined) { - colorConvert = __webpack_require__(229); + if (hasFlag('color=16m') || + hasFlag('color=full') || + hasFlag('color=truecolor')) { + return 3; } - const offset = isBackground ? 10 : 0; - const styles = {}; + if (hasFlag('color=256')) { + return 2; + } - for (const [sourceSpace, suite] of Object.entries(colorConvert)) { - const name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace; - if (sourceSpace === targetSpace) { - styles[name] = wrap(identity, offset); - } else if (typeof suite === 'object') { - styles[name] = wrap(suite[targetSpace], offset); - } + if (haveStream && !streamIsTTY && forceColor === undefined) { + return 0; } - return styles; -}; + const min = forceColor || 0; -function assembleStyles() { - const codes = new Map(); - const styles = { - modifier: { - reset: [0, 0], - // 21 isn't widely supported and 22 does the same thing - bold: [1, 22], - dim: [2, 22], - italic: [3, 23], - underline: [4, 24], - inverse: [7, 27], - hidden: [8, 28], - strikethrough: [9, 29] - }, - color: { - black: [30, 39], - red: [31, 39], - green: [32, 39], - yellow: [33, 39], - blue: [34, 39], - magenta: [35, 39], - cyan: [36, 39], - white: [37, 39], + if (env.TERM === 'dumb') { + return min; + } - // Bright color - blackBright: [90, 39], - redBright: [91, 39], - greenBright: [92, 39], - yellowBright: [93, 39], - blueBright: [94, 39], - magentaBright: [95, 39], - cyanBright: [96, 39], - whiteBright: [97, 39] - }, - bgColor: { - bgBlack: [40, 49], - bgRed: [41, 49], - bgGreen: [42, 49], - bgYellow: [43, 49], - bgBlue: [44, 49], - bgMagenta: [45, 49], - bgCyan: [46, 49], - bgWhite: [47, 49], + if (process.platform === 'win32') { + // Windows 10 build 10586 is the first Windows release that supports 256 colors. + // Windows 10 build 14931 is the first release that supports 16m/TrueColor. + const osRelease = os.release().split('.'); + if ( + Number(osRelease[0]) >= 10 && + Number(osRelease[2]) >= 10586 + ) { + return Number(osRelease[2]) >= 14931 ? 3 : 2; + } - // Bright color - bgBlackBright: [100, 49], - bgRedBright: [101, 49], - bgGreenBright: [102, 49], - bgYellowBright: [103, 49], - bgBlueBright: [104, 49], - bgMagentaBright: [105, 49], - bgCyanBright: [106, 49], - bgWhiteBright: [107, 49] + return 1; + } + + if ('CI' in env) { + if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') { + return 1; } - }; - // Alias bright black as gray (and grey) - styles.color.gray = styles.color.blackBright; - styles.bgColor.bgGray = styles.bgColor.bgBlackBright; - styles.color.grey = styles.color.blackBright; - styles.bgColor.bgGrey = styles.bgColor.bgBlackBright; + return min; + } - for (const [groupName, group] of Object.entries(styles)) { - for (const [styleName, style] of Object.entries(group)) { - styles[styleName] = { - open: `\u001B[${style[0]}m`, - close: `\u001B[${style[1]}m` - }; + if ('TEAMCITY_VERSION' in env) { + return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; + } - group[styleName] = styles[styleName]; + if ('GITHUB_ACTIONS' in env) { + return 1; + } - codes.set(style[0], style[1]); + if (env.COLORTERM === 'truecolor') { + return 3; + } + + if ('TERM_PROGRAM' in env) { + const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); + + switch (env.TERM_PROGRAM) { + case 'iTerm.app': + return version >= 3 ? 3 : 2; + case 'Apple_Terminal': + return 2; + // No default } + } - Object.defineProperty(styles, groupName, { - value: group, - enumerable: false - }); + if (/-256(color)?$/i.test(env.TERM)) { + return 2; } - Object.defineProperty(styles, 'codes', { - value: codes, - enumerable: false - }); + if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { + return 1; + } - styles.color.close = '\u001B[39m'; - styles.bgColor.close = '\u001B[49m'; + if ('COLORTERM' in env) { + return 1; + } - setLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false)); - setLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false)); - setLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false)); - setLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true)); - setLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true)); - setLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true)); + return min; +} - return styles; +function getSupportLevel(stream) { + const level = supportsColor(stream, stream && stream.isTTY); + return translateLevel(level); } -// Make the export immutable -Object.defineProperty(module, 'exports', { - enumerable: true, - get: assembleStyles -}); +module.exports = { + supportsColor: getSupportLevel, + stdout: translateLevel(supportsColor(true, tty.isatty(1))), + stderr: translateLevel(supportsColor(true, tty.isatty(2))) +}; -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(114)(module))) /***/ }), /* 229 */ /***/ (function(module, exports, __webpack_require__) { -const conversions = __webpack_require__(230); -const route = __webpack_require__(231); - -const convert = {}; - -const models = Object.keys(conversions); +"use strict"; -function wrapRaw(fn) { - const wrappedFn = function (...args) { - const arg0 = args[0]; - if (arg0 === undefined || arg0 === null) { - return arg0; - } - if (arg0.length > 1) { - args = arg0; - } +module.exports = (flag, argv = process.argv) => { + const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); + const position = argv.indexOf(prefix + flag); + const terminatorPosition = argv.indexOf('--'); + return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition); +}; - return fn(args); - }; - // Preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } +/***/ }), +/* 230 */ +/***/ (function(module, exports, __webpack_require__) { - return wrappedFn; -} +"use strict"; -function wrapRounded(fn) { - const wrappedFn = function (...args) { - const arg0 = args[0]; - if (arg0 === undefined || arg0 === null) { - return arg0; - } +const stringReplaceAll = (string, substring, replacer) => { + let index = string.indexOf(substring); + if (index === -1) { + return string; + } - if (arg0.length > 1) { - args = arg0; - } + const substringLength = substring.length; + let endIndex = 0; + let returnValue = ''; + do { + returnValue += string.substr(endIndex, index - endIndex) + substring + replacer; + endIndex = index + substringLength; + index = string.indexOf(substring, endIndex); + } while (index !== -1); - const result = fn(args); + returnValue += string.substr(endIndex); + return returnValue; +}; - // We're assuming the result is an array here. - // see notice in conversions.js; don't use box types - // in conversion functions. - if (typeof result === 'object') { - for (let len = result.length, i = 0; i < len; i++) { - result[i] = Math.round(result[i]); - } - } +const stringEncaseCRLFWithFirstIndex = (string, prefix, postfix, index) => { + let endIndex = 0; + let returnValue = ''; + do { + const gotCR = string[index - 1] === '\r'; + returnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\r\n' : '\n') + postfix; + endIndex = index + 1; + index = string.indexOf('\n', endIndex); + } while (index !== -1); - return result; - }; + returnValue += string.substr(endIndex); + return returnValue; +}; - // Preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } +module.exports = { + stringReplaceAll, + stringEncaseCRLFWithFirstIndex +}; - return wrappedFn; -} -models.forEach(fromModel => { - convert[fromModel] = {}; +/***/ }), +/* 231 */ +/***/ (function(module, exports, __webpack_require__) { - Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels}); - Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels}); +"use strict"; - const routes = route(fromModel); - const routeModels = Object.keys(routes); +const TEMPLATE_REGEX = /(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi; +const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g; +const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/; +const ESCAPE_REGEX = /\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi; - routeModels.forEach(toModel => { - const fn = routes[toModel]; +const ESCAPES = new Map([ + ['n', '\n'], + ['r', '\r'], + ['t', '\t'], + ['b', '\b'], + ['f', '\f'], + ['v', '\v'], + ['0', '\0'], + ['\\', '\\'], + ['e', '\u001B'], + ['a', '\u0007'] +]); - convert[fromModel][toModel] = wrapRounded(fn); - convert[fromModel][toModel].raw = wrapRaw(fn); - }); -}); +function unescape(c) { + const u = c[0] === 'u'; + const bracket = c[1] === '{'; -module.exports = convert; + if ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) { + return String.fromCharCode(parseInt(c.slice(1), 16)); + } + if (u && bracket) { + return String.fromCodePoint(parseInt(c.slice(2, -1), 16)); + } -/***/ }), -/* 230 */ -/***/ (function(module, exports, __webpack_require__) { + return ESCAPES.get(c) || c; +} -/* MIT license */ -/* eslint-disable no-mixed-operators */ -const cssKeywords = __webpack_require__(117); +function parseArguments(name, arguments_) { + const results = []; + const chunks = arguments_.trim().split(/\s*,\s*/g); + let matches; -// NOTE: conversions should only return primitive values (i.e. arrays, or -// values that give correct `typeof` results). -// do not use box values types (i.e. Number(), String(), etc.) + for (const chunk of chunks) { + const number = Number(chunk); + if (!Number.isNaN(number)) { + results.push(number); + } else if ((matches = chunk.match(STRING_REGEX))) { + results.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character)); + } else { + throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`); + } + } -const reverseKeywords = {}; -for (const key of Object.keys(cssKeywords)) { - reverseKeywords[cssKeywords[key]] = key; + return results; } -const convert = { - rgb: {channels: 3, labels: 'rgb'}, - hsl: {channels: 3, labels: 'hsl'}, - hsv: {channels: 3, labels: 'hsv'}, - hwb: {channels: 3, labels: 'hwb'}, - cmyk: {channels: 4, labels: 'cmyk'}, - xyz: {channels: 3, labels: 'xyz'}, - lab: {channels: 3, labels: 'lab'}, - lch: {channels: 3, labels: 'lch'}, - hex: {channels: 1, labels: ['hex']}, - keyword: {channels: 1, labels: ['keyword']}, - ansi16: {channels: 1, labels: ['ansi16']}, - ansi256: {channels: 1, labels: ['ansi256']}, - hcg: {channels: 3, labels: ['h', 'c', 'g']}, - apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, - gray: {channels: 1, labels: ['gray']} -}; - -module.exports = convert; +function parseStyle(style) { + STYLE_REGEX.lastIndex = 0; -// Hide .channels and .labels properties -for (const model of Object.keys(convert)) { - if (!('channels' in convert[model])) { - throw new Error('missing channels property: ' + model); - } + const results = []; + let matches; - if (!('labels' in convert[model])) { - throw new Error('missing channel labels property: ' + model); - } + while ((matches = STYLE_REGEX.exec(style)) !== null) { + const name = matches[1]; - if (convert[model].labels.length !== convert[model].channels) { - throw new Error('channel and label counts mismatch: ' + model); + if (matches[2]) { + const args = parseArguments(name, matches[2]); + results.push([name].concat(args)); + } else { + results.push([name]); + } } - const {channels, labels} = convert[model]; - delete convert[model].channels; - delete convert[model].labels; - Object.defineProperty(convert[model], 'channels', {value: channels}); - Object.defineProperty(convert[model], 'labels', {value: labels}); + return results; } -convert.rgb.hsl = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const min = Math.min(r, g, b); - const max = Math.max(r, g, b); - const delta = max - min; - let h; - let s; +function buildStyle(chalk, styles) { + const enabled = {}; - if (max === min) { - h = 0; - } else if (r === max) { - h = (g - b) / delta; - } else if (g === max) { - h = 2 + (b - r) / delta; - } else if (b === max) { - h = 4 + (r - g) / delta; + for (const layer of styles) { + for (const style of layer.styles) { + enabled[style[0]] = layer.inverse ? null : style.slice(1); + } } - h = Math.min(h * 60, 360); - - if (h < 0) { - h += 360; - } + let current = chalk; + for (const [styleName, styles] of Object.entries(enabled)) { + if (!Array.isArray(styles)) { + continue; + } - const l = (min + max) / 2; + if (!(styleName in current)) { + throw new Error(`Unknown Chalk style: ${styleName}`); + } - if (max === min) { - s = 0; - } else if (l <= 0.5) { - s = delta / (max + min); - } else { - s = delta / (2 - max - min); + current = styles.length > 0 ? current[styleName](...styles) : current[styleName]; } - return [h, s * 100, l * 100]; -}; + return current; +} -convert.rgb.hsv = function (rgb) { - let rdif; - let gdif; - let bdif; - let h; - let s; +module.exports = (chalk, temporary) => { + const styles = []; + const chunks = []; + let chunk = []; - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const v = Math.max(r, g, b); - const diff = v - Math.min(r, g, b); - const diffc = function (c) { - return (v - c) / 6 / diff + 1 / 2; - }; - - if (diff === 0) { - h = 0; - s = 0; - } else { - s = diff / v; - rdif = diffc(r); - gdif = diffc(g); - bdif = diffc(b); + // eslint-disable-next-line max-params + temporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => { + if (escapeCharacter) { + chunk.push(unescape(escapeCharacter)); + } else if (style) { + const string = chunk.join(''); + chunk = []; + chunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string)); + styles.push({inverse, styles: parseStyle(style)}); + } else if (close) { + if (styles.length === 0) { + throw new Error('Found extraneous } in Chalk template literal'); + } - if (r === v) { - h = bdif - gdif; - } else if (g === v) { - h = (1 / 3) + rdif - bdif; - } else if (b === v) { - h = (2 / 3) + gdif - rdif; + chunks.push(buildStyle(chalk, styles)(chunk.join(''))); + chunk = []; + styles.pop(); + } else { + chunk.push(character); } + }); - if (h < 0) { - h += 1; - } else if (h > 1) { - h -= 1; - } + chunks.push(chunk.join('')); + + if (styles.length > 0) { + const errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`; + throw new Error(errMessage); } - return [ - h * 360, - s * 100, - v * 100 - ]; + return chunks.join(''); }; -convert.rgb.hwb = function (rgb) { - const r = rgb[0]; - const g = rgb[1]; - let b = rgb[2]; - const h = convert.rgb.hsl(rgb)[0]; - const w = 1 / 255 * Math.min(r, Math.min(g, b)); - - b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); - return [h, w * 100, b * 100]; -}; +/***/ }), +/* 232 */ +/***/ (function(module, exports, __webpack_require__) { -convert.rgb.cmyk = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; +"use strict"; - const k = Math.min(1 - r, 1 - g, 1 - b); - const c = (1 - r - k) / (1 - k) || 0; - const m = (1 - g - k) / (1 - k) || 0; - const y = (1 - b - k) / (1 - k) || 0; +const path = __webpack_require__(4); +const childProcess = __webpack_require__(233); +const crossSpawn = __webpack_require__(234); +const stripFinalNewline = __webpack_require__(247); +const npmRunPath = __webpack_require__(248); +const onetime = __webpack_require__(249); +const makeError = __webpack_require__(251); +const normalizeStdio = __webpack_require__(256); +const {spawnedKill, spawnedCancel, setupTimeout, setExitHandler} = __webpack_require__(257); +const {handleInput, getSpawnedResult, makeAllStream, validateInputSync} = __webpack_require__(258); +const {mergePromise, getSpawnedPromise} = __webpack_require__(265); +const {joinCommand, parseCommand} = __webpack_require__(266); - return [c * 100, m * 100, y * 100, k * 100]; -}; +const DEFAULT_MAX_BUFFER = 1000 * 1000 * 100; -function comparativeDistance(x, y) { - /* - See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance - */ - return ( - ((x[0] - y[0]) ** 2) + - ((x[1] - y[1]) ** 2) + - ((x[2] - y[2]) ** 2) - ); -} +const getEnv = ({env: envOption, extendEnv, preferLocal, localDir, execPath}) => { + const env = extendEnv ? {...process.env, ...envOption} : envOption; -convert.rgb.keyword = function (rgb) { - const reversed = reverseKeywords[rgb]; - if (reversed) { - return reversed; + if (preferLocal) { + return npmRunPath.env({env, cwd: localDir, execPath}); } - let currentClosestDistance = Infinity; - let currentClosestKeyword; + return env; +}; - for (const keyword of Object.keys(cssKeywords)) { - const value = cssKeywords[keyword]; +const handleArgs = (file, args, options = {}) => { + const parsed = crossSpawn._parse(file, args, options); + file = parsed.command; + args = parsed.args; + options = parsed.options; - // Compute comparative distance - const distance = comparativeDistance(rgb, value); + options = { + maxBuffer: DEFAULT_MAX_BUFFER, + buffer: true, + stripFinalNewline: true, + extendEnv: true, + preferLocal: false, + localDir: options.cwd || process.cwd(), + execPath: process.execPath, + encoding: 'utf8', + reject: true, + cleanup: true, + all: false, + windowsHide: true, + ...options + }; - // Check if its less, if so set as closest - if (distance < currentClosestDistance) { - currentClosestDistance = distance; - currentClosestKeyword = keyword; - } - } + options.env = getEnv(options); - return currentClosestKeyword; -}; + options.stdio = normalizeStdio(options); -convert.keyword.rgb = function (keyword) { - return cssKeywords[keyword]; -}; + if (process.platform === 'win32' && path.basename(file, '.exe') === 'cmd') { + // #116 + args.unshift('/q'); + } -convert.rgb.xyz = function (rgb) { - let r = rgb[0] / 255; - let g = rgb[1] / 255; - let b = rgb[2] / 255; + return {file, args, options, parsed}; +}; - // Assume sRGB - r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92); - g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92); - b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92); +const handleOutput = (options, value, error) => { + if (typeof value !== 'string' && !Buffer.isBuffer(value)) { + // When `execa.sync()` errors, we normalize it to '' to mimic `execa()` + return error === undefined ? undefined : ''; + } - const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); - const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); - const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); + if (options.stripFinalNewline) { + return stripFinalNewline(value); + } - return [x * 100, y * 100, z * 100]; + return value; }; -convert.rgb.lab = function (rgb) { - const xyz = convert.rgb.xyz(rgb); - let x = xyz[0]; - let y = xyz[1]; - let z = xyz[2]; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); +const execa = (file, args, options) => { + const parsed = handleArgs(file, args, options); + const command = joinCommand(file, args); - const l = (116 * y) - 16; - const a = 500 * (x - y); - const b = 200 * (y - z); + let spawned; + try { + spawned = childProcess.spawn(parsed.file, parsed.args, parsed.options); + } catch (error) { + // Ensure the returned error is always both a promise and a child process + const dummySpawned = new childProcess.ChildProcess(); + const errorPromise = Promise.reject(makeError({ + error, + stdout: '', + stderr: '', + all: '', + command, + parsed, + timedOut: false, + isCanceled: false, + killed: false + })); + return mergePromise(dummySpawned, errorPromise); + } - return [l, a, b]; -}; + const spawnedPromise = getSpawnedPromise(spawned); + const timedPromise = setupTimeout(spawned, parsed.options, spawnedPromise); + const processDone = setExitHandler(spawned, parsed.options, timedPromise); -convert.hsl.rgb = function (hsl) { - const h = hsl[0] / 360; - const s = hsl[1] / 100; - const l = hsl[2] / 100; - let t2; - let t3; - let val; + const context = {isCanceled: false}; - if (s === 0) { - val = l * 255; - return [val, val, val]; - } + spawned.kill = spawnedKill.bind(null, spawned.kill.bind(spawned)); + spawned.cancel = spawnedCancel.bind(null, spawned, context); - if (l < 0.5) { - t2 = l * (1 + s); - } else { - t2 = l + s - l * s; - } + const handlePromise = async () => { + const [{error, exitCode, signal, timedOut}, stdoutResult, stderrResult, allResult] = await getSpawnedResult(spawned, parsed.options, processDone); + const stdout = handleOutput(parsed.options, stdoutResult); + const stderr = handleOutput(parsed.options, stderrResult); + const all = handleOutput(parsed.options, allResult); - const t1 = 2 * l - t2; + if (error || exitCode !== 0 || signal !== null) { + const returnedError = makeError({ + error, + exitCode, + signal, + stdout, + stderr, + all, + command, + parsed, + timedOut, + isCanceled: context.isCanceled, + killed: spawned.killed + }); - const rgb = [0, 0, 0]; - for (let i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) { - t3++; - } + if (!parsed.options.reject) { + return returnedError; + } - if (t3 > 1) { - t3--; + throw returnedError; } - if (6 * t3 < 1) { - val = t1 + (t2 - t1) * 6 * t3; - } else if (2 * t3 < 1) { - val = t2; - } else if (3 * t3 < 2) { - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - } else { - val = t1; - } + return { + command, + exitCode: 0, + stdout, + stderr, + all, + failed: false, + timedOut: false, + isCanceled: false, + killed: false + }; + }; - rgb[i] = val * 255; - } + const handlePromiseOnce = onetime(handlePromise); - return rgb; -}; + crossSpawn._enoent.hookChildProcess(spawned, parsed.parsed); -convert.hsl.hsv = function (hsl) { - const h = hsl[0]; - let s = hsl[1] / 100; - let l = hsl[2] / 100; - let smin = s; - const lmin = Math.max(l, 0.01); + handleInput(spawned, parsed.options.input); - l *= 2; - s *= (l <= 1) ? l : 2 - l; - smin *= lmin <= 1 ? lmin : 2 - lmin; - const v = (l + s) / 2; - const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); + spawned.all = makeAllStream(spawned, parsed.options); - return [h, sv * 100, v * 100]; + return mergePromise(spawned, handlePromiseOnce); }; -convert.hsv.rgb = function (hsv) { - const h = hsv[0] / 60; - const s = hsv[1] / 100; - let v = hsv[2] / 100; - const hi = Math.floor(h) % 6; +module.exports = execa; - const f = h - Math.floor(h); - const p = 255 * v * (1 - s); - const q = 255 * v * (1 - (s * f)); - const t = 255 * v * (1 - (s * (1 - f))); - v *= 255; +module.exports.sync = (file, args, options) => { + const parsed = handleArgs(file, args, options); + const command = joinCommand(file, args); - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } -}; + validateInputSync(parsed.options); -convert.hsv.hsl = function (hsv) { - const h = hsv[0]; - const s = hsv[1] / 100; - const v = hsv[2] / 100; - const vmin = Math.max(v, 0.01); - let sl; - let l; + let result; + try { + result = childProcess.spawnSync(parsed.file, parsed.args, parsed.options); + } catch (error) { + throw makeError({ + error, + stdout: '', + stderr: '', + all: '', + command, + parsed, + timedOut: false, + isCanceled: false, + killed: false + }); + } - l = (2 - s) * v; - const lmin = (2 - s) * vmin; - sl = s * vmin; - sl /= (lmin <= 1) ? lmin : 2 - lmin; - sl = sl || 0; - l /= 2; + const stdout = handleOutput(parsed.options, result.stdout, result.error); + const stderr = handleOutput(parsed.options, result.stderr, result.error); - return [h, sl * 100, l * 100]; -}; + if (result.error || result.status !== 0 || result.signal !== null) { + const error = makeError({ + stdout, + stderr, + error: result.error, + signal: result.signal, + exitCode: result.status, + command, + parsed, + timedOut: result.error && result.error.code === 'ETIMEDOUT', + isCanceled: false, + killed: result.signal !== null + }); -// http://dev.w3.org/csswg/css-color/#hwb-to-rgb -convert.hwb.rgb = function (hwb) { - const h = hwb[0] / 360; - let wh = hwb[1] / 100; - let bl = hwb[2] / 100; - const ratio = wh + bl; - let f; + if (!parsed.options.reject) { + return error; + } - // Wh + bl cant be > 1 - if (ratio > 1) { - wh /= ratio; - bl /= ratio; + throw error; } - const i = Math.floor(6 * h); - const v = 1 - bl; - f = 6 * h - i; + return { + command, + exitCode: 0, + stdout, + stderr, + failed: false, + timedOut: false, + isCanceled: false, + killed: false + }; +}; - if ((i & 0x01) !== 0) { - f = 1 - f; - } +module.exports.command = (command, options) => { + const [file, ...args] = parseCommand(command); + return execa(file, args, options); +}; - const n = wh + f * (v - wh); // Linear interpolation +module.exports.commandSync = (command, options) => { + const [file, ...args] = parseCommand(command); + return execa.sync(file, args, options); +}; - let r; - let g; - let b; - /* eslint-disable max-statements-per-line,no-multi-spaces */ - switch (i) { - default: - case 6: - case 0: r = v; g = n; b = wh; break; - case 1: r = n; g = v; b = wh; break; - case 2: r = wh; g = v; b = n; break; - case 3: r = wh; g = n; b = v; break; - case 4: r = n; g = wh; b = v; break; - case 5: r = v; g = wh; b = n; break; +module.exports.node = (scriptPath, args, options = {}) => { + if (args && !Array.isArray(args) && typeof args === 'object') { + options = args; + args = []; } - /* eslint-enable max-statements-per-line,no-multi-spaces */ - - return [r * 255, g * 255, b * 255]; -}; -convert.cmyk.rgb = function (cmyk) { - const c = cmyk[0] / 100; - const m = cmyk[1] / 100; - const y = cmyk[2] / 100; - const k = cmyk[3] / 100; + const stdio = normalizeStdio.node(options); - const r = 1 - Math.min(1, c * (1 - k) + k); - const g = 1 - Math.min(1, m * (1 - k) + k); - const b = 1 - Math.min(1, y * (1 - k) + k); + const {nodePath = process.execPath, nodeOptions = process.execArgv} = options; - return [r * 255, g * 255, b * 255]; + return execa( + nodePath, + [ + ...nodeOptions, + scriptPath, + ...(Array.isArray(args) ? args : []) + ], + { + ...options, + stdin: undefined, + stdout: undefined, + stderr: undefined, + stdio, + shell: false + } + ); }; -convert.xyz.rgb = function (xyz) { - const x = xyz[0] / 100; - const y = xyz[1] / 100; - const z = xyz[2] / 100; - let r; - let g; - let b; - r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); - g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); - b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); +/***/ }), +/* 233 */ +/***/ (function(module, exports) { - // Assume sRGB - r = r > 0.0031308 - ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055) - : r * 12.92; +module.exports = require("child_process"); - g = g > 0.0031308 - ? ((1.055 * (g ** (1.0 / 2.4))) - 0.055) - : g * 12.92; +/***/ }), +/* 234 */ +/***/ (function(module, exports, __webpack_require__) { - b = b > 0.0031308 - ? ((1.055 * (b ** (1.0 / 2.4))) - 0.055) - : b * 12.92; +"use strict"; - r = Math.min(Math.max(0, r), 1); - g = Math.min(Math.max(0, g), 1); - b = Math.min(Math.max(0, b), 1); - return [r * 255, g * 255, b * 255]; -}; +const cp = __webpack_require__(233); +const parse = __webpack_require__(235); +const enoent = __webpack_require__(246); -convert.xyz.lab = function (xyz) { - let x = xyz[0]; - let y = xyz[1]; - let z = xyz[2]; +function spawn(command, args, options) { + // Parse the arguments + const parsed = parse(command, args, options); - x /= 95.047; - y /= 100; - z /= 108.883; + // Spawn the child process + const spawned = cp.spawn(parsed.command, parsed.args, parsed.options); - x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); + // Hook into child process "exit" event to emit an error if the command + // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16 + enoent.hookChildProcess(spawned, parsed); - const l = (116 * y) - 16; - const a = 500 * (x - y); - const b = 200 * (y - z); + return spawned; +} - return [l, a, b]; -}; +function spawnSync(command, args, options) { + // Parse the arguments + const parsed = parse(command, args, options); -convert.lab.xyz = function (lab) { - const l = lab[0]; - const a = lab[1]; - const b = lab[2]; - let x; - let y; - let z; + // Spawn the child process + const result = cp.spawnSync(parsed.command, parsed.args, parsed.options); - y = (l + 16) / 116; - x = a / 500 + y; - z = y - b / 200; + // Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16 + result.error = result.error || enoent.verifyENOENTSync(result.status, parsed); - const y2 = y ** 3; - const x2 = x ** 3; - const z2 = z ** 3; - y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; - x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; - z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; + return result; +} - x *= 95.047; - y *= 100; - z *= 108.883; +module.exports = spawn; +module.exports.spawn = spawn; +module.exports.sync = spawnSync; - return [x, y, z]; -}; +module.exports._parse = parse; +module.exports._enoent = enoent; -convert.lab.lch = function (lab) { - const l = lab[0]; - const a = lab[1]; - const b = lab[2]; - let h; - const hr = Math.atan2(b, a); - h = hr * 360 / 2 / Math.PI; +/***/ }), +/* 235 */ +/***/ (function(module, exports, __webpack_require__) { - if (h < 0) { - h += 360; - } +"use strict"; - const c = Math.sqrt(a * a + b * b); - return [l, c, h]; -}; +const path = __webpack_require__(4); +const resolveCommand = __webpack_require__(236); +const escape = __webpack_require__(242); +const readShebang = __webpack_require__(243); -convert.lch.lab = function (lch) { - const l = lch[0]; - const c = lch[1]; - const h = lch[2]; +const isWin = process.platform === 'win32'; +const isExecutableRegExp = /\.(?:com|exe)$/i; +const isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i; - const hr = h / 360 * 2 * Math.PI; - const a = c * Math.cos(hr); - const b = c * Math.sin(hr); +function detectShebang(parsed) { + parsed.file = resolveCommand(parsed); - return [l, a, b]; -}; + const shebang = parsed.file && readShebang(parsed.file); -convert.rgb.ansi16 = function (args, saturation = null) { - const [r, g, b] = args; - let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization + if (shebang) { + parsed.args.unshift(parsed.file); + parsed.command = shebang; - value = Math.round(value / 50); + return resolveCommand(parsed); + } - if (value === 0) { - return 30; - } + return parsed.file; +} - let ansi = 30 - + ((Math.round(b / 255) << 2) - | (Math.round(g / 255) << 1) - | Math.round(r / 255)); +function parseNonShell(parsed) { + if (!isWin) { + return parsed; + } - if (value === 2) { - ansi += 60; - } + // Detect & add support for shebangs + const commandFile = detectShebang(parsed); - return ansi; -}; + // We don't need a shell if the command filename is an executable + const needsShell = !isExecutableRegExp.test(commandFile); -convert.hsv.ansi16 = function (args) { - // Optimization here; we already know the value and don't need to get - // it converted for us. - return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); -}; + // If a shell is required, use cmd.exe and take care of escaping everything correctly + // Note that `forceShell` is an hidden option used only in tests + if (parsed.options.forceShell || needsShell) { + // Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/` + // The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument + // Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called, + // we need to double escape them + const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile); -convert.rgb.ansi256 = function (args) { - const r = args[0]; - const g = args[1]; - const b = args[2]; + // Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\bar) + // This is necessary otherwise it will always fail with ENOENT in those cases + parsed.command = path.normalize(parsed.command); - // We use the extended greyscale palette here, with the exception of - // black and white. normal palette only has 4 greyscale shades. - if (r === g && g === b) { - if (r < 8) { - return 16; - } + // Escape command & arguments + parsed.command = escape.command(parsed.command); + parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars)); - if (r > 248) { - return 231; - } + const shellCommand = [parsed.command].concat(parsed.args).join(' '); - return Math.round(((r - 8) / 247) * 24) + 232; - } + parsed.args = ['/d', '/s', '/c', `"${shellCommand}"`]; + parsed.command = process.env.comspec || 'cmd.exe'; + parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped + } - const ansi = 16 - + (36 * Math.round(r / 255 * 5)) - + (6 * Math.round(g / 255 * 5)) - + Math.round(b / 255 * 5); + return parsed; +} - return ansi; -}; +function parse(command, args, options) { + // Normalize arguments, similar to nodejs + if (args && !Array.isArray(args)) { + options = args; + args = null; + } -convert.ansi16.rgb = function (args) { - let color = args % 10; + args = args ? args.slice(0) : []; // Clone array to avoid changing the original + options = Object.assign({}, options); // Clone object to avoid changing the original - // Handle greyscale - if (color === 0 || color === 7) { - if (args > 50) { - color += 3.5; - } + // Build our parsed object + const parsed = { + command, + args, + options, + file: undefined, + original: { + command, + args, + }, + }; - color = color / 10.5 * 255; + // Delegate further parsing to shell or non-shell + return options.shell ? parsed : parseNonShell(parsed); +} - return [color, color, color]; - } +module.exports = parse; - const mult = (~~(args > 50) + 1) * 0.5; - const r = ((color & 1) * mult) * 255; - const g = (((color >> 1) & 1) * mult) * 255; - const b = (((color >> 2) & 1) * mult) * 255; - return [r, g, b]; -}; +/***/ }), +/* 236 */ +/***/ (function(module, exports, __webpack_require__) { -convert.ansi256.rgb = function (args) { - // Handle greyscale - if (args >= 232) { - const c = (args - 232) * 10 + 8; - return [c, c, c]; - } +"use strict"; - args -= 16; - let rem; - const r = Math.floor(args / 36) / 5 * 255; - const g = Math.floor((rem = args % 36) / 6) / 5 * 255; - const b = (rem % 6) / 5 * 255; +const path = __webpack_require__(4); +const which = __webpack_require__(237); +const pathKey = __webpack_require__(241)(); - return [r, g, b]; -}; +function resolveCommandAttempt(parsed, withoutPathExt) { + const cwd = process.cwd(); + const hasCustomCwd = parsed.options.cwd != null; + // Worker threads do not have process.chdir() + const shouldSwitchCwd = hasCustomCwd && process.chdir !== undefined; -convert.rgb.hex = function (args) { - const integer = ((Math.round(args[0]) & 0xFF) << 16) - + ((Math.round(args[1]) & 0xFF) << 8) - + (Math.round(args[2]) & 0xFF); + // If a custom `cwd` was specified, we need to change the process cwd + // because `which` will do stat calls but does not support a custom cwd + if (shouldSwitchCwd) { + try { + process.chdir(parsed.options.cwd); + } catch (err) { + /* Empty */ + } + } - const string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; + let resolved; -convert.hex.rgb = function (args) { - const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); - if (!match) { - return [0, 0, 0]; - } + try { + resolved = which.sync(parsed.command, { + path: (parsed.options.env || process.env)[pathKey], + pathExt: withoutPathExt ? path.delimiter : undefined, + }); + } catch (e) { + /* Empty */ + } finally { + if (shouldSwitchCwd) { + process.chdir(cwd); + } + } - let colorString = match[0]; + // If we successfully resolved, ensure that an absolute path is returned + // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it + if (resolved) { + resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved); + } - if (match[0].length === 3) { - colorString = colorString.split('').map(char => { - return char + char; - }).join(''); - } + return resolved; +} - const integer = parseInt(colorString, 16); - const r = (integer >> 16) & 0xFF; - const g = (integer >> 8) & 0xFF; - const b = integer & 0xFF; +function resolveCommand(parsed) { + return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true); +} - return [r, g, b]; -}; +module.exports = resolveCommand; -convert.rgb.hcg = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const max = Math.max(Math.max(r, g), b); - const min = Math.min(Math.min(r, g), b); - const chroma = (max - min); - let grayscale; - let hue; - if (chroma < 1) { - grayscale = min / (1 - chroma); - } else { - grayscale = 0; - } +/***/ }), +/* 237 */ +/***/ (function(module, exports, __webpack_require__) { - if (chroma <= 0) { - hue = 0; - } else - if (max === r) { - hue = ((g - b) / chroma) % 6; - } else - if (max === g) { - hue = 2 + (b - r) / chroma; - } else { - hue = 4 + (r - g) / chroma; - } +const isWindows = process.platform === 'win32' || + process.env.OSTYPE === 'cygwin' || + process.env.OSTYPE === 'msys' - hue /= 6; - hue %= 1; +const path = __webpack_require__(4) +const COLON = isWindows ? ';' : ':' +const isexe = __webpack_require__(238) - return [hue * 360, chroma * 100, grayscale * 100]; -}; +const getNotFoundError = (cmd) => + Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' }) -convert.hsl.hcg = function (hsl) { - const s = hsl[1] / 100; - const l = hsl[2] / 100; +const getPathInfo = (cmd, opt) => { + const colon = opt.colon || COLON - const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l)); + // If it has a slash, then we don't bother searching the pathenv. + // just check the file itself, and that's it. + const pathEnv = cmd.match(/\//) || isWindows && cmd.match(/\\/) ? [''] + : ( + [ + // windows always checks the cwd first + ...(isWindows ? [process.cwd()] : []), + ...(opt.path || process.env.PATH || + /* istanbul ignore next: very unusual */ '').split(colon), + ] + ) + const pathExtExe = isWindows + ? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM' + : '' + const pathExt = isWindows ? pathExtExe.split(colon) : [''] - let f = 0; - if (c < 1.0) { - f = (l - 0.5 * c) / (1.0 - c); - } + if (isWindows) { + if (cmd.indexOf('.') !== -1 && pathExt[0] !== '') + pathExt.unshift('') + } - return [hsl[0], c * 100, f * 100]; -}; + return { + pathEnv, + pathExt, + pathExtExe, + } +} -convert.hsv.hcg = function (hsv) { - const s = hsv[1] / 100; - const v = hsv[2] / 100; +const which = (cmd, opt, cb) => { + if (typeof opt === 'function') { + cb = opt + opt = {} + } + if (!opt) + opt = {} - const c = s * v; - let f = 0; + const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt) + const found = [] - if (c < 1.0) { - f = (v - c) / (1 - c); - } + const step = i => new Promise((resolve, reject) => { + if (i === pathEnv.length) + return opt.all && found.length ? resolve(found) + : reject(getNotFoundError(cmd)) - return [hsv[0], c * 100, f * 100]; -}; + const ppRaw = pathEnv[i] + const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw -convert.hcg.rgb = function (hcg) { - const h = hcg[0] / 360; - const c = hcg[1] / 100; - const g = hcg[2] / 100; + const pCmd = path.join(pathPart, cmd) + const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd + : pCmd - if (c === 0.0) { - return [g * 255, g * 255, g * 255]; - } + resolve(subStep(p, i, 0)) + }) - const pure = [0, 0, 0]; - const hi = (h % 1) * 6; - const v = hi % 1; - const w = 1 - v; - let mg = 0; + const subStep = (p, i, ii) => new Promise((resolve, reject) => { + if (ii === pathExt.length) + return resolve(step(i + 1)) + const ext = pathExt[ii] + isexe(p + ext, { pathExt: pathExtExe }, (er, is) => { + if (!er && is) { + if (opt.all) + found.push(p + ext) + else + return resolve(p + ext) + } + return resolve(subStep(p, i, ii + 1)) + }) + }) - /* eslint-disable max-statements-per-line */ - switch (Math.floor(hi)) { - case 0: - pure[0] = 1; pure[1] = v; pure[2] = 0; break; - case 1: - pure[0] = w; pure[1] = 1; pure[2] = 0; break; - case 2: - pure[0] = 0; pure[1] = 1; pure[2] = v; break; - case 3: - pure[0] = 0; pure[1] = w; pure[2] = 1; break; - case 4: - pure[0] = v; pure[1] = 0; pure[2] = 1; break; - default: - pure[0] = 1; pure[1] = 0; pure[2] = w; - } - /* eslint-enable max-statements-per-line */ + return cb ? step(0).then(res => cb(null, res), cb) : step(0) +} - mg = (1.0 - c) * g; +const whichSync = (cmd, opt) => { + opt = opt || {} - return [ - (c * pure[0] + mg) * 255, - (c * pure[1] + mg) * 255, - (c * pure[2] + mg) * 255 - ]; -}; + const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt) + const found = [] -convert.hcg.hsv = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; + for (let i = 0; i < pathEnv.length; i ++) { + const ppRaw = pathEnv[i] + const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw - const v = c + g * (1.0 - c); - let f = 0; + const pCmd = path.join(pathPart, cmd) + const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd + : pCmd - if (v > 0.0) { - f = c / v; - } + for (let j = 0; j < pathExt.length; j ++) { + const cur = p + pathExt[j] + try { + const is = isexe.sync(cur, { pathExt: pathExtExe }) + if (is) { + if (opt.all) + found.push(cur) + else + return cur + } + } catch (ex) {} + } + } - return [hcg[0], f * 100, v * 100]; -}; + if (opt.all && found.length) + return found -convert.hcg.hsl = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; + if (opt.nothrow) + return null - const l = g * (1.0 - c) + 0.5 * c; - let s = 0; + throw getNotFoundError(cmd) +} - if (l > 0.0 && l < 0.5) { - s = c / (2 * l); - } else - if (l >= 0.5 && l < 1.0) { - s = c / (2 * (1 - l)); - } +module.exports = which +which.sync = whichSync - return [hcg[0], s * 100, l * 100]; -}; -convert.hcg.hwb = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; - const v = c + g * (1.0 - c); - return [hcg[0], (v - c) * 100, (1 - v) * 100]; -}; +/***/ }), +/* 238 */ +/***/ (function(module, exports, __webpack_require__) { -convert.hwb.hcg = function (hwb) { - const w = hwb[1] / 100; - const b = hwb[2] / 100; - const v = 1 - b; - const c = v - w; - let g = 0; +var fs = __webpack_require__(133) +var core +if (process.platform === 'win32' || global.TESTING_WINDOWS) { + core = __webpack_require__(239) +} else { + core = __webpack_require__(240) +} - if (c < 1) { - g = (v - c) / (1 - c); - } - - return [hwb[0], c * 100, g * 100]; -}; +module.exports = isexe +isexe.sync = sync -convert.apple.rgb = function (apple) { - return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; -}; +function isexe (path, options, cb) { + if (typeof options === 'function') { + cb = options + options = {} + } -convert.rgb.apple = function (rgb) { - return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; -}; + if (!cb) { + if (typeof Promise !== 'function') { + throw new TypeError('callback not provided') + } -convert.gray.rgb = function (args) { - return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; -}; + return new Promise(function (resolve, reject) { + isexe(path, options || {}, function (er, is) { + if (er) { + reject(er) + } else { + resolve(is) + } + }) + }) + } -convert.gray.hsl = function (args) { - return [0, 0, args[0]]; -}; + core(path, options || {}, function (er, is) { + // ignore EACCES because that just means we aren't allowed to run it + if (er) { + if (er.code === 'EACCES' || options && options.ignoreErrors) { + er = null + is = false + } + } + cb(er, is) + }) +} -convert.gray.hsv = convert.gray.hsl; +function sync (path, options) { + // my kingdom for a filtered catch + try { + return core.sync(path, options || {}) + } catch (er) { + if (options && options.ignoreErrors || er.code === 'EACCES') { + return false + } else { + throw er + } + } +} -convert.gray.hwb = function (gray) { - return [0, 100, gray[0]]; -}; -convert.gray.cmyk = function (gray) { - return [0, 0, 0, gray[0]]; -}; +/***/ }), +/* 239 */ +/***/ (function(module, exports, __webpack_require__) { -convert.gray.lab = function (gray) { - return [gray[0], 0, 0]; -}; +module.exports = isexe +isexe.sync = sync -convert.gray.hex = function (gray) { - const val = Math.round(gray[0] / 100 * 255) & 0xFF; - const integer = (val << 16) + (val << 8) + val; +var fs = __webpack_require__(133) - const string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; +function checkPathExt (path, options) { + var pathext = options.pathExt !== undefined ? + options.pathExt : process.env.PATHEXT -convert.rgb.gray = function (rgb) { - const val = (rgb[0] + rgb[1] + rgb[2]) / 3; - return [val / 255 * 100]; -}; + if (!pathext) { + return true + } + pathext = pathext.split(';') + if (pathext.indexOf('') !== -1) { + return true + } + for (var i = 0; i < pathext.length; i++) { + var p = pathext[i].toLowerCase() + if (p && path.substr(-p.length).toLowerCase() === p) { + return true + } + } + return false +} -/***/ }), -/* 231 */ -/***/ (function(module, exports, __webpack_require__) { +function checkStat (stat, path, options) { + if (!stat.isSymbolicLink() && !stat.isFile()) { + return false + } + return checkPathExt(path, options) +} -const conversions = __webpack_require__(230); +function isexe (path, options, cb) { + fs.stat(path, function (er, stat) { + cb(er, er ? false : checkStat(stat, path, options)) + }) +} -/* - This function routes a model to all other models. +function sync (path, options) { + return checkStat(fs.statSync(path), path, options) +} - all functions that are routed have a property `.conversion` attached - to the returned synthetic function. This property is an array - of strings, each with the steps in between the 'from' and 'to' - color models (inclusive). - conversions that are not possible simply are not included. -*/ +/***/ }), +/* 240 */ +/***/ (function(module, exports, __webpack_require__) { -function buildGraph() { - const graph = {}; - // https://jsperf.com/object-keys-vs-for-in-with-closure/3 - const models = Object.keys(conversions); +module.exports = isexe +isexe.sync = sync - for (let len = models.length, i = 0; i < len; i++) { - graph[models[i]] = { - // http://jsperf.com/1-vs-infinity - // micro-opt, but this is simple. - distance: -1, - parent: null - }; - } +var fs = __webpack_require__(133) - return graph; +function isexe (path, options, cb) { + fs.stat(path, function (er, stat) { + cb(er, er ? false : checkStat(stat, options)) + }) } -// https://en.wikipedia.org/wiki/Breadth-first_search -function deriveBFS(fromModel) { - const graph = buildGraph(); - const queue = [fromModel]; // Unshift -> queue -> pop +function sync (path, options) { + return checkStat(fs.statSync(path), options) +} - graph[fromModel].distance = 0; +function checkStat (stat, options) { + return stat.isFile() && checkMode(stat, options) +} - while (queue.length) { - const current = queue.pop(); - const adjacents = Object.keys(conversions[current]); +function checkMode (stat, options) { + var mod = stat.mode + var uid = stat.uid + var gid = stat.gid - for (let len = adjacents.length, i = 0; i < len; i++) { - const adjacent = adjacents[i]; - const node = graph[adjacent]; + var myUid = options.uid !== undefined ? + options.uid : process.getuid && process.getuid() + var myGid = options.gid !== undefined ? + options.gid : process.getgid && process.getgid() - if (node.distance === -1) { - node.distance = graph[current].distance + 1; - node.parent = current; - queue.unshift(adjacent); - } - } - } + var u = parseInt('100', 8) + var g = parseInt('010', 8) + var o = parseInt('001', 8) + var ug = u | g - return graph; -} + var ret = (mod & o) || + (mod & g) && gid === myGid || + (mod & u) && uid === myUid || + (mod & ug) && myUid === 0 -function link(from, to) { - return function (args) { - return to(from(args)); - }; + return ret } -function wrapConversion(toModel, graph) { - const path = [graph[toModel].parent, toModel]; - let fn = conversions[graph[toModel].parent][toModel]; - - let cur = graph[toModel].parent; - while (graph[cur].parent) { - path.unshift(graph[cur].parent); - fn = link(conversions[graph[cur].parent][cur], fn); - cur = graph[cur].parent; - } - fn.conversion = path; - return fn; -} +/***/ }), +/* 241 */ +/***/ (function(module, exports, __webpack_require__) { -module.exports = function (fromModel) { - const graph = deriveBFS(fromModel); - const conversion = {}; +"use strict"; - const models = Object.keys(graph); - for (let len = models.length, i = 0; i < len; i++) { - const toModel = models[i]; - const node = graph[toModel]; - if (node.parent === null) { - // No possible conversion, or this node is the source model. - continue; - } +const pathKey = (options = {}) => { + const environment = options.env || process.env; + const platform = options.platform || process.platform; - conversion[toModel] = wrapConversion(toModel, graph); + if (platform !== 'win32') { + return 'PATH'; } - return conversion; + return Object.keys(environment).find(key => key.toUpperCase() === 'PATH') || 'Path'; }; +module.exports = pathKey; +// TODO: Remove this for the next major release +module.exports.default = pathKey; /***/ }), -/* 232 */ +/* 242 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const os = __webpack_require__(120); -const tty = __webpack_require__(121); -const hasFlag = __webpack_require__(233); -const {env} = process; +// See http://www.robvanderwoude.com/escapechars.php +const metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g; -let forceColor; -if (hasFlag('no-color') || - hasFlag('no-colors') || - hasFlag('color=false') || - hasFlag('color=never')) { - forceColor = 0; -} else if (hasFlag('color') || - hasFlag('colors') || - hasFlag('color=true') || - hasFlag('color=always')) { - forceColor = 1; -} +function escapeCommand(arg) { + // Escape meta chars + arg = arg.replace(metaCharsRegExp, '^$1'); -if ('FORCE_COLOR' in env) { - if (env.FORCE_COLOR === 'true') { - forceColor = 1; - } else if (env.FORCE_COLOR === 'false') { - forceColor = 0; - } else { - forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3); - } + return arg; } -function translateLevel(level) { - if (level === 0) { - return false; - } +function escapeArgument(arg, doubleEscapeMetaChars) { + // Convert to string + arg = `${arg}`; - return { - level, - hasBasic: true, - has256: level >= 2, - has16m: level >= 3 - }; -} + // Algorithm below is based on https://qntm.org/cmd -function supportsColor(haveStream, streamIsTTY) { - if (forceColor === 0) { - return 0; - } + // Sequence of backslashes followed by a double quote: + // double up all the backslashes and escape the double quote + arg = arg.replace(/(\\*)"/g, '$1$1\\"'); - if (hasFlag('color=16m') || - hasFlag('color=full') || - hasFlag('color=truecolor')) { - return 3; - } + // Sequence of backslashes followed by the end of the string + // (which will become a double quote later): + // double up all the backslashes + arg = arg.replace(/(\\*)$/, '$1$1'); - if (hasFlag('color=256')) { - return 2; - } + // All other backslashes occur literally - if (haveStream && !streamIsTTY && forceColor === undefined) { - return 0; - } + // Quote the whole thing: + arg = `"${arg}"`; - const min = forceColor || 0; + // Escape meta chars + arg = arg.replace(metaCharsRegExp, '^$1'); - if (env.TERM === 'dumb') { - return min; - } + // Double escape meta chars if necessary + if (doubleEscapeMetaChars) { + arg = arg.replace(metaCharsRegExp, '^$1'); + } - if (process.platform === 'win32') { - // Windows 10 build 10586 is the first Windows release that supports 256 colors. - // Windows 10 build 14931 is the first release that supports 16m/TrueColor. - const osRelease = os.release().split('.'); - if ( - Number(osRelease[0]) >= 10 && - Number(osRelease[2]) >= 10586 - ) { - return Number(osRelease[2]) >= 14931 ? 3 : 2; - } + return arg; +} - return 1; - } +module.exports.command = escapeCommand; +module.exports.argument = escapeArgument; - if ('CI' in env) { - if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') { - return 1; - } - return min; - } +/***/ }), +/* 243 */ +/***/ (function(module, exports, __webpack_require__) { - if ('TEAMCITY_VERSION' in env) { - return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; - } +"use strict"; - if ('GITHUB_ACTIONS' in env) { - return 1; - } - if (env.COLORTERM === 'truecolor') { - return 3; - } +const fs = __webpack_require__(133); +const shebangCommand = __webpack_require__(244); - if ('TERM_PROGRAM' in env) { - const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); +function readShebang(command) { + // Read the first 150 bytes from the file + const size = 150; + const buffer = Buffer.alloc(size); - switch (env.TERM_PROGRAM) { - case 'iTerm.app': - return version >= 3 ? 3 : 2; - case 'Apple_Terminal': - return 2; - // No default - } - } + let fd; - if (/-256(color)?$/i.test(env.TERM)) { - return 2; - } + try { + fd = fs.openSync(command, 'r'); + fs.readSync(fd, buffer, 0, size, 0); + fs.closeSync(fd); + } catch (e) { /* Empty */ } - if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { - return 1; - } + // Attempt to extract shebang (null is returned if not a shebang) + return shebangCommand(buffer.toString()); +} - if ('COLORTERM' in env) { - return 1; +module.exports = readShebang; + + +/***/ }), +/* 244 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const shebangRegex = __webpack_require__(245); + +module.exports = (string = '') => { + const match = string.match(shebangRegex); + + if (!match) { + return null; } - return min; -} + const [path, argument] = match[0].replace(/#! ?/, '').split(' '); + const binary = path.split('/').pop(); -function getSupportLevel(stream) { - const level = supportsColor(stream, stream && stream.isTTY); - return translateLevel(level); -} + if (binary === 'env') { + return argument; + } -module.exports = { - supportsColor: getSupportLevel, - stdout: translateLevel(supportsColor(true, tty.isatty(1))), - stderr: translateLevel(supportsColor(true, tty.isatty(2))) + return argument ? `${binary} ${argument}` : binary; }; /***/ }), -/* 233 */ +/* 245 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; - -module.exports = (flag, argv = process.argv) => { - const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); - const position = argv.indexOf(prefix + flag); - const terminatorPosition = argv.indexOf('--'); - return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition); -}; +module.exports = /^#!(.*)/; /***/ }), -/* 234 */ +/* 246 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const stringReplaceAll = (string, substring, replacer) => { - let index = string.indexOf(substring); - if (index === -1) { - return string; - } +const isWin = process.platform === 'win32'; - const substringLength = substring.length; - let endIndex = 0; - let returnValue = ''; - do { - returnValue += string.substr(endIndex, index - endIndex) + substring + replacer; - endIndex = index + substringLength; - index = string.indexOf(substring, endIndex); - } while (index !== -1); +function notFoundError(original, syscall) { + return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), { + code: 'ENOENT', + errno: 'ENOENT', + syscall: `${syscall} ${original.command}`, + path: original.command, + spawnargs: original.args, + }); +} - returnValue += string.substr(endIndex); - return returnValue; -}; +function hookChildProcess(cp, parsed) { + if (!isWin) { + return; + } -const stringEncaseCRLFWithFirstIndex = (string, prefix, postfix, index) => { - let endIndex = 0; - let returnValue = ''; - do { - const gotCR = string[index - 1] === '\r'; - returnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\r\n' : '\n') + postfix; - endIndex = index + 1; - index = string.indexOf('\n', endIndex); - } while (index !== -1); + const originalEmit = cp.emit; - returnValue += string.substr(endIndex); - return returnValue; -}; + cp.emit = function (name, arg1) { + // If emitting "exit" event and exit code is 1, we need to check if + // the command exists and emit an "error" instead + // See https://github.com/IndigoUnited/node-cross-spawn/issues/16 + if (name === 'exit') { + const err = verifyENOENT(arg1, parsed, 'spawn'); + + if (err) { + return originalEmit.call(cp, 'error', err); + } + } + + return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params + }; +} + +function verifyENOENT(status, parsed) { + if (isWin && status === 1 && !parsed.file) { + return notFoundError(parsed.original, 'spawn'); + } + + return null; +} + +function verifyENOENTSync(status, parsed) { + if (isWin && status === 1 && !parsed.file) { + return notFoundError(parsed.original, 'spawnSync'); + } + + return null; +} module.exports = { - stringReplaceAll, - stringEncaseCRLFWithFirstIndex + hookChildProcess, + verifyENOENT, + verifyENOENTSync, + notFoundError, }; /***/ }), -/* 235 */ +/* 247 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const TEMPLATE_REGEX = /(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi; -const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g; -const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/; -const ESCAPE_REGEX = /\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi; - -const ESCAPES = new Map([ - ['n', '\n'], - ['r', '\r'], - ['t', '\t'], - ['b', '\b'], - ['f', '\f'], - ['v', '\v'], - ['0', '\0'], - ['\\', '\\'], - ['e', '\u001B'], - ['a', '\u0007'] -]); - -function unescape(c) { - const u = c[0] === 'u'; - const bracket = c[1] === '{'; - if ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) { - return String.fromCharCode(parseInt(c.slice(1), 16)); - } +module.exports = input => { + const LF = typeof input === 'string' ? '\n' : '\n'.charCodeAt(); + const CR = typeof input === 'string' ? '\r' : '\r'.charCodeAt(); - if (u && bracket) { - return String.fromCodePoint(parseInt(c.slice(2, -1), 16)); + if (input[input.length - 1] === LF) { + input = input.slice(0, input.length - 1); } - return ESCAPES.get(c) || c; -} - -function parseArguments(name, arguments_) { - const results = []; - const chunks = arguments_.trim().split(/\s*,\s*/g); - let matches; - - for (const chunk of chunks) { - const number = Number(chunk); - if (!Number.isNaN(number)) { - results.push(number); - } else if ((matches = chunk.match(STRING_REGEX))) { - results.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character)); - } else { - throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`); - } + if (input[input.length - 1] === CR) { + input = input.slice(0, input.length - 1); } - return results; -} - -function parseStyle(style) { - STYLE_REGEX.lastIndex = 0; - - const results = []; - let matches; - - while ((matches = STYLE_REGEX.exec(style)) !== null) { - const name = matches[1]; + return input; +}; - if (matches[2]) { - const args = parseArguments(name, matches[2]); - results.push([name].concat(args)); - } else { - results.push([name]); - } - } - return results; -} +/***/ }), +/* 248 */ +/***/ (function(module, exports, __webpack_require__) { -function buildStyle(chalk, styles) { - const enabled = {}; +"use strict"; - for (const layer of styles) { - for (const style of layer.styles) { - enabled[style[0]] = layer.inverse ? null : style.slice(1); - } - } +const path = __webpack_require__(4); +const pathKey = __webpack_require__(241); - let current = chalk; - for (const [styleName, styles] of Object.entries(enabled)) { - if (!Array.isArray(styles)) { - continue; - } +const npmRunPath = options => { + options = { + cwd: process.cwd(), + path: process.env[pathKey()], + execPath: process.execPath, + ...options + }; - if (!(styleName in current)) { - throw new Error(`Unknown Chalk style: ${styleName}`); - } + let previous; + let cwdPath = path.resolve(options.cwd); + const result = []; - current = styles.length > 0 ? current[styleName](...styles) : current[styleName]; + while (previous !== cwdPath) { + result.push(path.join(cwdPath, 'node_modules/.bin')); + previous = cwdPath; + cwdPath = path.resolve(cwdPath, '..'); } - return current; -} + // Ensure the running `node` binary is used + const execPathDir = path.resolve(options.cwd, options.execPath, '..'); + result.push(execPathDir); -module.exports = (chalk, temporary) => { - const styles = []; - const chunks = []; - let chunk = []; + return result.concat(options.path).join(path.delimiter); +}; - // eslint-disable-next-line max-params - temporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => { - if (escapeCharacter) { - chunk.push(unescape(escapeCharacter)); - } else if (style) { - const string = chunk.join(''); - chunk = []; - chunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string)); - styles.push({inverse, styles: parseStyle(style)}); - } else if (close) { - if (styles.length === 0) { - throw new Error('Found extraneous } in Chalk template literal'); - } +module.exports = npmRunPath; +// TODO: Remove this for the next major release +module.exports.default = npmRunPath; - chunks.push(buildStyle(chalk, styles)(chunk.join(''))); - chunk = []; - styles.pop(); - } else { - chunk.push(character); - } - }); +module.exports.env = options => { + options = { + env: process.env, + ...options + }; - chunks.push(chunk.join('')); + const env = {...options.env}; + const path = pathKey({env}); - if (styles.length > 0) { - const errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`; - throw new Error(errMessage); - } + options.path = env[path]; + env[path] = module.exports(options); - return chunks.join(''); + return env; }; /***/ }), -/* 236 */ +/* 249 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const path = __webpack_require__(4); -const childProcess = __webpack_require__(237); -const crossSpawn = __webpack_require__(238); -const stripFinalNewline = __webpack_require__(251); -const npmRunPath = __webpack_require__(252); -const onetime = __webpack_require__(253); -const makeError = __webpack_require__(255); -const normalizeStdio = __webpack_require__(260); -const {spawnedKill, spawnedCancel, setupTimeout, setExitHandler} = __webpack_require__(261); -const {handleInput, getSpawnedResult, makeAllStream, validateInputSync} = __webpack_require__(262); -const {mergePromise, getSpawnedPromise} = __webpack_require__(269); -const {joinCommand, parseCommand} = __webpack_require__(270); - -const DEFAULT_MAX_BUFFER = 1000 * 1000 * 100; +const mimicFn = __webpack_require__(250); -const getEnv = ({env: envOption, extendEnv, preferLocal, localDir, execPath}) => { - const env = extendEnv ? {...process.env, ...envOption} : envOption; +const calledFunctions = new WeakMap(); - if (preferLocal) { - return npmRunPath.env({env, cwd: localDir, execPath}); +const oneTime = (fn, options = {}) => { + if (typeof fn !== 'function') { + throw new TypeError('Expected a function'); } - return env; -}; - -const handleArgs = (file, args, options = {}) => { - const parsed = crossSpawn._parse(file, args, options); - file = parsed.command; - args = parsed.args; - options = parsed.options; - - options = { - maxBuffer: DEFAULT_MAX_BUFFER, - buffer: true, - stripFinalNewline: true, - extendEnv: true, - preferLocal: false, - localDir: options.cwd || process.cwd(), - execPath: process.execPath, - encoding: 'utf8', - reject: true, - cleanup: true, - all: false, - windowsHide: true, - ...options - }; + let ret; + let isCalled = false; + let callCount = 0; + const functionName = fn.displayName || fn.name || ''; - options.env = getEnv(options); + const onetime = function (...args) { + calledFunctions.set(onetime, ++callCount); - options.stdio = normalizeStdio(options); + if (isCalled) { + if (options.throw === true) { + throw new Error(`Function \`${functionName}\` can only be called once`); + } - if (process.platform === 'win32' && path.basename(file, '.exe') === 'cmd') { - // #116 - args.unshift('/q'); - } + return ret; + } - return {file, args, options, parsed}; -}; + isCalled = true; + ret = fn.apply(this, args); + fn = null; -const handleOutput = (options, value, error) => { - if (typeof value !== 'string' && !Buffer.isBuffer(value)) { - // When `execa.sync()` errors, we normalize it to '' to mimic `execa()` - return error === undefined ? undefined : ''; - } + return ret; + }; - if (options.stripFinalNewline) { - return stripFinalNewline(value); - } + mimicFn(onetime, fn); + calledFunctions.set(onetime, callCount); - return value; + return onetime; }; -const execa = (file, args, options) => { - const parsed = handleArgs(file, args, options); - const command = joinCommand(file, args); +module.exports = oneTime; +// TODO: Remove this for the next major release +module.exports.default = oneTime; - let spawned; - try { - spawned = childProcess.spawn(parsed.file, parsed.args, parsed.options); - } catch (error) { - // Ensure the returned error is always both a promise and a child process - const dummySpawned = new childProcess.ChildProcess(); - const errorPromise = Promise.reject(makeError({ - error, - stdout: '', - stderr: '', - all: '', - command, - parsed, - timedOut: false, - isCanceled: false, - killed: false - })); - return mergePromise(dummySpawned, errorPromise); +module.exports.callCount = fn => { + if (!calledFunctions.has(fn)) { + throw new Error(`The given function \`${fn.name}\` is not wrapped by the \`onetime\` package`); } - const spawnedPromise = getSpawnedPromise(spawned); - const timedPromise = setupTimeout(spawned, parsed.options, spawnedPromise); - const processDone = setExitHandler(spawned, parsed.options, timedPromise); - - const context = {isCanceled: false}; + return calledFunctions.get(fn); +}; - spawned.kill = spawnedKill.bind(null, spawned.kill.bind(spawned)); - spawned.cancel = spawnedCancel.bind(null, spawned, context); - const handlePromise = async () => { - const [{error, exitCode, signal, timedOut}, stdoutResult, stderrResult, allResult] = await getSpawnedResult(spawned, parsed.options, processDone); - const stdout = handleOutput(parsed.options, stdoutResult); - const stderr = handleOutput(parsed.options, stderrResult); - const all = handleOutput(parsed.options, allResult); +/***/ }), +/* 250 */ +/***/ (function(module, exports, __webpack_require__) { - if (error || exitCode !== 0 || signal !== null) { - const returnedError = makeError({ - error, - exitCode, - signal, - stdout, - stderr, - all, - command, - parsed, - timedOut, - isCanceled: context.isCanceled, - killed: spawned.killed - }); +"use strict"; - if (!parsed.options.reject) { - return returnedError; - } - throw returnedError; - } +const mimicFn = (to, from) => { + for (const prop of Reflect.ownKeys(from)) { + Object.defineProperty(to, prop, Object.getOwnPropertyDescriptor(from, prop)); + } - return { - command, - exitCode: 0, - stdout, - stderr, - all, - failed: false, - timedOut: false, - isCanceled: false, - killed: false - }; - }; + return to; +}; - const handlePromiseOnce = onetime(handlePromise); +module.exports = mimicFn; +// TODO: Remove this for the next major release +module.exports.default = mimicFn; - crossSpawn._enoent.hookChildProcess(spawned, parsed.parsed); - handleInput(spawned, parsed.options.input); +/***/ }), +/* 251 */ +/***/ (function(module, exports, __webpack_require__) { - spawned.all = makeAllStream(spawned, parsed.options); +"use strict"; - return mergePromise(spawned, handlePromiseOnce); -}; +const {signalsByName} = __webpack_require__(252); -module.exports = execa; +const getErrorPrefix = ({timedOut, timeout, errorCode, signal, signalDescription, exitCode, isCanceled}) => { + if (timedOut) { + return `timed out after ${timeout} milliseconds`; + } -module.exports.sync = (file, args, options) => { - const parsed = handleArgs(file, args, options); - const command = joinCommand(file, args); + if (isCanceled) { + return 'was canceled'; + } - validateInputSync(parsed.options); + if (errorCode !== undefined) { + return `failed with ${errorCode}`; + } - let result; - try { - result = childProcess.spawnSync(parsed.file, parsed.args, parsed.options); - } catch (error) { - throw makeError({ - error, - stdout: '', - stderr: '', - all: '', - command, - parsed, - timedOut: false, - isCanceled: false, - killed: false - }); + if (signal !== undefined) { + return `was killed with ${signal} (${signalDescription})`; } - const stdout = handleOutput(parsed.options, result.stdout, result.error); - const stderr = handleOutput(parsed.options, result.stderr, result.error); + if (exitCode !== undefined) { + return `failed with exit code ${exitCode}`; + } - if (result.error || result.status !== 0 || result.signal !== null) { - const error = makeError({ - stdout, - stderr, - error: result.error, - signal: result.signal, - exitCode: result.status, - command, - parsed, - timedOut: result.error && result.error.code === 'ETIMEDOUT', - isCanceled: false, - killed: result.signal !== null - }); + return 'failed'; +}; - if (!parsed.options.reject) { - return error; - } +const makeError = ({ + stdout, + stderr, + all, + error, + signal, + exitCode, + command, + timedOut, + isCanceled, + killed, + parsed: {options: {timeout}} +}) => { + // `signal` and `exitCode` emitted on `spawned.on('exit')` event can be `null`. + // We normalize them to `undefined` + exitCode = exitCode === null ? undefined : exitCode; + signal = signal === null ? undefined : signal; + const signalDescription = signal === undefined ? undefined : signalsByName[signal].description; - throw error; - } + const errorCode = error && error.code; - return { - command, - exitCode: 0, - stdout, - stderr, - failed: false, - timedOut: false, - isCanceled: false, - killed: false - }; -}; + const prefix = getErrorPrefix({timedOut, timeout, errorCode, signal, signalDescription, exitCode, isCanceled}); + const execaMessage = `Command ${prefix}: ${command}`; + const isError = Object.prototype.toString.call(error) === '[object Error]'; + const shortMessage = isError ? `${execaMessage}\n${error.message}` : execaMessage; + const message = [shortMessage, stderr, stdout].filter(Boolean).join('\n'); -module.exports.command = (command, options) => { - const [file, ...args] = parseCommand(command); - return execa(file, args, options); -}; + if (isError) { + error.originalMessage = error.message; + error.message = message; + } else { + error = new Error(message); + } -module.exports.commandSync = (command, options) => { - const [file, ...args] = parseCommand(command); - return execa.sync(file, args, options); -}; + error.shortMessage = shortMessage; + error.command = command; + error.exitCode = exitCode; + error.signal = signal; + error.signalDescription = signalDescription; + error.stdout = stdout; + error.stderr = stderr; -module.exports.node = (scriptPath, args, options = {}) => { - if (args && !Array.isArray(args) && typeof args === 'object') { - options = args; - args = []; + if (all !== undefined) { + error.all = all; } - const stdio = normalizeStdio.node(options); + if ('bufferedData' in error) { + delete error.bufferedData; + } - const {nodePath = process.execPath, nodeOptions = process.execArgv} = options; + error.failed = true; + error.timedOut = Boolean(timedOut); + error.isCanceled = isCanceled; + error.killed = killed && !timedOut; - return execa( - nodePath, - [ - ...nodeOptions, - scriptPath, - ...(Array.isArray(args) ? args : []) - ], - { - ...options, - stdin: undefined, - stdout: undefined, - stderr: undefined, - stdio, - shell: false - } - ); + return error; }; +module.exports = makeError; -/***/ }), -/* 237 */ -/***/ (function(module, exports) { - -module.exports = require("child_process"); /***/ }), -/* 238 */ +/* 252 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; +Object.defineProperty(exports,"__esModule",{value:true});exports.signalsByNumber=exports.signalsByName=void 0;var _os=__webpack_require__(120); +var _signals=__webpack_require__(253); +var _realtime=__webpack_require__(255); -const cp = __webpack_require__(237); -const parse = __webpack_require__(239); -const enoent = __webpack_require__(250); -function spawn(command, args, options) { - // Parse the arguments - const parsed = parse(command, args, options); - // Spawn the child process - const spawned = cp.spawn(parsed.command, parsed.args, parsed.options); +const getSignalsByName=function(){ +const signals=(0,_signals.getSignals)(); +return signals.reduce(getSignalByName,{}); +}; - // Hook into child process "exit" event to emit an error if the command - // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16 - enoent.hookChildProcess(spawned, parsed); +const getSignalByName=function( +signalByNameMemo, +{name,number,description,supported,action,forced,standard}) +{ +return{ +...signalByNameMemo, +[name]:{name,number,description,supported,action,forced,standard}}; - return spawned; -} +}; -function spawnSync(command, args, options) { - // Parse the arguments - const parsed = parse(command, args, options); +const signalsByName=getSignalsByName();exports.signalsByName=signalsByName; - // Spawn the child process - const result = cp.spawnSync(parsed.command, parsed.args, parsed.options); - // Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16 - result.error = result.error || enoent.verifyENOENTSync(result.status, parsed); - return result; -} - -module.exports = spawn; -module.exports.spawn = spawn; -module.exports.sync = spawnSync; - -module.exports._parse = parse; -module.exports._enoent = enoent; +const getSignalsByNumber=function(){ +const signals=(0,_signals.getSignals)(); +const length=_realtime.SIGRTMAX+1; +const signalsA=Array.from({length},(value,number)=> +getSignalByNumber(number,signals)); -/***/ }), -/* 239 */ -/***/ (function(module, exports, __webpack_require__) { +return Object.assign({},...signalsA); +}; -"use strict"; +const getSignalByNumber=function(number,signals){ +const signal=findSignalByNumber(number,signals); +if(signal===undefined){ +return{}; +} -const path = __webpack_require__(4); -const resolveCommand = __webpack_require__(240); -const escape = __webpack_require__(246); -const readShebang = __webpack_require__(247); +const{name,description,supported,action,forced,standard}=signal; +return{ +[number]:{ +name, +number, +description, +supported, +action, +forced, +standard}}; -const isWin = process.platform === 'win32'; -const isExecutableRegExp = /\.(?:com|exe)$/i; -const isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i; -function detectShebang(parsed) { - parsed.file = resolveCommand(parsed); +}; - const shebang = parsed.file && readShebang(parsed.file); - if (shebang) { - parsed.args.unshift(parsed.file); - parsed.command = shebang; - return resolveCommand(parsed); - } +const findSignalByNumber=function(number,signals){ +const signal=signals.find(({name})=>_os.constants.signals[name]===number); - return parsed.file; +if(signal!==undefined){ +return signal; } -function parseNonShell(parsed) { - if (!isWin) { - return parsed; - } +return signals.find(signalA=>signalA.number===number); +}; - // Detect & add support for shebangs - const commandFile = detectShebang(parsed); +const signalsByNumber=getSignalsByNumber();exports.signalsByNumber=signalsByNumber; +//# sourceMappingURL=main.js.map - // We don't need a shell if the command filename is an executable - const needsShell = !isExecutableRegExp.test(commandFile); +/***/ }), +/* 253 */ +/***/ (function(module, exports, __webpack_require__) { - // If a shell is required, use cmd.exe and take care of escaping everything correctly - // Note that `forceShell` is an hidden option used only in tests - if (parsed.options.forceShell || needsShell) { - // Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/` - // The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument - // Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called, - // we need to double escape them - const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile); +"use strict"; +Object.defineProperty(exports,"__esModule",{value:true});exports.getSignals=void 0;var _os=__webpack_require__(120); - // Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\bar) - // This is necessary otherwise it will always fail with ENOENT in those cases - parsed.command = path.normalize(parsed.command); +var _core=__webpack_require__(254); +var _realtime=__webpack_require__(255); - // Escape command & arguments - parsed.command = escape.command(parsed.command); - parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars)); - const shellCommand = [parsed.command].concat(parsed.args).join(' '); - parsed.args = ['/d', '/s', '/c', `"${shellCommand}"`]; - parsed.command = process.env.comspec || 'cmd.exe'; - parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped - } +const getSignals=function(){ +const realtimeSignals=(0,_realtime.getRealtimeSignals)(); +const signals=[..._core.SIGNALS,...realtimeSignals].map(normalizeSignal); +return signals; +};exports.getSignals=getSignals; - return parsed; -} -function parse(command, args, options) { - // Normalize arguments, similar to nodejs - if (args && !Array.isArray(args)) { - options = args; - args = null; - } - args = args ? args.slice(0) : []; // Clone array to avoid changing the original - options = Object.assign({}, options); // Clone object to avoid changing the original - // Build our parsed object - const parsed = { - command, - args, - options, - file: undefined, - original: { - command, - args, - }, - }; - // Delegate further parsing to shell or non-shell - return options.shell ? parsed : parseNonShell(parsed); -} -module.exports = parse; +const normalizeSignal=function({ +name, +number:defaultNumber, +description, +action, +forced=false, +standard}) +{ +const{ +signals:{[name]:constantSignal}}= +_os.constants; +const supported=constantSignal!==undefined; +const number=supported?constantSignal:defaultNumber; +return{name,number,description,supported,action,forced,standard}; +}; +//# sourceMappingURL=signals.js.map /***/ }), -/* 240 */ +/* 254 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; +Object.defineProperty(exports,"__esModule",{value:true});exports.SIGNALS=void 0; +const SIGNALS=[ +{ +name:"SIGHUP", +number:1, +action:"terminate", +description:"Terminal closed", +standard:"posix"}, -const path = __webpack_require__(4); -const which = __webpack_require__(241); -const pathKey = __webpack_require__(245)(); +{ +name:"SIGINT", +number:2, +action:"terminate", +description:"User interruption with CTRL-C", +standard:"ansi"}, -function resolveCommandAttempt(parsed, withoutPathExt) { - const cwd = process.cwd(); - const hasCustomCwd = parsed.options.cwd != null; - // Worker threads do not have process.chdir() - const shouldSwitchCwd = hasCustomCwd && process.chdir !== undefined; +{ +name:"SIGQUIT", +number:3, +action:"core", +description:"User interruption with CTRL-\\", +standard:"posix"}, - // If a custom `cwd` was specified, we need to change the process cwd - // because `which` will do stat calls but does not support a custom cwd - if (shouldSwitchCwd) { - try { - process.chdir(parsed.options.cwd); - } catch (err) { - /* Empty */ - } - } +{ +name:"SIGILL", +number:4, +action:"core", +description:"Invalid machine instruction", +standard:"ansi"}, - let resolved; +{ +name:"SIGTRAP", +number:5, +action:"core", +description:"Debugger breakpoint", +standard:"posix"}, - try { - resolved = which.sync(parsed.command, { - path: (parsed.options.env || process.env)[pathKey], - pathExt: withoutPathExt ? path.delimiter : undefined, - }); - } catch (e) { - /* Empty */ - } finally { - if (shouldSwitchCwd) { - process.chdir(cwd); - } - } +{ +name:"SIGABRT", +number:6, +action:"core", +description:"Aborted", +standard:"ansi"}, - // If we successfully resolved, ensure that an absolute path is returned - // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it - if (resolved) { - resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved); - } +{ +name:"SIGIOT", +number:6, +action:"core", +description:"Aborted", +standard:"bsd"}, - return resolved; -} +{ +name:"SIGBUS", +number:7, +action:"core", +description: +"Bus error due to misaligned, non-existing address or paging error", +standard:"bsd"}, -function resolveCommand(parsed) { - return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true); -} +{ +name:"SIGEMT", +number:7, +action:"terminate", +description:"Command should be emulated but is not implemented", +standard:"other"}, -module.exports = resolveCommand; +{ +name:"SIGFPE", +number:8, +action:"core", +description:"Floating point arithmetic error", +standard:"ansi"}, +{ +name:"SIGKILL", +number:9, +action:"terminate", +description:"Forced termination", +standard:"posix", +forced:true}, -/***/ }), -/* 241 */ -/***/ (function(module, exports, __webpack_require__) { +{ +name:"SIGUSR1", +number:10, +action:"terminate", +description:"Application-specific signal", +standard:"posix"}, -const isWindows = process.platform === 'win32' || - process.env.OSTYPE === 'cygwin' || - process.env.OSTYPE === 'msys' +{ +name:"SIGSEGV", +number:11, +action:"core", +description:"Segmentation fault", +standard:"ansi"}, -const path = __webpack_require__(4) -const COLON = isWindows ? ';' : ':' -const isexe = __webpack_require__(242) +{ +name:"SIGUSR2", +number:12, +action:"terminate", +description:"Application-specific signal", +standard:"posix"}, -const getNotFoundError = (cmd) => - Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' }) +{ +name:"SIGPIPE", +number:13, +action:"terminate", +description:"Broken pipe or socket", +standard:"posix"}, -const getPathInfo = (cmd, opt) => { - const colon = opt.colon || COLON +{ +name:"SIGALRM", +number:14, +action:"terminate", +description:"Timeout or timer", +standard:"posix"}, - // If it has a slash, then we don't bother searching the pathenv. - // just check the file itself, and that's it. - const pathEnv = cmd.match(/\//) || isWindows && cmd.match(/\\/) ? [''] - : ( - [ - // windows always checks the cwd first - ...(isWindows ? [process.cwd()] : []), - ...(opt.path || process.env.PATH || - /* istanbul ignore next: very unusual */ '').split(colon), - ] - ) - const pathExtExe = isWindows - ? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM' - : '' - const pathExt = isWindows ? pathExtExe.split(colon) : [''] +{ +name:"SIGTERM", +number:15, +action:"terminate", +description:"Termination", +standard:"ansi"}, - if (isWindows) { - if (cmd.indexOf('.') !== -1 && pathExt[0] !== '') - pathExt.unshift('') - } +{ +name:"SIGSTKFLT", +number:16, +action:"terminate", +description:"Stack is empty or overflowed", +standard:"other"}, - return { - pathEnv, - pathExt, - pathExtExe, - } -} +{ +name:"SIGCHLD", +number:17, +action:"ignore", +description:"Child process terminated, paused or unpaused", +standard:"posix"}, -const which = (cmd, opt, cb) => { - if (typeof opt === 'function') { - cb = opt - opt = {} - } - if (!opt) - opt = {} +{ +name:"SIGCLD", +number:17, +action:"ignore", +description:"Child process terminated, paused or unpaused", +standard:"other"}, - const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt) - const found = [] +{ +name:"SIGCONT", +number:18, +action:"unpause", +description:"Unpaused", +standard:"posix", +forced:true}, - const step = i => new Promise((resolve, reject) => { - if (i === pathEnv.length) - return opt.all && found.length ? resolve(found) - : reject(getNotFoundError(cmd)) +{ +name:"SIGSTOP", +number:19, +action:"pause", +description:"Paused", +standard:"posix", +forced:true}, - const ppRaw = pathEnv[i] - const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw +{ +name:"SIGTSTP", +number:20, +action:"pause", +description:"Paused using CTRL-Z or \"suspend\"", +standard:"posix"}, - const pCmd = path.join(pathPart, cmd) - const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd - : pCmd +{ +name:"SIGTTIN", +number:21, +action:"pause", +description:"Background process cannot read terminal input", +standard:"posix"}, - resolve(subStep(p, i, 0)) - }) +{ +name:"SIGBREAK", +number:21, +action:"terminate", +description:"User interruption with CTRL-BREAK", +standard:"other"}, - const subStep = (p, i, ii) => new Promise((resolve, reject) => { - if (ii === pathExt.length) - return resolve(step(i + 1)) - const ext = pathExt[ii] - isexe(p + ext, { pathExt: pathExtExe }, (er, is) => { - if (!er && is) { - if (opt.all) - found.push(p + ext) - else - return resolve(p + ext) - } - return resolve(subStep(p, i, ii + 1)) - }) - }) +{ +name:"SIGTTOU", +number:22, +action:"pause", +description:"Background process cannot write to terminal output", +standard:"posix"}, - return cb ? step(0).then(res => cb(null, res), cb) : step(0) -} +{ +name:"SIGURG", +number:23, +action:"ignore", +description:"Socket received out-of-band data", +standard:"bsd"}, -const whichSync = (cmd, opt) => { - opt = opt || {} +{ +name:"SIGXCPU", +number:24, +action:"core", +description:"Process timed out", +standard:"bsd"}, - const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt) - const found = [] +{ +name:"SIGXFSZ", +number:25, +action:"core", +description:"File too big", +standard:"bsd"}, - for (let i = 0; i < pathEnv.length; i ++) { - const ppRaw = pathEnv[i] - const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw +{ +name:"SIGVTALRM", +number:26, +action:"terminate", +description:"Timeout or timer", +standard:"bsd"}, - const pCmd = path.join(pathPart, cmd) - const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd - : pCmd +{ +name:"SIGPROF", +number:27, +action:"terminate", +description:"Timeout or timer", +standard:"bsd"}, - for (let j = 0; j < pathExt.length; j ++) { - const cur = p + pathExt[j] - try { - const is = isexe.sync(cur, { pathExt: pathExtExe }) - if (is) { - if (opt.all) - found.push(cur) - else - return cur - } - } catch (ex) {} - } - } +{ +name:"SIGWINCH", +number:28, +action:"ignore", +description:"Terminal window size changed", +standard:"bsd"}, - if (opt.all && found.length) - return found +{ +name:"SIGIO", +number:29, +action:"terminate", +description:"I/O is available", +standard:"other"}, - if (opt.nothrow) - return null +{ +name:"SIGPOLL", +number:29, +action:"terminate", +description:"Watched event", +standard:"other"}, - throw getNotFoundError(cmd) -} +{ +name:"SIGINFO", +number:29, +action:"ignore", +description:"Request for process information", +standard:"other"}, -module.exports = which -which.sync = whichSync +{ +name:"SIGPWR", +number:30, +action:"terminate", +description:"Device running out of power", +standard:"systemv"}, + +{ +name:"SIGSYS", +number:31, +action:"core", +description:"Invalid system call", +standard:"other"}, +{ +name:"SIGUNUSED", +number:31, +action:"terminate", +description:"Invalid system call", +standard:"other"}];exports.SIGNALS=SIGNALS; +//# sourceMappingURL=core.js.map /***/ }), -/* 242 */ +/* 255 */ /***/ (function(module, exports, __webpack_require__) { -var fs = __webpack_require__(133) -var core -if (process.platform === 'win32' || global.TESTING_WINDOWS) { - core = __webpack_require__(243) -} else { - core = __webpack_require__(244) -} - -module.exports = isexe -isexe.sync = sync - -function isexe (path, options, cb) { - if (typeof options === 'function') { - cb = options - options = {} - } - - if (!cb) { - if (typeof Promise !== 'function') { - throw new TypeError('callback not provided') - } - - return new Promise(function (resolve, reject) { - isexe(path, options || {}, function (er, is) { - if (er) { - reject(er) - } else { - resolve(is) - } - }) - }) - } +"use strict"; +Object.defineProperty(exports,"__esModule",{value:true});exports.SIGRTMAX=exports.getRealtimeSignals=void 0; +const getRealtimeSignals=function(){ +const length=SIGRTMAX-SIGRTMIN+1; +return Array.from({length},getRealtimeSignal); +};exports.getRealtimeSignals=getRealtimeSignals; - core(path, options || {}, function (er, is) { - // ignore EACCES because that just means we aren't allowed to run it - if (er) { - if (er.code === 'EACCES' || options && options.ignoreErrors) { - er = null - is = false - } - } - cb(er, is) - }) -} +const getRealtimeSignal=function(value,index){ +return{ +name:`SIGRT${index+1}`, +number:SIGRTMIN+index, +action:"terminate", +description:"Application-specific signal (realtime)", +standard:"posix"}; -function sync (path, options) { - // my kingdom for a filtered catch - try { - return core.sync(path, options || {}) - } catch (er) { - if (options && options.ignoreErrors || er.code === 'EACCES') { - return false - } else { - throw er - } - } -} +}; +const SIGRTMIN=34; +const SIGRTMAX=64;exports.SIGRTMAX=SIGRTMAX; +//# sourceMappingURL=realtime.js.map /***/ }), -/* 243 */ +/* 256 */ /***/ (function(module, exports, __webpack_require__) { -module.exports = isexe -isexe.sync = sync - -var fs = __webpack_require__(133) - -function checkPathExt (path, options) { - var pathext = options.pathExt !== undefined ? - options.pathExt : process.env.PATHEXT - - if (!pathext) { - return true - } - - pathext = pathext.split(';') - if (pathext.indexOf('') !== -1) { - return true - } - for (var i = 0; i < pathext.length; i++) { - var p = pathext[i].toLowerCase() - if (p && path.substr(-p.length).toLowerCase() === p) { - return true - } - } - return false -} +"use strict"; -function checkStat (stat, path, options) { - if (!stat.isSymbolicLink() && !stat.isFile()) { - return false - } - return checkPathExt(path, options) -} +const aliases = ['stdin', 'stdout', 'stderr']; -function isexe (path, options, cb) { - fs.stat(path, function (er, stat) { - cb(er, er ? false : checkStat(stat, path, options)) - }) -} +const hasAlias = opts => aliases.some(alias => opts[alias] !== undefined); -function sync (path, options) { - return checkStat(fs.statSync(path), path, options) -} +const normalizeStdio = opts => { + if (!opts) { + return; + } + const {stdio} = opts; -/***/ }), -/* 244 */ -/***/ (function(module, exports, __webpack_require__) { + if (stdio === undefined) { + return aliases.map(alias => opts[alias]); + } -module.exports = isexe -isexe.sync = sync + if (hasAlias(opts)) { + throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${aliases.map(alias => `\`${alias}\``).join(', ')}`); + } -var fs = __webpack_require__(133) + if (typeof stdio === 'string') { + return stdio; + } -function isexe (path, options, cb) { - fs.stat(path, function (er, stat) { - cb(er, er ? false : checkStat(stat, options)) - }) -} + if (!Array.isArray(stdio)) { + throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof stdio}\``); + } -function sync (path, options) { - return checkStat(fs.statSync(path), options) -} + const length = Math.max(stdio.length, aliases.length); + return Array.from({length}, (value, index) => stdio[index]); +}; -function checkStat (stat, options) { - return stat.isFile() && checkMode(stat, options) -} +module.exports = normalizeStdio; -function checkMode (stat, options) { - var mod = stat.mode - var uid = stat.uid - var gid = stat.gid +// `ipc` is pushed unless it is already present +module.exports.node = opts => { + const stdio = normalizeStdio(opts); - var myUid = options.uid !== undefined ? - options.uid : process.getuid && process.getuid() - var myGid = options.gid !== undefined ? - options.gid : process.getgid && process.getgid() + if (stdio === 'ipc') { + return 'ipc'; + } - var u = parseInt('100', 8) - var g = parseInt('010', 8) - var o = parseInt('001', 8) - var ug = u | g + if (stdio === undefined || typeof stdio === 'string') { + return [stdio, stdio, stdio, 'ipc']; + } - var ret = (mod & o) || - (mod & g) && gid === myGid || - (mod & u) && uid === myUid || - (mod & ug) && myUid === 0 + if (stdio.includes('ipc')) { + return stdio; + } - return ret -} + return [...stdio, 'ipc']; +}; /***/ }), -/* 245 */ +/* 257 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; +const os = __webpack_require__(120); +const onExit = __webpack_require__(217); -const pathKey = (options = {}) => { - const environment = options.env || process.env; - const platform = options.platform || process.platform; +const DEFAULT_FORCE_KILL_TIMEOUT = 1000 * 5; - if (platform !== 'win32') { - return 'PATH'; +// Monkey-patches `childProcess.kill()` to add `forceKillAfterTimeout` behavior +const spawnedKill = (kill, signal = 'SIGTERM', options = {}) => { + const killResult = kill(signal); + setKillTimeout(kill, signal, options, killResult); + return killResult; +}; + +const setKillTimeout = (kill, signal, options, killResult) => { + if (!shouldForceKill(signal, options, killResult)) { + return; } - return Object.keys(environment).find(key => key.toUpperCase() === 'PATH') || 'Path'; -}; + const timeout = getForceKillAfterTimeout(options); + const t = setTimeout(() => { + kill('SIGKILL'); + }, timeout); -module.exports = pathKey; -// TODO: Remove this for the next major release -module.exports.default = pathKey; + // Guarded because there's no `.unref()` when `execa` is used in the renderer + // process in Electron. This cannot be tested since we don't run tests in + // Electron. + // istanbul ignore else + if (t.unref) { + t.unref(); + } +}; +const shouldForceKill = (signal, {forceKillAfterTimeout}, killResult) => { + return isSigterm(signal) && forceKillAfterTimeout !== false && killResult; +}; -/***/ }), -/* 246 */ -/***/ (function(module, exports, __webpack_require__) { +const isSigterm = signal => { + return signal === os.constants.signals.SIGTERM || + (typeof signal === 'string' && signal.toUpperCase() === 'SIGTERM'); +}; -"use strict"; +const getForceKillAfterTimeout = ({forceKillAfterTimeout = true}) => { + if (forceKillAfterTimeout === true) { + return DEFAULT_FORCE_KILL_TIMEOUT; + } + if (!Number.isInteger(forceKillAfterTimeout) || forceKillAfterTimeout < 0) { + throw new TypeError(`Expected the \`forceKillAfterTimeout\` option to be a non-negative integer, got \`${forceKillAfterTimeout}\` (${typeof forceKillAfterTimeout})`); + } -// See http://www.robvanderwoude.com/escapechars.php -const metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g; + return forceKillAfterTimeout; +}; -function escapeCommand(arg) { - // Escape meta chars - arg = arg.replace(metaCharsRegExp, '^$1'); +// `childProcess.cancel()` +const spawnedCancel = (spawned, context) => { + const killResult = spawned.kill(); - return arg; -} + if (killResult) { + context.isCanceled = true; + } +}; -function escapeArgument(arg, doubleEscapeMetaChars) { - // Convert to string - arg = `${arg}`; +const timeoutKill = (spawned, signal, reject) => { + spawned.kill(signal); + reject(Object.assign(new Error('Timed out'), {timedOut: true, signal})); +}; - // Algorithm below is based on https://qntm.org/cmd +// `timeout` option handling +const setupTimeout = (spawned, {timeout, killSignal = 'SIGTERM'}, spawnedPromise) => { + if (timeout === 0 || timeout === undefined) { + return spawnedPromise; + } - // Sequence of backslashes followed by a double quote: - // double up all the backslashes and escape the double quote - arg = arg.replace(/(\\*)"/g, '$1$1\\"'); + if (!Number.isInteger(timeout) || timeout < 0) { + throw new TypeError(`Expected the \`timeout\` option to be a non-negative integer, got \`${timeout}\` (${typeof timeout})`); + } - // Sequence of backslashes followed by the end of the string - // (which will become a double quote later): - // double up all the backslashes - arg = arg.replace(/(\\*)$/, '$1$1'); + let timeoutId; + const timeoutPromise = new Promise((resolve, reject) => { + timeoutId = setTimeout(() => { + timeoutKill(spawned, killSignal, reject); + }, timeout); + }); - // All other backslashes occur literally + const safeSpawnedPromise = spawnedPromise.finally(() => { + clearTimeout(timeoutId); + }); - // Quote the whole thing: - arg = `"${arg}"`; + return Promise.race([timeoutPromise, safeSpawnedPromise]); +}; - // Escape meta chars - arg = arg.replace(metaCharsRegExp, '^$1'); +// `cleanup` option handling +const setExitHandler = async (spawned, {cleanup, detached}, timedPromise) => { + if (!cleanup || detached) { + return timedPromise; + } - // Double escape meta chars if necessary - if (doubleEscapeMetaChars) { - arg = arg.replace(metaCharsRegExp, '^$1'); - } + const removeExitHandler = onExit(() => { + spawned.kill(); + }); - return arg; -} + return timedPromise.finally(() => { + removeExitHandler(); + }); +}; -module.exports.command = escapeCommand; -module.exports.argument = escapeArgument; +module.exports = { + spawnedKill, + spawnedCancel, + setupTimeout, + setExitHandler +}; /***/ }), -/* 247 */ +/* 258 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; +const isStream = __webpack_require__(259); +const getStream = __webpack_require__(260); +const mergeStream = __webpack_require__(264); -const fs = __webpack_require__(133); -const shebangCommand = __webpack_require__(248); - -function readShebang(command) { - // Read the first 150 bytes from the file - const size = 150; - const buffer = Buffer.alloc(size); - - let fd; +// `input` option +const handleInput = (spawned, input) => { + // Checking for stdin is workaround for https://github.com/nodejs/node/issues/26852 + // TODO: Remove `|| spawned.stdin === undefined` once we drop support for Node.js <=12.2.0 + if (input === undefined || spawned.stdin === undefined) { + return; + } - try { - fd = fs.openSync(command, 'r'); - fs.readSync(fd, buffer, 0, size, 0); - fs.closeSync(fd); - } catch (e) { /* Empty */ } + if (isStream(input)) { + input.pipe(spawned.stdin); + } else { + spawned.stdin.end(input); + } +}; - // Attempt to extract shebang (null is returned if not a shebang) - return shebangCommand(buffer.toString()); -} +// `all` interleaves `stdout` and `stderr` +const makeAllStream = (spawned, {all}) => { + if (!all || (!spawned.stdout && !spawned.stderr)) { + return; + } -module.exports = readShebang; + const mixed = mergeStream(); + if (spawned.stdout) { + mixed.add(spawned.stdout); + } -/***/ }), -/* 248 */ -/***/ (function(module, exports, __webpack_require__) { + if (spawned.stderr) { + mixed.add(spawned.stderr); + } -"use strict"; + return mixed; +}; -const shebangRegex = __webpack_require__(249); +// On failure, `result.stdout|stderr|all` should contain the currently buffered stream +const getBufferedData = async (stream, streamPromise) => { + if (!stream) { + return; + } -module.exports = (string = '') => { - const match = string.match(shebangRegex); + stream.destroy(); - if (!match) { - return null; + try { + return await streamPromise; + } catch (error) { + return error.bufferedData; } +}; - const [path, argument] = match[0].replace(/#! ?/, '').split(' '); - const binary = path.split('/').pop(); +const getStreamPromise = (stream, {encoding, buffer, maxBuffer}) => { + if (!stream || !buffer) { + return; + } - if (binary === 'env') { - return argument; + if (encoding) { + return getStream(stream, {encoding, maxBuffer}); } - return argument ? `${binary} ${argument}` : binary; + return getStream.buffer(stream, {maxBuffer}); }; +// Retrieve result of child process: exit code, signal, error, streams (stdout/stderr/all) +const getSpawnedResult = async ({stdout, stderr, all}, {encoding, buffer, maxBuffer}, processDone) => { + const stdoutPromise = getStreamPromise(stdout, {encoding, buffer, maxBuffer}); + const stderrPromise = getStreamPromise(stderr, {encoding, buffer, maxBuffer}); + const allPromise = getStreamPromise(all, {encoding, buffer, maxBuffer: maxBuffer * 2}); -/***/ }), -/* 249 */ -/***/ (function(module, exports, __webpack_require__) { + try { + return await Promise.all([processDone, stdoutPromise, stderrPromise, allPromise]); + } catch (error) { + return Promise.all([ + {error, signal: error.signal, timedOut: error.timedOut}, + getBufferedData(stdout, stdoutPromise), + getBufferedData(stderr, stderrPromise), + getBufferedData(all, allPromise) + ]); + } +}; -"use strict"; +const validateInputSync = ({input}) => { + if (isStream(input)) { + throw new TypeError('The `input` option cannot be a stream in sync mode'); + } +}; + +module.exports = { + handleInput, + makeAllStream, + getSpawnedResult, + validateInputSync +}; -module.exports = /^#!(.*)/; /***/ }), -/* 250 */ +/* 259 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const isWin = process.platform === 'win32'; - -function notFoundError(original, syscall) { - return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), { - code: 'ENOENT', - errno: 'ENOENT', - syscall: `${syscall} ${original.command}`, - path: original.command, - spawnargs: original.args, - }); -} - -function hookChildProcess(cp, parsed) { - if (!isWin) { - return; - } - - const originalEmit = cp.emit; - - cp.emit = function (name, arg1) { - // If emitting "exit" event and exit code is 1, we need to check if - // the command exists and emit an "error" instead - // See https://github.com/IndigoUnited/node-cross-spawn/issues/16 - if (name === 'exit') { - const err = verifyENOENT(arg1, parsed, 'spawn'); - - if (err) { - return originalEmit.call(cp, 'error', err); - } - } - - return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params - }; -} +const isStream = stream => + stream !== null && + typeof stream === 'object' && + typeof stream.pipe === 'function'; -function verifyENOENT(status, parsed) { - if (isWin && status === 1 && !parsed.file) { - return notFoundError(parsed.original, 'spawn'); - } +isStream.writable = stream => + isStream(stream) && + stream.writable !== false && + typeof stream._write === 'function' && + typeof stream._writableState === 'object'; - return null; -} +isStream.readable = stream => + isStream(stream) && + stream.readable !== false && + typeof stream._read === 'function' && + typeof stream._readableState === 'object'; -function verifyENOENTSync(status, parsed) { - if (isWin && status === 1 && !parsed.file) { - return notFoundError(parsed.original, 'spawnSync'); - } +isStream.duplex = stream => + isStream.writable(stream) && + isStream.readable(stream); - return null; -} +isStream.transform = stream => + isStream.duplex(stream) && + typeof stream._transform === 'function' && + typeof stream._transformState === 'object'; -module.exports = { - hookChildProcess, - verifyENOENT, - verifyENOENTSync, - notFoundError, -}; +module.exports = isStream; /***/ }), -/* 251 */ +/* 260 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; +const pump = __webpack_require__(261); +const bufferStream = __webpack_require__(263); -module.exports = input => { - const LF = typeof input === 'string' ? '\n' : '\n'.charCodeAt(); - const CR = typeof input === 'string' ? '\r' : '\r'.charCodeAt(); - - if (input[input.length - 1] === LF) { - input = input.slice(0, input.length - 1); +class MaxBufferError extends Error { + constructor() { + super('maxBuffer exceeded'); + this.name = 'MaxBufferError'; } +} - if (input[input.length - 1] === CR) { - input = input.slice(0, input.length - 1); +async function getStream(inputStream, options) { + if (!inputStream) { + return Promise.reject(new Error('Expected a stream')); } - return input; -}; - - -/***/ }), -/* 252 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -const path = __webpack_require__(4); -const pathKey = __webpack_require__(245); - -const npmRunPath = options => { options = { - cwd: process.cwd(), - path: process.env[pathKey()], - execPath: process.execPath, + maxBuffer: Infinity, ...options }; - let previous; - let cwdPath = path.resolve(options.cwd); - const result = []; - - while (previous !== cwdPath) { - result.push(path.join(cwdPath, 'node_modules/.bin')); - previous = cwdPath; - cwdPath = path.resolve(cwdPath, '..'); - } + const {maxBuffer} = options; - // Ensure the running `node` binary is used - const execPathDir = path.resolve(options.cwd, options.execPath, '..'); - result.push(execPathDir); + let stream; + await new Promise((resolve, reject) => { + const rejectPromise = error => { + if (error) { // A null check + error.bufferedData = stream.getBufferedValue(); + } - return result.concat(options.path).join(path.delimiter); -}; + reject(error); + }; -module.exports = npmRunPath; -// TODO: Remove this for the next major release -module.exports.default = npmRunPath; + stream = pump(inputStream, bufferStream(options), error => { + if (error) { + rejectPromise(error); + return; + } -module.exports.env = options => { - options = { - env: process.env, - ...options - }; + resolve(); + }); - const env = {...options.env}; - const path = pathKey({env}); + stream.on('data', () => { + if (stream.getBufferedLength() > maxBuffer) { + rejectPromise(new MaxBufferError()); + } + }); + }); - options.path = env[path]; - env[path] = module.exports(options); + return stream.getBufferedValue(); +} - return env; -}; +module.exports = getStream; +// TODO: Remove this for the next major release +module.exports.default = getStream; +module.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'}); +module.exports.array = (stream, options) => getStream(stream, {...options, array: true}); +module.exports.MaxBufferError = MaxBufferError; /***/ }), -/* 253 */ +/* 261 */ /***/ (function(module, exports, __webpack_require__) { -"use strict"; - -const mimicFn = __webpack_require__(254); - -const calledFunctions = new WeakMap(); - -const oneTime = (fn, options = {}) => { - if (typeof fn !== 'function') { - throw new TypeError('Expected a function'); - } +var once = __webpack_require__(161) +var eos = __webpack_require__(262) +var fs = __webpack_require__(133) // we only need fs to get the ReadStream and WriteStream prototypes - let ret; - let isCalled = false; - let callCount = 0; - const functionName = fn.displayName || fn.name || ''; +var noop = function () {} +var ancient = /^v?\.0/.test(process.version) - const onetime = function (...args) { - calledFunctions.set(onetime, ++callCount); +var isFn = function (fn) { + return typeof fn === 'function' +} - if (isCalled) { - if (options.throw === true) { - throw new Error(`Function \`${functionName}\` can only be called once`); - } +var isFS = function (stream) { + if (!ancient) return false // newer node version do not need to care about fs is a special way + if (!fs) return false // browser + return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close) +} - return ret; - } +var isRequest = function (stream) { + return stream.setHeader && isFn(stream.abort) +} - isCalled = true; - ret = fn.apply(this, args); - fn = null; +var destroyer = function (stream, reading, writing, callback) { + callback = once(callback) - return ret; - }; + var closed = false + stream.on('close', function () { + closed = true + }) - mimicFn(onetime, fn); - calledFunctions.set(onetime, callCount); + eos(stream, {readable: reading, writable: writing}, function (err) { + if (err) return callback(err) + closed = true + callback() + }) - return onetime; -}; + var destroyed = false + return function (err) { + if (closed) return + if (destroyed) return + destroyed = true -module.exports = oneTime; -// TODO: Remove this for the next major release -module.exports.default = oneTime; + if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks + if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want -module.exports.callCount = fn => { - if (!calledFunctions.has(fn)) { - throw new Error(`The given function \`${fn.name}\` is not wrapped by the \`onetime\` package`); - } + if (isFn(stream.destroy)) return stream.destroy() - return calledFunctions.get(fn); -}; + callback(err || new Error('stream was destroyed')) + } +} +var call = function (fn) { + fn() +} -/***/ }), -/* 254 */ -/***/ (function(module, exports, __webpack_require__) { +var pipe = function (from, to) { + return from.pipe(to) +} -"use strict"; +var pump = function () { + var streams = Array.prototype.slice.call(arguments) + var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop + if (Array.isArray(streams[0])) streams = streams[0] + if (streams.length < 2) throw new Error('pump requires two streams per minimum') -const mimicFn = (to, from) => { - for (const prop of Reflect.ownKeys(from)) { - Object.defineProperty(to, prop, Object.getOwnPropertyDescriptor(from, prop)); - } + var error + var destroys = streams.map(function (stream, i) { + var reading = i < streams.length - 1 + var writing = i > 0 + return destroyer(stream, reading, writing, function (err) { + if (!error) error = err + if (err) destroys.forEach(call) + if (reading) return + destroys.forEach(call) + callback(error) + }) + }) - return to; -}; + return streams.reduce(pipe) +} -module.exports = mimicFn; -// TODO: Remove this for the next major release -module.exports.default = mimicFn; +module.exports = pump /***/ }), -/* 255 */ +/* 262 */ /***/ (function(module, exports, __webpack_require__) { -"use strict"; +var once = __webpack_require__(161); -const {signalsByName} = __webpack_require__(256); +var noop = function() {}; -const getErrorPrefix = ({timedOut, timeout, errorCode, signal, signalDescription, exitCode, isCanceled}) => { - if (timedOut) { - return `timed out after ${timeout} milliseconds`; - } +var isRequest = function(stream) { + return stream.setHeader && typeof stream.abort === 'function'; +}; - if (isCanceled) { - return 'was canceled'; - } +var isChildProcess = function(stream) { + return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3 +}; - if (errorCode !== undefined) { - return `failed with ${errorCode}`; - } +var eos = function(stream, opts, callback) { + if (typeof opts === 'function') return eos(stream, null, opts); + if (!opts) opts = {}; - if (signal !== undefined) { - return `was killed with ${signal} (${signalDescription})`; - } + callback = once(callback || noop); - if (exitCode !== undefined) { - return `failed with exit code ${exitCode}`; - } + var ws = stream._writableState; + var rs = stream._readableState; + var readable = opts.readable || (opts.readable !== false && stream.readable); + var writable = opts.writable || (opts.writable !== false && stream.writable); + var cancelled = false; - return 'failed'; -}; + var onlegacyfinish = function() { + if (!stream.writable) onfinish(); + }; -const makeError = ({ - stdout, - stderr, - all, - error, - signal, - exitCode, - command, - timedOut, - isCanceled, - killed, - parsed: {options: {timeout}} -}) => { - // `signal` and `exitCode` emitted on `spawned.on('exit')` event can be `null`. - // We normalize them to `undefined` - exitCode = exitCode === null ? undefined : exitCode; - signal = signal === null ? undefined : signal; - const signalDescription = signal === undefined ? undefined : signalsByName[signal].description; + var onfinish = function() { + writable = false; + if (!readable) callback.call(stream); + }; - const errorCode = error && error.code; + var onend = function() { + readable = false; + if (!writable) callback.call(stream); + }; - const prefix = getErrorPrefix({timedOut, timeout, errorCode, signal, signalDescription, exitCode, isCanceled}); - const execaMessage = `Command ${prefix}: ${command}`; - const isError = Object.prototype.toString.call(error) === '[object Error]'; - const shortMessage = isError ? `${execaMessage}\n${error.message}` : execaMessage; - const message = [shortMessage, stderr, stdout].filter(Boolean).join('\n'); + var onexit = function(exitCode) { + callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null); + }; - if (isError) { - error.originalMessage = error.message; - error.message = message; - } else { - error = new Error(message); - } + var onerror = function(err) { + callback.call(stream, err); + }; - error.shortMessage = shortMessage; - error.command = command; - error.exitCode = exitCode; - error.signal = signal; - error.signalDescription = signalDescription; - error.stdout = stdout; - error.stderr = stderr; + var onclose = function() { + process.nextTick(onclosenexttick); + }; - if (all !== undefined) { - error.all = all; - } + var onclosenexttick = function() { + if (cancelled) return; + if (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close')); + if (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close')); + }; - if ('bufferedData' in error) { - delete error.bufferedData; + var onrequest = function() { + stream.req.on('finish', onfinish); + }; + + if (isRequest(stream)) { + stream.on('complete', onfinish); + stream.on('abort', onclose); + if (stream.req) onrequest(); + else stream.on('request', onrequest); + } else if (writable && !ws) { // legacy streams + stream.on('end', onlegacyfinish); + stream.on('close', onlegacyfinish); } - error.failed = true; - error.timedOut = Boolean(timedOut); - error.isCanceled = isCanceled; - error.killed = killed && !timedOut; + if (isChildProcess(stream)) stream.on('exit', onexit); - return error; + stream.on('end', onend); + stream.on('finish', onfinish); + if (opts.error !== false) stream.on('error', onerror); + stream.on('close', onclose); + + return function() { + cancelled = true; + stream.removeListener('complete', onfinish); + stream.removeListener('abort', onclose); + stream.removeListener('request', onrequest); + if (stream.req) stream.req.removeListener('finish', onfinish); + stream.removeListener('end', onlegacyfinish); + stream.removeListener('close', onlegacyfinish); + stream.removeListener('finish', onfinish); + stream.removeListener('exit', onexit); + stream.removeListener('end', onend); + stream.removeListener('error', onerror); + stream.removeListener('close', onclose); + }; }; -module.exports = makeError; +module.exports = eos; /***/ }), -/* 256 */ +/* 263 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -Object.defineProperty(exports,"__esModule",{value:true});exports.signalsByNumber=exports.signalsByName=void 0;var _os=__webpack_require__(120); - -var _signals=__webpack_require__(257); -var _realtime=__webpack_require__(259); - - - -const getSignalsByName=function(){ -const signals=(0,_signals.getSignals)(); -return signals.reduce(getSignalByName,{}); -}; - -const getSignalByName=function( -signalByNameMemo, -{name,number,description,supported,action,forced,standard}) -{ -return{ -...signalByNameMemo, -[name]:{name,number,description,supported,action,forced,standard}}; - -}; - -const signalsByName=getSignalsByName();exports.signalsByName=signalsByName; - +const {PassThrough: PassThroughStream} = __webpack_require__(137); +module.exports = options => { + options = {...options}; -const getSignalsByNumber=function(){ -const signals=(0,_signals.getSignals)(); -const length=_realtime.SIGRTMAX+1; -const signalsA=Array.from({length},(value,number)=> -getSignalByNumber(number,signals)); + const {array} = options; + let {encoding} = options; + const isBuffer = encoding === 'buffer'; + let objectMode = false; -return Object.assign({},...signalsA); -}; + if (array) { + objectMode = !(encoding || isBuffer); + } else { + encoding = encoding || 'utf8'; + } -const getSignalByNumber=function(number,signals){ -const signal=findSignalByNumber(number,signals); + if (isBuffer) { + encoding = null; + } -if(signal===undefined){ -return{}; -} + const stream = new PassThroughStream({objectMode}); -const{name,description,supported,action,forced,standard}=signal; -return{ -[number]:{ -name, -number, -description, -supported, -action, -forced, -standard}}; + if (encoding) { + stream.setEncoding(encoding); + } + let length = 0; + const chunks = []; -}; + stream.on('data', chunk => { + chunks.push(chunk); + if (objectMode) { + length = chunks.length; + } else { + length += chunk.length; + } + }); + stream.getBufferedValue = () => { + if (array) { + return chunks; + } -const findSignalByNumber=function(number,signals){ -const signal=signals.find(({name})=>_os.constants.signals[name]===number); + return isBuffer ? Buffer.concat(chunks, length) : chunks.join(''); + }; -if(signal!==undefined){ -return signal; -} + stream.getBufferedLength = () => length; -return signals.find(signalA=>signalA.number===number); + return stream; }; -const signalsByNumber=getSignalsByNumber();exports.signalsByNumber=signalsByNumber; -//# sourceMappingURL=main.js.map /***/ }), -/* 257 */ +/* 264 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -Object.defineProperty(exports,"__esModule",{value:true});exports.getSignals=void 0;var _os=__webpack_require__(120); -var _core=__webpack_require__(258); -var _realtime=__webpack_require__(259); +const { PassThrough } = __webpack_require__(137); + +module.exports = function (/*streams...*/) { + var sources = [] + var output = new PassThrough({objectMode: true}) + + output.setMaxListeners(0) + output.add = add + output.isEmpty = isEmpty -const getSignals=function(){ -const realtimeSignals=(0,_realtime.getRealtimeSignals)(); -const signals=[..._core.SIGNALS,...realtimeSignals].map(normalizeSignal); -return signals; -};exports.getSignals=getSignals; + output.on('unpipe', remove) + Array.prototype.slice.call(arguments).forEach(add) + return output + function add (source) { + if (Array.isArray(source)) { + source.forEach(add) + return this + } + sources.push(source); + source.once('end', remove.bind(null, source)) + source.once('error', output.emit.bind(output, 'error')) + source.pipe(output, {end: false}) + return this + } + function isEmpty () { + return sources.length == 0; + } + function remove (source) { + sources = sources.filter(function (it) { return it !== source }) + if (!sources.length && output.readable) { output.end() } + } +} -const normalizeSignal=function({ -name, -number:defaultNumber, -description, -action, -forced=false, -standard}) -{ -const{ -signals:{[name]:constantSignal}}= -_os.constants; -const supported=constantSignal!==undefined; -const number=supported?constantSignal:defaultNumber; -return{name,number,description,supported,action,forced,standard}; -}; -//# sourceMappingURL=signals.js.map /***/ }), -/* 258 */ +/* 265 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -Object.defineProperty(exports,"__esModule",{value:true});exports.SIGNALS=void 0; -const SIGNALS=[ -{ -name:"SIGHUP", -number:1, -action:"terminate", -description:"Terminal closed", -standard:"posix"}, -{ -name:"SIGINT", -number:2, -action:"terminate", -description:"User interruption with CTRL-C", -standard:"ansi"}, - -{ -name:"SIGQUIT", -number:3, -action:"core", -description:"User interruption with CTRL-\\", -standard:"posix"}, - -{ -name:"SIGILL", -number:4, -action:"core", -description:"Invalid machine instruction", -standard:"ansi"}, - -{ -name:"SIGTRAP", -number:5, -action:"core", -description:"Debugger breakpoint", -standard:"posix"}, - -{ -name:"SIGABRT", -number:6, -action:"core", -description:"Aborted", -standard:"ansi"}, - -{ -name:"SIGIOT", -number:6, -action:"core", -description:"Aborted", -standard:"bsd"}, - -{ -name:"SIGBUS", -number:7, -action:"core", -description: -"Bus error due to misaligned, non-existing address or paging error", -standard:"bsd"}, - -{ -name:"SIGEMT", -number:7, -action:"terminate", -description:"Command should be emulated but is not implemented", -standard:"other"}, - -{ -name:"SIGFPE", -number:8, -action:"core", -description:"Floating point arithmetic error", -standard:"ansi"}, - -{ -name:"SIGKILL", -number:9, -action:"terminate", -description:"Forced termination", -standard:"posix", -forced:true}, - -{ -name:"SIGUSR1", -number:10, -action:"terminate", -description:"Application-specific signal", -standard:"posix"}, - -{ -name:"SIGSEGV", -number:11, -action:"core", -description:"Segmentation fault", -standard:"ansi"}, - -{ -name:"SIGUSR2", -number:12, -action:"terminate", -description:"Application-specific signal", -standard:"posix"}, - -{ -name:"SIGPIPE", -number:13, -action:"terminate", -description:"Broken pipe or socket", -standard:"posix"}, - -{ -name:"SIGALRM", -number:14, -action:"terminate", -description:"Timeout or timer", -standard:"posix"}, - -{ -name:"SIGTERM", -number:15, -action:"terminate", -description:"Termination", -standard:"ansi"}, +const nativePromisePrototype = (async () => {})().constructor.prototype; +const descriptors = ['then', 'catch', 'finally'].map(property => [ + property, + Reflect.getOwnPropertyDescriptor(nativePromisePrototype, property) +]); -{ -name:"SIGSTKFLT", -number:16, -action:"terminate", -description:"Stack is empty or overflowed", -standard:"other"}, +// The return value is a mixin of `childProcess` and `Promise` +const mergePromise = (spawned, promise) => { + for (const [property, descriptor] of descriptors) { + // Starting the main `promise` is deferred to avoid consuming streams + const value = typeof promise === 'function' ? + (...args) => Reflect.apply(descriptor.value, promise(), args) : + descriptor.value.bind(promise); -{ -name:"SIGCHLD", -number:17, -action:"ignore", -description:"Child process terminated, paused or unpaused", -standard:"posix"}, + Reflect.defineProperty(spawned, property, {...descriptor, value}); + } -{ -name:"SIGCLD", -number:17, -action:"ignore", -description:"Child process terminated, paused or unpaused", -standard:"other"}, + return spawned; +}; -{ -name:"SIGCONT", -number:18, -action:"unpause", -description:"Unpaused", -standard:"posix", -forced:true}, +// Use promises instead of `child_process` events +const getSpawnedPromise = spawned => { + return new Promise((resolve, reject) => { + spawned.on('exit', (exitCode, signal) => { + resolve({exitCode, signal}); + }); -{ -name:"SIGSTOP", -number:19, -action:"pause", -description:"Paused", -standard:"posix", -forced:true}, + spawned.on('error', error => { + reject(error); + }); -{ -name:"SIGTSTP", -number:20, -action:"pause", -description:"Paused using CTRL-Z or \"suspend\"", -standard:"posix"}, + if (spawned.stdin) { + spawned.stdin.on('error', error => { + reject(error); + }); + } + }); +}; -{ -name:"SIGTTIN", -number:21, -action:"pause", -description:"Background process cannot read terminal input", -standard:"posix"}, +module.exports = { + mergePromise, + getSpawnedPromise +}; -{ -name:"SIGBREAK", -number:21, -action:"terminate", -description:"User interruption with CTRL-BREAK", -standard:"other"}, -{ -name:"SIGTTOU", -number:22, -action:"pause", -description:"Background process cannot write to terminal output", -standard:"posix"}, -{ -name:"SIGURG", -number:23, -action:"ignore", -description:"Socket received out-of-band data", -standard:"bsd"}, +/***/ }), +/* 266 */ +/***/ (function(module, exports, __webpack_require__) { -{ -name:"SIGXCPU", -number:24, -action:"core", -description:"Process timed out", -standard:"bsd"}, +"use strict"; -{ -name:"SIGXFSZ", -number:25, -action:"core", -description:"File too big", -standard:"bsd"}, +const SPACES_REGEXP = / +/g; -{ -name:"SIGVTALRM", -number:26, -action:"terminate", -description:"Timeout or timer", -standard:"bsd"}, +const joinCommand = (file, args = []) => { + if (!Array.isArray(args)) { + return file; + } -{ -name:"SIGPROF", -number:27, -action:"terminate", -description:"Timeout or timer", -standard:"bsd"}, + return [file, ...args].join(' '); +}; -{ -name:"SIGWINCH", -number:28, -action:"ignore", -description:"Terminal window size changed", -standard:"bsd"}, +// Allow spaces to be escaped by a backslash if not meant as a delimiter +const handleEscaping = (tokens, token, index) => { + if (index === 0) { + return [token]; + } -{ -name:"SIGIO", -number:29, -action:"terminate", -description:"I/O is available", -standard:"other"}, + const previousToken = tokens[tokens.length - 1]; -{ -name:"SIGPOLL", -number:29, -action:"terminate", -description:"Watched event", -standard:"other"}, + if (previousToken.endsWith('\\')) { + return [...tokens.slice(0, -1), `${previousToken.slice(0, -1)} ${token}`]; + } -{ -name:"SIGINFO", -number:29, -action:"ignore", -description:"Request for process information", -standard:"other"}, + return [...tokens, token]; +}; -{ -name:"SIGPWR", -number:30, -action:"terminate", -description:"Device running out of power", -standard:"systemv"}, +// Handle `execa.command()` +const parseCommand = command => { + return command + .trim() + .split(SPACES_REGEXP) + .reduce(handleEscaping, []); +}; -{ -name:"SIGSYS", -number:31, -action:"core", -description:"Invalid system call", -standard:"other"}, +module.exports = { + joinCommand, + parseCommand +}; -{ -name:"SIGUNUSED", -number:31, -action:"terminate", -description:"Invalid system call", -standard:"other"}];exports.SIGNALS=SIGNALS; -//# sourceMappingURL=core.js.map /***/ }), -/* 259 */ +/* 267 */ /***/ (function(module, exports, __webpack_require__) { -"use strict"; -Object.defineProperty(exports,"__esModule",{value:true});exports.SIGRTMAX=exports.getRealtimeSignals=void 0; -const getRealtimeSignals=function(){ -const length=SIGRTMAX-SIGRTMIN+1; -return Array.from({length},getRealtimeSignal); -};exports.getRealtimeSignals=getRealtimeSignals; - -const getRealtimeSignal=function(value,index){ -return{ -name:`SIGRT${index+1}`, -number:SIGRTMIN+index, -action:"terminate", -description:"Application-specific signal (realtime)", -standard:"posix"}; +// Copyright IBM Corp. 2014,2018. All Rights Reserved. +// Node module: strong-log-transformer +// This file is licensed under the Apache License 2.0. +// License text available at https://opensource.org/licenses/Apache-2.0 -}; +module.exports = __webpack_require__(268); +module.exports.cli = __webpack_require__(272); -const SIGRTMIN=34; -const SIGRTMAX=64;exports.SIGRTMAX=SIGRTMAX; -//# sourceMappingURL=realtime.js.map /***/ }), -/* 260 */ +/* 268 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; +// Copyright IBM Corp. 2014,2018. All Rights Reserved. +// Node module: strong-log-transformer +// This file is licensed under the Apache License 2.0. +// License text available at https://opensource.org/licenses/Apache-2.0 -const aliases = ['stdin', 'stdout', 'stderr']; - -const hasAlias = opts => aliases.some(alias => opts[alias] !== undefined); - -const normalizeStdio = opts => { - if (!opts) { - return; - } - - const {stdio} = opts; - if (stdio === undefined) { - return aliases.map(alias => opts[alias]); - } - if (hasAlias(opts)) { - throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${aliases.map(alias => `\`${alias}\``).join(', ')}`); - } +var stream = __webpack_require__(137); +var util = __webpack_require__(111); +var fs = __webpack_require__(133); - if (typeof stdio === 'string') { - return stdio; - } +var through = __webpack_require__(269); +var duplexer = __webpack_require__(270); +var StringDecoder = __webpack_require__(271).StringDecoder; - if (!Array.isArray(stdio)) { - throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof stdio}\``); - } +module.exports = Logger; - const length = Math.max(stdio.length, aliases.length); - return Array.from({length}, (value, index) => stdio[index]); +Logger.DEFAULTS = { + format: 'text', + tag: '', + mergeMultiline: false, + timeStamp: false, }; -module.exports = normalizeStdio; +var formatters = { + text: textFormatter, + json: jsonFormatter, +} -// `ipc` is pushed unless it is already present -module.exports.node = opts => { - const stdio = normalizeStdio(opts); +function Logger(options) { + var defaults = JSON.parse(JSON.stringify(Logger.DEFAULTS)); + options = util._extend(defaults, options || {}); + var catcher = deLiner(); + var emitter = catcher; + var transforms = [ + objectifier(), + ]; - if (stdio === 'ipc') { - return 'ipc'; - } + if (options.tag) { + transforms.push(staticTagger(options.tag)); + } - if (stdio === undefined || typeof stdio === 'string') { - return [stdio, stdio, stdio, 'ipc']; - } + if (options.mergeMultiline) { + transforms.push(lineMerger()); + } - if (stdio.includes('ipc')) { - return stdio; - } + // TODO + // if (options.pidStamp) { + // transforms.push(pidStamper(options.pid)); + // } - return [...stdio, 'ipc']; -}; + // TODO + // if (options.workerStamp) { + // transforms.push(workerStamper(options.worker)); + // } + transforms.push(formatters[options.format](options)); -/***/ }), -/* 261 */ -/***/ (function(module, exports, __webpack_require__) { + // restore line endings that were removed by line splitting + transforms.push(reLiner()); -"use strict"; + for (var t in transforms) { + emitter = emitter.pipe(transforms[t]); + } -const os = __webpack_require__(120); -const onExit = __webpack_require__(217); + return duplexer(catcher, emitter); +} -const DEFAULT_FORCE_KILL_TIMEOUT = 1000 * 5; +function deLiner() { + var decoder = new StringDecoder('utf8'); + var last = ''; -// Monkey-patches `childProcess.kill()` to add `forceKillAfterTimeout` behavior -const spawnedKill = (kill, signal = 'SIGTERM', options = {}) => { - const killResult = kill(signal); - setKillTimeout(kill, signal, options, killResult); - return killResult; -}; + return new stream.Transform({ + transform(chunk, _enc, callback) { + last += decoder.write(chunk); + var list = last.split(/\r\n|[\n\v\f\r\x85\u2028\u2029]/g); + last = list.pop(); + for (var i = 0; i < list.length; i++) { + // swallow empty lines + if (list[i]) { + this.push(list[i]); + } + } + callback(); + }, + flush(callback) { + // incomplete UTF8 sequences become UTF8 replacement characters + last += decoder.end(); + if (last) { + this.push(last); + } + callback(); + }, + }); +} -const setKillTimeout = (kill, signal, options, killResult) => { - if (!shouldForceKill(signal, options, killResult)) { - return; - } +function reLiner() { + return through(appendNewline); - const timeout = getForceKillAfterTimeout(options); - const t = setTimeout(() => { - kill('SIGKILL'); - }, timeout); + function appendNewline(line) { + this.emit('data', line + '\n'); + } +} - // Guarded because there's no `.unref()` when `execa` is used in the renderer - // process in Electron. This cannot be tested since we don't run tests in - // Electron. - // istanbul ignore else - if (t.unref) { - t.unref(); - } -}; +function objectifier() { + return through(objectify, null, {autoDestroy: false}); -const shouldForceKill = (signal, {forceKillAfterTimeout}, killResult) => { - return isSigterm(signal) && forceKillAfterTimeout !== false && killResult; -}; + function objectify(line) { + this.emit('data', { + msg: line, + time: Date.now(), + }); + } +} -const isSigterm = signal => { - return signal === os.constants.signals.SIGTERM || - (typeof signal === 'string' && signal.toUpperCase() === 'SIGTERM'); -}; +function staticTagger(tag) { + return through(tagger); -const getForceKillAfterTimeout = ({forceKillAfterTimeout = true}) => { - if (forceKillAfterTimeout === true) { - return DEFAULT_FORCE_KILL_TIMEOUT; - } + function tagger(logEvent) { + logEvent.tag = tag; + this.emit('data', logEvent); + } +} - if (!Number.isInteger(forceKillAfterTimeout) || forceKillAfterTimeout < 0) { - throw new TypeError(`Expected the \`forceKillAfterTimeout\` option to be a non-negative integer, got \`${forceKillAfterTimeout}\` (${typeof forceKillAfterTimeout})`); - } +function textFormatter(options) { + return through(textify); - return forceKillAfterTimeout; -}; - -// `childProcess.cancel()` -const spawnedCancel = (spawned, context) => { - const killResult = spawned.kill(); - - if (killResult) { - context.isCanceled = true; - } -}; - -const timeoutKill = (spawned, signal, reject) => { - spawned.kill(signal); - reject(Object.assign(new Error('Timed out'), {timedOut: true, signal})); -}; - -// `timeout` option handling -const setupTimeout = (spawned, {timeout, killSignal = 'SIGTERM'}, spawnedPromise) => { - if (timeout === 0 || timeout === undefined) { - return spawnedPromise; - } + function textify(logEvent) { + var line = util.format('%s%s', textifyTags(logEvent.tag), + logEvent.msg.toString()); + if (options.timeStamp) { + line = util.format('%s %s', new Date(logEvent.time).toISOString(), line); + } + this.emit('data', line.replace(/\n/g, '\\n')); + } - if (!Number.isInteger(timeout) || timeout < 0) { - throw new TypeError(`Expected the \`timeout\` option to be a non-negative integer, got \`${timeout}\` (${typeof timeout})`); - } + function textifyTags(tags) { + var str = ''; + if (typeof tags === 'string') { + str = tags + ' '; + } else if (typeof tags === 'object') { + for (var t in tags) { + str += t + ':' + tags[t] + ' '; + } + } + return str; + } +} - let timeoutId; - const timeoutPromise = new Promise((resolve, reject) => { - timeoutId = setTimeout(() => { - timeoutKill(spawned, killSignal, reject); - }, timeout); - }); +function jsonFormatter(options) { + return through(jsonify); - const safeSpawnedPromise = spawnedPromise.finally(() => { - clearTimeout(timeoutId); - }); + function jsonify(logEvent) { + if (options.timeStamp) { + logEvent.time = new Date(logEvent.time).toISOString(); + } else { + delete logEvent.time; + } + logEvent.msg = logEvent.msg.toString(); + this.emit('data', JSON.stringify(logEvent)); + } +} - return Promise.race([timeoutPromise, safeSpawnedPromise]); -}; +function lineMerger(host) { + var previousLine = null; + var flushTimer = null; + var stream = through(lineMergerWrite, lineMergerEnd); + var flush = _flush.bind(stream); -// `cleanup` option handling -const setExitHandler = async (spawned, {cleanup, detached}, timedPromise) => { - if (!cleanup || detached) { - return timedPromise; - } + return stream; - const removeExitHandler = onExit(() => { - spawned.kill(); - }); + function lineMergerWrite(line) { + if (/^\s+/.test(line.msg)) { + if (previousLine) { + previousLine.msg += '\n' + line.msg; + } else { + previousLine = line; + } + } else { + flush(); + previousLine = line; + } + // rolling timeout + clearTimeout(flushTimer); + flushTimer = setTimeout(flush.bind(this), 10); + } - return timedPromise.finally(() => { - removeExitHandler(); - }); -}; + function _flush() { + if (previousLine) { + this.emit('data', previousLine); + previousLine = null; + } + } -module.exports = { - spawnedKill, - spawnedCancel, - setupTimeout, - setExitHandler -}; + function lineMergerEnd() { + flush.call(this); + this.emit('end'); + } +} /***/ }), -/* 262 */ +/* 269 */ /***/ (function(module, exports, __webpack_require__) { -"use strict"; - -const isStream = __webpack_require__(263); -const getStream = __webpack_require__(264); -const mergeStream = __webpack_require__(268); - -// `input` option -const handleInput = (spawned, input) => { - // Checking for stdin is workaround for https://github.com/nodejs/node/issues/26852 - // TODO: Remove `|| spawned.stdin === undefined` once we drop support for Node.js <=12.2.0 - if (input === undefined || spawned.stdin === undefined) { - return; - } +var Stream = __webpack_require__(137) - if (isStream(input)) { - input.pipe(spawned.stdin); - } else { - spawned.stdin.end(input); - } -}; +// through +// +// a stream that does nothing but re-emit the input. +// useful for aggregating a series of changing but not ending streams into one stream) -// `all` interleaves `stdout` and `stderr` -const makeAllStream = (spawned, {all}) => { - if (!all || (!spawned.stdout && !spawned.stderr)) { - return; - } +exports = module.exports = through +through.through = through - const mixed = mergeStream(); +//create a readable writable stream. - if (spawned.stdout) { - mixed.add(spawned.stdout); - } +function through (write, end, opts) { + write = write || function (data) { this.queue(data) } + end = end || function () { this.queue(null) } - if (spawned.stderr) { - mixed.add(spawned.stderr); - } + var ended = false, destroyed = false, buffer = [], _ended = false + var stream = new Stream() + stream.readable = stream.writable = true + stream.paused = false - return mixed; -}; +// stream.autoPause = !(opts && opts.autoPause === false) + stream.autoDestroy = !(opts && opts.autoDestroy === false) -// On failure, `result.stdout|stderr|all` should contain the currently buffered stream -const getBufferedData = async (stream, streamPromise) => { - if (!stream) { - return; - } + stream.write = function (data) { + write.call(this, data) + return !stream.paused + } - stream.destroy(); + function drain() { + while(buffer.length && !stream.paused) { + var data = buffer.shift() + if(null === data) + return stream.emit('end') + else + stream.emit('data', data) + } + } - try { - return await streamPromise; - } catch (error) { - return error.bufferedData; - } -}; + stream.queue = stream.push = function (data) { +// console.error(ended) + if(_ended) return stream + if(data === null) _ended = true + buffer.push(data) + drain() + return stream + } -const getStreamPromise = (stream, {encoding, buffer, maxBuffer}) => { - if (!stream || !buffer) { - return; - } + //this will be registered as the first 'end' listener + //must call destroy next tick, to make sure we're after any + //stream piped from here. + //this is only a problem if end is not emitted synchronously. + //a nicer way to do this is to make sure this is the last listener for 'end' - if (encoding) { - return getStream(stream, {encoding, maxBuffer}); - } + stream.on('end', function () { + stream.readable = false + if(!stream.writable && stream.autoDestroy) + process.nextTick(function () { + stream.destroy() + }) + }) - return getStream.buffer(stream, {maxBuffer}); -}; + function _end () { + stream.writable = false + end.call(stream) + if(!stream.readable && stream.autoDestroy) + stream.destroy() + } -// Retrieve result of child process: exit code, signal, error, streams (stdout/stderr/all) -const getSpawnedResult = async ({stdout, stderr, all}, {encoding, buffer, maxBuffer}, processDone) => { - const stdoutPromise = getStreamPromise(stdout, {encoding, buffer, maxBuffer}); - const stderrPromise = getStreamPromise(stderr, {encoding, buffer, maxBuffer}); - const allPromise = getStreamPromise(all, {encoding, buffer, maxBuffer: maxBuffer * 2}); + stream.end = function (data) { + if(ended) return + ended = true + if(arguments.length) stream.write(data) + _end() // will emit or queue + return stream + } - try { - return await Promise.all([processDone, stdoutPromise, stderrPromise, allPromise]); - } catch (error) { - return Promise.all([ - {error, signal: error.signal, timedOut: error.timedOut}, - getBufferedData(stdout, stdoutPromise), - getBufferedData(stderr, stderrPromise), - getBufferedData(all, allPromise) - ]); - } -}; + stream.destroy = function () { + if(destroyed) return + destroyed = true + ended = true + buffer.length = 0 + stream.writable = stream.readable = false + stream.emit('close') + return stream + } -const validateInputSync = ({input}) => { - if (isStream(input)) { - throw new TypeError('The `input` option cannot be a stream in sync mode'); - } -}; + stream.pause = function () { + if(stream.paused) return + stream.paused = true + return stream + } -module.exports = { - handleInput, - makeAllStream, - getSpawnedResult, - validateInputSync -}; + stream.resume = function () { + if(stream.paused) { + stream.paused = false + stream.emit('resume') + } + drain() + //may have become paused again, + //as drain emits 'data'. + if(!stream.paused) + stream.emit('drain') + return stream + } + return stream +} /***/ }), -/* 263 */ +/* 270 */ /***/ (function(module, exports, __webpack_require__) { -"use strict"; - +var Stream = __webpack_require__(137) +var writeMethods = ["write", "end", "destroy"] +var readMethods = ["resume", "pause"] +var readEvents = ["data", "close"] +var slice = Array.prototype.slice -const isStream = stream => - stream !== null && - typeof stream === 'object' && - typeof stream.pipe === 'function'; +module.exports = duplex -isStream.writable = stream => - isStream(stream) && - stream.writable !== false && - typeof stream._write === 'function' && - typeof stream._writableState === 'object'; +function forEach (arr, fn) { + if (arr.forEach) { + return arr.forEach(fn) + } -isStream.readable = stream => - isStream(stream) && - stream.readable !== false && - typeof stream._read === 'function' && - typeof stream._readableState === 'object'; + for (var i = 0; i < arr.length; i++) { + fn(arr[i], i) + } +} -isStream.duplex = stream => - isStream.writable(stream) && - isStream.readable(stream); +function duplex(writer, reader) { + var stream = new Stream() + var ended = false -isStream.transform = stream => - isStream.duplex(stream) && - typeof stream._transform === 'function' && - typeof stream._transformState === 'object'; + forEach(writeMethods, proxyWriter) -module.exports = isStream; + forEach(readMethods, proxyReader) + forEach(readEvents, proxyStream) -/***/ }), -/* 264 */ -/***/ (function(module, exports, __webpack_require__) { + reader.on("end", handleEnd) -"use strict"; + writer.on("drain", function() { + stream.emit("drain") + }) -const pump = __webpack_require__(265); -const bufferStream = __webpack_require__(267); + writer.on("error", reemit) + reader.on("error", reemit) -class MaxBufferError extends Error { - constructor() { - super('maxBuffer exceeded'); - this.name = 'MaxBufferError'; - } -} + stream.writable = writer.writable + stream.readable = reader.readable -async function getStream(inputStream, options) { - if (!inputStream) { - return Promise.reject(new Error('Expected a stream')); - } + return stream - options = { - maxBuffer: Infinity, - ...options - }; + function proxyWriter(methodName) { + stream[methodName] = method - const {maxBuffer} = options; + function method() { + return writer[methodName].apply(writer, arguments) + } + } - let stream; - await new Promise((resolve, reject) => { - const rejectPromise = error => { - if (error) { // A null check - error.bufferedData = stream.getBufferedValue(); - } + function proxyReader(methodName) { + stream[methodName] = method - reject(error); - }; + function method() { + stream.emit(methodName) + var func = reader[methodName] + if (func) { + return func.apply(reader, arguments) + } + reader.emit(methodName) + } + } - stream = pump(inputStream, bufferStream(options), error => { - if (error) { - rejectPromise(error); - return; - } + function proxyStream(methodName) { + reader.on(methodName, reemit) - resolve(); - }); + function reemit() { + var args = slice.call(arguments) + args.unshift(methodName) + stream.emit.apply(stream, args) + } + } - stream.on('data', () => { - if (stream.getBufferedLength() > maxBuffer) { - rejectPromise(new MaxBufferError()); - } - }); - }); + function handleEnd() { + if (ended) { + return + } + ended = true + var args = slice.call(arguments) + args.unshift("end") + stream.emit.apply(stream, args) + } - return stream.getBufferedValue(); + function reemit(err) { + stream.emit("error", err) + } } -module.exports = getStream; -// TODO: Remove this for the next major release -module.exports.default = getStream; -module.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'}); -module.exports.array = (stream, options) => getStream(stream, {...options, array: true}); -module.exports.MaxBufferError = MaxBufferError; - /***/ }), -/* 265 */ -/***/ (function(module, exports, __webpack_require__) { - -var once = __webpack_require__(161) -var eos = __webpack_require__(266) -var fs = __webpack_require__(133) // we only need fs to get the ReadStream and WriteStream prototypes - -var noop = function () {} -var ancient = /^v?\.0/.test(process.version) - -var isFn = function (fn) { - return typeof fn === 'function' -} +/* 271 */ +/***/ (function(module, exports) { -var isFS = function (stream) { - if (!ancient) return false // newer node version do not need to care about fs is a special way - if (!fs) return false // browser - return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close) -} +module.exports = require("string_decoder"); -var isRequest = function (stream) { - return stream.setHeader && isFn(stream.abort) -} +/***/ }), +/* 272 */ +/***/ (function(module, exports, __webpack_require__) { -var destroyer = function (stream, reading, writing, callback) { - callback = once(callback) +"use strict"; +// Copyright IBM Corp. 2014,2018. All Rights Reserved. +// Node module: strong-log-transformer +// This file is licensed under the Apache License 2.0. +// License text available at https://opensource.org/licenses/Apache-2.0 - var closed = false - stream.on('close', function () { - closed = true - }) - eos(stream, {readable: reading, writable: writing}, function (err) { - if (err) return callback(err) - closed = true - callback() - }) - var destroyed = false - return function (err) { - if (closed) return - if (destroyed) return - destroyed = true +var minimist = __webpack_require__(273); +var path = __webpack_require__(4); - if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks - if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want +var Logger = __webpack_require__(268); +var pkg = __webpack_require__(274); - if (isFn(stream.destroy)) return stream.destroy() +module.exports = cli; - callback(err || new Error('stream was destroyed')) +function cli(args) { + var opts = minimist(args.slice(2)); + var $0 = path.basename(args[1]); + var p = console.log.bind(console); + if (opts.v || opts.version) { + version($0, p); + } else if (opts.h || opts.help) { + usage($0, p); + } else if (args.length < 3) { + process.stdin.pipe(Logger()).pipe(process.stdout); + } else { + process.stdin.pipe(Logger(opts)).pipe(process.stdout); } } -var call = function (fn) { - fn() -} - -var pipe = function (from, to) { - return from.pipe(to) +function version($0, p) { + p('%s v%s', pkg.name, pkg.version); } -var pump = function () { - var streams = Array.prototype.slice.call(arguments) - var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop - - if (Array.isArray(streams[0])) streams = streams[0] - if (streams.length < 2) throw new Error('pump requires two streams per minimum') - - var error - var destroys = streams.map(function (stream, i) { - var reading = i < streams.length - 1 - var writing = i > 0 - return destroyer(stream, reading, writing, function (err) { - if (!error) error = err - if (err) destroys.forEach(call) - if (reading) return - destroys.forEach(call) - callback(error) - }) - }) +function usage($0, p) { + var PADDING = ' '; + var opt, def; + p('Usage: %s [options]', $0); + p(''); + p('%s', pkg.description); + p(''); + p('OPTIONS:'); + for (opt in Logger.DEFAULTS) { + def = Logger.DEFAULTS[opt]; + if (typeof def === 'boolean') + boolOpt(opt, Logger.DEFAULTS[opt]); + else + stdOpt(opt, Logger.DEFAULTS[opt]); + } + p(''); - return streams.reduce(pipe) -} + function boolOpt(name, def) { + name = name + PADDING.slice(0, 20-name.length); + p(' --%s default: %s', name, def); + } -module.exports = pump + function stdOpt(name, def) { + var value = name.toUpperCase() + + PADDING.slice(0, 19 - name.length*2); + p(' --%s %s default: %j', name, value, def); + } +} /***/ }), -/* 266 */ -/***/ (function(module, exports, __webpack_require__) { - -var once = __webpack_require__(161); +/* 273 */ +/***/ (function(module, exports) { -var noop = function() {}; +module.exports = function (args, opts) { + if (!opts) opts = {}; + + var flags = { bools : {}, strings : {}, unknownFn: null }; -var isRequest = function(stream) { - return stream.setHeader && typeof stream.abort === 'function'; -}; + if (typeof opts['unknown'] === 'function') { + flags.unknownFn = opts['unknown']; + } -var isChildProcess = function(stream) { - return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3 -}; + if (typeof opts['boolean'] === 'boolean' && opts['boolean']) { + flags.allBools = true; + } else { + [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { + flags.bools[key] = true; + }); + } + + var aliases = {}; + Object.keys(opts.alias || {}).forEach(function (key) { + aliases[key] = [].concat(opts.alias[key]); + aliases[key].forEach(function (x) { + aliases[x] = [key].concat(aliases[key].filter(function (y) { + return x !== y; + })); + }); + }); -var eos = function(stream, opts, callback) { - if (typeof opts === 'function') return eos(stream, null, opts); - if (!opts) opts = {}; + [].concat(opts.string).filter(Boolean).forEach(function (key) { + flags.strings[key] = true; + if (aliases[key]) { + flags.strings[aliases[key]] = true; + } + }); - callback = once(callback || noop); + var defaults = opts['default'] || {}; + + var argv = { _ : [] }; + Object.keys(flags.bools).forEach(function (key) { + setArg(key, defaults[key] === undefined ? false : defaults[key]); + }); + + var notFlags = []; - var ws = stream._writableState; - var rs = stream._readableState; - var readable = opts.readable || (opts.readable !== false && stream.readable); - var writable = opts.writable || (opts.writable !== false && stream.writable); - var cancelled = false; + if (args.indexOf('--') !== -1) { + notFlags = args.slice(args.indexOf('--')+1); + args = args.slice(0, args.indexOf('--')); + } - var onlegacyfinish = function() { - if (!stream.writable) onfinish(); - }; + function argDefined(key, arg) { + return (flags.allBools && /^--[^=]+$/.test(arg)) || + flags.strings[key] || flags.bools[key] || aliases[key]; + } - var onfinish = function() { - writable = false; - if (!readable) callback.call(stream); - }; + function setArg (key, val, arg) { + if (arg && flags.unknownFn && !argDefined(key, arg)) { + if (flags.unknownFn(arg) === false) return; + } - var onend = function() { - readable = false; - if (!writable) callback.call(stream); - }; + var value = !flags.strings[key] && isNumber(val) + ? Number(val) : val + ; + setKey(argv, key.split('.'), value); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), value); + }); + } - var onexit = function(exitCode) { - callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null); - }; + function setKey (obj, keys, value) { + var o = obj; + for (var i = 0; i < keys.length-1; i++) { + var key = keys[i]; + if (key === '__proto__') return; + if (o[key] === undefined) o[key] = {}; + if (o[key] === Object.prototype || o[key] === Number.prototype + || o[key] === String.prototype) o[key] = {}; + if (o[key] === Array.prototype) o[key] = []; + o = o[key]; + } - var onerror = function(err) { - callback.call(stream, err); - }; + var key = keys[keys.length - 1]; + if (key === '__proto__') return; + if (o === Object.prototype || o === Number.prototype + || o === String.prototype) o = {}; + if (o === Array.prototype) o = []; + if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') { + o[key] = value; + } + else if (Array.isArray(o[key])) { + o[key].push(value); + } + else { + o[key] = [ o[key], value ]; + } + } + + function aliasIsBoolean(key) { + return aliases[key].some(function (x) { + return flags.bools[x]; + }); + } - var onclose = function() { - process.nextTick(onclosenexttick); - }; + for (var i = 0; i < args.length; i++) { + var arg = args[i]; + + if (/^--.+=/.test(arg)) { + // Using [\s\S] instead of . because js doesn't support the + // 'dotall' regex modifier. See: + // http://stackoverflow.com/a/1068308/13216 + var m = arg.match(/^--([^=]+)=([\s\S]*)$/); + var key = m[1]; + var value = m[2]; + if (flags.bools[key]) { + value = value !== 'false'; + } + setArg(key, value, arg); + } + else if (/^--no-.+/.test(arg)) { + var key = arg.match(/^--no-(.+)/)[1]; + setArg(key, false, arg); + } + else if (/^--.+/.test(arg)) { + var key = arg.match(/^--(.+)/)[1]; + var next = args[i + 1]; + if (next !== undefined && !/^-/.test(next) + && !flags.bools[key] + && !flags.allBools + && (aliases[key] ? !aliasIsBoolean(key) : true)) { + setArg(key, next, arg); + i++; + } + else if (/^(true|false)$/.test(next)) { + setArg(key, next === 'true', arg); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } + else if (/^-[^-]+/.test(arg)) { + var letters = arg.slice(1,-1).split(''); + + var broken = false; + for (var j = 0; j < letters.length; j++) { + var next = arg.slice(j+2); + + if (next === '-') { + setArg(letters[j], next, arg) + continue; + } + + if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) { + setArg(letters[j], next.split('=')[1], arg); + broken = true; + break; + } + + if (/[A-Za-z]/.test(letters[j]) + && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { + setArg(letters[j], next, arg); + broken = true; + break; + } + + if (letters[j+1] && letters[j+1].match(/\W/)) { + setArg(letters[j], arg.slice(j+2), arg); + broken = true; + break; + } + else { + setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); + } + } + + var key = arg.slice(-1)[0]; + if (!broken && key !== '-') { + if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) + && !flags.bools[key] + && (aliases[key] ? !aliasIsBoolean(key) : true)) { + setArg(key, args[i+1], arg); + i++; + } + else if (args[i+1] && /^(true|false)$/.test(args[i+1])) { + setArg(key, args[i+1] === 'true', arg); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } + } + else { + if (!flags.unknownFn || flags.unknownFn(arg) !== false) { + argv._.push( + flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) + ); + } + if (opts.stopEarly) { + argv._.push.apply(argv._, args.slice(i + 1)); + break; + } + } + } + + Object.keys(defaults).forEach(function (key) { + if (!hasKey(argv, key.split('.'))) { + setKey(argv, key.split('.'), defaults[key]); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), defaults[key]); + }); + } + }); + + if (opts['--']) { + argv['--'] = new Array(); + notFlags.forEach(function(key) { + argv['--'].push(key); + }); + } + else { + notFlags.forEach(function(key) { + argv._.push(key); + }); + } - var onclosenexttick = function() { - if (cancelled) return; - if (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close')); - if (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close')); - }; + return argv; +}; - var onrequest = function() { - stream.req.on('finish', onfinish); - }; +function hasKey (obj, keys) { + var o = obj; + keys.slice(0,-1).forEach(function (key) { + o = (o[key] || {}); + }); - if (isRequest(stream)) { - stream.on('complete', onfinish); - stream.on('abort', onclose); - if (stream.req) onrequest(); - else stream.on('request', onrequest); - } else if (writable && !ws) { // legacy streams - stream.on('end', onlegacyfinish); - stream.on('close', onlegacyfinish); - } + var key = keys[keys.length - 1]; + return key in o; +} - if (isChildProcess(stream)) stream.on('exit', onexit); +function isNumber (x) { + if (typeof x === 'number') return true; + if (/^0x[0-9a-f]+$/i.test(x)) return true; + return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); +} - stream.on('end', onend); - stream.on('finish', onfinish); - if (opts.error !== false) stream.on('error', onerror); - stream.on('close', onclose); - return function() { - cancelled = true; - stream.removeListener('complete', onfinish); - stream.removeListener('abort', onclose); - stream.removeListener('request', onrequest); - if (stream.req) stream.req.removeListener('finish', onfinish); - stream.removeListener('end', onlegacyfinish); - stream.removeListener('close', onlegacyfinish); - stream.removeListener('finish', onfinish); - stream.removeListener('exit', onexit); - stream.removeListener('end', onend); - stream.removeListener('error', onerror); - stream.removeListener('close', onclose); - }; -}; -module.exports = eos; +/***/ }), +/* 274 */ +/***/ (function(module) { +module.exports = JSON.parse("{\"name\":\"strong-log-transformer\",\"version\":\"2.1.0\",\"description\":\"Stream transformer that prefixes lines with timestamps and other things.\",\"author\":\"Ryan Graham \",\"license\":\"Apache-2.0\",\"repository\":{\"type\":\"git\",\"url\":\"git://github.com/strongloop/strong-log-transformer\"},\"keywords\":[\"logging\",\"streams\"],\"bugs\":{\"url\":\"https://github.com/strongloop/strong-log-transformer/issues\"},\"homepage\":\"https://github.com/strongloop/strong-log-transformer\",\"directories\":{\"test\":\"test\"},\"bin\":{\"sl-log-transformer\":\"bin/sl-log-transformer.js\"},\"main\":\"index.js\",\"scripts\":{\"test\":\"tap --100 test/test-*\"},\"dependencies\":{\"duplexer\":\"^0.1.1\",\"minimist\":\"^1.2.0\",\"through\":\"^2.3.4\"},\"devDependencies\":{\"tap\":\"^12.0.1\"},\"engines\":{\"node\":\">=4\"}}"); /***/ }), -/* 267 */ -/***/ (function(module, exports, __webpack_require__) { +/* 275 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "workspacePackagePaths", function() { return workspacePackagePaths; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "copyWorkspacePackages", function() { return copyWorkspacePackages; }); +/* harmony import */ var glob__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(146); +/* harmony import */ var glob__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(glob__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(111); +/* harmony import */ var util__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(util__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(276); +/* harmony import */ var _fs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(130); +/* harmony import */ var _package_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(164); +/* harmony import */ var _projects__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(145); +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ -const {PassThrough: PassThroughStream} = __webpack_require__(137); -module.exports = options => { - options = {...options}; - const {array} = options; - let {encoding} = options; - const isBuffer = encoding === 'buffer'; - let objectMode = false; - if (array) { - objectMode = !(encoding || isBuffer); - } else { - encoding = encoding || 'utf8'; - } - if (isBuffer) { - encoding = null; - } - const stream = new PassThroughStream({objectMode}); - if (encoding) { - stream.setEncoding(encoding); - } +const glob = Object(util__WEBPACK_IMPORTED_MODULE_2__["promisify"])(glob__WEBPACK_IMPORTED_MODULE_0___default.a); +async function workspacePackagePaths(rootPath) { + const rootPkgJson = await Object(_package_json__WEBPACK_IMPORTED_MODULE_5__["readPackageJson"])(rootPath); - let length = 0; - const chunks = []; + if (!rootPkgJson.workspaces) { + return []; + } - stream.on('data', chunk => { - chunks.push(chunk); + const workspacesPathsPatterns = rootPkgJson.workspaces.packages; + let workspaceProjectsPaths = []; - if (objectMode) { - length = chunks.length; - } else { - length += chunk.length; - } - }); + for (const pattern of workspacesPathsPatterns) { + workspaceProjectsPaths = workspaceProjectsPaths.concat(await packagesFromGlobPattern({ + pattern, + rootPath + })); + } // Filter out exclude glob patterns - stream.getBufferedValue = () => { - if (array) { - return chunks; - } - return isBuffer ? Buffer.concat(chunks, length) : chunks.join(''); - }; + for (const pattern of workspacesPathsPatterns) { + if (pattern.startsWith('!')) { + const pathToRemove = path__WEBPACK_IMPORTED_MODULE_1___default.a.join(rootPath, pattern.slice(1), 'package.json'); + workspaceProjectsPaths = workspaceProjectsPaths.filter(p => p !== pathToRemove); + } + } - stream.getBufferedLength = () => length; + return workspaceProjectsPaths; +} +async function copyWorkspacePackages(rootPath) { + const projectPaths = Object(_config__WEBPACK_IMPORTED_MODULE_3__["getProjectPaths"])({ + rootPath + }); + const projects = await Object(_projects__WEBPACK_IMPORTED_MODULE_6__["getProjects"])(rootPath, projectPaths); - return stream; -}; + for (const project of projects.values()) { + const dest = path__WEBPACK_IMPORTED_MODULE_1___default.a.resolve(rootPath, 'node_modules', project.name); + if ((await Object(_fs__WEBPACK_IMPORTED_MODULE_4__["isSymlink"])(dest)) === false) { + continue; + } // Remove the symlink -/***/ }), -/* 268 */ -/***/ (function(module, exports, __webpack_require__) { -"use strict"; + await Object(_fs__WEBPACK_IMPORTED_MODULE_4__["unlink"])(dest); // Copy in the package + await Object(_fs__WEBPACK_IMPORTED_MODULE_4__["copyDirectory"])(project.path, dest); + } +} -const { PassThrough } = __webpack_require__(137); +function packagesFromGlobPattern({ + pattern, + rootPath +}) { + const globOptions = { + cwd: rootPath, + // Should throw in case of unusual errors when reading the file system + strict: true, + // Always returns absolute paths for matched files + absolute: true, + // Do not match ** against multiple filenames + // (This is only specified because we currently don't have a need for it.) + noglobstar: true + }; + return glob(path__WEBPACK_IMPORTED_MODULE_1___default.a.join(pattern, 'package.json'), globOptions); +} -module.exports = function (/*streams...*/) { - var sources = [] - var output = new PassThrough({objectMode: true}) +/***/ }), +/* 276 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - output.setMaxListeners(0) +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getProjectPaths", function() { return getProjectPaths; }); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); +/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_0__); +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ - output.add = add - output.isEmpty = isEmpty - output.on('unpipe', remove) - - Array.prototype.slice.call(arguments).forEach(add) - - return output +/** + * Returns all the paths where plugins are located + */ +function getProjectPaths({ + rootPath, + ossOnly, + skipKibanaPlugins +}) { + const projectPaths = [rootPath, Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'packages/*')]; // This is needed in order to install the dependencies for the declared + // plugin functional used in the selenium functional tests. + // As we are now using the webpack dll for the client vendors dependencies + // when we run the plugin functional tests against the distributable + // dependencies used by such plugins like @eui, react and react-dom can't + // be loaded from the dll as the context is different from the one declared + // into the webpack dll reference plugin. + // In anyway, have a plugin declaring their own dependencies is the + // correct and the expect behavior. - function add (source) { - if (Array.isArray(source)) { - source.forEach(add) - return this - } + projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'test/plugin_functional/plugins/*')); + projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'test/interpreter_functional/plugins/*')); + projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'examples/*')); - sources.push(source); - source.once('end', remove.bind(null, source)) - source.once('error', output.emit.bind(output, 'error')) - source.pipe(output, {end: false}) - return this + if (!ossOnly) { + projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'x-pack')); + projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'x-pack/plugins/*')); + projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'x-pack/legacy/plugins/*')); + projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'x-pack/test/functional_with_es_ssl/fixtures/plugins/*')); } - function isEmpty () { - return sources.length == 0; + if (!skipKibanaPlugins) { + projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, '../kibana-extra/*')); + projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, '../kibana-extra/*/packages/*')); + projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, '../kibana-extra/*/plugins/*')); + projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'plugins/*')); + projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'plugins/*/packages/*')); + projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'plugins/*/plugins/*')); } - function remove (source) { - sources = sources.filter(function (it) { return it !== source }) - if (!sources.length && output.readable) { output.end() } - } + return projectPaths; } - /***/ }), -/* 269 */ -/***/ (function(module, exports, __webpack_require__) { +/* 277 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getAllChecksums", function() { return getAllChecksums; }); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(133); +/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(278); +/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(crypto__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(111); +/* harmony import */ var util__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(util__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(232); +/* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(execa__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _yarn_lock__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(279); +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ -const nativePromisePrototype = (async () => {})().constructor.prototype; -const descriptors = ['then', 'catch', 'finally'].map(property => [ - property, - Reflect.getOwnPropertyDescriptor(nativePromisePrototype, property) -]); -// The return value is a mixin of `childProcess` and `Promise` -const mergePromise = (spawned, promise) => { - for (const [property, descriptor] of descriptors) { - // Starting the main `promise` is deferred to avoid consuming streams - const value = typeof promise === 'function' ? - (...args) => Reflect.apply(descriptor.value, promise(), args) : - descriptor.value.bind(promise); - Reflect.defineProperty(spawned, property, {...descriptor, value}); - } - return spawned; -}; +const statAsync = Object(util__WEBPACK_IMPORTED_MODULE_2__["promisify"])(fs__WEBPACK_IMPORTED_MODULE_0___default.a.stat); -// Use promises instead of `child_process` events -const getSpawnedPromise = spawned => { - return new Promise((resolve, reject) => { - spawned.on('exit', (exitCode, signal) => { - resolve({exitCode, signal}); - }); +const projectBySpecificitySorter = (a, b) => b.path.length - a.path.length; +/** Get the changed files for a set of projects */ - spawned.on('error', error => { - reject(error); - }); - if (spawned.stdin) { - spawned.stdin.on('error', error => { - reject(error); - }); - } - }); -}; +async function getChangesForProjects(projects, kbn, log) { + log.verbose('getting changed files'); + const { + stdout + } = await execa__WEBPACK_IMPORTED_MODULE_3___default()('git', ['ls-files', '-dmto', '--exclude-standard', '--', ...Array.from(projects.values()).filter(p => kbn.isPartOfRepo(p)).map(p => p.path)], { + cwd: kbn.getAbsolute() + }); + const output = stdout.trim(); + const unassignedChanges = new Map(); -module.exports = { - mergePromise, - getSpawnedPromise -}; + if (output) { + for (const line of output.split('\n')) { + const [tag, ...pathParts] = line.trim().split(' '); + const path = pathParts.join(' '); + switch (tag) { + case 'M': + case 'C': + // for some reason ls-files returns deleted files as both deleted + // and modified, so make sure not to overwrite changes already + // tracked as "deleted" + if (unassignedChanges.get(path) !== 'deleted') { + unassignedChanges.set(path, 'modified'); + } + break; -/***/ }), -/* 270 */ -/***/ (function(module, exports, __webpack_require__) { + case 'R': + unassignedChanges.set(path, 'deleted'); + break; -"use strict"; + case '?': + unassignedChanges.set(path, 'untracked'); + break; -const SPACES_REGEXP = / +/g; + case 'H': + case 'S': + case 'K': + default: + log.warning(`unexpected modification status "${tag}" for ${path}, please report this!`); + unassignedChanges.set(path, 'invalid'); + break; + } + } + } -const joinCommand = (file, args = []) => { - if (!Array.isArray(args)) { - return file; - } + const sortedRelevantProjects = Array.from(projects.values()).sort(projectBySpecificitySorter); + const changesByProject = new Map(); - return [file, ...args].join(' '); -}; + for (const project of sortedRelevantProjects) { + if (kbn.isOutsideRepo(project)) { + changesByProject.set(project, undefined); + continue; + } -// Allow spaces to be escaped by a backslash if not meant as a delimiter -const handleEscaping = (tokens, token, index) => { - if (index === 0) { - return [token]; - } + const ownChanges = new Map(); + const prefix = kbn.getRelative(project.path); - const previousToken = tokens[tokens.length - 1]; + for (const [path, type] of unassignedChanges) { + if (path.startsWith(prefix)) { + ownChanges.set(path, type); + unassignedChanges.delete(path); + } + } - if (previousToken.endsWith('\\')) { - return [...tokens.slice(0, -1), `${previousToken.slice(0, -1)} ${token}`]; - } + log.verbose(`[${project.name}] found ${ownChanges.size} changes`); + changesByProject.set(project, ownChanges); + } - return [...tokens, token]; -}; + if (unassignedChanges.size) { + throw new Error(`unable to assign all change paths to a project: ${JSON.stringify(Array.from(unassignedChanges.entries()))}`); + } -// Handle `execa.command()` -const parseCommand = command => { - return command - .trim() - .split(SPACES_REGEXP) - .reduce(handleEscaping, []); -}; + return changesByProject; +} +/** Get the latest commit sha for a project */ -module.exports = { - joinCommand, - parseCommand -}; +async function getLatestSha(project, kbn) { + if (kbn.isOutsideRepo(project)) { + return; + } -/***/ }), -/* 271 */ -/***/ (function(module, exports, __webpack_require__) { + const { + stdout + } = await execa__WEBPACK_IMPORTED_MODULE_3___default()('git', ['log', '-n', '1', '--pretty=format:%H', '--', project.path], { + cwd: kbn.getAbsolute() + }); + return stdout.trim() || undefined; +} +/** + * Get the checksum for a specific project in the workspace + */ -// Copyright IBM Corp. 2014,2018. All Rights Reserved. -// Node module: strong-log-transformer -// This file is licensed under the Apache License 2.0. -// License text available at https://opensource.org/licenses/Apache-2.0 -module.exports = __webpack_require__(272); -module.exports.cli = __webpack_require__(276); +async function getChecksum(project, changes, yarnLock, kbn, log) { + const sha = await getLatestSha(project, kbn); + if (sha) { + log.verbose(`[${project.name}] local sha:`, sha); + } -/***/ }), -/* 272 */ -/***/ (function(module, exports, __webpack_require__) { + if (!changes || Array.from(changes.values()).includes('invalid')) { + log.warning(`[${project.name}] unable to determine local changes, caching disabled`); + return; + } -"use strict"; -// Copyright IBM Corp. 2014,2018. All Rights Reserved. -// Node module: strong-log-transformer -// This file is licensed under the Apache License 2.0. -// License text available at https://opensource.org/licenses/Apache-2.0 + const changesSummary = await Promise.all(Array.from(changes).sort((a, b) => a[0].localeCompare(b[0])).map(async ([path, type]) => { + if (type === 'deleted') { + return `${path}:deleted`; + } + const stats = await statAsync(kbn.getAbsolute(path)); + log.verbose(`[${project.name}] modified time ${stats.mtimeMs} for ${path}`); + return `${path}:${stats.mtimeMs}`; + })); + const depMap = Object(_yarn_lock__WEBPACK_IMPORTED_MODULE_4__["resolveDepsForProject"])({ + project, + yarnLock, + kbn, + log, + includeDependentProject: false, + productionDepsOnly: false + }); + if (!depMap) { + return; + } -var stream = __webpack_require__(137); -var util = __webpack_require__(111); -var fs = __webpack_require__(133); + const deps = Array.from(depMap.values()).map(({ + name, + version + }) => `${name}@${version}`).sort((a, b) => a.localeCompare(b)); + log.verbose(`[${project.name}] resolved %d deps`, deps.length); + const checksum = JSON.stringify({ + sha, + changes: changesSummary, + deps + }, null, 2); -var through = __webpack_require__(273); -var duplexer = __webpack_require__(274); -var StringDecoder = __webpack_require__(275).StringDecoder; + if (process.env.BOOTSTRAP_CACHE_DEBUG_CHECKSUM) { + return checksum; + } -module.exports = Logger; + const hash = crypto__WEBPACK_IMPORTED_MODULE_1___default.a.createHash('sha1'); + hash.update(checksum); + return hash.digest('hex'); +} +/** + * Calculate checksums for all projects in the workspace based on + * - last git commit to project directory + * - un-committed changes + * - resolved dependencies from yarn.lock referenced by project package.json + */ -Logger.DEFAULTS = { - format: 'text', - tag: '', - mergeMultiline: false, - timeStamp: false, -}; -var formatters = { - text: textFormatter, - json: jsonFormatter, +async function getAllChecksums(kbn, log, yarnLock) { + const projects = kbn.getAllProjects(); + const changesByProject = await getChangesForProjects(projects, kbn, log); + /** map of [project.name, cacheKey] */ + + const cacheKeys = new Map(); + await Promise.all(Array.from(projects.values()).map(async project => { + cacheKeys.set(project.name, await getChecksum(project, changesByProject.get(project), yarnLock, kbn, log)); + })); + return cacheKeys; } -function Logger(options) { - var defaults = JSON.parse(JSON.stringify(Logger.DEFAULTS)); - options = util._extend(defaults, options || {}); - var catcher = deLiner(); - var emitter = catcher; - var transforms = [ - objectifier(), - ]; +/***/ }), +/* 278 */ +/***/ (function(module, exports) { - if (options.tag) { - transforms.push(staticTagger(options.tag)); - } +module.exports = require("crypto"); - if (options.mergeMultiline) { - transforms.push(lineMerger()); - } +/***/ }), +/* 279 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - // TODO - // if (options.pidStamp) { - // transforms.push(pidStamper(options.pid)); - // } +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "readYarnLock", function() { return readYarnLock; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resolveDepsForProject", function() { return resolveDepsForProject; }); +/* harmony import */ var _yarnpkg_lockfile__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(280); +/* harmony import */ var _yarnpkg_lockfile__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_yarnpkg_lockfile__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _utils_fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(130); +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +// @ts-expect-error published types are worthless - // TODO - // if (options.workerStamp) { - // transforms.push(workerStamper(options.worker)); - // } - transforms.push(formatters[options.format](options)); +async function readYarnLock(kbn) { + try { + const contents = await Object(_utils_fs__WEBPACK_IMPORTED_MODULE_1__["readFile"])(kbn.getAbsolute('yarn.lock'), 'utf8'); + const yarnLock = Object(_yarnpkg_lockfile__WEBPACK_IMPORTED_MODULE_0__["parse"])(contents); - // restore line endings that were removed by line splitting - transforms.push(reLiner()); + if (yarnLock.type === 'success') { + return yarnLock.object; + } - for (var t in transforms) { - emitter = emitter.pipe(transforms[t]); + throw new Error('unable to read yarn.lock file, please run `yarn kbn bootstrap`'); + } catch (error) { + if (error.code !== 'ENOENT') { + throw error; + } } - return duplexer(catcher, emitter); + return {}; } +/** + * Get a list of the absolute dependencies of this project, as resolved + * in the yarn.lock file, does not include other projects in the workspace + * or their dependencies + */ -function deLiner() { - var decoder = new StringDecoder('utf8'); - var last = ''; +function resolveDepsForProject({ + project: rootProject, + yarnLock, + kbn, + log, + productionDepsOnly, + includeDependentProject +}) { + /** map of [name@range, { name, version }] */ + const resolved = new Map(); + const seenProjects = new Set(); + const projectQueue = [rootProject]; + const depQueue = []; - return new stream.Transform({ - transform(chunk, _enc, callback) { - last += decoder.write(chunk); - var list = last.split(/\r\n|[\n\v\f\r\x85\u2028\u2029]/g); - last = list.pop(); - for (var i = 0; i < list.length; i++) { - // swallow empty lines - if (list[i]) { - this.push(list[i]); - } - } - callback(); - }, - flush(callback) { - // incomplete UTF8 sequences become UTF8 replacement characters - last += decoder.end(); - if (last) { - this.push(last); - } - callback(); - }, - }); -} + while (projectQueue.length) { + const project = projectQueue.shift(); -function reLiner() { - return through(appendNewline); + if (seenProjects.has(project)) { + continue; + } - function appendNewline(line) { - this.emit('data', line + '\n'); - } -} + seenProjects.add(project); + const projectDeps = Object.entries(productionDepsOnly ? project.productionDependencies : project.allDependencies); -function objectifier() { - return through(objectify, null, {autoDestroy: false}); + for (const [name, versionRange] of projectDeps) { + depQueue.push([name, versionRange]); + } - function objectify(line) { - this.emit('data', { - msg: line, - time: Date.now(), - }); - } -} + while (depQueue.length) { + const [name, versionRange] = depQueue.shift(); + const req = `${name}@${versionRange}`; -function staticTagger(tag) { - return through(tagger); + if (resolved.has(req)) { + continue; + } - function tagger(logEvent) { - logEvent.tag = tag; - this.emit('data', logEvent); - } -} + if (includeDependentProject && kbn.hasProject(name)) { + projectQueue.push(kbn.getProject(name)); + } -function textFormatter(options) { - return through(textify); + if (!kbn.hasProject(name)) { + const pkg = yarnLock[req]; - function textify(logEvent) { - var line = util.format('%s%s', textifyTags(logEvent.tag), - logEvent.msg.toString()); - if (options.timeStamp) { - line = util.format('%s %s', new Date(logEvent.time).toISOString(), line); - } - this.emit('data', line.replace(/\n/g, '\\n')); - } + if (!pkg) { + log.warning('yarn.lock file is out of date, please run `yarn kbn bootstrap` to re-enable caching'); + return; + } - function textifyTags(tags) { - var str = ''; - if (typeof tags === 'string') { - str = tags + ' '; - } else if (typeof tags === 'object') { - for (var t in tags) { - str += t + ':' + tags[t] + ' '; + resolved.set(req, { + name, + version: pkg.version + }); + const allDepsEntries = [...Object.entries(pkg.dependencies || {}), ...Object.entries(pkg.optionalDependencies || {})]; + + for (const [childName, childVersionRange] of allDepsEntries) { + depQueue.push([childName, childVersionRange]); + } } } - return str; } -} - -function jsonFormatter(options) { - return through(jsonify); - function jsonify(logEvent) { - if (options.timeStamp) { - logEvent.time = new Date(logEvent.time).toISOString(); - } else { - delete logEvent.time; - } - logEvent.msg = logEvent.msg.toString(); - this.emit('data', JSON.stringify(logEvent)); - } + return resolved; } -function lineMerger(host) { - var previousLine = null; - var flushTimer = null; - var stream = through(lineMergerWrite, lineMergerEnd); - var flush = _flush.bind(stream); - - return stream; - - function lineMergerWrite(line) { - if (/^\s+/.test(line.msg)) { - if (previousLine) { - previousLine.msg += '\n' + line.msg; - } else { - previousLine = line; - } - } else { - flush(); - previousLine = line; - } - // rolling timeout - clearTimeout(flushTimer); - flushTimer = setTimeout(flush.bind(this), 10); - } - - function _flush() { - if (previousLine) { - this.emit('data', previousLine); - previousLine = null; - } - } +/***/ }), +/* 280 */ +/***/ (function(module, exports, __webpack_require__) { - function lineMergerEnd() { - flush.call(this); - this.emit('end'); - } -} +module.exports = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __webpack_require__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 14); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports) { +module.exports = __webpack_require__(4); /***/ }), -/* 273 */ +/* 1 */ /***/ (function(module, exports, __webpack_require__) { -var Stream = __webpack_require__(137) +"use strict"; -// through -// -// a stream that does nothing but re-emit the input. -// useful for aggregating a series of changing but not ending streams into one stream) -exports = module.exports = through -through.through = through +exports.__esModule = true; -//create a readable writable stream. +var _promise = __webpack_require__(173); -function through (write, end, opts) { - write = write || function (data) { this.queue(data) } - end = end || function () { this.queue(null) } +var _promise2 = _interopRequireDefault(_promise); - var ended = false, destroyed = false, buffer = [], _ended = false - var stream = new Stream() - stream.readable = stream.writable = true - stream.paused = false +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -// stream.autoPause = !(opts && opts.autoPause === false) - stream.autoDestroy = !(opts && opts.autoDestroy === false) +exports.default = function (fn) { + return function () { + var gen = fn.apply(this, arguments); + return new _promise2.default(function (resolve, reject) { + function step(key, arg) { + try { + var info = gen[key](arg); + var value = info.value; + } catch (error) { + reject(error); + return; + } - stream.write = function (data) { - write.call(this, data) - return !stream.paused - } + if (info.done) { + resolve(value); + } else { + return _promise2.default.resolve(value).then(function (value) { + step("next", value); + }, function (err) { + step("throw", err); + }); + } + } - function drain() { - while(buffer.length && !stream.paused) { - var data = buffer.shift() - if(null === data) - return stream.emit('end') - else - stream.emit('data', data) - } - } + return step("next"); + }); + }; +}; - stream.queue = stream.push = function (data) { -// console.error(ended) - if(_ended) return stream - if(data === null) _ended = true - buffer.push(data) - drain() - return stream - } +/***/ }), +/* 2 */ +/***/ (function(module, exports) { - //this will be registered as the first 'end' listener - //must call destroy next tick, to make sure we're after any - //stream piped from here. - //this is only a problem if end is not emitted synchronously. - //a nicer way to do this is to make sure this is the last listener for 'end' +module.exports = __webpack_require__(111); - stream.on('end', function () { - stream.readable = false - if(!stream.writable && stream.autoDestroy) - process.nextTick(function () { - stream.destroy() - }) - }) +/***/ }), +/* 3 */ +/***/ (function(module, exports) { - function _end () { - stream.writable = false - end.call(stream) - if(!stream.readable && stream.autoDestroy) - stream.destroy() - } +module.exports = __webpack_require__(133); - stream.end = function (data) { - if(ended) return - ended = true - if(arguments.length) stream.write(data) - _end() // will emit or queue - return stream - } +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { - stream.destroy = function () { - if(destroyed) return - destroyed = true - ended = true - buffer.length = 0 - stream.writable = stream.readable = false - stream.emit('close') - return stream - } +"use strict"; - stream.pause = function () { - if(stream.paused) return - stream.paused = true - return stream - } - stream.resume = function () { - if(stream.paused) { - stream.paused = false - stream.emit('resume') - } - drain() - //may have become paused again, - //as drain emits 'data'. - if(!stream.paused) - stream.emit('drain') - return stream +Object.defineProperty(exports, "__esModule", { + value: true +}); +class MessageError extends Error { + constructor(msg, code) { + super(msg); + this.code = code; } - return stream -} +} +exports.MessageError = MessageError; +class ProcessSpawnError extends MessageError { + constructor(msg, code, process) { + super(msg, code); + this.process = process; + } -/***/ }), -/* 274 */ -/***/ (function(module, exports, __webpack_require__) { +} -var Stream = __webpack_require__(137) -var writeMethods = ["write", "end", "destroy"] -var readMethods = ["resume", "pause"] -var readEvents = ["data", "close"] -var slice = Array.prototype.slice +exports.ProcessSpawnError = ProcessSpawnError; +class SecurityError extends MessageError {} -module.exports = duplex +exports.SecurityError = SecurityError; +class ProcessTermError extends MessageError {} -function forEach (arr, fn) { - if (arr.forEach) { - return arr.forEach(fn) - } +exports.ProcessTermError = ProcessTermError; +class ResponseError extends Error { + constructor(msg, responseCode) { + super(msg); + this.responseCode = responseCode; + } - for (var i = 0; i < arr.length; i++) { - fn(arr[i], i) - } } +exports.ResponseError = ResponseError; -function duplex(writer, reader) { - var stream = new Stream() - var ended = false - - forEach(writeMethods, proxyWriter) +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { - forEach(readMethods, proxyReader) +"use strict"; - forEach(readEvents, proxyStream) - reader.on("end", handleEnd) +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.getFirstSuitableFolder = exports.readFirstAvailableStream = exports.makeTempDir = exports.hardlinksWork = exports.writeFilePreservingEol = exports.getFileSizeOnDisk = exports.walk = exports.symlink = exports.find = exports.readJsonAndFile = exports.readJson = exports.readFileAny = exports.hardlinkBulk = exports.copyBulk = exports.unlink = exports.glob = exports.link = exports.chmod = exports.lstat = exports.exists = exports.mkdirp = exports.stat = exports.access = exports.rename = exports.readdir = exports.realpath = exports.readlink = exports.writeFile = exports.open = exports.readFileBuffer = exports.lockQueue = exports.constants = undefined; - writer.on("drain", function() { - stream.emit("drain") - }) +var _asyncToGenerator2; - writer.on("error", reemit) - reader.on("error", reemit) +function _load_asyncToGenerator() { + return _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(1)); +} - stream.writable = writer.writable - stream.readable = reader.readable +let buildActionsForCopy = (() => { + var _ref = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (queue, events, possibleExtraneous, reporter) { - return stream + // + let build = (() => { + var _ref5 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (data) { + const src = data.src, + dest = data.dest, + type = data.type; - function proxyWriter(methodName) { - stream[methodName] = method + const onFresh = data.onFresh || noop; + const onDone = data.onDone || noop; - function method() { - return writer[methodName].apply(writer, arguments) + // TODO https://github.com/yarnpkg/yarn/issues/3751 + // related to bundled dependencies handling + if (files.has(dest.toLowerCase())) { + reporter.verbose(`The case-insensitive file ${dest} shouldn't be copied twice in one bulk copy`); + } else { + files.add(dest.toLowerCase()); } - } - function proxyReader(methodName) { - stream[methodName] = method + if (type === 'symlink') { + yield mkdirp((_path || _load_path()).default.dirname(dest)); + onFresh(); + actions.symlink.push({ + dest, + linkname: src + }); + onDone(); + return; + } - function method() { - stream.emit(methodName) - var func = reader[methodName] - if (func) { - return func.apply(reader, arguments) - } - reader.emit(methodName) + if (events.ignoreBasenames.indexOf((_path || _load_path()).default.basename(src)) >= 0) { + // ignored file + return; } - } - function proxyStream(methodName) { - reader.on(methodName, reemit) + const srcStat = yield lstat(src); + let srcFiles; - function reemit() { - var args = slice.call(arguments) - args.unshift(methodName) - stream.emit.apply(stream, args) + if (srcStat.isDirectory()) { + srcFiles = yield readdir(src); } - } - function handleEnd() { - if (ended) { - return + let destStat; + try { + // try accessing the destination + destStat = yield lstat(dest); + } catch (e) { + // proceed if destination doesn't exist, otherwise error + if (e.code !== 'ENOENT') { + throw e; + } } - ended = true - var args = slice.call(arguments) - args.unshift("end") - stream.emit.apply(stream, args) - } - function reemit(err) { - stream.emit("error", err) - } -} + // if destination exists + if (destStat) { + const bothSymlinks = srcStat.isSymbolicLink() && destStat.isSymbolicLink(); + const bothFolders = srcStat.isDirectory() && destStat.isDirectory(); + const bothFiles = srcStat.isFile() && destStat.isFile(); + // EINVAL access errors sometimes happen which shouldn't because node shouldn't be giving + // us modes that aren't valid. investigate this, it's generally safe to proceed. -/***/ }), -/* 275 */ -/***/ (function(module, exports) { + /* if (srcStat.mode !== destStat.mode) { + try { + await access(dest, srcStat.mode); + } catch (err) {} + } */ -module.exports = require("string_decoder"); + if (bothFiles && artifactFiles.has(dest)) { + // this file gets changed during build, likely by a custom install script. Don't bother checking it. + onDone(); + reporter.verbose(reporter.lang('verboseFileSkipArtifact', src)); + return; + } -/***/ }), -/* 276 */ -/***/ (function(module, exports, __webpack_require__) { + if (bothFiles && srcStat.size === destStat.size && (0, (_fsNormalized || _load_fsNormalized()).fileDatesEqual)(srcStat.mtime, destStat.mtime)) { + // we can safely assume this is the same file + onDone(); + reporter.verbose(reporter.lang('verboseFileSkip', src, dest, srcStat.size, +srcStat.mtime)); + return; + } -"use strict"; -// Copyright IBM Corp. 2014,2018. All Rights Reserved. -// Node module: strong-log-transformer -// This file is licensed under the Apache License 2.0. -// License text available at https://opensource.org/licenses/Apache-2.0 + if (bothSymlinks) { + const srcReallink = yield readlink(src); + if (srcReallink === (yield readlink(dest))) { + // if both symlinks are the same then we can continue on + onDone(); + reporter.verbose(reporter.lang('verboseFileSkipSymlink', src, dest, srcReallink)); + return; + } + } + if (bothFolders) { + // mark files that aren't in this folder as possibly extraneous + const destFiles = yield readdir(dest); + invariant(srcFiles, 'src files not initialised'); + for (var _iterator4 = destFiles, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) { + var _ref6; -var minimist = __webpack_require__(277); -var path = __webpack_require__(4); + if (_isArray4) { + if (_i4 >= _iterator4.length) break; + _ref6 = _iterator4[_i4++]; + } else { + _i4 = _iterator4.next(); + if (_i4.done) break; + _ref6 = _i4.value; + } -var Logger = __webpack_require__(272); -var pkg = __webpack_require__(278); + const file = _ref6; -module.exports = cli; + if (srcFiles.indexOf(file) < 0) { + const loc = (_path || _load_path()).default.join(dest, file); + possibleExtraneous.add(loc); -function cli(args) { - var opts = minimist(args.slice(2)); - var $0 = path.basename(args[1]); - var p = console.log.bind(console); - if (opts.v || opts.version) { - version($0, p); - } else if (opts.h || opts.help) { - usage($0, p); - } else if (args.length < 3) { - process.stdin.pipe(Logger()).pipe(process.stdout); - } else { - process.stdin.pipe(Logger(opts)).pipe(process.stdout); - } -} + if ((yield lstat(loc)).isDirectory()) { + for (var _iterator5 = yield readdir(loc), _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) { + var _ref7; -function version($0, p) { - p('%s v%s', pkg.name, pkg.version); -} + if (_isArray5) { + if (_i5 >= _iterator5.length) break; + _ref7 = _iterator5[_i5++]; + } else { + _i5 = _iterator5.next(); + if (_i5.done) break; + _ref7 = _i5.value; + } -function usage($0, p) { - var PADDING = ' '; - var opt, def; - p('Usage: %s [options]', $0); - p(''); - p('%s', pkg.description); - p(''); - p('OPTIONS:'); - for (opt in Logger.DEFAULTS) { - def = Logger.DEFAULTS[opt]; - if (typeof def === 'boolean') - boolOpt(opt, Logger.DEFAULTS[opt]); - else - stdOpt(opt, Logger.DEFAULTS[opt]); - } - p(''); - - function boolOpt(name, def) { - name = name + PADDING.slice(0, 20-name.length); - p(' --%s default: %s', name, def); - } - - function stdOpt(name, def) { - var value = name.toUpperCase() + - PADDING.slice(0, 19 - name.length*2); - p(' --%s %s default: %j', name, value, def); - } -} - - -/***/ }), -/* 277 */ -/***/ (function(module, exports) { - -module.exports = function (args, opts) { - if (!opts) opts = {}; - - var flags = { bools : {}, strings : {}, unknownFn: null }; - - if (typeof opts['unknown'] === 'function') { - flags.unknownFn = opts['unknown']; - } + const file = _ref7; - if (typeof opts['boolean'] === 'boolean' && opts['boolean']) { - flags.allBools = true; - } else { - [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { - flags.bools[key] = true; - }); - } - - var aliases = {}; - Object.keys(opts.alias || {}).forEach(function (key) { - aliases[key] = [].concat(opts.alias[key]); - aliases[key].forEach(function (x) { - aliases[x] = [key].concat(aliases[key].filter(function (y) { - return x !== y; - })); - }); - }); + possibleExtraneous.add((_path || _load_path()).default.join(loc, file)); + } + } + } + } + } + } - [].concat(opts.string).filter(Boolean).forEach(function (key) { - flags.strings[key] = true; - if (aliases[key]) { - flags.strings[aliases[key]] = true; + if (destStat && destStat.isSymbolicLink()) { + yield (0, (_fsNormalized || _load_fsNormalized()).unlink)(dest); + destStat = null; } - }); - var defaults = opts['default'] || {}; - - var argv = { _ : [] }; - Object.keys(flags.bools).forEach(function (key) { - setArg(key, defaults[key] === undefined ? false : defaults[key]); - }); - - var notFlags = []; + if (srcStat.isSymbolicLink()) { + onFresh(); + const linkname = yield readlink(src); + actions.symlink.push({ + dest, + linkname + }); + onDone(); + } else if (srcStat.isDirectory()) { + if (!destStat) { + reporter.verbose(reporter.lang('verboseFileFolder', dest)); + yield mkdirp(dest); + } - if (args.indexOf('--') !== -1) { - notFlags = args.slice(args.indexOf('--')+1); - args = args.slice(0, args.indexOf('--')); - } + const destParts = dest.split((_path || _load_path()).default.sep); + while (destParts.length) { + files.add(destParts.join((_path || _load_path()).default.sep).toLowerCase()); + destParts.pop(); + } - function argDefined(key, arg) { - return (flags.allBools && /^--[^=]+$/.test(arg)) || - flags.strings[key] || flags.bools[key] || aliases[key]; - } + // push all files to queue + invariant(srcFiles, 'src files not initialised'); + let remaining = srcFiles.length; + if (!remaining) { + onDone(); + } + for (var _iterator6 = srcFiles, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) { + var _ref8; - function setArg (key, val, arg) { - if (arg && flags.unknownFn && !argDefined(key, arg)) { - if (flags.unknownFn(arg) === false) return; - } + if (_isArray6) { + if (_i6 >= _iterator6.length) break; + _ref8 = _iterator6[_i6++]; + } else { + _i6 = _iterator6.next(); + if (_i6.done) break; + _ref8 = _i6.value; + } - var value = !flags.strings[key] && isNumber(val) - ? Number(val) : val - ; - setKey(argv, key.split('.'), value); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), value); - }); - } + const file = _ref8; - function setKey (obj, keys, value) { - var o = obj; - for (var i = 0; i < keys.length-1; i++) { - var key = keys[i]; - if (key === '__proto__') return; - if (o[key] === undefined) o[key] = {}; - if (o[key] === Object.prototype || o[key] === Number.prototype - || o[key] === String.prototype) o[key] = {}; - if (o[key] === Array.prototype) o[key] = []; - o = o[key]; - } + queue.push({ + dest: (_path || _load_path()).default.join(dest, file), + onFresh, + onDone: function (_onDone) { + function onDone() { + return _onDone.apply(this, arguments); + } - var key = keys[keys.length - 1]; - if (key === '__proto__') return; - if (o === Object.prototype || o === Number.prototype - || o === String.prototype) o = {}; - if (o === Array.prototype) o = []; - if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') { - o[key] = value; - } - else if (Array.isArray(o[key])) { - o[key].push(value); - } - else { - o[key] = [ o[key], value ]; - } - } - - function aliasIsBoolean(key) { - return aliases[key].some(function (x) { - return flags.bools[x]; - }); - } + onDone.toString = function () { + return _onDone.toString(); + }; - for (var i = 0; i < args.length; i++) { - var arg = args[i]; - - if (/^--.+=/.test(arg)) { - // Using [\s\S] instead of . because js doesn't support the - // 'dotall' regex modifier. See: - // http://stackoverflow.com/a/1068308/13216 - var m = arg.match(/^--([^=]+)=([\s\S]*)$/); - var key = m[1]; - var value = m[2]; - if (flags.bools[key]) { - value = value !== 'false'; - } - setArg(key, value, arg); - } - else if (/^--no-.+/.test(arg)) { - var key = arg.match(/^--no-(.+)/)[1]; - setArg(key, false, arg); - } - else if (/^--.+/.test(arg)) { - var key = arg.match(/^--(.+)/)[1]; - var next = args[i + 1]; - if (next !== undefined && !/^-/.test(next) - && !flags.bools[key] - && !flags.allBools - && (aliases[key] ? !aliasIsBoolean(key) : true)) { - setArg(key, next, arg); - i++; - } - else if (/^(true|false)$/.test(next)) { - setArg(key, next === 'true', arg); - i++; - } - else { - setArg(key, flags.strings[key] ? '' : true, arg); - } - } - else if (/^-[^-]+/.test(arg)) { - var letters = arg.slice(1,-1).split(''); - - var broken = false; - for (var j = 0; j < letters.length; j++) { - var next = arg.slice(j+2); - - if (next === '-') { - setArg(letters[j], next, arg) - continue; - } - - if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) { - setArg(letters[j], next.split('=')[1], arg); - broken = true; - break; - } - - if (/[A-Za-z]/.test(letters[j]) - && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { - setArg(letters[j], next, arg); - broken = true; - break; - } - - if (letters[j+1] && letters[j+1].match(/\W/)) { - setArg(letters[j], arg.slice(j+2), arg); - broken = true; - break; - } - else { - setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); - } - } - - var key = arg.slice(-1)[0]; - if (!broken && key !== '-') { - if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) - && !flags.bools[key] - && (aliases[key] ? !aliasIsBoolean(key) : true)) { - setArg(key, args[i+1], arg); - i++; - } - else if (args[i+1] && /^(true|false)$/.test(args[i+1])) { - setArg(key, args[i+1] === 'true', arg); - i++; - } - else { - setArg(key, flags.strings[key] ? '' : true, arg); + return onDone; + }(function () { + if (--remaining === 0) { + onDone(); } - } - } - else { - if (!flags.unknownFn || flags.unknownFn(arg) !== false) { - argv._.push( - flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) - ); - } - if (opts.stopEarly) { - argv._.push.apply(argv._, args.slice(i + 1)); - break; - } - } - } - - Object.keys(defaults).forEach(function (key) { - if (!hasKey(argv, key.split('.'))) { - setKey(argv, key.split('.'), defaults[key]); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), defaults[key]); + }), + src: (_path || _load_path()).default.join(src, file) }); + } + } else if (srcStat.isFile()) { + onFresh(); + actions.file.push({ + src, + dest, + atime: srcStat.atime, + mtime: srcStat.mtime, + mode: srcStat.mode + }); + onDone(); + } else { + throw new Error(`unsure how to copy this: ${src}`); } - }); - - if (opts['--']) { - argv['--'] = new Array(); - notFlags.forEach(function(key) { - argv['--'].push(key); - }); - } - else { - notFlags.forEach(function(key) { - argv._.push(key); - }); - } - - return argv; -}; - -function hasKey (obj, keys) { - var o = obj; - keys.slice(0,-1).forEach(function (key) { - o = (o[key] || {}); - }); + }); - var key = keys[keys.length - 1]; - return key in o; -} + return function build(_x5) { + return _ref5.apply(this, arguments); + }; + })(); -function isNumber (x) { - if (typeof x === 'number') return true; - if (/^0x[0-9a-f]+$/i.test(x)) return true; - return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); -} + const artifactFiles = new Set(events.artifactFiles || []); + const files = new Set(); + // initialise events + for (var _iterator = queue, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { + var _ref2; + if (_isArray) { + if (_i >= _iterator.length) break; + _ref2 = _iterator[_i++]; + } else { + _i = _iterator.next(); + if (_i.done) break; + _ref2 = _i.value; + } -/***/ }), -/* 278 */ -/***/ (function(module) { + const item = _ref2; -module.exports = JSON.parse("{\"name\":\"strong-log-transformer\",\"version\":\"2.1.0\",\"description\":\"Stream transformer that prefixes lines with timestamps and other things.\",\"author\":\"Ryan Graham \",\"license\":\"Apache-2.0\",\"repository\":{\"type\":\"git\",\"url\":\"git://github.com/strongloop/strong-log-transformer\"},\"keywords\":[\"logging\",\"streams\"],\"bugs\":{\"url\":\"https://github.com/strongloop/strong-log-transformer/issues\"},\"homepage\":\"https://github.com/strongloop/strong-log-transformer\",\"directories\":{\"test\":\"test\"},\"bin\":{\"sl-log-transformer\":\"bin/sl-log-transformer.js\"},\"main\":\"index.js\",\"scripts\":{\"test\":\"tap --100 test/test-*\"},\"dependencies\":{\"duplexer\":\"^0.1.1\",\"minimist\":\"^1.2.0\",\"through\":\"^2.3.4\"},\"devDependencies\":{\"tap\":\"^12.0.1\"},\"engines\":{\"node\":\">=4\"}}"); + const onDone = item.onDone; + item.onDone = function () { + events.onProgress(item.dest); + if (onDone) { + onDone(); + } + }; + } + events.onStart(queue.length); -/***/ }), -/* 279 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { + // start building actions + const actions = { + file: [], + symlink: [], + link: [] + }; -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "workspacePackagePaths", function() { return workspacePackagePaths; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "copyWorkspacePackages", function() { return copyWorkspacePackages; }); -/* harmony import */ var glob__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(146); -/* harmony import */ var glob__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(glob__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(111); -/* harmony import */ var util__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(util__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(280); -/* harmony import */ var _fs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(130); -/* harmony import */ var _package_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(164); -/* harmony import */ var _projects__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(145); -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ + // custom concurrency logic as we're always executing stacks of CONCURRENT_QUEUE_ITEMS queue items + // at a time due to the requirement to push items onto the queue + while (queue.length) { + const items = queue.splice(0, CONCURRENT_QUEUE_ITEMS); + yield Promise.all(items.map(build)); + } + // simulate the existence of some files to prevent considering them extraneous + for (var _iterator2 = artifactFiles, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) { + var _ref3; + if (_isArray2) { + if (_i2 >= _iterator2.length) break; + _ref3 = _iterator2[_i2++]; + } else { + _i2 = _iterator2.next(); + if (_i2.done) break; + _ref3 = _i2.value; + } + const file = _ref3; + if (possibleExtraneous.has(file)) { + reporter.verbose(reporter.lang('verboseFilePhantomExtraneous', file)); + possibleExtraneous.delete(file); + } + } + for (var _iterator3 = possibleExtraneous, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) { + var _ref4; + if (_isArray3) { + if (_i3 >= _iterator3.length) break; + _ref4 = _iterator3[_i3++]; + } else { + _i3 = _iterator3.next(); + if (_i3.done) break; + _ref4 = _i3.value; + } -const glob = Object(util__WEBPACK_IMPORTED_MODULE_2__["promisify"])(glob__WEBPACK_IMPORTED_MODULE_0___default.a); -async function workspacePackagePaths(rootPath) { - const rootPkgJson = await Object(_package_json__WEBPACK_IMPORTED_MODULE_5__["readPackageJson"])(rootPath); + const loc = _ref4; - if (!rootPkgJson.workspaces) { - return []; - } + if (files.has(loc.toLowerCase())) { + possibleExtraneous.delete(loc); + } + } - const workspacesPathsPatterns = rootPkgJson.workspaces.packages; - let workspaceProjectsPaths = []; + return actions; + }); - for (const pattern of workspacesPathsPatterns) { - workspaceProjectsPaths = workspaceProjectsPaths.concat(await packagesFromGlobPattern({ - pattern, - rootPath - })); - } // Filter out exclude glob patterns + return function buildActionsForCopy(_x, _x2, _x3, _x4) { + return _ref.apply(this, arguments); + }; +})(); +let buildActionsForHardlink = (() => { + var _ref9 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (queue, events, possibleExtraneous, reporter) { - for (const pattern of workspacesPathsPatterns) { - if (pattern.startsWith('!')) { - const pathToRemove = path__WEBPACK_IMPORTED_MODULE_1___default.a.join(rootPath, pattern.slice(1), 'package.json'); - workspaceProjectsPaths = workspaceProjectsPaths.filter(p => p !== pathToRemove); - } - } + // + let build = (() => { + var _ref13 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (data) { + const src = data.src, + dest = data.dest; - return workspaceProjectsPaths; -} -async function copyWorkspacePackages(rootPath) { - const projectPaths = Object(_config__WEBPACK_IMPORTED_MODULE_3__["getProjectPaths"])({ - rootPath - }); - const projects = await Object(_projects__WEBPACK_IMPORTED_MODULE_6__["getProjects"])(rootPath, projectPaths); + const onFresh = data.onFresh || noop; + const onDone = data.onDone || noop; + if (files.has(dest.toLowerCase())) { + // Fixes issue https://github.com/yarnpkg/yarn/issues/2734 + // When bulk hardlinking we have A -> B structure that we want to hardlink to A1 -> B1, + // package-linker passes that modules A1 and B1 need to be hardlinked, + // the recursive linking algorithm of A1 ends up scheduling files in B1 to be linked twice which will case + // an exception. + onDone(); + return; + } + files.add(dest.toLowerCase()); - for (const project of projects.values()) { - const dest = path__WEBPACK_IMPORTED_MODULE_1___default.a.resolve(rootPath, 'node_modules', project.name); + if (events.ignoreBasenames.indexOf((_path || _load_path()).default.basename(src)) >= 0) { + // ignored file + return; + } - if ((await Object(_fs__WEBPACK_IMPORTED_MODULE_4__["isSymlink"])(dest)) === false) { - continue; - } // Remove the symlink + const srcStat = yield lstat(src); + let srcFiles; + if (srcStat.isDirectory()) { + srcFiles = yield readdir(src); + } - await Object(_fs__WEBPACK_IMPORTED_MODULE_4__["unlink"])(dest); // Copy in the package + const destExists = yield exists(dest); + if (destExists) { + const destStat = yield lstat(dest); - await Object(_fs__WEBPACK_IMPORTED_MODULE_4__["copyDirectory"])(project.path, dest); - } -} + const bothSymlinks = srcStat.isSymbolicLink() && destStat.isSymbolicLink(); + const bothFolders = srcStat.isDirectory() && destStat.isDirectory(); + const bothFiles = srcStat.isFile() && destStat.isFile(); -function packagesFromGlobPattern({ - pattern, - rootPath -}) { - const globOptions = { - cwd: rootPath, - // Should throw in case of unusual errors when reading the file system - strict: true, - // Always returns absolute paths for matched files - absolute: true, - // Do not match ** against multiple filenames - // (This is only specified because we currently don't have a need for it.) - noglobstar: true - }; - return glob(path__WEBPACK_IMPORTED_MODULE_1___default.a.join(pattern, 'package.json'), globOptions); -} + if (srcStat.mode !== destStat.mode) { + try { + yield access(dest, srcStat.mode); + } catch (err) { + // EINVAL access errors sometimes happen which shouldn't because node shouldn't be giving + // us modes that aren't valid. investigate this, it's generally safe to proceed. + reporter.verbose(err); + } + } -/***/ }), -/* 280 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { + if (bothFiles && artifactFiles.has(dest)) { + // this file gets changed during build, likely by a custom install script. Don't bother checking it. + onDone(); + reporter.verbose(reporter.lang('verboseFileSkipArtifact', src)); + return; + } -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getProjectPaths", function() { return getProjectPaths; }); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); -/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_0__); -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ + // correct hardlink + if (bothFiles && srcStat.ino !== null && srcStat.ino === destStat.ino) { + onDone(); + reporter.verbose(reporter.lang('verboseFileSkip', src, dest, srcStat.ino)); + return; + } + if (bothSymlinks) { + const srcReallink = yield readlink(src); + if (srcReallink === (yield readlink(dest))) { + // if both symlinks are the same then we can continue on + onDone(); + reporter.verbose(reporter.lang('verboseFileSkipSymlink', src, dest, srcReallink)); + return; + } + } -/** - * Returns all the paths where plugins are located - */ -function getProjectPaths({ - rootPath, - ossOnly, - skipKibanaPlugins -}) { - const projectPaths = [rootPath, Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'packages/*')]; // This is needed in order to install the dependencies for the declared - // plugin functional used in the selenium functional tests. - // As we are now using the webpack dll for the client vendors dependencies - // when we run the plugin functional tests against the distributable - // dependencies used by such plugins like @eui, react and react-dom can't - // be loaded from the dll as the context is different from the one declared - // into the webpack dll reference plugin. - // In anyway, have a plugin declaring their own dependencies is the - // correct and the expect behavior. + if (bothFolders) { + // mark files that aren't in this folder as possibly extraneous + const destFiles = yield readdir(dest); + invariant(srcFiles, 'src files not initialised'); - projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'test/plugin_functional/plugins/*')); - projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'test/interpreter_functional/plugins/*')); - projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'examples/*')); + for (var _iterator10 = destFiles, _isArray10 = Array.isArray(_iterator10), _i10 = 0, _iterator10 = _isArray10 ? _iterator10 : _iterator10[Symbol.iterator]();;) { + var _ref14; - if (!ossOnly) { - projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'x-pack')); - projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'x-pack/plugins/*')); - projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'x-pack/legacy/plugins/*')); - projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'x-pack/test/functional_with_es_ssl/fixtures/plugins/*')); - } + if (_isArray10) { + if (_i10 >= _iterator10.length) break; + _ref14 = _iterator10[_i10++]; + } else { + _i10 = _iterator10.next(); + if (_i10.done) break; + _ref14 = _i10.value; + } - if (!skipKibanaPlugins) { - projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, '../kibana-extra/*')); - projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, '../kibana-extra/*/packages/*')); - projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, '../kibana-extra/*/plugins/*')); - projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'plugins/*')); - projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'plugins/*/packages/*')); - projectPaths.push(Object(path__WEBPACK_IMPORTED_MODULE_0__["resolve"])(rootPath, 'plugins/*/plugins/*')); - } + const file = _ref14; - return projectPaths; -} + if (srcFiles.indexOf(file) < 0) { + const loc = (_path || _load_path()).default.join(dest, file); + possibleExtraneous.add(loc); -/***/ }), -/* 281 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { + if ((yield lstat(loc)).isDirectory()) { + for (var _iterator11 = yield readdir(loc), _isArray11 = Array.isArray(_iterator11), _i11 = 0, _iterator11 = _isArray11 ? _iterator11 : _iterator11[Symbol.iterator]();;) { + var _ref15; -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getAllChecksums", function() { return getAllChecksums; }); -/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(133); -/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(282); -/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(crypto__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(111); -/* harmony import */ var util__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(util__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(236); -/* harmony import */ var execa__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(execa__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _yarn_lock__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(283); -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ + if (_isArray11) { + if (_i11 >= _iterator11.length) break; + _ref15 = _iterator11[_i11++]; + } else { + _i11 = _iterator11.next(); + if (_i11.done) break; + _ref15 = _i11.value; + } + const file = _ref15; + possibleExtraneous.add((_path || _load_path()).default.join(loc, file)); + } + } + } + } + } + } + if (srcStat.isSymbolicLink()) { + onFresh(); + const linkname = yield readlink(src); + actions.symlink.push({ + dest, + linkname + }); + onDone(); + } else if (srcStat.isDirectory()) { + reporter.verbose(reporter.lang('verboseFileFolder', dest)); + yield mkdirp(dest); + const destParts = dest.split((_path || _load_path()).default.sep); + while (destParts.length) { + files.add(destParts.join((_path || _load_path()).default.sep).toLowerCase()); + destParts.pop(); + } -const statAsync = Object(util__WEBPACK_IMPORTED_MODULE_2__["promisify"])(fs__WEBPACK_IMPORTED_MODULE_0___default.a.stat); + // push all files to queue + invariant(srcFiles, 'src files not initialised'); + let remaining = srcFiles.length; + if (!remaining) { + onDone(); + } + for (var _iterator12 = srcFiles, _isArray12 = Array.isArray(_iterator12), _i12 = 0, _iterator12 = _isArray12 ? _iterator12 : _iterator12[Symbol.iterator]();;) { + var _ref16; -const projectBySpecificitySorter = (a, b) => b.path.length - a.path.length; -/** Get the changed files for a set of projects */ + if (_isArray12) { + if (_i12 >= _iterator12.length) break; + _ref16 = _iterator12[_i12++]; + } else { + _i12 = _iterator12.next(); + if (_i12.done) break; + _ref16 = _i12.value; + } + const file = _ref16; -async function getChangesForProjects(projects, kbn, log) { - log.verbose('getting changed files'); - const { - stdout - } = await execa__WEBPACK_IMPORTED_MODULE_3___default()('git', ['ls-files', '-dmto', '--exclude-standard', '--', ...Array.from(projects.values()).filter(p => kbn.isPartOfRepo(p)).map(p => p.path)], { - cwd: kbn.getAbsolute() - }); - const output = stdout.trim(); - const unassignedChanges = new Map(); + queue.push({ + onFresh, + src: (_path || _load_path()).default.join(src, file), + dest: (_path || _load_path()).default.join(dest, file), + onDone: function (_onDone2) { + function onDone() { + return _onDone2.apply(this, arguments); + } - if (output) { - for (const line of output.split('\n')) { - const [tag, ...pathParts] = line.trim().split(' '); - const path = pathParts.join(' '); + onDone.toString = function () { + return _onDone2.toString(); + }; - switch (tag) { - case 'M': - case 'C': - // for some reason ls-files returns deleted files as both deleted - // and modified, so make sure not to overwrite changes already - // tracked as "deleted" - if (unassignedChanges.get(path) !== 'deleted') { - unassignedChanges.set(path, 'modified'); + return onDone; + }(function () { + if (--remaining === 0) { + onDone(); + } + }) + }); } + } else if (srcStat.isFile()) { + onFresh(); + actions.link.push({ + src, + dest, + removeDest: destExists + }); + onDone(); + } else { + throw new Error(`unsure how to copy this: ${src}`); + } + }); - break; + return function build(_x10) { + return _ref13.apply(this, arguments); + }; + })(); - case 'R': - unassignedChanges.set(path, 'deleted'); - break; + const artifactFiles = new Set(events.artifactFiles || []); + const files = new Set(); - case '?': - unassignedChanges.set(path, 'untracked'); - break; + // initialise events + for (var _iterator7 = queue, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) { + var _ref10; - case 'H': - case 'S': - case 'K': - default: - log.warning(`unexpected modification status "${tag}" for ${path}, please report this!`); - unassignedChanges.set(path, 'invalid'); - break; + if (_isArray7) { + if (_i7 >= _iterator7.length) break; + _ref10 = _iterator7[_i7++]; + } else { + _i7 = _iterator7.next(); + if (_i7.done) break; + _ref10 = _i7.value; } - } - } - const sortedRelevantProjects = Array.from(projects.values()).sort(projectBySpecificitySorter); - const changesByProject = new Map(); + const item = _ref10; - for (const project of sortedRelevantProjects) { - if (kbn.isOutsideRepo(project)) { - changesByProject.set(project, undefined); - continue; + const onDone = item.onDone || noop; + item.onDone = function () { + events.onProgress(item.dest); + onDone(); + }; } + events.onStart(queue.length); - const ownChanges = new Map(); - const prefix = kbn.getRelative(project.path); + // start building actions + const actions = { + file: [], + symlink: [], + link: [] + }; - for (const [path, type] of unassignedChanges) { - if (path.startsWith(prefix)) { - ownChanges.set(path, type); - unassignedChanges.delete(path); - } + // custom concurrency logic as we're always executing stacks of CONCURRENT_QUEUE_ITEMS queue items + // at a time due to the requirement to push items onto the queue + while (queue.length) { + const items = queue.splice(0, CONCURRENT_QUEUE_ITEMS); + yield Promise.all(items.map(build)); } - log.verbose(`[${project.name}] found ${ownChanges.size} changes`); - changesByProject.set(project, ownChanges); - } + // simulate the existence of some files to prevent considering them extraneous + for (var _iterator8 = artifactFiles, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) { + var _ref11; - if (unassignedChanges.size) { - throw new Error(`unable to assign all change paths to a project: ${JSON.stringify(Array.from(unassignedChanges.entries()))}`); - } + if (_isArray8) { + if (_i8 >= _iterator8.length) break; + _ref11 = _iterator8[_i8++]; + } else { + _i8 = _iterator8.next(); + if (_i8.done) break; + _ref11 = _i8.value; + } - return changesByProject; -} -/** Get the latest commit sha for a project */ + const file = _ref11; + if (possibleExtraneous.has(file)) { + reporter.verbose(reporter.lang('verboseFilePhantomExtraneous', file)); + possibleExtraneous.delete(file); + } + } -async function getLatestSha(project, kbn) { - if (kbn.isOutsideRepo(project)) { - return; - } + for (var _iterator9 = possibleExtraneous, _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _iterator9[Symbol.iterator]();;) { + var _ref12; - const { - stdout - } = await execa__WEBPACK_IMPORTED_MODULE_3___default()('git', ['log', '-n', '1', '--pretty=format:%H', '--', project.path], { - cwd: kbn.getAbsolute() - }); - return stdout.trim() || undefined; -} -/** - * Get the checksum for a specific project in the workspace - */ + if (_isArray9) { + if (_i9 >= _iterator9.length) break; + _ref12 = _iterator9[_i9++]; + } else { + _i9 = _iterator9.next(); + if (_i9.done) break; + _ref12 = _i9.value; + } + const loc = _ref12; -async function getChecksum(project, changes, yarnLock, kbn, log) { - const sha = await getLatestSha(project, kbn); + if (files.has(loc.toLowerCase())) { + possibleExtraneous.delete(loc); + } + } - if (sha) { - log.verbose(`[${project.name}] local sha:`, sha); - } + return actions; + }); - if (!changes || Array.from(changes.values()).includes('invalid')) { - log.warning(`[${project.name}] unable to determine local changes, caching disabled`); - return; - } + return function buildActionsForHardlink(_x6, _x7, _x8, _x9) { + return _ref9.apply(this, arguments); + }; +})(); - const changesSummary = await Promise.all(Array.from(changes).sort((a, b) => a[0].localeCompare(b[0])).map(async ([path, type]) => { - if (type === 'deleted') { - return `${path}:deleted`; - } +let copyBulk = exports.copyBulk = (() => { + var _ref17 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (queue, reporter, _events) { + const events = { + onStart: _events && _events.onStart || noop, + onProgress: _events && _events.onProgress || noop, + possibleExtraneous: _events ? _events.possibleExtraneous : new Set(), + ignoreBasenames: _events && _events.ignoreBasenames || [], + artifactFiles: _events && _events.artifactFiles || [] + }; - const stats = await statAsync(kbn.getAbsolute(path)); - log.verbose(`[${project.name}] modified time ${stats.mtimeMs} for ${path}`); - return `${path}:${stats.mtimeMs}`; - })); - const depMap = Object(_yarn_lock__WEBPACK_IMPORTED_MODULE_4__["resolveDepsForProject"])({ - project, - yarnLock, - kbn, - log, - includeDependentProject: false, - productionDepsOnly: false - }); + const actions = yield buildActionsForCopy(queue, events, events.possibleExtraneous, reporter); + events.onStart(actions.file.length + actions.symlink.length + actions.link.length); - if (!depMap) { - return; - } + const fileActions = actions.file; - const deps = Array.from(depMap.values()).map(({ - name, - version - }) => `${name}@${version}`).sort((a, b) => a.localeCompare(b)); - log.verbose(`[${project.name}] resolved %d deps`, deps.length); - const checksum = JSON.stringify({ - sha, - changes: changesSummary, - deps - }, null, 2); + const currentlyWriting = new Map(); - if (process.env.BOOTSTRAP_CACHE_DEBUG_CHECKSUM) { - return checksum; - } + yield (_promise || _load_promise()).queue(fileActions, (() => { + var _ref18 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (data) { + let writePromise; + while (writePromise = currentlyWriting.get(data.dest)) { + yield writePromise; + } - const hash = crypto__WEBPACK_IMPORTED_MODULE_1___default.a.createHash('sha1'); - hash.update(checksum); - return hash.digest('hex'); -} -/** - * Calculate checksums for all projects in the workspace based on - * - last git commit to project directory - * - un-committed changes - * - resolved dependencies from yarn.lock referenced by project package.json - */ + reporter.verbose(reporter.lang('verboseFileCopy', data.src, data.dest)); + const copier = (0, (_fsNormalized || _load_fsNormalized()).copyFile)(data, function () { + return currentlyWriting.delete(data.dest); + }); + currentlyWriting.set(data.dest, copier); + events.onProgress(data.dest); + return copier; + }); + return function (_x14) { + return _ref18.apply(this, arguments); + }; + })(), CONCURRENT_QUEUE_ITEMS); -async function getAllChecksums(kbn, log, yarnLock) { - const projects = kbn.getAllProjects(); - const changesByProject = await getChangesForProjects(projects, kbn, log); - /** map of [project.name, cacheKey] */ + // we need to copy symlinks last as they could reference files we were copying + const symlinkActions = actions.symlink; + yield (_promise || _load_promise()).queue(symlinkActions, function (data) { + const linkname = (_path || _load_path()).default.resolve((_path || _load_path()).default.dirname(data.dest), data.linkname); + reporter.verbose(reporter.lang('verboseFileSymlink', data.dest, linkname)); + return symlink(linkname, data.dest); + }); + }); - const cacheKeys = new Map(); - await Promise.all(Array.from(projects.values()).map(async project => { - cacheKeys.set(project.name, await getChecksum(project, changesByProject.get(project), yarnLock, kbn, log)); - })); - return cacheKeys; -} + return function copyBulk(_x11, _x12, _x13) { + return _ref17.apply(this, arguments); + }; +})(); -/***/ }), -/* 282 */ -/***/ (function(module, exports) { +let hardlinkBulk = exports.hardlinkBulk = (() => { + var _ref19 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (queue, reporter, _events) { + const events = { + onStart: _events && _events.onStart || noop, + onProgress: _events && _events.onProgress || noop, + possibleExtraneous: _events ? _events.possibleExtraneous : new Set(), + artifactFiles: _events && _events.artifactFiles || [], + ignoreBasenames: [] + }; -module.exports = require("crypto"); + const actions = yield buildActionsForHardlink(queue, events, events.possibleExtraneous, reporter); + events.onStart(actions.file.length + actions.symlink.length + actions.link.length); -/***/ }), -/* 283 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { + const fileActions = actions.link; -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "readYarnLock", function() { return readYarnLock; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resolveDepsForProject", function() { return resolveDepsForProject; }); -/* harmony import */ var _yarnpkg_lockfile__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(284); -/* harmony import */ var _yarnpkg_lockfile__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_yarnpkg_lockfile__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _utils_fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(130); -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -// @ts-expect-error published types are worthless + yield (_promise || _load_promise()).queue(fileActions, (() => { + var _ref20 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (data) { + reporter.verbose(reporter.lang('verboseFileLink', data.src, data.dest)); + if (data.removeDest) { + yield (0, (_fsNormalized || _load_fsNormalized()).unlink)(data.dest); + } + yield link(data.src, data.dest); + }); + + return function (_x18) { + return _ref20.apply(this, arguments); + }; + })(), CONCURRENT_QUEUE_ITEMS); + // we need to copy symlinks last as they could reference files we were copying + const symlinkActions = actions.symlink; + yield (_promise || _load_promise()).queue(symlinkActions, function (data) { + const linkname = (_path || _load_path()).default.resolve((_path || _load_path()).default.dirname(data.dest), data.linkname); + reporter.verbose(reporter.lang('verboseFileSymlink', data.dest, linkname)); + return symlink(linkname, data.dest); + }); + }); -async function readYarnLock(kbn) { - try { - const contents = await Object(_utils_fs__WEBPACK_IMPORTED_MODULE_1__["readFile"])(kbn.getAbsolute('yarn.lock'), 'utf8'); - const yarnLock = Object(_yarnpkg_lockfile__WEBPACK_IMPORTED_MODULE_0__["parse"])(contents); + return function hardlinkBulk(_x15, _x16, _x17) { + return _ref19.apply(this, arguments); + }; +})(); - if (yarnLock.type === 'success') { - return yarnLock.object; - } +let readFileAny = exports.readFileAny = (() => { + var _ref21 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (files) { + for (var _iterator13 = files, _isArray13 = Array.isArray(_iterator13), _i13 = 0, _iterator13 = _isArray13 ? _iterator13 : _iterator13[Symbol.iterator]();;) { + var _ref22; - throw new Error('unable to read yarn.lock file, please run `yarn kbn bootstrap`'); - } catch (error) { - if (error.code !== 'ENOENT') { - throw error; + if (_isArray13) { + if (_i13 >= _iterator13.length) break; + _ref22 = _iterator13[_i13++]; + } else { + _i13 = _iterator13.next(); + if (_i13.done) break; + _ref22 = _i13.value; + } + + const file = _ref22; + + if (yield exists(file)) { + return readFile(file); + } } - } + return null; + }); - return {}; -} -/** - * Get a list of the absolute dependencies of this project, as resolved - * in the yarn.lock file, does not include other projects in the workspace - * or their dependencies - */ + return function readFileAny(_x19) { + return _ref21.apply(this, arguments); + }; +})(); -function resolveDepsForProject({ - project: rootProject, - yarnLock, - kbn, - log, - productionDepsOnly, - includeDependentProject -}) { - /** map of [name@range, { name, version }] */ - const resolved = new Map(); - const seenProjects = new Set(); - const projectQueue = [rootProject]; - const depQueue = []; +let readJson = exports.readJson = (() => { + var _ref23 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (loc) { + return (yield readJsonAndFile(loc)).object; + }); - while (projectQueue.length) { - const project = projectQueue.shift(); + return function readJson(_x20) { + return _ref23.apply(this, arguments); + }; +})(); - if (seenProjects.has(project)) { - continue; +let readJsonAndFile = exports.readJsonAndFile = (() => { + var _ref24 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (loc) { + const file = yield readFile(loc); + try { + return { + object: (0, (_map || _load_map()).default)(JSON.parse(stripBOM(file))), + content: file + }; + } catch (err) { + err.message = `${loc}: ${err.message}`; + throw err; } + }); - seenProjects.add(project); - const projectDeps = Object.entries(productionDepsOnly ? project.productionDependencies : project.allDependencies); + return function readJsonAndFile(_x21) { + return _ref24.apply(this, arguments); + }; +})(); - for (const [name, versionRange] of projectDeps) { - depQueue.push([name, versionRange]); - } +let find = exports.find = (() => { + var _ref25 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (filename, dir) { + const parts = dir.split((_path || _load_path()).default.sep); - while (depQueue.length) { - const [name, versionRange] = depQueue.shift(); - const req = `${name}@${versionRange}`; + while (parts.length) { + const loc = parts.concat(filename).join((_path || _load_path()).default.sep); - if (resolved.has(req)) { - continue; + if (yield exists(loc)) { + return loc; + } else { + parts.pop(); } + } - if (includeDependentProject && kbn.hasProject(name)) { - projectQueue.push(kbn.getProject(name)); - } + return false; + }); - if (!kbn.hasProject(name)) { - const pkg = yarnLock[req]; + return function find(_x22, _x23) { + return _ref25.apply(this, arguments); + }; +})(); - if (!pkg) { - log.warning('yarn.lock file is out of date, please run `yarn kbn bootstrap` to re-enable caching'); +let symlink = exports.symlink = (() => { + var _ref26 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (src, dest) { + try { + const stats = yield lstat(dest); + if (stats.isSymbolicLink()) { + const resolved = yield realpath(dest); + if (resolved === src) { return; } + } + } catch (err) { + if (err.code !== 'ENOENT') { + throw err; + } + } + // We use rimraf for unlink which never throws an ENOENT on missing target + yield (0, (_fsNormalized || _load_fsNormalized()).unlink)(dest); - resolved.set(req, { - name, - version: pkg.version - }); - const allDepsEntries = [...Object.entries(pkg.dependencies || {}), ...Object.entries(pkg.optionalDependencies || {})]; - - for (const [childName, childVersionRange] of allDepsEntries) { - depQueue.push([childName, childVersionRange]); + if (process.platform === 'win32') { + // use directory junctions if possible on win32, this requires absolute paths + yield fsSymlink(src, dest, 'junction'); + } else { + // use relative paths otherwise which will be retained if the directory is moved + let relative; + try { + relative = (_path || _load_path()).default.relative((_fs || _load_fs()).default.realpathSync((_path || _load_path()).default.dirname(dest)), (_fs || _load_fs()).default.realpathSync(src)); + } catch (err) { + if (err.code !== 'ENOENT') { + throw err; } + relative = (_path || _load_path()).default.relative((_path || _load_path()).default.dirname(dest), src); } + // When path.relative returns an empty string for the current directory, we should instead use + // '.', which is a valid fs.symlink target. + yield fsSymlink(relative || '.', dest); } - } - - return resolved; -} - -/***/ }), -/* 284 */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // identity function for calling harmony imports with the correct context -/******/ __webpack_require__.i = function(value) { return value; }; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 14); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports) { - -module.exports = __webpack_require__(4); + }); -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { + return function symlink(_x24, _x25) { + return _ref26.apply(this, arguments); + }; +})(); -"use strict"; +let walk = exports.walk = (() => { + var _ref27 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (dir, relativeDir, ignoreBasenames = new Set()) { + let files = []; + let filenames = yield readdir(dir); + if (ignoreBasenames.size) { + filenames = filenames.filter(function (name) { + return !ignoreBasenames.has(name); + }); + } -exports.__esModule = true; + for (var _iterator14 = filenames, _isArray14 = Array.isArray(_iterator14), _i14 = 0, _iterator14 = _isArray14 ? _iterator14 : _iterator14[Symbol.iterator]();;) { + var _ref28; -var _promise = __webpack_require__(173); + if (_isArray14) { + if (_i14 >= _iterator14.length) break; + _ref28 = _iterator14[_i14++]; + } else { + _i14 = _iterator14.next(); + if (_i14.done) break; + _ref28 = _i14.value; + } -var _promise2 = _interopRequireDefault(_promise); + const name = _ref28; -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + const relative = relativeDir ? (_path || _load_path()).default.join(relativeDir, name) : name; + const loc = (_path || _load_path()).default.join(dir, name); + const stat = yield lstat(loc); -exports.default = function (fn) { - return function () { - var gen = fn.apply(this, arguments); - return new _promise2.default(function (resolve, reject) { - function step(key, arg) { - try { - var info = gen[key](arg); - var value = info.value; - } catch (error) { - reject(error); - return; - } + files.push({ + relative, + basename: name, + absolute: loc, + mtime: +stat.mtime + }); - if (info.done) { - resolve(value); - } else { - return _promise2.default.resolve(value).then(function (value) { - step("next", value); - }, function (err) { - step("throw", err); - }); - } + if (stat.isDirectory()) { + files = files.concat((yield walk(loc, relative, ignoreBasenames))); } + } - return step("next"); - }); + return files; + }); + + return function walk(_x26, _x27) { + return _ref27.apply(this, arguments); }; -}; +})(); -/***/ }), -/* 2 */ -/***/ (function(module, exports) { +let getFileSizeOnDisk = exports.getFileSizeOnDisk = (() => { + var _ref29 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (loc) { + const stat = yield lstat(loc); + const size = stat.size, + blockSize = stat.blksize; -module.exports = __webpack_require__(111); -/***/ }), -/* 3 */ -/***/ (function(module, exports) { + return Math.ceil(size / blockSize) * blockSize; + }); -module.exports = __webpack_require__(133); + return function getFileSizeOnDisk(_x28) { + return _ref29.apply(this, arguments); + }; +})(); -/***/ }), -/* 4 */ -/***/ (function(module, exports, __webpack_require__) { +let getEolFromFile = (() => { + var _ref30 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (path) { + if (!(yield exists(path))) { + return undefined; + } -"use strict"; + const buffer = yield readFileBuffer(path); + for (let i = 0; i < buffer.length; ++i) { + if (buffer[i] === cr) { + return '\r\n'; + } + if (buffer[i] === lf) { + return '\n'; + } + } + return undefined; + }); -Object.defineProperty(exports, "__esModule", { - value: true -}); -class MessageError extends Error { - constructor(msg, code) { - super(msg); - this.code = code; - } + return function getEolFromFile(_x29) { + return _ref30.apply(this, arguments); + }; +})(); -} +let writeFilePreservingEol = exports.writeFilePreservingEol = (() => { + var _ref31 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (path, data) { + const eol = (yield getEolFromFile(path)) || (_os || _load_os()).default.EOL; + if (eol !== '\n') { + data = data.replace(/\n/g, eol); + } + yield writeFile(path, data); + }); -exports.MessageError = MessageError; -class ProcessSpawnError extends MessageError { - constructor(msg, code, process) { - super(msg, code); - this.process = process; - } + return function writeFilePreservingEol(_x30, _x31) { + return _ref31.apply(this, arguments); + }; +})(); -} +let hardlinksWork = exports.hardlinksWork = (() => { + var _ref32 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (dir) { + const filename = 'test-file' + Math.random(); + const file = (_path || _load_path()).default.join(dir, filename); + const fileLink = (_path || _load_path()).default.join(dir, filename + '-link'); + try { + yield writeFile(file, 'test'); + yield link(file, fileLink); + } catch (err) { + return false; + } finally { + yield (0, (_fsNormalized || _load_fsNormalized()).unlink)(file); + yield (0, (_fsNormalized || _load_fsNormalized()).unlink)(fileLink); + } + return true; + }); -exports.ProcessSpawnError = ProcessSpawnError; -class SecurityError extends MessageError {} + return function hardlinksWork(_x32) { + return _ref32.apply(this, arguments); + }; +})(); -exports.SecurityError = SecurityError; -class ProcessTermError extends MessageError {} +// not a strict polyfill for Node's fs.mkdtemp -exports.ProcessTermError = ProcessTermError; -class ResponseError extends Error { - constructor(msg, responseCode) { - super(msg); - this.responseCode = responseCode; - } -} -exports.ResponseError = ResponseError; +let makeTempDir = exports.makeTempDir = (() => { + var _ref33 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (prefix) { + const dir = (_path || _load_path()).default.join((_os || _load_os()).default.tmpdir(), `yarn-${prefix || ''}-${Date.now()}-${Math.random()}`); + yield (0, (_fsNormalized || _load_fsNormalized()).unlink)(dir); + yield mkdirp(dir); + return dir; + }); -/***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { + return function makeTempDir(_x33) { + return _ref33.apply(this, arguments); + }; +})(); -"use strict"; +let readFirstAvailableStream = exports.readFirstAvailableStream = (() => { + var _ref34 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (paths) { + for (var _iterator15 = paths, _isArray15 = Array.isArray(_iterator15), _i15 = 0, _iterator15 = _isArray15 ? _iterator15 : _iterator15[Symbol.iterator]();;) { + var _ref35; + if (_isArray15) { + if (_i15 >= _iterator15.length) break; + _ref35 = _iterator15[_i15++]; + } else { + _i15 = _iterator15.next(); + if (_i15.done) break; + _ref35 = _i15.value; + } -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getFirstSuitableFolder = exports.readFirstAvailableStream = exports.makeTempDir = exports.hardlinksWork = exports.writeFilePreservingEol = exports.getFileSizeOnDisk = exports.walk = exports.symlink = exports.find = exports.readJsonAndFile = exports.readJson = exports.readFileAny = exports.hardlinkBulk = exports.copyBulk = exports.unlink = exports.glob = exports.link = exports.chmod = exports.lstat = exports.exists = exports.mkdirp = exports.stat = exports.access = exports.rename = exports.readdir = exports.realpath = exports.readlink = exports.writeFile = exports.open = exports.readFileBuffer = exports.lockQueue = exports.constants = undefined; + const path = _ref35; -var _asyncToGenerator2; + try { + const fd = yield open(path, 'r'); + return (_fs || _load_fs()).default.createReadStream(path, { fd }); + } catch (err) { + // Try the next one + } + } + return null; + }); -function _load_asyncToGenerator() { - return _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(1)); -} + return function readFirstAvailableStream(_x34) { + return _ref34.apply(this, arguments); + }; +})(); -let buildActionsForCopy = (() => { - var _ref = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (queue, events, possibleExtraneous, reporter) { +let getFirstSuitableFolder = exports.getFirstSuitableFolder = (() => { + var _ref36 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (paths, mode = constants.W_OK | constants.X_OK) { + const result = { + skipped: [], + folder: null + }; - // - let build = (() => { - var _ref5 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (data) { - const src = data.src, - dest = data.dest, - type = data.type; + for (var _iterator16 = paths, _isArray16 = Array.isArray(_iterator16), _i16 = 0, _iterator16 = _isArray16 ? _iterator16 : _iterator16[Symbol.iterator]();;) { + var _ref37; - const onFresh = data.onFresh || noop; - const onDone = data.onDone || noop; + if (_isArray16) { + if (_i16 >= _iterator16.length) break; + _ref37 = _iterator16[_i16++]; + } else { + _i16 = _iterator16.next(); + if (_i16.done) break; + _ref37 = _i16.value; + } - // TODO https://github.com/yarnpkg/yarn/issues/3751 - // related to bundled dependencies handling - if (files.has(dest.toLowerCase())) { - reporter.verbose(`The case-insensitive file ${dest} shouldn't be copied twice in one bulk copy`); - } else { - files.add(dest.toLowerCase()); - } + const folder = _ref37; - if (type === 'symlink') { - yield mkdirp((_path || _load_path()).default.dirname(dest)); - onFresh(); - actions.symlink.push({ - dest, - linkname: src - }); - onDone(); - return; - } + try { + yield mkdirp(folder); + yield access(folder, mode); - if (events.ignoreBasenames.indexOf((_path || _load_path()).default.basename(src)) >= 0) { - // ignored file - return; - } + result.folder = folder; - const srcStat = yield lstat(src); - let srcFiles; + return result; + } catch (error) { + result.skipped.push({ + error, + folder + }); + } + } + return result; + }); - if (srcStat.isDirectory()) { - srcFiles = yield readdir(src); - } + return function getFirstSuitableFolder(_x35) { + return _ref36.apply(this, arguments); + }; +})(); - let destStat; - try { - // try accessing the destination - destStat = yield lstat(dest); - } catch (e) { - // proceed if destination doesn't exist, otherwise error - if (e.code !== 'ENOENT') { - throw e; - } - } +exports.copy = copy; +exports.readFile = readFile; +exports.readFileRaw = readFileRaw; +exports.normalizeOS = normalizeOS; - // if destination exists - if (destStat) { - const bothSymlinks = srcStat.isSymbolicLink() && destStat.isSymbolicLink(); - const bothFolders = srcStat.isDirectory() && destStat.isDirectory(); - const bothFiles = srcStat.isFile() && destStat.isFile(); +var _fs; - // EINVAL access errors sometimes happen which shouldn't because node shouldn't be giving - // us modes that aren't valid. investigate this, it's generally safe to proceed. +function _load_fs() { + return _fs = _interopRequireDefault(__webpack_require__(3)); +} - /* if (srcStat.mode !== destStat.mode) { - try { - await access(dest, srcStat.mode); - } catch (err) {} - } */ +var _glob; - if (bothFiles && artifactFiles.has(dest)) { - // this file gets changed during build, likely by a custom install script. Don't bother checking it. - onDone(); - reporter.verbose(reporter.lang('verboseFileSkipArtifact', src)); - return; - } +function _load_glob() { + return _glob = _interopRequireDefault(__webpack_require__(75)); +} - if (bothFiles && srcStat.size === destStat.size && (0, (_fsNormalized || _load_fsNormalized()).fileDatesEqual)(srcStat.mtime, destStat.mtime)) { - // we can safely assume this is the same file - onDone(); - reporter.verbose(reporter.lang('verboseFileSkip', src, dest, srcStat.size, +srcStat.mtime)); - return; - } +var _os; - if (bothSymlinks) { - const srcReallink = yield readlink(src); - if (srcReallink === (yield readlink(dest))) { - // if both symlinks are the same then we can continue on - onDone(); - reporter.verbose(reporter.lang('verboseFileSkipSymlink', src, dest, srcReallink)); - return; - } - } +function _load_os() { + return _os = _interopRequireDefault(__webpack_require__(36)); +} - if (bothFolders) { - // mark files that aren't in this folder as possibly extraneous - const destFiles = yield readdir(dest); - invariant(srcFiles, 'src files not initialised'); +var _path; - for (var _iterator4 = destFiles, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) { - var _ref6; +function _load_path() { + return _path = _interopRequireDefault(__webpack_require__(0)); +} - if (_isArray4) { - if (_i4 >= _iterator4.length) break; - _ref6 = _iterator4[_i4++]; - } else { - _i4 = _iterator4.next(); - if (_i4.done) break; - _ref6 = _i4.value; - } +var _blockingQueue; - const file = _ref6; +function _load_blockingQueue() { + return _blockingQueue = _interopRequireDefault(__webpack_require__(84)); +} - if (srcFiles.indexOf(file) < 0) { - const loc = (_path || _load_path()).default.join(dest, file); - possibleExtraneous.add(loc); +var _promise; - if ((yield lstat(loc)).isDirectory()) { - for (var _iterator5 = yield readdir(loc), _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) { - var _ref7; +function _load_promise() { + return _promise = _interopRequireWildcard(__webpack_require__(40)); +} - if (_isArray5) { - if (_i5 >= _iterator5.length) break; - _ref7 = _iterator5[_i5++]; - } else { - _i5 = _iterator5.next(); - if (_i5.done) break; - _ref7 = _i5.value; - } +var _promise2; - const file = _ref7; +function _load_promise2() { + return _promise2 = __webpack_require__(40); +} - possibleExtraneous.add((_path || _load_path()).default.join(loc, file)); - } - } - } - } - } - } +var _map; - if (destStat && destStat.isSymbolicLink()) { - yield (0, (_fsNormalized || _load_fsNormalized()).unlink)(dest); - destStat = null; - } +function _load_map() { + return _map = _interopRequireDefault(__webpack_require__(20)); +} - if (srcStat.isSymbolicLink()) { - onFresh(); - const linkname = yield readlink(src); - actions.symlink.push({ - dest, - linkname - }); - onDone(); - } else if (srcStat.isDirectory()) { - if (!destStat) { - reporter.verbose(reporter.lang('verboseFileFolder', dest)); - yield mkdirp(dest); - } +var _fsNormalized; - const destParts = dest.split((_path || _load_path()).default.sep); - while (destParts.length) { - files.add(destParts.join((_path || _load_path()).default.sep).toLowerCase()); - destParts.pop(); - } +function _load_fsNormalized() { + return _fsNormalized = __webpack_require__(164); +} - // push all files to queue - invariant(srcFiles, 'src files not initialised'); - let remaining = srcFiles.length; - if (!remaining) { - onDone(); - } - for (var _iterator6 = srcFiles, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) { - var _ref8; +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - if (_isArray6) { - if (_i6 >= _iterator6.length) break; - _ref8 = _iterator6[_i6++]; - } else { - _i6 = _iterator6.next(); - if (_i6.done) break; - _ref8 = _i6.value; - } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - const file = _ref8; +const constants = exports.constants = typeof (_fs || _load_fs()).default.constants !== 'undefined' ? (_fs || _load_fs()).default.constants : { + R_OK: (_fs || _load_fs()).default.R_OK, + W_OK: (_fs || _load_fs()).default.W_OK, + X_OK: (_fs || _load_fs()).default.X_OK +}; - queue.push({ - dest: (_path || _load_path()).default.join(dest, file), - onFresh, - onDone: function (_onDone) { - function onDone() { - return _onDone.apply(this, arguments); - } +const lockQueue = exports.lockQueue = new (_blockingQueue || _load_blockingQueue()).default('fs lock'); - onDone.toString = function () { - return _onDone.toString(); - }; +const readFileBuffer = exports.readFileBuffer = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.readFile); +const open = exports.open = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.open); +const writeFile = exports.writeFile = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.writeFile); +const readlink = exports.readlink = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.readlink); +const realpath = exports.realpath = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.realpath); +const readdir = exports.readdir = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.readdir); +const rename = exports.rename = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.rename); +const access = exports.access = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.access); +const stat = exports.stat = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.stat); +const mkdirp = exports.mkdirp = (0, (_promise2 || _load_promise2()).promisify)(__webpack_require__(116)); +const exists = exports.exists = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.exists, true); +const lstat = exports.lstat = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.lstat); +const chmod = exports.chmod = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.chmod); +const link = exports.link = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.link); +const glob = exports.glob = (0, (_promise2 || _load_promise2()).promisify)((_glob || _load_glob()).default); +exports.unlink = (_fsNormalized || _load_fsNormalized()).unlink; - return onDone; - }(function () { - if (--remaining === 0) { - onDone(); - } - }), - src: (_path || _load_path()).default.join(src, file) - }); - } - } else if (srcStat.isFile()) { - onFresh(); - actions.file.push({ - src, - dest, - atime: srcStat.atime, - mtime: srcStat.mtime, - mode: srcStat.mode - }); - onDone(); - } else { - throw new Error(`unsure how to copy this: ${src}`); - } - }); +// fs.copyFile uses the native file copying instructions on the system, performing much better +// than any JS-based solution and consumes fewer resources. Repeated testing to fine tune the +// concurrency level revealed 128 as the sweet spot on a quad-core, 16 CPU Intel system with SSD. - return function build(_x5) { - return _ref5.apply(this, arguments); - }; - })(); +const CONCURRENT_QUEUE_ITEMS = (_fs || _load_fs()).default.copyFile ? 128 : 4; - const artifactFiles = new Set(events.artifactFiles || []); - const files = new Set(); +const fsSymlink = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.symlink); +const invariant = __webpack_require__(7); +const stripBOM = __webpack_require__(122); - // initialise events - for (var _iterator = queue, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { - var _ref2; +const noop = () => {}; - if (_isArray) { - if (_i >= _iterator.length) break; - _ref2 = _iterator[_i++]; +function copy(src, dest, reporter) { + return copyBulk([{ src, dest }], reporter); +} + +function _readFile(loc, encoding) { + return new Promise((resolve, reject) => { + (_fs || _load_fs()).default.readFile(loc, encoding, function (err, content) { + if (err) { + reject(err); } else { - _i = _iterator.next(); - if (_i.done) break; - _ref2 = _i.value; + resolve(content); } + }); + }); +} - const item = _ref2; +function readFile(loc) { + return _readFile(loc, 'utf8').then(normalizeOS); +} - const onDone = item.onDone; - item.onDone = function () { - events.onProgress(item.dest); - if (onDone) { - onDone(); - } - }; - } - events.onStart(queue.length); +function readFileRaw(loc) { + return _readFile(loc, 'binary'); +} - // start building actions - const actions = { - file: [], - symlink: [], - link: [] - }; +function normalizeOS(body) { + return body.replace(/\r\n/g, '\n'); +} - // custom concurrency logic as we're always executing stacks of CONCURRENT_QUEUE_ITEMS queue items - // at a time due to the requirement to push items onto the queue - while (queue.length) { - const items = queue.splice(0, CONCURRENT_QUEUE_ITEMS); - yield Promise.all(items.map(build)); - } +const cr = '\r'.charCodeAt(0); +const lf = '\n'.charCodeAt(0); - // simulate the existence of some files to prevent considering them extraneous - for (var _iterator2 = artifactFiles, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) { - var _ref3; +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref3 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref3 = _i2.value; - } +"use strict"; - const file = _ref3; - if (possibleExtraneous.has(file)) { - reporter.verbose(reporter.lang('verboseFilePhantomExtraneous', file)); - possibleExtraneous.delete(file); - } - } +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.getPathKey = getPathKey; +const os = __webpack_require__(36); +const path = __webpack_require__(0); +const userHome = __webpack_require__(45).default; - for (var _iterator3 = possibleExtraneous, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) { - var _ref4; +var _require = __webpack_require__(171); - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref4 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref4 = _i3.value; - } +const getCacheDir = _require.getCacheDir, + getConfigDir = _require.getConfigDir, + getDataDir = _require.getDataDir; - const loc = _ref4; +const isWebpackBundle = __webpack_require__(227); - if (files.has(loc.toLowerCase())) { - possibleExtraneous.delete(loc); - } - } +const DEPENDENCY_TYPES = exports.DEPENDENCY_TYPES = ['devDependencies', 'dependencies', 'optionalDependencies', 'peerDependencies']; +const RESOLUTIONS = exports.RESOLUTIONS = 'resolutions'; +const MANIFEST_FIELDS = exports.MANIFEST_FIELDS = [RESOLUTIONS, ...DEPENDENCY_TYPES]; - return actions; - }); +const SUPPORTED_NODE_VERSIONS = exports.SUPPORTED_NODE_VERSIONS = '^4.8.0 || ^5.7.0 || ^6.2.2 || >=8.0.0'; - return function buildActionsForCopy(_x, _x2, _x3, _x4) { - return _ref.apply(this, arguments); - }; -})(); +const YARN_REGISTRY = exports.YARN_REGISTRY = 'https://registry.yarnpkg.com'; -let buildActionsForHardlink = (() => { - var _ref9 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (queue, events, possibleExtraneous, reporter) { +const YARN_DOCS = exports.YARN_DOCS = 'https://yarnpkg.com/en/docs/cli/'; +const YARN_INSTALLER_SH = exports.YARN_INSTALLER_SH = 'https://yarnpkg.com/install.sh'; +const YARN_INSTALLER_MSI = exports.YARN_INSTALLER_MSI = 'https://yarnpkg.com/latest.msi'; - // - let build = (() => { - var _ref13 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (data) { - const src = data.src, - dest = data.dest; +const SELF_UPDATE_VERSION_URL = exports.SELF_UPDATE_VERSION_URL = 'https://yarnpkg.com/latest-version'; - const onFresh = data.onFresh || noop; - const onDone = data.onDone || noop; - if (files.has(dest.toLowerCase())) { - // Fixes issue https://github.com/yarnpkg/yarn/issues/2734 - // When bulk hardlinking we have A -> B structure that we want to hardlink to A1 -> B1, - // package-linker passes that modules A1 and B1 need to be hardlinked, - // the recursive linking algorithm of A1 ends up scheduling files in B1 to be linked twice which will case - // an exception. - onDone(); - return; - } - files.add(dest.toLowerCase()); +// cache version, bump whenever we make backwards incompatible changes +const CACHE_VERSION = exports.CACHE_VERSION = 2; - if (events.ignoreBasenames.indexOf((_path || _load_path()).default.basename(src)) >= 0) { - // ignored file - return; - } +// lockfile version, bump whenever we make backwards incompatible changes +const LOCKFILE_VERSION = exports.LOCKFILE_VERSION = 1; - const srcStat = yield lstat(src); - let srcFiles; +// max amount of network requests to perform concurrently +const NETWORK_CONCURRENCY = exports.NETWORK_CONCURRENCY = 8; - if (srcStat.isDirectory()) { - srcFiles = yield readdir(src); - } +// HTTP timeout used when downloading packages +const NETWORK_TIMEOUT = exports.NETWORK_TIMEOUT = 30 * 1000; // in milliseconds - const destExists = yield exists(dest); - if (destExists) { - const destStat = yield lstat(dest); +// max amount of child processes to execute concurrently +const CHILD_CONCURRENCY = exports.CHILD_CONCURRENCY = 5; - const bothSymlinks = srcStat.isSymbolicLink() && destStat.isSymbolicLink(); - const bothFolders = srcStat.isDirectory() && destStat.isDirectory(); - const bothFiles = srcStat.isFile() && destStat.isFile(); +const REQUIRED_PACKAGE_KEYS = exports.REQUIRED_PACKAGE_KEYS = ['name', 'version', '_uid']; - if (srcStat.mode !== destStat.mode) { - try { - yield access(dest, srcStat.mode); - } catch (err) { - // EINVAL access errors sometimes happen which shouldn't because node shouldn't be giving - // us modes that aren't valid. investigate this, it's generally safe to proceed. - reporter.verbose(err); - } - } +function getPreferredCacheDirectories() { + const preferredCacheDirectories = [getCacheDir()]; - if (bothFiles && artifactFiles.has(dest)) { - // this file gets changed during build, likely by a custom install script. Don't bother checking it. - onDone(); - reporter.verbose(reporter.lang('verboseFileSkipArtifact', src)); - return; - } + if (process.getuid) { + // $FlowFixMe: process.getuid exists, dammit + preferredCacheDirectories.push(path.join(os.tmpdir(), `.yarn-cache-${process.getuid()}`)); + } - // correct hardlink - if (bothFiles && srcStat.ino !== null && srcStat.ino === destStat.ino) { - onDone(); - reporter.verbose(reporter.lang('verboseFileSkip', src, dest, srcStat.ino)); - return; - } + preferredCacheDirectories.push(path.join(os.tmpdir(), `.yarn-cache`)); - if (bothSymlinks) { - const srcReallink = yield readlink(src); - if (srcReallink === (yield readlink(dest))) { - // if both symlinks are the same then we can continue on - onDone(); - reporter.verbose(reporter.lang('verboseFileSkipSymlink', src, dest, srcReallink)); - return; - } - } + return preferredCacheDirectories; +} - if (bothFolders) { - // mark files that aren't in this folder as possibly extraneous - const destFiles = yield readdir(dest); - invariant(srcFiles, 'src files not initialised'); +const PREFERRED_MODULE_CACHE_DIRECTORIES = exports.PREFERRED_MODULE_CACHE_DIRECTORIES = getPreferredCacheDirectories(); +const CONFIG_DIRECTORY = exports.CONFIG_DIRECTORY = getConfigDir(); +const DATA_DIRECTORY = exports.DATA_DIRECTORY = getDataDir(); +const LINK_REGISTRY_DIRECTORY = exports.LINK_REGISTRY_DIRECTORY = path.join(DATA_DIRECTORY, 'link'); +const GLOBAL_MODULE_DIRECTORY = exports.GLOBAL_MODULE_DIRECTORY = path.join(DATA_DIRECTORY, 'global'); - for (var _iterator10 = destFiles, _isArray10 = Array.isArray(_iterator10), _i10 = 0, _iterator10 = _isArray10 ? _iterator10 : _iterator10[Symbol.iterator]();;) { - var _ref14; - - if (_isArray10) { - if (_i10 >= _iterator10.length) break; - _ref14 = _iterator10[_i10++]; - } else { - _i10 = _iterator10.next(); - if (_i10.done) break; - _ref14 = _i10.value; - } +const NODE_BIN_PATH = exports.NODE_BIN_PATH = process.execPath; +const YARN_BIN_PATH = exports.YARN_BIN_PATH = getYarnBinPath(); - const file = _ref14; +// Webpack needs to be configured with node.__dirname/__filename = false +function getYarnBinPath() { + if (isWebpackBundle) { + return __filename; + } else { + return path.join(__dirname, '..', 'bin', 'yarn.js'); + } +} - if (srcFiles.indexOf(file) < 0) { - const loc = (_path || _load_path()).default.join(dest, file); - possibleExtraneous.add(loc); +const NODE_MODULES_FOLDER = exports.NODE_MODULES_FOLDER = 'node_modules'; +const NODE_PACKAGE_JSON = exports.NODE_PACKAGE_JSON = 'package.json'; - if ((yield lstat(loc)).isDirectory()) { - for (var _iterator11 = yield readdir(loc), _isArray11 = Array.isArray(_iterator11), _i11 = 0, _iterator11 = _isArray11 ? _iterator11 : _iterator11[Symbol.iterator]();;) { - var _ref15; +const POSIX_GLOBAL_PREFIX = exports.POSIX_GLOBAL_PREFIX = `${process.env.DESTDIR || ''}/usr/local`; +const FALLBACK_GLOBAL_PREFIX = exports.FALLBACK_GLOBAL_PREFIX = path.join(userHome, '.yarn'); - if (_isArray11) { - if (_i11 >= _iterator11.length) break; - _ref15 = _iterator11[_i11++]; - } else { - _i11 = _iterator11.next(); - if (_i11.done) break; - _ref15 = _i11.value; - } +const META_FOLDER = exports.META_FOLDER = '.yarn-meta'; +const INTEGRITY_FILENAME = exports.INTEGRITY_FILENAME = '.yarn-integrity'; +const LOCKFILE_FILENAME = exports.LOCKFILE_FILENAME = 'yarn.lock'; +const METADATA_FILENAME = exports.METADATA_FILENAME = '.yarn-metadata.json'; +const TARBALL_FILENAME = exports.TARBALL_FILENAME = '.yarn-tarball.tgz'; +const CLEAN_FILENAME = exports.CLEAN_FILENAME = '.yarnclean'; - const file = _ref15; +const NPM_LOCK_FILENAME = exports.NPM_LOCK_FILENAME = 'package-lock.json'; +const NPM_SHRINKWRAP_FILENAME = exports.NPM_SHRINKWRAP_FILENAME = 'npm-shrinkwrap.json'; - possibleExtraneous.add((_path || _load_path()).default.join(loc, file)); - } - } - } - } - } - } +const DEFAULT_INDENT = exports.DEFAULT_INDENT = ' '; +const SINGLE_INSTANCE_PORT = exports.SINGLE_INSTANCE_PORT = 31997; +const SINGLE_INSTANCE_FILENAME = exports.SINGLE_INSTANCE_FILENAME = '.yarn-single-instance'; - if (srcStat.isSymbolicLink()) { - onFresh(); - const linkname = yield readlink(src); - actions.symlink.push({ - dest, - linkname - }); - onDone(); - } else if (srcStat.isDirectory()) { - reporter.verbose(reporter.lang('verboseFileFolder', dest)); - yield mkdirp(dest); +const ENV_PATH_KEY = exports.ENV_PATH_KEY = getPathKey(process.platform, process.env); - const destParts = dest.split((_path || _load_path()).default.sep); - while (destParts.length) { - files.add(destParts.join((_path || _load_path()).default.sep).toLowerCase()); - destParts.pop(); - } +function getPathKey(platform, env) { + let pathKey = 'PATH'; - // push all files to queue - invariant(srcFiles, 'src files not initialised'); - let remaining = srcFiles.length; - if (!remaining) { - onDone(); - } - for (var _iterator12 = srcFiles, _isArray12 = Array.isArray(_iterator12), _i12 = 0, _iterator12 = _isArray12 ? _iterator12 : _iterator12[Symbol.iterator]();;) { - var _ref16; + // windows calls its path "Path" usually, but this is not guaranteed. + if (platform === 'win32') { + pathKey = 'Path'; - if (_isArray12) { - if (_i12 >= _iterator12.length) break; - _ref16 = _iterator12[_i12++]; - } else { - _i12 = _iterator12.next(); - if (_i12.done) break; - _ref16 = _i12.value; - } + for (const key in env) { + if (key.toLowerCase() === 'path') { + pathKey = key; + } + } + } - const file = _ref16; + return pathKey; +} - queue.push({ - onFresh, - src: (_path || _load_path()).default.join(src, file), - dest: (_path || _load_path()).default.join(dest, file), - onDone: function (_onDone2) { - function onDone() { - return _onDone2.apply(this, arguments); - } +const VERSION_COLOR_SCHEME = exports.VERSION_COLOR_SCHEME = { + major: 'red', + premajor: 'red', + minor: 'yellow', + preminor: 'yellow', + patch: 'green', + prepatch: 'green', + prerelease: 'red', + unchanged: 'white', + unknown: 'red' +}; - onDone.toString = function () { - return _onDone2.toString(); - }; +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { - return onDone; - }(function () { - if (--remaining === 0) { - onDone(); - } - }) - }); - } - } else if (srcStat.isFile()) { - onFresh(); - actions.link.push({ - src, - dest, - removeDest: destExists - }); - onDone(); - } else { - throw new Error(`unsure how to copy this: ${src}`); - } - }); +"use strict"; +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ - return function build(_x10) { - return _ref13.apply(this, arguments); - }; - })(); - const artifactFiles = new Set(events.artifactFiles || []); - const files = new Set(); - // initialise events - for (var _iterator7 = queue, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) { - var _ref10; +/** + * Use invariant() to assert state which your program assumes to be true. + * + * Provide sprintf-style format (only %s is supported) and arguments + * to provide information about what broke and what you were + * expecting. + * + * The invariant message will be stripped in production, but the invariant + * will remain to ensure logic does not differ in production. + */ - if (_isArray7) { - if (_i7 >= _iterator7.length) break; - _ref10 = _iterator7[_i7++]; - } else { - _i7 = _iterator7.next(); - if (_i7.done) break; - _ref10 = _i7.value; - } +var NODE_ENV = "none"; - const item = _ref10; +var invariant = function(condition, format, a, b, c, d, e, f) { + if (NODE_ENV !== 'production') { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + } - const onDone = item.onDone || noop; - item.onDone = function () { - events.onProgress(item.dest); - onDone(); - }; + if (!condition) { + var error; + if (format === undefined) { + error = new Error( + 'Minified exception occurred; use the non-minified dev environment ' + + 'for the full error message and additional helpful warnings.' + ); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error( + format.replace(/%s/g, function() { return args[argIndex++]; }) + ); + error.name = 'Invariant Violation'; } - events.onStart(queue.length); - // start building actions - const actions = { - file: [], - symlink: [], - link: [] - }; + error.framesToPop = 1; // we don't care about invariant's own frame + throw error; + } +}; - // custom concurrency logic as we're always executing stacks of CONCURRENT_QUEUE_ITEMS queue items - // at a time due to the requirement to push items onto the queue - while (queue.length) { - const items = queue.splice(0, CONCURRENT_QUEUE_ITEMS); - yield Promise.all(items.map(build)); - } +module.exports = invariant; - // simulate the existence of some files to prevent considering them extraneous - for (var _iterator8 = artifactFiles, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) { - var _ref11; - if (_isArray8) { - if (_i8 >= _iterator8.length) break; - _ref11 = _iterator8[_i8++]; - } else { - _i8 = _iterator8.next(); - if (_i8.done) break; - _ref11 = _i8.value; - } +/***/ }), +/* 8 */, +/* 9 */ +/***/ (function(module, exports) { - const file = _ref11; +module.exports = __webpack_require__(278); - if (possibleExtraneous.has(file)) { - reporter.verbose(reporter.lang('verboseFilePhantomExtraneous', file)); - possibleExtraneous.delete(file); - } - } +/***/ }), +/* 10 */, +/* 11 */ +/***/ (function(module, exports) { - for (var _iterator9 = possibleExtraneous, _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _iterator9[Symbol.iterator]();;) { - var _ref12; +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self + // eslint-disable-next-line no-new-func + : Function('return this')(); +if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef - if (_isArray9) { - if (_i9 >= _iterator9.length) break; - _ref12 = _iterator9[_i9++]; - } else { - _i9 = _iterator9.next(); - if (_i9.done) break; - _ref12 = _i9.value; - } - const loc = _ref12; +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { - if (files.has(loc.toLowerCase())) { - possibleExtraneous.delete(loc); - } +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.sortAlpha = sortAlpha; +exports.entries = entries; +exports.removePrefix = removePrefix; +exports.removeSuffix = removeSuffix; +exports.addSuffix = addSuffix; +exports.hyphenate = hyphenate; +exports.camelCase = camelCase; +exports.compareSortedArrays = compareSortedArrays; +exports.sleep = sleep; +const _camelCase = __webpack_require__(176); + +function sortAlpha(a, b) { + // sort alphabetically in a deterministic way + const shortLen = Math.min(a.length, b.length); + for (let i = 0; i < shortLen; i++) { + const aChar = a.charCodeAt(i); + const bChar = b.charCodeAt(i); + if (aChar !== bChar) { + return aChar - bChar; } + } + return a.length - b.length; +} - return actions; - }); +function entries(obj) { + const entries = []; + if (obj) { + for (const key in obj) { + entries.push([key, obj[key]]); + } + } + return entries; +} - return function buildActionsForHardlink(_x6, _x7, _x8, _x9) { - return _ref9.apply(this, arguments); - }; -})(); +function removePrefix(pattern, prefix) { + if (pattern.startsWith(prefix)) { + pattern = pattern.slice(prefix.length); + } -let copyBulk = exports.copyBulk = (() => { - var _ref17 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (queue, reporter, _events) { - const events = { - onStart: _events && _events.onStart || noop, - onProgress: _events && _events.onProgress || noop, - possibleExtraneous: _events ? _events.possibleExtraneous : new Set(), - ignoreBasenames: _events && _events.ignoreBasenames || [], - artifactFiles: _events && _events.artifactFiles || [] - }; + return pattern; +} - const actions = yield buildActionsForCopy(queue, events, events.possibleExtraneous, reporter); - events.onStart(actions.file.length + actions.symlink.length + actions.link.length); +function removeSuffix(pattern, suffix) { + if (pattern.endsWith(suffix)) { + return pattern.slice(0, -suffix.length); + } - const fileActions = actions.file; + return pattern; +} - const currentlyWriting = new Map(); +function addSuffix(pattern, suffix) { + if (!pattern.endsWith(suffix)) { + return pattern + suffix; + } - yield (_promise || _load_promise()).queue(fileActions, (() => { - var _ref18 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (data) { - let writePromise; - while (writePromise = currentlyWriting.get(data.dest)) { - yield writePromise; - } + return pattern; +} - reporter.verbose(reporter.lang('verboseFileCopy', data.src, data.dest)); - const copier = (0, (_fsNormalized || _load_fsNormalized()).copyFile)(data, function () { - return currentlyWriting.delete(data.dest); - }); - currentlyWriting.set(data.dest, copier); - events.onProgress(data.dest); - return copier; - }); +function hyphenate(str) { + return str.replace(/[A-Z]/g, match => { + return '-' + match.charAt(0).toLowerCase(); + }); +} - return function (_x14) { - return _ref18.apply(this, arguments); - }; - })(), CONCURRENT_QUEUE_ITEMS); +function camelCase(str) { + if (/[A-Z]/.test(str)) { + return null; + } else { + return _camelCase(str); + } +} - // we need to copy symlinks last as they could reference files we were copying - const symlinkActions = actions.symlink; - yield (_promise || _load_promise()).queue(symlinkActions, function (data) { - const linkname = (_path || _load_path()).default.resolve((_path || _load_path()).default.dirname(data.dest), data.linkname); - reporter.verbose(reporter.lang('verboseFileSymlink', data.dest, linkname)); - return symlink(linkname, data.dest); - }); +function compareSortedArrays(array1, array2) { + if (array1.length !== array2.length) { + return false; + } + for (let i = 0, len = array1.length; i < len; i++) { + if (array1[i] !== array2[i]) { + return false; + } + } + return true; +} + +function sleep(ms) { + return new Promise(resolve => { + setTimeout(resolve, ms); }); +} - return function copyBulk(_x11, _x12, _x13) { - return _ref17.apply(this, arguments); - }; -})(); +/***/ }), +/* 13 */ +/***/ (function(module, exports, __webpack_require__) { -let hardlinkBulk = exports.hardlinkBulk = (() => { - var _ref19 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (queue, reporter, _events) { - const events = { - onStart: _events && _events.onStart || noop, - onProgress: _events && _events.onProgress || noop, - possibleExtraneous: _events ? _events.possibleExtraneous : new Set(), - artifactFiles: _events && _events.artifactFiles || [], - ignoreBasenames: [] - }; +var store = __webpack_require__(107)('wks'); +var uid = __webpack_require__(111); +var Symbol = __webpack_require__(11).Symbol; +var USE_SYMBOL = typeof Symbol == 'function'; - const actions = yield buildActionsForHardlink(queue, events, events.possibleExtraneous, reporter); - events.onStart(actions.file.length + actions.symlink.length + actions.link.length); +var $exports = module.exports = function (name) { + return store[name] || (store[name] = + USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); +}; - const fileActions = actions.link; +$exports.store = store; - yield (_promise || _load_promise()).queue(fileActions, (() => { - var _ref20 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (data) { - reporter.verbose(reporter.lang('verboseFileLink', data.src, data.dest)); - if (data.removeDest) { - yield (0, (_fsNormalized || _load_fsNormalized()).unlink)(data.dest); - } - yield link(data.src, data.dest); - }); - return function (_x18) { - return _ref20.apply(this, arguments); - }; - })(), CONCURRENT_QUEUE_ITEMS); +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { - // we need to copy symlinks last as they could reference files we were copying - const symlinkActions = actions.symlink; - yield (_promise || _load_promise()).queue(symlinkActions, function (data) { - const linkname = (_path || _load_path()).default.resolve((_path || _load_path()).default.dirname(data.dest), data.linkname); - reporter.verbose(reporter.lang('verboseFileSymlink', data.dest, linkname)); - return symlink(linkname, data.dest); - }); - }); +"use strict"; - return function hardlinkBulk(_x15, _x16, _x17) { - return _ref19.apply(this, arguments); - }; -})(); -let readFileAny = exports.readFileAny = (() => { - var _ref21 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (files) { - for (var _iterator13 = files, _isArray13 = Array.isArray(_iterator13), _i13 = 0, _iterator13 = _isArray13 ? _iterator13 : _iterator13[Symbol.iterator]();;) { - var _ref22; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.stringify = exports.parse = undefined; - if (_isArray13) { - if (_i13 >= _iterator13.length) break; - _ref22 = _iterator13[_i13++]; - } else { - _i13 = _iterator13.next(); - if (_i13.done) break; - _ref22 = _i13.value; - } +var _asyncToGenerator2; - const file = _ref22; +function _load_asyncToGenerator() { + return _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(1)); +} - if (yield exists(file)) { - return readFile(file); - } - } - return null; - }); +var _parse; - return function readFileAny(_x19) { - return _ref21.apply(this, arguments); - }; -})(); +function _load_parse() { + return _parse = __webpack_require__(81); +} -let readJson = exports.readJson = (() => { - var _ref23 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (loc) { - return (yield readJsonAndFile(loc)).object; - }); +Object.defineProperty(exports, 'parse', { + enumerable: true, + get: function get() { + return _interopRequireDefault(_parse || _load_parse()).default; + } +}); - return function readJson(_x20) { - return _ref23.apply(this, arguments); - }; -})(); +var _stringify; -let readJsonAndFile = exports.readJsonAndFile = (() => { - var _ref24 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (loc) { - const file = yield readFile(loc); - try { - return { - object: (0, (_map || _load_map()).default)(JSON.parse(stripBOM(file))), - content: file - }; - } catch (err) { - err.message = `${loc}: ${err.message}`; - throw err; - } - }); +function _load_stringify() { + return _stringify = __webpack_require__(150); +} - return function readJsonAndFile(_x21) { - return _ref24.apply(this, arguments); - }; -})(); +Object.defineProperty(exports, 'stringify', { + enumerable: true, + get: function get() { + return _interopRequireDefault(_stringify || _load_stringify()).default; + } +}); +exports.implodeEntry = implodeEntry; +exports.explodeEntry = explodeEntry; -let find = exports.find = (() => { - var _ref25 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (filename, dir) { - const parts = dir.split((_path || _load_path()).default.sep); +var _misc; - while (parts.length) { - const loc = parts.concat(filename).join((_path || _load_path()).default.sep); +function _load_misc() { + return _misc = __webpack_require__(12); +} - if (yield exists(loc)) { - return loc; - } else { - parts.pop(); - } - } +var _normalizePattern; - return false; - }); +function _load_normalizePattern() { + return _normalizePattern = __webpack_require__(29); +} - return function find(_x22, _x23) { - return _ref25.apply(this, arguments); - }; -})(); +var _parse2; -let symlink = exports.symlink = (() => { - var _ref26 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (src, dest) { - try { - const stats = yield lstat(dest); - if (stats.isSymbolicLink()) { - const resolved = yield realpath(dest); - if (resolved === src) { - return; - } - } - } catch (err) { - if (err.code !== 'ENOENT') { - throw err; - } - } - // We use rimraf for unlink which never throws an ENOENT on missing target - yield (0, (_fsNormalized || _load_fsNormalized()).unlink)(dest); +function _load_parse2() { + return _parse2 = _interopRequireDefault(__webpack_require__(81)); +} - if (process.platform === 'win32') { - // use directory junctions if possible on win32, this requires absolute paths - yield fsSymlink(src, dest, 'junction'); - } else { - // use relative paths otherwise which will be retained if the directory is moved - let relative; - try { - relative = (_path || _load_path()).default.relative((_fs || _load_fs()).default.realpathSync((_path || _load_path()).default.dirname(dest)), (_fs || _load_fs()).default.realpathSync(src)); - } catch (err) { - if (err.code !== 'ENOENT') { - throw err; - } - relative = (_path || _load_path()).default.relative((_path || _load_path()).default.dirname(dest), src); - } - // When path.relative returns an empty string for the current directory, we should instead use - // '.', which is a valid fs.symlink target. - yield fsSymlink(relative || '.', dest); - } - }); +var _constants; - return function symlink(_x24, _x25) { - return _ref26.apply(this, arguments); - }; -})(); +function _load_constants() { + return _constants = __webpack_require__(6); +} -let walk = exports.walk = (() => { - var _ref27 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (dir, relativeDir, ignoreBasenames = new Set()) { - let files = []; +var _fs; - let filenames = yield readdir(dir); - if (ignoreBasenames.size) { - filenames = filenames.filter(function (name) { - return !ignoreBasenames.has(name); - }); - } +function _load_fs() { + return _fs = _interopRequireWildcard(__webpack_require__(5)); +} - for (var _iterator14 = filenames, _isArray14 = Array.isArray(_iterator14), _i14 = 0, _iterator14 = _isArray14 ? _iterator14 : _iterator14[Symbol.iterator]();;) { - var _ref28; +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - if (_isArray14) { - if (_i14 >= _iterator14.length) break; - _ref28 = _iterator14[_i14++]; - } else { - _i14 = _iterator14.next(); - if (_i14.done) break; - _ref28 = _i14.value; - } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - const name = _ref28; +const invariant = __webpack_require__(7); - const relative = relativeDir ? (_path || _load_path()).default.join(relativeDir, name) : name; - const loc = (_path || _load_path()).default.join(dir, name); - const stat = yield lstat(loc); +const path = __webpack_require__(0); +const ssri = __webpack_require__(55); - files.push({ - relative, - basename: name, - absolute: loc, - mtime: +stat.mtime - }); +function getName(pattern) { + return (0, (_normalizePattern || _load_normalizePattern()).normalizePattern)(pattern).name; +} - if (stat.isDirectory()) { - files = files.concat((yield walk(loc, relative, ignoreBasenames))); - } - } +function blankObjectUndefined(obj) { + return obj && Object.keys(obj).length ? obj : undefined; +} - return files; - }); +function keyForRemote(remote) { + return remote.resolved || (remote.reference && remote.hash ? `${remote.reference}#${remote.hash}` : null); +} - return function walk(_x26, _x27) { - return _ref27.apply(this, arguments); +function serializeIntegrity(integrity) { + // We need this because `Integrity.toString()` does not use sorting to ensure a stable string output + // See https://git.io/vx2Hy + return integrity.toString().split(' ').sort().join(' '); +} + +function implodeEntry(pattern, obj) { + const inferredName = getName(pattern); + const integrity = obj.integrity ? serializeIntegrity(obj.integrity) : ''; + const imploded = { + name: inferredName === obj.name ? undefined : obj.name, + version: obj.version, + uid: obj.uid === obj.version ? undefined : obj.uid, + resolved: obj.resolved, + registry: obj.registry === 'npm' ? undefined : obj.registry, + dependencies: blankObjectUndefined(obj.dependencies), + optionalDependencies: blankObjectUndefined(obj.optionalDependencies), + permissions: blankObjectUndefined(obj.permissions), + prebuiltVariants: blankObjectUndefined(obj.prebuiltVariants) }; -})(); + if (integrity) { + imploded.integrity = integrity; + } + return imploded; +} -let getFileSizeOnDisk = exports.getFileSizeOnDisk = (() => { - var _ref29 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (loc) { - const stat = yield lstat(loc); - const size = stat.size, - blockSize = stat.blksize; +function explodeEntry(pattern, obj) { + obj.optionalDependencies = obj.optionalDependencies || {}; + obj.dependencies = obj.dependencies || {}; + obj.uid = obj.uid || obj.version; + obj.permissions = obj.permissions || {}; + obj.registry = obj.registry || 'npm'; + obj.name = obj.name || getName(pattern); + const integrity = obj.integrity; + if (integrity && integrity.isIntegrity) { + obj.integrity = ssri.parse(integrity); + } + return obj; +} +class Lockfile { + constructor({ cache, source, parseResultType } = {}) { + this.source = source || ''; + this.cache = cache; + this.parseResultType = parseResultType; + } - return Math.ceil(size / blockSize) * blockSize; - }); + // source string if the `cache` was parsed - return function getFileSizeOnDisk(_x28) { - return _ref29.apply(this, arguments); - }; -})(); -let getEolFromFile = (() => { - var _ref30 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (path) { - if (!(yield exists(path))) { - return undefined; + // if true, we're parsing an old yarn file and need to update integrity fields + hasEntriesExistWithoutIntegrity() { + if (!this.cache) { + return false; } - const buffer = yield readFileBuffer(path); - - for (let i = 0; i < buffer.length; ++i) { - if (buffer[i] === cr) { - return '\r\n'; - } - if (buffer[i] === lf) { - return '\n'; + for (const key in this.cache) { + // $FlowFixMe - `this.cache` is clearly defined at this point + if (!/^.*@(file:|http)/.test(key) && this.cache[key] && !this.cache[key].integrity) { + return true; } } - return undefined; - }); - - return function getEolFromFile(_x29) { - return _ref30.apply(this, arguments); - }; -})(); -let writeFilePreservingEol = exports.writeFilePreservingEol = (() => { - var _ref31 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (path, data) { - const eol = (yield getEolFromFile(path)) || (_os || _load_os()).default.EOL; - if (eol !== '\n') { - data = data.replace(/\n/g, eol); - } - yield writeFile(path, data); - }); + return false; + } - return function writeFilePreservingEol(_x30, _x31) { - return _ref31.apply(this, arguments); - }; -})(); + static fromDirectory(dir, reporter) { + return (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* () { + // read the manifest in this directory + const lockfileLoc = path.join(dir, (_constants || _load_constants()).LOCKFILE_FILENAME); -let hardlinksWork = exports.hardlinksWork = (() => { - var _ref32 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (dir) { - const filename = 'test-file' + Math.random(); - const file = (_path || _load_path()).default.join(dir, filename); - const fileLink = (_path || _load_path()).default.join(dir, filename + '-link'); - try { - yield writeFile(file, 'test'); - yield link(file, fileLink); - } catch (err) { - return false; - } finally { - yield (0, (_fsNormalized || _load_fsNormalized()).unlink)(file); - yield (0, (_fsNormalized || _load_fsNormalized()).unlink)(fileLink); - } - return true; - }); + let lockfile; + let rawLockfile = ''; + let parseResult; - return function hardlinksWork(_x32) { - return _ref32.apply(this, arguments); - }; -})(); + if (yield (_fs || _load_fs()).exists(lockfileLoc)) { + rawLockfile = yield (_fs || _load_fs()).readFile(lockfileLoc); + parseResult = (0, (_parse2 || _load_parse2()).default)(rawLockfile, lockfileLoc); -// not a strict polyfill for Node's fs.mkdtemp + if (reporter) { + if (parseResult.type === 'merge') { + reporter.info(reporter.lang('lockfileMerged')); + } else if (parseResult.type === 'conflict') { + reporter.warn(reporter.lang('lockfileConflict')); + } + } + lockfile = parseResult.object; + } else if (reporter) { + reporter.info(reporter.lang('noLockfileFound')); + } -let makeTempDir = exports.makeTempDir = (() => { - var _ref33 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (prefix) { - const dir = (_path || _load_path()).default.join((_os || _load_os()).default.tmpdir(), `yarn-${prefix || ''}-${Date.now()}-${Math.random()}`); - yield (0, (_fsNormalized || _load_fsNormalized()).unlink)(dir); - yield mkdirp(dir); - return dir; - }); + return new Lockfile({ cache: lockfile, source: rawLockfile, parseResultType: parseResult && parseResult.type }); + })(); + } - return function makeTempDir(_x33) { - return _ref33.apply(this, arguments); - }; -})(); + getLocked(pattern) { + const cache = this.cache; + if (!cache) { + return undefined; + } -let readFirstAvailableStream = exports.readFirstAvailableStream = (() => { - var _ref34 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (paths) { - for (var _iterator15 = paths, _isArray15 = Array.isArray(_iterator15), _i15 = 0, _iterator15 = _isArray15 ? _iterator15 : _iterator15[Symbol.iterator]();;) { - var _ref35; + const shrunk = pattern in cache && cache[pattern]; - if (_isArray15) { - if (_i15 >= _iterator15.length) break; - _ref35 = _iterator15[_i15++]; - } else { - _i15 = _iterator15.next(); - if (_i15.done) break; - _ref35 = _i15.value; - } + if (typeof shrunk === 'string') { + return this.getLocked(shrunk); + } else if (shrunk) { + explodeEntry(pattern, shrunk); + return shrunk; + } - const path = _ref35; + return undefined; + } - try { - const fd = yield open(path, 'r'); - return (_fs || _load_fs()).default.createReadStream(path, { fd }); - } catch (err) { - // Try the next one - } + removePattern(pattern) { + const cache = this.cache; + if (!cache) { + return; } - return null; - }); + delete cache[pattern]; + } - return function readFirstAvailableStream(_x34) { - return _ref34.apply(this, arguments); - }; -})(); + getLockfile(patterns) { + const lockfile = {}; + const seen = new Map(); -let getFirstSuitableFolder = exports.getFirstSuitableFolder = (() => { - var _ref36 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (paths, mode = constants.W_OK | constants.X_OK) { - const result = { - skipped: [], - folder: null - }; + // order by name so that lockfile manifest is assigned to the first dependency with this manifest + // the others that have the same remoteKey will just refer to the first + // ordering allows for consistency in lockfile when it is serialized + const sortedPatternsKeys = Object.keys(patterns).sort((_misc || _load_misc()).sortAlpha); - for (var _iterator16 = paths, _isArray16 = Array.isArray(_iterator16), _i16 = 0, _iterator16 = _isArray16 ? _iterator16 : _iterator16[Symbol.iterator]();;) { - var _ref37; + for (var _iterator = sortedPatternsKeys, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { + var _ref; - if (_isArray16) { - if (_i16 >= _iterator16.length) break; - _ref37 = _iterator16[_i16++]; + if (_isArray) { + if (_i >= _iterator.length) break; + _ref = _iterator[_i++]; } else { - _i16 = _iterator16.next(); - if (_i16.done) break; - _ref37 = _i16.value; + _i = _iterator.next(); + if (_i.done) break; + _ref = _i.value; } - const folder = _ref37; + const pattern = _ref; - try { - yield mkdirp(folder); - yield access(folder, mode); + const pkg = patterns[pattern]; + const remote = pkg._remote, + ref = pkg._reference; - result.folder = folder; + invariant(ref, 'Package is missing a reference'); + invariant(remote, 'Package is missing a remote'); - return result; - } catch (error) { - result.skipped.push({ - error, - folder - }); - } - } - return result; - }); + const remoteKey = keyForRemote(remote); + const seenPattern = remoteKey && seen.get(remoteKey); + if (seenPattern) { + // no point in duplicating it + lockfile[pattern] = seenPattern; - return function getFirstSuitableFolder(_x35) { - return _ref36.apply(this, arguments); - }; -})(); + // if we're relying on our name being inferred and two of the patterns have + // different inferred names then we need to set it + if (!seenPattern.name && getName(pattern) !== pkg.name) { + seenPattern.name = pkg.name; + } + continue; + } + const obj = implodeEntry(pattern, { + name: pkg.name, + version: pkg.version, + uid: pkg._uid, + resolved: remote.resolved, + integrity: remote.integrity, + registry: remote.registry, + dependencies: pkg.dependencies, + peerDependencies: pkg.peerDependencies, + optionalDependencies: pkg.optionalDependencies, + permissions: ref.permissions, + prebuiltVariants: pkg.prebuiltVariants + }); -exports.copy = copy; -exports.readFile = readFile; -exports.readFileRaw = readFileRaw; -exports.normalizeOS = normalizeOS; + lockfile[pattern] = obj; -var _fs; + if (remoteKey) { + seen.set(remoteKey, obj); + } + } -function _load_fs() { - return _fs = _interopRequireDefault(__webpack_require__(3)); + return lockfile; + } } +exports.default = Lockfile; -var _glob; - -function _load_glob() { - return _glob = _interopRequireDefault(__webpack_require__(75)); -} +/***/ }), +/* 15 */, +/* 16 */, +/* 17 */ +/***/ (function(module, exports) { -var _os; +module.exports = __webpack_require__(137); -function _load_os() { - return _os = _interopRequireDefault(__webpack_require__(36)); -} +/***/ }), +/* 18 */, +/* 19 */, +/* 20 */ +/***/ (function(module, exports, __webpack_require__) { -var _path; +"use strict"; -function _load_path() { - return _path = _interopRequireDefault(__webpack_require__(0)); -} -var _blockingQueue; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = nullify; +function nullify(obj = {}) { + if (Array.isArray(obj)) { + for (var _iterator = obj, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { + var _ref; -function _load_blockingQueue() { - return _blockingQueue = _interopRequireDefault(__webpack_require__(84)); -} + if (_isArray) { + if (_i >= _iterator.length) break; + _ref = _iterator[_i++]; + } else { + _i = _iterator.next(); + if (_i.done) break; + _ref = _i.value; + } -var _promise; + const item = _ref; -function _load_promise() { - return _promise = _interopRequireWildcard(__webpack_require__(40)); -} + nullify(item); + } + } else if (obj !== null && typeof obj === 'object' || typeof obj === 'function') { + Object.setPrototypeOf(obj, null); -var _promise2; + // for..in can only be applied to 'object', not 'function' + if (typeof obj === 'object') { + for (const key in obj) { + nullify(obj[key]); + } + } + } -function _load_promise2() { - return _promise2 = __webpack_require__(40); + return obj; } -var _map; +/***/ }), +/* 21 */, +/* 22 */ +/***/ (function(module, exports) { -function _load_map() { - return _map = _interopRequireDefault(__webpack_require__(20)); -} +module.exports = __webpack_require__(139); -var _fsNormalized; +/***/ }), +/* 23 */ +/***/ (function(module, exports) { -function _load_fsNormalized() { - return _fsNormalized = __webpack_require__(164); -} +var core = module.exports = { version: '2.5.7' }; +if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/***/ }), +/* 24 */, +/* 25 */, +/* 26 */, +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { -const constants = exports.constants = typeof (_fs || _load_fs()).default.constants !== 'undefined' ? (_fs || _load_fs()).default.constants : { - R_OK: (_fs || _load_fs()).default.R_OK, - W_OK: (_fs || _load_fs()).default.W_OK, - X_OK: (_fs || _load_fs()).default.X_OK +var isObject = __webpack_require__(34); +module.exports = function (it) { + if (!isObject(it)) throw TypeError(it + ' is not an object!'); + return it; }; -const lockQueue = exports.lockQueue = new (_blockingQueue || _load_blockingQueue()).default('fs lock'); - -const readFileBuffer = exports.readFileBuffer = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.readFile); -const open = exports.open = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.open); -const writeFile = exports.writeFile = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.writeFile); -const readlink = exports.readlink = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.readlink); -const realpath = exports.realpath = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.realpath); -const readdir = exports.readdir = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.readdir); -const rename = exports.rename = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.rename); -const access = exports.access = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.access); -const stat = exports.stat = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.stat); -const mkdirp = exports.mkdirp = (0, (_promise2 || _load_promise2()).promisify)(__webpack_require__(116)); -const exists = exports.exists = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.exists, true); -const lstat = exports.lstat = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.lstat); -const chmod = exports.chmod = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.chmod); -const link = exports.link = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.link); -const glob = exports.glob = (0, (_promise2 || _load_promise2()).promisify)((_glob || _load_glob()).default); -exports.unlink = (_fsNormalized || _load_fsNormalized()).unlink; - -// fs.copyFile uses the native file copying instructions on the system, performing much better -// than any JS-based solution and consumes fewer resources. Repeated testing to fine tune the -// concurrency level revealed 128 as the sweet spot on a quad-core, 16 CPU Intel system with SSD. - -const CONCURRENT_QUEUE_ITEMS = (_fs || _load_fs()).default.copyFile ? 128 : 4; - -const fsSymlink = (0, (_promise2 || _load_promise2()).promisify)((_fs || _load_fs()).default.symlink); -const invariant = __webpack_require__(7); -const stripBOM = __webpack_require__(122); - -const noop = () => {}; - -function copy(src, dest, reporter) { - return copyBulk([{ src, dest }], reporter); -} - -function _readFile(loc, encoding) { - return new Promise((resolve, reject) => { - (_fs || _load_fs()).default.readFile(loc, encoding, function (err, content) { - if (err) { - reject(err); - } else { - resolve(content); - } - }); - }); -} - -function readFile(loc) { - return _readFile(loc, 'utf8').then(normalizeOS); -} - -function readFileRaw(loc) { - return _readFile(loc, 'binary'); -} - -function normalizeOS(body) { - return body.replace(/\r\n/g, '\n'); -} - -const cr = '\r'.charCodeAt(0); -const lf = '\n'.charCodeAt(0); /***/ }), -/* 6 */ +/* 28 */, +/* 29 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -30584,212 +30080,165 @@ const lf = '\n'.charCodeAt(0); Object.defineProperty(exports, "__esModule", { value: true }); -exports.getPathKey = getPathKey; -const os = __webpack_require__(36); -const path = __webpack_require__(0); -const userHome = __webpack_require__(45).default; - -var _require = __webpack_require__(171); - -const getCacheDir = _require.getCacheDir, - getConfigDir = _require.getConfigDir, - getDataDir = _require.getDataDir; - -const isWebpackBundle = __webpack_require__(227); +exports.normalizePattern = normalizePattern; -const DEPENDENCY_TYPES = exports.DEPENDENCY_TYPES = ['devDependencies', 'dependencies', 'optionalDependencies', 'peerDependencies']; -const RESOLUTIONS = exports.RESOLUTIONS = 'resolutions'; -const MANIFEST_FIELDS = exports.MANIFEST_FIELDS = [RESOLUTIONS, ...DEPENDENCY_TYPES]; +/** + * Explode and normalize a pattern into its name and range. + */ -const SUPPORTED_NODE_VERSIONS = exports.SUPPORTED_NODE_VERSIONS = '^4.8.0 || ^5.7.0 || ^6.2.2 || >=8.0.0'; +function normalizePattern(pattern) { + let hasVersion = false; + let range = 'latest'; + let name = pattern; -const YARN_REGISTRY = exports.YARN_REGISTRY = 'https://registry.yarnpkg.com'; + // if we're a scope then remove the @ and add it back later + let isScoped = false; + if (name[0] === '@') { + isScoped = true; + name = name.slice(1); + } -const YARN_DOCS = exports.YARN_DOCS = 'https://yarnpkg.com/en/docs/cli/'; -const YARN_INSTALLER_SH = exports.YARN_INSTALLER_SH = 'https://yarnpkg.com/install.sh'; -const YARN_INSTALLER_MSI = exports.YARN_INSTALLER_MSI = 'https://yarnpkg.com/latest.msi'; + // take first part as the name + const parts = name.split('@'); + if (parts.length > 1) { + name = parts.shift(); + range = parts.join('@'); -const SELF_UPDATE_VERSION_URL = exports.SELF_UPDATE_VERSION_URL = 'https://yarnpkg.com/latest-version'; + if (range) { + hasVersion = true; + } else { + range = '*'; + } + } -// cache version, bump whenever we make backwards incompatible changes -const CACHE_VERSION = exports.CACHE_VERSION = 2; + // add back @ scope suffix + if (isScoped) { + name = `@${name}`; + } -// lockfile version, bump whenever we make backwards incompatible changes -const LOCKFILE_VERSION = exports.LOCKFILE_VERSION = 1; + return { name, range, hasVersion }; +} -// max amount of network requests to perform concurrently -const NETWORK_CONCURRENCY = exports.NETWORK_CONCURRENCY = 8; +/***/ }), +/* 30 */, +/* 31 */ +/***/ (function(module, exports, __webpack_require__) { -// HTTP timeout used when downloading packages -const NETWORK_TIMEOUT = exports.NETWORK_TIMEOUT = 30 * 1000; // in milliseconds +var dP = __webpack_require__(50); +var createDesc = __webpack_require__(106); +module.exports = __webpack_require__(33) ? function (object, key, value) { + return dP.f(object, key, createDesc(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; -// max amount of child processes to execute concurrently -const CHILD_CONCURRENCY = exports.CHILD_CONCURRENCY = 5; -const REQUIRED_PACKAGE_KEYS = exports.REQUIRED_PACKAGE_KEYS = ['name', 'version', '_uid']; +/***/ }), +/* 32 */ +/***/ (function(module, exports, __webpack_require__) { -function getPreferredCacheDirectories() { - const preferredCacheDirectories = [getCacheDir()]; +/* eslint-disable node/no-deprecated-api */ +var buffer = __webpack_require__(63) +var Buffer = buffer.Buffer - if (process.getuid) { - // $FlowFixMe: process.getuid exists, dammit - preferredCacheDirectories.push(path.join(os.tmpdir(), `.yarn-cache-${process.getuid()}`)); +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} - preferredCacheDirectories.push(path.join(os.tmpdir(), `.yarn-cache`)); - - return preferredCacheDirectories; +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) } -const PREFERRED_MODULE_CACHE_DIRECTORIES = exports.PREFERRED_MODULE_CACHE_DIRECTORIES = getPreferredCacheDirectories(); -const CONFIG_DIRECTORY = exports.CONFIG_DIRECTORY = getConfigDir(); -const DATA_DIRECTORY = exports.DATA_DIRECTORY = getDataDir(); -const LINK_REGISTRY_DIRECTORY = exports.LINK_REGISTRY_DIRECTORY = path.join(DATA_DIRECTORY, 'link'); -const GLOBAL_MODULE_DIRECTORY = exports.GLOBAL_MODULE_DIRECTORY = path.join(DATA_DIRECTORY, 'global'); +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) -const NODE_BIN_PATH = exports.NODE_BIN_PATH = process.execPath; -const YARN_BIN_PATH = exports.YARN_BIN_PATH = getYarnBinPath(); +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} -// Webpack needs to be configured with node.__dirname/__filename = false -function getYarnBinPath() { - if (isWebpackBundle) { - return __filename; +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } } else { - return path.join(__dirname, '..', 'bin', 'yarn.js'); + buf.fill(0) } + return buf } -const NODE_MODULES_FOLDER = exports.NODE_MODULES_FOLDER = 'node_modules'; -const NODE_PACKAGE_JSON = exports.NODE_PACKAGE_JSON = 'package.json'; - -const POSIX_GLOBAL_PREFIX = exports.POSIX_GLOBAL_PREFIX = `${process.env.DESTDIR || ''}/usr/local`; -const FALLBACK_GLOBAL_PREFIX = exports.FALLBACK_GLOBAL_PREFIX = path.join(userHome, '.yarn'); - -const META_FOLDER = exports.META_FOLDER = '.yarn-meta'; -const INTEGRITY_FILENAME = exports.INTEGRITY_FILENAME = '.yarn-integrity'; -const LOCKFILE_FILENAME = exports.LOCKFILE_FILENAME = 'yarn.lock'; -const METADATA_FILENAME = exports.METADATA_FILENAME = '.yarn-metadata.json'; -const TARBALL_FILENAME = exports.TARBALL_FILENAME = '.yarn-tarball.tgz'; -const CLEAN_FILENAME = exports.CLEAN_FILENAME = '.yarnclean'; - -const NPM_LOCK_FILENAME = exports.NPM_LOCK_FILENAME = 'package-lock.json'; -const NPM_SHRINKWRAP_FILENAME = exports.NPM_SHRINKWRAP_FILENAME = 'npm-shrinkwrap.json'; - -const DEFAULT_INDENT = exports.DEFAULT_INDENT = ' '; -const SINGLE_INSTANCE_PORT = exports.SINGLE_INSTANCE_PORT = 31997; -const SINGLE_INSTANCE_FILENAME = exports.SINGLE_INSTANCE_FILENAME = '.yarn-single-instance'; - -const ENV_PATH_KEY = exports.ENV_PATH_KEY = getPathKey(process.platform, process.env); - -function getPathKey(platform, env) { - let pathKey = 'PATH'; - - // windows calls its path "Path" usually, but this is not guaranteed. - if (platform === 'win32') { - pathKey = 'Path'; - - for (const key in env) { - if (key.toLowerCase() === 'path') { - pathKey = key; - } - } +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') } + return Buffer(size) +} - return pathKey; +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) } -const VERSION_COLOR_SCHEME = exports.VERSION_COLOR_SCHEME = { - major: 'red', - premajor: 'red', - minor: 'yellow', - preminor: 'yellow', - patch: 'green', - prepatch: 'green', - prerelease: 'red', - unchanged: 'white', - unknown: 'red' -}; /***/ }), -/* 7 */ +/* 33 */ /***/ (function(module, exports, __webpack_require__) { -"use strict"; -/** - * Copyright (c) 2013-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - - - -/** - * Use invariant() to assert state which your program assumes to be true. - * - * Provide sprintf-style format (only %s is supported) and arguments - * to provide information about what broke and what you were - * expecting. - * - * The invariant message will be stripped in production, but the invariant - * will remain to ensure logic does not differ in production. - */ - -var NODE_ENV = "none"; +// Thank's IE8 for his funny defineProperty +module.exports = !__webpack_require__(85)(function () { + return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; +}); -var invariant = function(condition, format, a, b, c, d, e, f) { - if (NODE_ENV !== 'production') { - if (format === undefined) { - throw new Error('invariant requires an error message argument'); - } - } - if (!condition) { - var error; - if (format === undefined) { - error = new Error( - 'Minified exception occurred; use the non-minified dev environment ' + - 'for the full error message and additional helpful warnings.' - ); - } else { - var args = [a, b, c, d, e, f]; - var argIndex = 0; - error = new Error( - format.replace(/%s/g, function() { return args[argIndex++]; }) - ); - error.name = 'Invariant Violation'; - } +/***/ }), +/* 34 */ +/***/ (function(module, exports) { - error.framesToPop = 1; // we don't care about invariant's own frame - throw error; - } +module.exports = function (it) { + return typeof it === 'object' ? it !== null : typeof it === 'function'; }; -module.exports = invariant; - /***/ }), -/* 8 */, -/* 9 */ +/* 35 */ /***/ (function(module, exports) { -module.exports = __webpack_require__(282); +module.exports = {}; + /***/ }), -/* 10 */, -/* 11 */ +/* 36 */ /***/ (function(module, exports) { -// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 -var global = module.exports = typeof window != 'undefined' && window.Math == Math - ? window : typeof self != 'undefined' && self.Math == Math ? self - // eslint-disable-next-line no-new-func - : Function('return this')(); -if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef - +module.exports = __webpack_require__(120); /***/ }), -/* 12 */ +/* 37 */, +/* 38 */, +/* 39 */, +/* 40 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -30798,115 +30247,164 @@ if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef Object.defineProperty(exports, "__esModule", { value: true }); -exports.sortAlpha = sortAlpha; -exports.entries = entries; -exports.removePrefix = removePrefix; -exports.removeSuffix = removeSuffix; -exports.addSuffix = addSuffix; -exports.hyphenate = hyphenate; -exports.camelCase = camelCase; -exports.compareSortedArrays = compareSortedArrays; -exports.sleep = sleep; -const _camelCase = __webpack_require__(176); - -function sortAlpha(a, b) { - // sort alphabetically in a deterministic way - const shortLen = Math.min(a.length, b.length); - for (let i = 0; i < shortLen; i++) { - const aChar = a.charCodeAt(i); - const bChar = b.charCodeAt(i); - if (aChar !== bChar) { - return aChar - bChar; - } - } - return a.length - b.length; +exports.wait = wait; +exports.promisify = promisify; +exports.queue = queue; +function wait(delay) { + return new Promise(resolve => { + setTimeout(resolve, delay); + }); } -function entries(obj) { - const entries = []; - if (obj) { - for (const key in obj) { - entries.push([key, obj[key]]); - } - } - return entries; -} +function promisify(fn, firstData) { + return function (...args) { + return new Promise(function (resolve, reject) { + args.push(function (err, ...result) { + let res = result; -function removePrefix(pattern, prefix) { - if (pattern.startsWith(prefix)) { - pattern = pattern.slice(prefix.length); - } + if (result.length <= 1) { + res = result[0]; + } - return pattern; -} + if (firstData) { + res = err; + err = null; + } -function removeSuffix(pattern, suffix) { - if (pattern.endsWith(suffix)) { - return pattern.slice(0, -suffix.length); - } + if (err) { + reject(err); + } else { + resolve(res); + } + }); - return pattern; + fn.apply(null, args); + }); + }; } -function addSuffix(pattern, suffix) { - if (!pattern.endsWith(suffix)) { - return pattern + suffix; - } - - return pattern; -} +function queue(arr, promiseProducer, concurrency = Infinity) { + concurrency = Math.min(concurrency, arr.length); -function hyphenate(str) { - return str.replace(/[A-Z]/g, match => { - return '-' + match.charAt(0).toLowerCase(); - }); -} + // clone + arr = arr.slice(); -function camelCase(str) { - if (/[A-Z]/.test(str)) { - return null; - } else { - return _camelCase(str); + const results = []; + let total = arr.length; + if (!total) { + return Promise.resolve(results); } -} -function compareSortedArrays(array1, array2) { - if (array1.length !== array2.length) { - return false; - } - for (let i = 0, len = array1.length; i < len; i++) { - if (array1[i] !== array2[i]) { - return false; + return new Promise((resolve, reject) => { + for (let i = 0; i < concurrency; i++) { + next(); } - } - return true; -} -function sleep(ms) { - return new Promise(resolve => { - setTimeout(resolve, ms); + function next() { + const item = arr.shift(); + const promise = promiseProducer(item); + + promise.then(function (result) { + results.push(result); + + total--; + if (total === 0) { + resolve(results); + } else { + if (arr.length) { + next(); + } + } + }, reject); + } }); } /***/ }), -/* 13 */ +/* 41 */ /***/ (function(module, exports, __webpack_require__) { -var store = __webpack_require__(107)('wks'); -var uid = __webpack_require__(111); -var Symbol = __webpack_require__(11).Symbol; -var USE_SYMBOL = typeof Symbol == 'function'; +var global = __webpack_require__(11); +var core = __webpack_require__(23); +var ctx = __webpack_require__(48); +var hide = __webpack_require__(31); +var has = __webpack_require__(49); +var PROTOTYPE = 'prototype'; -var $exports = module.exports = function (name) { - return store[name] || (store[name] = - USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); +var $export = function (type, name, source) { + var IS_FORCED = type & $export.F; + var IS_GLOBAL = type & $export.G; + var IS_STATIC = type & $export.S; + var IS_PROTO = type & $export.P; + var IS_BIND = type & $export.B; + var IS_WRAP = type & $export.W; + var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); + var expProto = exports[PROTOTYPE]; + var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]; + var key, own, out; + if (IS_GLOBAL) source = name; + for (key in source) { + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + if (own && has(exports, key)) continue; + // export native or passed + out = own ? target[key] : source[key]; + // prevent global pollution for namespaces + exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] + // bind timers to global for call from export context + : IS_BIND && own ? ctx(out, global) + // wrap global constructors for prevent change them in library + : IS_WRAP && target[key] == out ? (function (C) { + var F = function (a, b, c) { + if (this instanceof C) { + switch (arguments.length) { + case 0: return new C(); + case 1: return new C(a); + case 2: return new C(a, b); + } return new C(a, b, c); + } return C.apply(this, arguments); + }; + F[PROTOTYPE] = C[PROTOTYPE]; + return F; + // make static versions for prototype methods + })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% + if (IS_PROTO) { + (exports.virtual || (exports.virtual = {}))[key] = out; + // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% + if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out); + } + } }; +// type bitmap +$export.F = 1; // forced +$export.G = 2; // global +$export.S = 4; // static +$export.P = 8; // proto +$export.B = 16; // bind +$export.W = 32; // wrap +$export.U = 64; // safe +$export.R = 128; // real proto method for `library` +module.exports = $export; -$exports.store = store; + +/***/ }), +/* 42 */ +/***/ (function(module, exports, __webpack_require__) { + +try { + var util = __webpack_require__(2); + if (typeof util.inherits !== 'function') throw ''; + module.exports = util.inherits; +} catch (e) { + module.exports = __webpack_require__(224); +} /***/ }), -/* 14 */ +/* 43 */, +/* 44 */, +/* 45 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -30915,3396 +30413,2692 @@ $exports.store = store; Object.defineProperty(exports, "__esModule", { value: true }); -exports.stringify = exports.parse = undefined; - -var _asyncToGenerator2; - -function _load_asyncToGenerator() { - return _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(1)); -} +exports.home = undefined; -var _parse; +var _rootUser; -function _load_parse() { - return _parse = __webpack_require__(81); +function _load_rootUser() { + return _rootUser = _interopRequireDefault(__webpack_require__(169)); } -Object.defineProperty(exports, 'parse', { - enumerable: true, - get: function get() { - return _interopRequireDefault(_parse || _load_parse()).default; - } -}); - -var _stringify; - -function _load_stringify() { - return _stringify = __webpack_require__(150); -} +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -Object.defineProperty(exports, 'stringify', { - enumerable: true, - get: function get() { - return _interopRequireDefault(_stringify || _load_stringify()).default; - } -}); -exports.implodeEntry = implodeEntry; -exports.explodeEntry = explodeEntry; +const path = __webpack_require__(0); -var _misc; +const home = exports.home = __webpack_require__(36).homedir(); -function _load_misc() { - return _misc = __webpack_require__(12); -} +const userHomeDir = (_rootUser || _load_rootUser()).default ? path.resolve('/usr/local/share') : home; -var _normalizePattern; +exports.default = userHomeDir; -function _load_normalizePattern() { - return _normalizePattern = __webpack_require__(29); -} +/***/ }), +/* 46 */ +/***/ (function(module, exports) { -var _parse2; +module.exports = function (it) { + if (typeof it != 'function') throw TypeError(it + ' is not a function!'); + return it; +}; -function _load_parse2() { - return _parse2 = _interopRequireDefault(__webpack_require__(81)); -} -var _constants; +/***/ }), +/* 47 */ +/***/ (function(module, exports) { -function _load_constants() { - return _constants = __webpack_require__(6); -} +var toString = {}.toString; -var _fs; +module.exports = function (it) { + return toString.call(it).slice(8, -1); +}; -function _load_fs() { - return _fs = _interopRequireWildcard(__webpack_require__(5)); -} -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } +/***/ }), +/* 48 */ +/***/ (function(module, exports, __webpack_require__) { -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +// optional / simple context binding +var aFunction = __webpack_require__(46); +module.exports = function (fn, that, length) { + aFunction(fn); + if (that === undefined) return fn; + switch (length) { + case 1: return function (a) { + return fn.call(that, a); + }; + case 2: return function (a, b) { + return fn.call(that, a, b); + }; + case 3: return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function (/* ...args */) { + return fn.apply(that, arguments); + }; +}; -const invariant = __webpack_require__(7); -const path = __webpack_require__(0); -const ssri = __webpack_require__(55); +/***/ }), +/* 49 */ +/***/ (function(module, exports) { -function getName(pattern) { - return (0, (_normalizePattern || _load_normalizePattern()).normalizePattern)(pattern).name; -} +var hasOwnProperty = {}.hasOwnProperty; +module.exports = function (it, key) { + return hasOwnProperty.call(it, key); +}; -function blankObjectUndefined(obj) { - return obj && Object.keys(obj).length ? obj : undefined; -} -function keyForRemote(remote) { - return remote.resolved || (remote.reference && remote.hash ? `${remote.reference}#${remote.hash}` : null); -} +/***/ }), +/* 50 */ +/***/ (function(module, exports, __webpack_require__) { -function serializeIntegrity(integrity) { - // We need this because `Integrity.toString()` does not use sorting to ensure a stable string output - // See https://git.io/vx2Hy - return integrity.toString().split(' ').sort().join(' '); -} +var anObject = __webpack_require__(27); +var IE8_DOM_DEFINE = __webpack_require__(184); +var toPrimitive = __webpack_require__(201); +var dP = Object.defineProperty; -function implodeEntry(pattern, obj) { - const inferredName = getName(pattern); - const integrity = obj.integrity ? serializeIntegrity(obj.integrity) : ''; - const imploded = { - name: inferredName === obj.name ? undefined : obj.name, - version: obj.version, - uid: obj.uid === obj.version ? undefined : obj.uid, - resolved: obj.resolved, - registry: obj.registry === 'npm' ? undefined : obj.registry, - dependencies: blankObjectUndefined(obj.dependencies), - optionalDependencies: blankObjectUndefined(obj.optionalDependencies), - permissions: blankObjectUndefined(obj.permissions), - prebuiltVariants: blankObjectUndefined(obj.prebuiltVariants) - }; - if (integrity) { - imploded.integrity = integrity; - } - return imploded; -} +exports.f = __webpack_require__(33) ? Object.defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return dP(O, P, Attributes); + } catch (e) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; -function explodeEntry(pattern, obj) { - obj.optionalDependencies = obj.optionalDependencies || {}; - obj.dependencies = obj.dependencies || {}; - obj.uid = obj.uid || obj.version; - obj.permissions = obj.permissions || {}; - obj.registry = obj.registry || 'npm'; - obj.name = obj.name || getName(pattern); - const integrity = obj.integrity; - if (integrity && integrity.isIntegrity) { - obj.integrity = ssri.parse(integrity); - } - return obj; -} -class Lockfile { - constructor({ cache, source, parseResultType } = {}) { - this.source = source || ''; - this.cache = cache; - this.parseResultType = parseResultType; - } +/***/ }), +/* 51 */, +/* 52 */, +/* 53 */, +/* 54 */ +/***/ (function(module, exports) { - // source string if the `cache` was parsed +module.exports = __webpack_require__(155); +/***/ }), +/* 55 */ +/***/ (function(module, exports, __webpack_require__) { - // if true, we're parsing an old yarn file and need to update integrity fields - hasEntriesExistWithoutIntegrity() { - if (!this.cache) { - return false; - } +"use strict"; - for (const key in this.cache) { - // $FlowFixMe - `this.cache` is clearly defined at this point - if (!/^.*@(file:|http)/.test(key) && this.cache[key] && !this.cache[key].integrity) { - return true; - } - } - return false; - } +const Buffer = __webpack_require__(32).Buffer - static fromDirectory(dir, reporter) { - return (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* () { - // read the manifest in this directory - const lockfileLoc = path.join(dir, (_constants || _load_constants()).LOCKFILE_FILENAME); +const crypto = __webpack_require__(9) +const Transform = __webpack_require__(17).Transform - let lockfile; - let rawLockfile = ''; - let parseResult; +const SPEC_ALGORITHMS = ['sha256', 'sha384', 'sha512'] - if (yield (_fs || _load_fs()).exists(lockfileLoc)) { - rawLockfile = yield (_fs || _load_fs()).readFile(lockfileLoc); - parseResult = (0, (_parse2 || _load_parse2()).default)(rawLockfile, lockfileLoc); +const BASE64_REGEX = /^[a-z0-9+/]+(?:=?=?)$/i +const SRI_REGEX = /^([^-]+)-([^?]+)([?\S*]*)$/ +const STRICT_SRI_REGEX = /^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)*$/ +const VCHAR_REGEX = /^[\x21-\x7E]+$/ - if (reporter) { - if (parseResult.type === 'merge') { - reporter.info(reporter.lang('lockfileMerged')); - } else if (parseResult.type === 'conflict') { - reporter.warn(reporter.lang('lockfileConflict')); - } - } +class Hash { + get isHash () { return true } + constructor (hash, opts) { + const strict = !!(opts && opts.strict) + this.source = hash.trim() + // 3.1. Integrity metadata (called "Hash" by ssri) + // https://w3c.github.io/webappsec-subresource-integrity/#integrity-metadata-description + const match = this.source.match( + strict + ? STRICT_SRI_REGEX + : SRI_REGEX + ) + if (!match) { return } + if (strict && !SPEC_ALGORITHMS.some(a => a === match[1])) { return } + this.algorithm = match[1] + this.digest = match[2] - lockfile = parseResult.object; - } else if (reporter) { - reporter.info(reporter.lang('noLockfileFound')); + const rawOpts = match[3] + this.options = rawOpts ? rawOpts.slice(1).split('?') : [] + } + hexDigest () { + return this.digest && Buffer.from(this.digest, 'base64').toString('hex') + } + toJSON () { + return this.toString() + } + toString (opts) { + if (opts && opts.strict) { + // Strict mode enforces the standard as close to the foot of the + // letter as it can. + if (!( + // The spec has very restricted productions for algorithms. + // https://www.w3.org/TR/CSP2/#source-list-syntax + SPEC_ALGORITHMS.some(x => x === this.algorithm) && + // Usually, if someone insists on using a "different" base64, we + // leave it as-is, since there's multiple standards, and the + // specified is not a URL-safe variant. + // https://www.w3.org/TR/CSP2/#base64_value + this.digest.match(BASE64_REGEX) && + // Option syntax is strictly visual chars. + // https://w3c.github.io/webappsec-subresource-integrity/#grammardef-option-expression + // https://tools.ietf.org/html/rfc5234#appendix-B.1 + (this.options || []).every(opt => opt.match(VCHAR_REGEX)) + )) { + return '' } - - return new Lockfile({ cache: lockfile, source: rawLockfile, parseResultType: parseResult && parseResult.type }); - })(); + } + const options = this.options && this.options.length + ? `?${this.options.join('?')}` + : '' + return `${this.algorithm}-${this.digest}${options}` } +} - getLocked(pattern) { - const cache = this.cache; - if (!cache) { - return undefined; +class Integrity { + get isIntegrity () { return true } + toJSON () { + return this.toString() + } + toString (opts) { + opts = opts || {} + let sep = opts.sep || ' ' + if (opts.strict) { + // Entries must be separated by whitespace, according to spec. + sep = sep.replace(/\S+/g, ' ') } - - const shrunk = pattern in cache && cache[pattern]; - - if (typeof shrunk === 'string') { - return this.getLocked(shrunk); - } else if (shrunk) { - explodeEntry(pattern, shrunk); - return shrunk; + return Object.keys(this).map(k => { + return this[k].map(hash => { + return Hash.prototype.toString.call(hash, opts) + }).filter(x => x.length).join(sep) + }).filter(x => x.length).join(sep) + } + concat (integrity, opts) { + const other = typeof integrity === 'string' + ? integrity + : stringify(integrity, opts) + return parse(`${this.toString(opts)} ${other}`, opts) + } + hexDigest () { + return parse(this, {single: true}).hexDigest() + } + match (integrity, opts) { + const other = parse(integrity, opts) + const algo = other.pickAlgorithm(opts) + return ( + this[algo] && + other[algo] && + this[algo].find(hash => + other[algo].find(otherhash => + hash.digest === otherhash.digest + ) + ) + ) || false + } + pickAlgorithm (opts) { + const pickAlgorithm = (opts && opts.pickAlgorithm) || getPrioritizedHash + const keys = Object.keys(this) + if (!keys.length) { + throw new Error(`No algorithms available for ${ + JSON.stringify(this.toString()) + }`) } + return keys.reduce((acc, algo) => { + return pickAlgorithm(acc, algo) || acc + }) + } +} - return undefined; +module.exports.parse = parse +function parse (sri, opts) { + opts = opts || {} + if (typeof sri === 'string') { + return _parse(sri, opts) + } else if (sri.algorithm && sri.digest) { + const fullSri = new Integrity() + fullSri[sri.algorithm] = [sri] + return _parse(stringify(fullSri, opts), opts) + } else { + return _parse(stringify(sri, opts), opts) } +} - removePattern(pattern) { - const cache = this.cache; - if (!cache) { - return; - } - delete cache[pattern]; +function _parse (integrity, opts) { + // 3.4.3. Parse metadata + // https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata + if (opts.single) { + return new Hash(integrity, opts) } + return integrity.trim().split(/\s+/).reduce((acc, string) => { + const hash = new Hash(string, opts) + if (hash.algorithm && hash.digest) { + const algo = hash.algorithm + if (!acc[algo]) { acc[algo] = [] } + acc[algo].push(hash) + } + return acc + }, new Integrity()) +} - getLockfile(patterns) { - const lockfile = {}; - const seen = new Map(); +module.exports.stringify = stringify +function stringify (obj, opts) { + if (obj.algorithm && obj.digest) { + return Hash.prototype.toString.call(obj, opts) + } else if (typeof obj === 'string') { + return stringify(parse(obj, opts), opts) + } else { + return Integrity.prototype.toString.call(obj, opts) + } +} - // order by name so that lockfile manifest is assigned to the first dependency with this manifest - // the others that have the same remoteKey will just refer to the first - // ordering allows for consistency in lockfile when it is serialized - const sortedPatternsKeys = Object.keys(patterns).sort((_misc || _load_misc()).sortAlpha); +module.exports.fromHex = fromHex +function fromHex (hexDigest, algorithm, opts) { + const optString = (opts && opts.options && opts.options.length) + ? `?${opts.options.join('?')}` + : '' + return parse( + `${algorithm}-${ + Buffer.from(hexDigest, 'hex').toString('base64') + }${optString}`, opts + ) +} - for (var _iterator = sortedPatternsKeys, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { - var _ref; +module.exports.fromData = fromData +function fromData (data, opts) { + opts = opts || {} + const algorithms = opts.algorithms || ['sha512'] + const optString = opts.options && opts.options.length + ? `?${opts.options.join('?')}` + : '' + return algorithms.reduce((acc, algo) => { + const digest = crypto.createHash(algo).update(data).digest('base64') + const hash = new Hash( + `${algo}-${digest}${optString}`, + opts + ) + if (hash.algorithm && hash.digest) { + const algo = hash.algorithm + if (!acc[algo]) { acc[algo] = [] } + acc[algo].push(hash) + } + return acc + }, new Integrity()) +} - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - const pattern = _ref; - - const pkg = patterns[pattern]; - const remote = pkg._remote, - ref = pkg._reference; - - invariant(ref, 'Package is missing a reference'); - invariant(remote, 'Package is missing a remote'); - - const remoteKey = keyForRemote(remote); - const seenPattern = remoteKey && seen.get(remoteKey); - if (seenPattern) { - // no point in duplicating it - lockfile[pattern] = seenPattern; +module.exports.fromStream = fromStream +function fromStream (stream, opts) { + opts = opts || {} + const P = opts.Promise || Promise + const istream = integrityStream(opts) + return new P((resolve, reject) => { + stream.pipe(istream) + stream.on('error', reject) + istream.on('error', reject) + let sri + istream.on('integrity', s => { sri = s }) + istream.on('end', () => resolve(sri)) + istream.on('data', () => {}) + }) +} - // if we're relying on our name being inferred and two of the patterns have - // different inferred names then we need to set it - if (!seenPattern.name && getName(pattern) !== pkg.name) { - seenPattern.name = pkg.name; +module.exports.checkData = checkData +function checkData (data, sri, opts) { + opts = opts || {} + sri = parse(sri, opts) + if (!Object.keys(sri).length) { + if (opts.error) { + throw Object.assign( + new Error('No valid integrity hashes to check against'), { + code: 'EINTEGRITY' } - continue; - } - const obj = implodeEntry(pattern, { - name: pkg.name, - version: pkg.version, - uid: pkg._uid, - resolved: remote.resolved, - integrity: remote.integrity, - registry: remote.registry, - dependencies: pkg.dependencies, - peerDependencies: pkg.peerDependencies, - optionalDependencies: pkg.optionalDependencies, - permissions: ref.permissions, - prebuiltVariants: pkg.prebuiltVariants - }); - - lockfile[pattern] = obj; - - if (remoteKey) { - seen.set(remoteKey, obj); - } + ) + } else { + return false } - - return lockfile; + } + const algorithm = sri.pickAlgorithm(opts) + const digest = crypto.createHash(algorithm).update(data).digest('base64') + const newSri = parse({algorithm, digest}) + const match = newSri.match(sri, opts) + if (match || !opts.error) { + return match + } else if (typeof opts.size === 'number' && (data.length !== opts.size)) { + const err = new Error(`data size mismatch when checking ${sri}.\n Wanted: ${opts.size}\n Found: ${data.length}`) + err.code = 'EBADSIZE' + err.found = data.length + err.expected = opts.size + err.sri = sri + throw err + } else { + const err = new Error(`Integrity checksum failed when using ${algorithm}: Wanted ${sri}, but got ${newSri}. (${data.length} bytes)`) + err.code = 'EINTEGRITY' + err.found = newSri + err.expected = sri + err.algorithm = algorithm + err.sri = sri + throw err } } -exports.default = Lockfile; - -/***/ }), -/* 15 */, -/* 16 */, -/* 17 */ -/***/ (function(module, exports) { - -module.exports = __webpack_require__(137); - -/***/ }), -/* 18 */, -/* 19 */, -/* 20 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; +module.exports.checkStream = checkStream +function checkStream (stream, sri, opts) { + opts = opts || {} + const P = opts.Promise || Promise + const checker = integrityStream(Object.assign({}, opts, { + integrity: sri + })) + return new P((resolve, reject) => { + stream.pipe(checker) + stream.on('error', reject) + checker.on('error', reject) + let sri + checker.on('verified', s => { sri = s }) + checker.on('end', () => resolve(sri)) + checker.on('data', () => {}) + }) +} -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = nullify; -function nullify(obj = {}) { - if (Array.isArray(obj)) { - for (var _iterator = obj, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { - var _ref; +module.exports.integrityStream = integrityStream +function integrityStream (opts) { + opts = opts || {} + // For verification + const sri = opts.integrity && parse(opts.integrity, opts) + const goodSri = sri && Object.keys(sri).length + const algorithm = goodSri && sri.pickAlgorithm(opts) + const digests = goodSri && sri[algorithm] + // Calculating stream + const algorithms = Array.from( + new Set( + (opts.algorithms || ['sha512']) + .concat(algorithm ? [algorithm] : []) + ) + ) + const hashes = algorithms.map(crypto.createHash) + let streamSize = 0 + const stream = new Transform({ + transform (chunk, enc, cb) { + streamSize += chunk.length + hashes.forEach(h => h.update(chunk, enc)) + cb(null, chunk, enc) + } + }).on('end', () => { + const optString = (opts.options && opts.options.length) + ? `?${opts.options.join('?')}` + : '' + const newSri = parse(hashes.map((h, i) => { + return `${algorithms[i]}-${h.digest('base64')}${optString}` + }).join(' '), opts) + // Integrity verification mode + const match = goodSri && newSri.match(sri, opts) + if (typeof opts.size === 'number' && streamSize !== opts.size) { + const err = new Error(`stream size mismatch when checking ${sri}.\n Wanted: ${opts.size}\n Found: ${streamSize}`) + err.code = 'EBADSIZE' + err.found = streamSize + err.expected = opts.size + err.sri = sri + stream.emit('error', err) + } else if (opts.integrity && !match) { + const err = new Error(`${sri} integrity checksum failed when using ${algorithm}: wanted ${digests} but got ${newSri}. (${streamSize} bytes)`) + err.code = 'EINTEGRITY' + err.found = newSri + err.expected = digests + err.algorithm = algorithm + err.sri = sri + stream.emit('error', err) + } else { + stream.emit('size', streamSize) + stream.emit('integrity', newSri) + match && stream.emit('verified', match) + } + }) + return stream +} - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } +module.exports.create = createIntegrity +function createIntegrity (opts) { + opts = opts || {} + const algorithms = opts.algorithms || ['sha512'] + const optString = opts.options && opts.options.length + ? `?${opts.options.join('?')}` + : '' - const item = _ref; + const hashes = algorithms.map(crypto.createHash) - nullify(item); - } - } else if (obj !== null && typeof obj === 'object' || typeof obj === 'function') { - Object.setPrototypeOf(obj, null); + return { + update: function (chunk, enc) { + hashes.forEach(h => h.update(chunk, enc)) + return this + }, + digest: function (enc) { + const integrity = algorithms.reduce((acc, algo) => { + const digest = hashes.shift().digest('base64') + const hash = new Hash( + `${algo}-${digest}${optString}`, + opts + ) + if (hash.algorithm && hash.digest) { + const algo = hash.algorithm + if (!acc[algo]) { acc[algo] = [] } + acc[algo].push(hash) + } + return acc + }, new Integrity()) - // for..in can only be applied to 'object', not 'function' - if (typeof obj === 'object') { - for (const key in obj) { - nullify(obj[key]); - } + return integrity } } - - return obj; } -/***/ }), -/* 21 */, -/* 22 */ -/***/ (function(module, exports) { - -module.exports = __webpack_require__(139); +const NODE_HASHES = new Set(crypto.getHashes()) -/***/ }), -/* 23 */ -/***/ (function(module, exports) { +// This is a Best Effort™ at a reasonable priority for hash algos +const DEFAULT_PRIORITY = [ + 'md5', 'whirlpool', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512', + // TODO - it's unclear _which_ of these Node will actually use as its name + // for the algorithm, so we guesswork it based on the OpenSSL names. + 'sha3', + 'sha3-256', 'sha3-384', 'sha3-512', + 'sha3_256', 'sha3_384', 'sha3_512' +].filter(algo => NODE_HASHES.has(algo)) -var core = module.exports = { version: '2.5.7' }; -if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef +function getPrioritizedHash (algo1, algo2) { + return DEFAULT_PRIORITY.indexOf(algo1.toLowerCase()) >= DEFAULT_PRIORITY.indexOf(algo2.toLowerCase()) + ? algo1 + : algo2 +} /***/ }), -/* 24 */, -/* 25 */, -/* 26 */, -/* 27 */ +/* 56 */, +/* 57 */, +/* 58 */, +/* 59 */, +/* 60 */ /***/ (function(module, exports, __webpack_require__) { -var isObject = __webpack_require__(34); -module.exports = function (it) { - if (!isObject(it)) throw TypeError(it + ' is not an object!'); - return it; -}; +module.exports = minimatch +minimatch.Minimatch = Minimatch +var path = { sep: '/' } +try { + path = __webpack_require__(0) +} catch (er) {} -/***/ }), -/* 28 */, -/* 29 */ -/***/ (function(module, exports, __webpack_require__) { +var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} +var expand = __webpack_require__(175) -"use strict"; +var plTypes = { + '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, + '?': { open: '(?:', close: ')?' }, + '+': { open: '(?:', close: ')+' }, + '*': { open: '(?:', close: ')*' }, + '@': { open: '(?:', close: ')' } +} +// any single thing other than / +// don't need to escape / when using new RegExp() +var qmark = '[^/]' -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.normalizePattern = normalizePattern; +// * => any number of characters +var star = qmark + '*?' -/** - * Explode and normalize a pattern into its name and range. - */ +// ** when dots are allowed. Anything goes, except .. and . +// not (^ or / followed by one or two dots followed by $ or /), +// followed by anything, any number of times. +var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' -function normalizePattern(pattern) { - let hasVersion = false; - let range = 'latest'; - let name = pattern; +// not a ^ or / followed by a dot, +// followed by anything, any number of times. +var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' - // if we're a scope then remove the @ and add it back later - let isScoped = false; - if (name[0] === '@') { - isScoped = true; - name = name.slice(1); - } +// characters that need to be escaped in RegExp. +var reSpecials = charSet('().*{}+?[]^$\\!') - // take first part as the name - const parts = name.split('@'); - if (parts.length > 1) { - name = parts.shift(); - range = parts.join('@'); +// "abc" -> { a:true, b:true, c:true } +function charSet (s) { + return s.split('').reduce(function (set, c) { + set[c] = true + return set + }, {}) +} - if (range) { - hasVersion = true; - } else { - range = '*'; - } - } +// normalizes slashes. +var slashSplit = /\/+/ - // add back @ scope suffix - if (isScoped) { - name = `@${name}`; +minimatch.filter = filter +function filter (pattern, options) { + options = options || {} + return function (p, i, list) { + return minimatch(p, pattern, options) } - - return { name, range, hasVersion }; } -/***/ }), -/* 30 */, -/* 31 */ -/***/ (function(module, exports, __webpack_require__) { - -var dP = __webpack_require__(50); -var createDesc = __webpack_require__(106); -module.exports = __webpack_require__(33) ? function (object, key, value) { - return dP.f(object, key, createDesc(1, value)); -} : function (object, key, value) { - object[key] = value; - return object; -}; +function ext (a, b) { + a = a || {} + b = b || {} + var t = {} + Object.keys(b).forEach(function (k) { + t[k] = b[k] + }) + Object.keys(a).forEach(function (k) { + t[k] = a[k] + }) + return t +} +minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) return minimatch -/***/ }), -/* 32 */ -/***/ (function(module, exports, __webpack_require__) { + var orig = minimatch -/* eslint-disable node/no-deprecated-api */ -var buffer = __webpack_require__(63) -var Buffer = buffer.Buffer + var m = function minimatch (p, pattern, options) { + return orig.minimatch(p, pattern, ext(def, options)) + } -// alternative to using Object.keys for old browsers -function copyProps (src, dst) { - for (var key in src) { - dst[key] = src[key] + m.Minimatch = function Minimatch (pattern, options) { + return new orig.Minimatch(pattern, ext(def, options)) } -} -if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { - module.exports = buffer -} else { - // Copy properties from require('buffer') - copyProps(buffer, exports) - exports.Buffer = SafeBuffer -} -function SafeBuffer (arg, encodingOrOffset, length) { - return Buffer(arg, encodingOrOffset, length) + return m } -// Copy static methods from Buffer -copyProps(Buffer, SafeBuffer) - -SafeBuffer.from = function (arg, encodingOrOffset, length) { - if (typeof arg === 'number') { - throw new TypeError('Argument must not be a number') - } - return Buffer(arg, encodingOrOffset, length) +Minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) return Minimatch + return minimatch.defaults(def).Minimatch } -SafeBuffer.alloc = function (size, fill, encoding) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - var buf = Buffer(size) - if (fill !== undefined) { - if (typeof encoding === 'string') { - buf.fill(fill, encoding) - } else { - buf.fill(fill) - } - } else { - buf.fill(0) +function minimatch (p, pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('glob pattern string required') } - return buf -} -SafeBuffer.allocUnsafe = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return Buffer(size) -} + if (!options) options = {} -SafeBuffer.allocUnsafeSlow = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') + // shortcut: comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + return false } - return buffer.SlowBuffer(size) -} + // "" only matches "" + if (pattern.trim() === '') return p === '' -/***/ }), -/* 33 */ -/***/ (function(module, exports, __webpack_require__) { - -// Thank's IE8 for his funny defineProperty -module.exports = !__webpack_require__(85)(function () { - return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; -}); + return new Minimatch(pattern, options).match(p) +} +function Minimatch (pattern, options) { + if (!(this instanceof Minimatch)) { + return new Minimatch(pattern, options) + } -/***/ }), -/* 34 */ -/***/ (function(module, exports) { + if (typeof pattern !== 'string') { + throw new TypeError('glob pattern string required') + } -module.exports = function (it) { - return typeof it === 'object' ? it !== null : typeof it === 'function'; -}; + if (!options) options = {} + pattern = pattern.trim() + // windows support: need to use /, not \ + if (path.sep !== '/') { + pattern = pattern.split(path.sep).join('/') + } -/***/ }), -/* 35 */ -/***/ (function(module, exports) { + this.options = options + this.set = [] + this.pattern = pattern + this.regexp = null + this.negate = false + this.comment = false + this.empty = false -module.exports = {}; + // make the set of regexps etc. + this.make() +} +Minimatch.prototype.debug = function () {} -/***/ }), -/* 36 */ -/***/ (function(module, exports) { +Minimatch.prototype.make = make +function make () { + // don't do it more than once. + if (this._made) return -module.exports = __webpack_require__(120); + var pattern = this.pattern + var options = this.options -/***/ }), -/* 37 */, -/* 38 */, -/* 39 */, -/* 40 */ -/***/ (function(module, exports, __webpack_require__) { + // empty patterns and comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + this.comment = true + return + } + if (!pattern) { + this.empty = true + return + } -"use strict"; + // step 1: figure out negation, etc. + this.parseNegate() + // step 2: expand braces + var set = this.globSet = this.braceExpand() -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.wait = wait; -exports.promisify = promisify; -exports.queue = queue; -function wait(delay) { - return new Promise(resolve => { - setTimeout(resolve, delay); - }); -} + if (options.debug) this.debug = console.error -function promisify(fn, firstData) { - return function (...args) { - return new Promise(function (resolve, reject) { - args.push(function (err, ...result) { - let res = result; + this.debug(this.pattern, set) - if (result.length <= 1) { - res = result[0]; - } + // step 3: now we have a set, so turn each one into a series of path-portion + // matching patterns. + // These will be regexps, except in the case of "**", which is + // set to the GLOBSTAR object for globstar behavior, + // and will not contain any / characters + set = this.globParts = set.map(function (s) { + return s.split(slashSplit) + }) - if (firstData) { - res = err; - err = null; - } + this.debug(this.pattern, set) - if (err) { - reject(err); - } else { - resolve(res); - } - }); + // glob --> regexps + set = set.map(function (s, si, set) { + return s.map(this.parse, this) + }, this) - fn.apply(null, args); - }); - }; -} + this.debug(this.pattern, set) -function queue(arr, promiseProducer, concurrency = Infinity) { - concurrency = Math.min(concurrency, arr.length); + // filter out everything that didn't compile properly. + set = set.filter(function (s) { + return s.indexOf(false) === -1 + }) - // clone - arr = arr.slice(); + this.debug(this.pattern, set) - const results = []; - let total = arr.length; - if (!total) { - return Promise.resolve(results); - } + this.set = set +} - return new Promise((resolve, reject) => { - for (let i = 0; i < concurrency; i++) { - next(); - } +Minimatch.prototype.parseNegate = parseNegate +function parseNegate () { + var pattern = this.pattern + var negate = false + var options = this.options + var negateOffset = 0 - function next() { - const item = arr.shift(); - const promise = promiseProducer(item); + if (options.nonegate) return - promise.then(function (result) { - results.push(result); + for (var i = 0, l = pattern.length + ; i < l && pattern.charAt(i) === '!' + ; i++) { + negate = !negate + negateOffset++ + } - total--; - if (total === 0) { - resolve(results); - } else { - if (arr.length) { - next(); - } - } - }, reject); - } - }); + if (negateOffset) this.pattern = pattern.substr(negateOffset) + this.negate = negate } -/***/ }), -/* 41 */ -/***/ (function(module, exports, __webpack_require__) { +// Brace expansion: +// a{b,c}d -> abd acd +// a{b,}c -> abc ac +// a{0..3}d -> a0d a1d a2d a3d +// a{b,c{d,e}f}g -> abg acdfg acefg +// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg +// +// Invalid sets are not expanded. +// a{2..}b -> a{2..}b +// a{b}c -> a{b}c +minimatch.braceExpand = function (pattern, options) { + return braceExpand(pattern, options) +} -var global = __webpack_require__(11); -var core = __webpack_require__(23); -var ctx = __webpack_require__(48); -var hide = __webpack_require__(31); -var has = __webpack_require__(49); -var PROTOTYPE = 'prototype'; +Minimatch.prototype.braceExpand = braceExpand -var $export = function (type, name, source) { - var IS_FORCED = type & $export.F; - var IS_GLOBAL = type & $export.G; - var IS_STATIC = type & $export.S; - var IS_PROTO = type & $export.P; - var IS_BIND = type & $export.B; - var IS_WRAP = type & $export.W; - var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); - var expProto = exports[PROTOTYPE]; - var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]; - var key, own, out; - if (IS_GLOBAL) source = name; - for (key in source) { - // contains in native - own = !IS_FORCED && target && target[key] !== undefined; - if (own && has(exports, key)) continue; - // export native or passed - out = own ? target[key] : source[key]; - // prevent global pollution for namespaces - exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] - // bind timers to global for call from export context - : IS_BIND && own ? ctx(out, global) - // wrap global constructors for prevent change them in library - : IS_WRAP && target[key] == out ? (function (C) { - var F = function (a, b, c) { - if (this instanceof C) { - switch (arguments.length) { - case 0: return new C(); - case 1: return new C(a); - case 2: return new C(a, b); - } return new C(a, b, c); - } return C.apply(this, arguments); - }; - F[PROTOTYPE] = C[PROTOTYPE]; - return F; - // make static versions for prototype methods - })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; - // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% - if (IS_PROTO) { - (exports.virtual || (exports.virtual = {}))[key] = out; - // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% - if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out); +function braceExpand (pattern, options) { + if (!options) { + if (this instanceof Minimatch) { + options = this.options + } else { + options = {} } } -}; -// type bitmap -$export.F = 1; // forced -$export.G = 2; // global -$export.S = 4; // static -$export.P = 8; // proto -$export.B = 16; // bind -$export.W = 32; // wrap -$export.U = 64; // safe -$export.R = 128; // real proto method for `library` -module.exports = $export; + pattern = typeof pattern === 'undefined' + ? this.pattern : pattern -/***/ }), -/* 42 */ -/***/ (function(module, exports, __webpack_require__) { + if (typeof pattern === 'undefined') { + throw new TypeError('undefined pattern') + } -try { - var util = __webpack_require__(2); - if (typeof util.inherits !== 'function') throw ''; - module.exports = util.inherits; -} catch (e) { - module.exports = __webpack_require__(224); + if (options.nobrace || + !pattern.match(/\{.*\}/)) { + // shortcut. no need to expand. + return [pattern] + } + + return expand(pattern) } +// parse a component of the expanded set. +// At this point, no pattern may contain "/" in it +// so we're going to return a 2d array, where each entry is the full +// pattern, split on '/', and then turned into a regular expression. +// A regexp is made at the end which joins each array with an +// escaped /, and another full one which joins each regexp with |. +// +// Following the lead of Bash 4.1, note that "**" only has special meaning +// when it is the *only* thing in a path portion. Otherwise, any series +// of * is equivalent to a single *. Globstar behavior is enabled by +// default, and can be disabled by setting options.noglobstar. +Minimatch.prototype.parse = parse +var SUBPARSE = {} +function parse (pattern, isSub) { + if (pattern.length > 1024 * 64) { + throw new TypeError('pattern is too long') + } -/***/ }), -/* 43 */, -/* 44 */, -/* 45 */ -/***/ (function(module, exports, __webpack_require__) { + var options = this.options -"use strict"; + // shortcuts + if (!options.noglobstar && pattern === '**') return GLOBSTAR + if (pattern === '') return '' + var re = '' + var hasMagic = !!options.nocase + var escaping = false + // ? => one single character + var patternListStack = [] + var negativeLists = [] + var stateChar + var inClass = false + var reClassStart = -1 + var classStart = -1 + // . and .. never match anything that doesn't start with ., + // even when options.dot is set. + var patternStart = pattern.charAt(0) === '.' ? '' // anything + // not (start or / followed by . or .. followed by / or end) + : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' + : '(?!\\.)' + var self = this -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.home = undefined; + function clearStateChar () { + if (stateChar) { + // we had some state-tracking character + // that wasn't consumed by this pass. + switch (stateChar) { + case '*': + re += star + hasMagic = true + break + case '?': + re += qmark + hasMagic = true + break + default: + re += '\\' + stateChar + break + } + self.debug('clearStateChar %j %j', stateChar, re) + stateChar = false + } + } -var _rootUser; + for (var i = 0, len = pattern.length, c + ; (i < len) && (c = pattern.charAt(i)) + ; i++) { + this.debug('%s\t%s %s %j', pattern, i, re, c) -function _load_rootUser() { - return _rootUser = _interopRequireDefault(__webpack_require__(169)); -} + // skip over any that are escaped. + if (escaping && reSpecials[c]) { + re += '\\' + c + escaping = false + continue + } -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + switch (c) { + case '/': + // completely not allowed, even escaped. + // Should already be path-split by now. + return false -const path = __webpack_require__(0); + case '\\': + clearStateChar() + escaping = true + continue -const home = exports.home = __webpack_require__(36).homedir(); + // the various stateChar values + // for the "extglob" stuff. + case '?': + case '*': + case '+': + case '@': + case '!': + this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) -const userHomeDir = (_rootUser || _load_rootUser()).default ? path.resolve('/usr/local/share') : home; + // all of those are literals inside a class, except that + // the glob [!a] means [^a] in regexp + if (inClass) { + this.debug(' in class') + if (c === '!' && i === classStart + 1) c = '^' + re += c + continue + } -exports.default = userHomeDir; + // if we already have a stateChar, then it means + // that there was something like ** or +? in there. + // Handle the stateChar, then proceed with this one. + self.debug('call clearStateChar %j', stateChar) + clearStateChar() + stateChar = c + // if extglob is disabled, then +(asdf|foo) isn't a thing. + // just clear the statechar *now*, rather than even diving into + // the patternList stuff. + if (options.noext) clearStateChar() + continue -/***/ }), -/* 46 */ -/***/ (function(module, exports) { + case '(': + if (inClass) { + re += '(' + continue + } -module.exports = function (it) { - if (typeof it != 'function') throw TypeError(it + ' is not a function!'); - return it; -}; + if (!stateChar) { + re += '\\(' + continue + } + patternListStack.push({ + type: stateChar, + start: i - 1, + reStart: re.length, + open: plTypes[stateChar].open, + close: plTypes[stateChar].close + }) + // negation is (?:(?!js)[^/]*) + re += stateChar === '!' ? '(?:(?!(?:' : '(?:' + this.debug('plType %j %j', stateChar, re) + stateChar = false + continue -/***/ }), -/* 47 */ -/***/ (function(module, exports) { + case ')': + if (inClass || !patternListStack.length) { + re += '\\)' + continue + } -var toString = {}.toString; + clearStateChar() + hasMagic = true + var pl = patternListStack.pop() + // negation is (?:(?!js)[^/]*) + // The others are (?:) + re += pl.close + if (pl.type === '!') { + negativeLists.push(pl) + } + pl.reEnd = re.length + continue -module.exports = function (it) { - return toString.call(it).slice(8, -1); -}; + case '|': + if (inClass || !patternListStack.length || escaping) { + re += '\\|' + escaping = false + continue + } + clearStateChar() + re += '|' + continue -/***/ }), -/* 48 */ -/***/ (function(module, exports, __webpack_require__) { + // these are mostly the same in regexp and glob + case '[': + // swallow any state-tracking char before the [ + clearStateChar() -// optional / simple context binding -var aFunction = __webpack_require__(46); -module.exports = function (fn, that, length) { - aFunction(fn); - if (that === undefined) return fn; - switch (length) { - case 1: return function (a) { - return fn.call(that, a); - }; - case 2: return function (a, b) { - return fn.call(that, a, b); - }; - case 3: return function (a, b, c) { - return fn.call(that, a, b, c); - }; - } - return function (/* ...args */) { - return fn.apply(that, arguments); - }; -}; + if (inClass) { + re += '\\' + c + continue + } + inClass = true + classStart = i + reClassStart = re.length + re += c + continue -/***/ }), -/* 49 */ -/***/ (function(module, exports) { + case ']': + // a right bracket shall lose its special + // meaning and represent itself in + // a bracket expression if it occurs + // first in the list. -- POSIX.2 2.8.3.2 + if (i === classStart + 1 || !inClass) { + re += '\\' + c + escaping = false + continue + } -var hasOwnProperty = {}.hasOwnProperty; -module.exports = function (it, key) { - return hasOwnProperty.call(it, key); -}; + // handle the case where we left a class open. + // "[z-a]" is valid, equivalent to "\[z-a\]" + if (inClass) { + // split where the last [ was, make sure we don't have + // an invalid re. if so, re-walk the contents of the + // would-be class to re-translate any characters that + // were passed through as-is + // TODO: It would probably be faster to determine this + // without a try/catch and a new RegExp, but it's tricky + // to do safely. For now, this is safe and works. + var cs = pattern.substring(classStart + 1, i) + try { + RegExp('[' + cs + ']') + } catch (er) { + // not a valid class! + var sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' + hasMagic = hasMagic || sp[1] + inClass = false + continue + } + } + // finish up the class. + hasMagic = true + inClass = false + re += c + continue -/***/ }), -/* 50 */ -/***/ (function(module, exports, __webpack_require__) { + default: + // swallow any state char that wasn't consumed + clearStateChar() -var anObject = __webpack_require__(27); -var IE8_DOM_DEFINE = __webpack_require__(184); -var toPrimitive = __webpack_require__(201); -var dP = Object.defineProperty; + if (escaping) { + // no need + escaping = false + } else if (reSpecials[c] + && !(c === '^' && inClass)) { + re += '\\' + } -exports.f = __webpack_require__(33) ? Object.defineProperty : function defineProperty(O, P, Attributes) { - anObject(O); - P = toPrimitive(P, true); - anObject(Attributes); - if (IE8_DOM_DEFINE) try { - return dP(O, P, Attributes); - } catch (e) { /* empty */ } - if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); - if ('value' in Attributes) O[P] = Attributes.value; - return O; -}; + re += c + } // switch + } // for -/***/ }), -/* 51 */, -/* 52 */, -/* 53 */, -/* 54 */ -/***/ (function(module, exports) { + // handle the case where we left a class open. + // "[abc" is valid, equivalent to "\[abc" + if (inClass) { + // split where the last [ was, and escape it + // this is a huge pita. We now have to re-walk + // the contents of the would-be class to re-translate + // any characters that were passed through as-is + cs = pattern.substr(classStart + 1) + sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + hasMagic = hasMagic || sp[1] + } -module.exports = __webpack_require__(155); + // handle the case where we had a +( thing at the *end* + // of the pattern. + // each pattern list stack adds 3 chars, and we need to go through + // and escape any | chars that were passed through as-is for the regexp. + // Go through and escape them, taking care not to double-escape any + // | chars that were already escaped. + for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { + var tail = re.slice(pl.reStart + pl.open.length) + this.debug('setting tail', re, pl) + // maybe some even number of \, then maybe 1 \, followed by a | + tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { + if (!$2) { + // the | isn't already escaped, so escape it. + $2 = '\\' + } -/***/ }), -/* 55 */ -/***/ (function(module, exports, __webpack_require__) { + // need to escape all those slashes *again*, without escaping the + // one that we need for escaping the | character. As it works out, + // escaping an even number of slashes can be done by simply repeating + // it exactly after itself. That's why this trick works. + // + // I am sorry that you have to see this. + return $1 + $1 + $2 + '|' + }) -"use strict"; + this.debug('tail=%j\n %s', tail, tail, pl, re) + var t = pl.type === '*' ? star + : pl.type === '?' ? qmark + : '\\' + pl.type + hasMagic = true + re = re.slice(0, pl.reStart) + t + '\\(' + tail + } -const Buffer = __webpack_require__(32).Buffer + // handle trailing things that only matter at the very end. + clearStateChar() + if (escaping) { + // trailing \\ + re += '\\\\' + } -const crypto = __webpack_require__(9) -const Transform = __webpack_require__(17).Transform + // only need to apply the nodot start if the re starts with + // something that could conceivably capture a dot + var addPatternStart = false + switch (re.charAt(0)) { + case '.': + case '[': + case '(': addPatternStart = true + } -const SPEC_ALGORITHMS = ['sha256', 'sha384', 'sha512'] + // Hack to work around lack of negative lookbehind in JS + // A pattern like: *.!(x).!(y|z) needs to ensure that a name + // like 'a.xyz.yz' doesn't match. So, the first negative + // lookahead, has to look ALL the way ahead, to the end of + // the pattern. + for (var n = negativeLists.length - 1; n > -1; n--) { + var nl = negativeLists[n] -const BASE64_REGEX = /^[a-z0-9+/]+(?:=?=?)$/i -const SRI_REGEX = /^([^-]+)-([^?]+)([?\S*]*)$/ -const STRICT_SRI_REGEX = /^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)*$/ -const VCHAR_REGEX = /^[\x21-\x7E]+$/ + var nlBefore = re.slice(0, nl.reStart) + var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) + var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + var nlAfter = re.slice(nl.reEnd) -class Hash { - get isHash () { return true } - constructor (hash, opts) { - const strict = !!(opts && opts.strict) - this.source = hash.trim() - // 3.1. Integrity metadata (called "Hash" by ssri) - // https://w3c.github.io/webappsec-subresource-integrity/#integrity-metadata-description - const match = this.source.match( - strict - ? STRICT_SRI_REGEX - : SRI_REGEX - ) - if (!match) { return } - if (strict && !SPEC_ALGORITHMS.some(a => a === match[1])) { return } - this.algorithm = match[1] - this.digest = match[2] + nlLast += nlAfter - const rawOpts = match[3] - this.options = rawOpts ? rawOpts.slice(1).split('?') : [] - } - hexDigest () { - return this.digest && Buffer.from(this.digest, 'base64').toString('hex') - } - toJSON () { - return this.toString() - } - toString (opts) { - if (opts && opts.strict) { - // Strict mode enforces the standard as close to the foot of the - // letter as it can. - if (!( - // The spec has very restricted productions for algorithms. - // https://www.w3.org/TR/CSP2/#source-list-syntax - SPEC_ALGORITHMS.some(x => x === this.algorithm) && - // Usually, if someone insists on using a "different" base64, we - // leave it as-is, since there's multiple standards, and the - // specified is not a URL-safe variant. - // https://www.w3.org/TR/CSP2/#base64_value - this.digest.match(BASE64_REGEX) && - // Option syntax is strictly visual chars. - // https://w3c.github.io/webappsec-subresource-integrity/#grammardef-option-expression - // https://tools.ietf.org/html/rfc5234#appendix-B.1 - (this.options || []).every(opt => opt.match(VCHAR_REGEX)) - )) { - return '' - } + // Handle nested stuff like *(*.js|!(*.json)), where open parens + // mean that we should *not* include the ) in the bit that is considered + // "after" the negated section. + var openParensBefore = nlBefore.split('(').length - 1 + var cleanAfter = nlAfter + for (i = 0; i < openParensBefore; i++) { + cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') } - const options = this.options && this.options.length - ? `?${this.options.join('?')}` - : '' - return `${this.algorithm}-${this.digest}${options}` - } -} + nlAfter = cleanAfter -class Integrity { - get isIntegrity () { return true } - toJSON () { - return this.toString() - } - toString (opts) { - opts = opts || {} - let sep = opts.sep || ' ' - if (opts.strict) { - // Entries must be separated by whitespace, according to spec. - sep = sep.replace(/\S+/g, ' ') + var dollar = '' + if (nlAfter === '' && isSub !== SUBPARSE) { + dollar = '$' } - return Object.keys(this).map(k => { - return this[k].map(hash => { - return Hash.prototype.toString.call(hash, opts) - }).filter(x => x.length).join(sep) - }).filter(x => x.length).join(sep) - } - concat (integrity, opts) { - const other = typeof integrity === 'string' - ? integrity - : stringify(integrity, opts) - return parse(`${this.toString(opts)} ${other}`, opts) - } - hexDigest () { - return parse(this, {single: true}).hexDigest() + var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast + re = newRe } - match (integrity, opts) { - const other = parse(integrity, opts) - const algo = other.pickAlgorithm(opts) - return ( - this[algo] && - other[algo] && - this[algo].find(hash => - other[algo].find(otherhash => - hash.digest === otherhash.digest - ) - ) - ) || false + + // if the re is not "" at this point, then we need to make sure + // it doesn't match against an empty path part. + // Otherwise a/* will match a/, which it should not. + if (re !== '' && hasMagic) { + re = '(?=.)' + re } - pickAlgorithm (opts) { - const pickAlgorithm = (opts && opts.pickAlgorithm) || getPrioritizedHash - const keys = Object.keys(this) - if (!keys.length) { - throw new Error(`No algorithms available for ${ - JSON.stringify(this.toString()) - }`) - } - return keys.reduce((acc, algo) => { - return pickAlgorithm(acc, algo) || acc - }) + + if (addPatternStart) { + re = patternStart + re } -} -module.exports.parse = parse -function parse (sri, opts) { - opts = opts || {} - if (typeof sri === 'string') { - return _parse(sri, opts) - } else if (sri.algorithm && sri.digest) { - const fullSri = new Integrity() - fullSri[sri.algorithm] = [sri] - return _parse(stringify(fullSri, opts), opts) - } else { - return _parse(stringify(sri, opts), opts) + // parsing just a piece of a larger pattern. + if (isSub === SUBPARSE) { + return [re, hasMagic] } -} -function _parse (integrity, opts) { - // 3.4.3. Parse metadata - // https://w3c.github.io/webappsec-subresource-integrity/#parse-metadata - if (opts.single) { - return new Hash(integrity, opts) + // skip the regexp for non-magical patterns + // unescape anything in it, though, so that it'll be + // an exact match against a file etc. + if (!hasMagic) { + return globUnescape(pattern) } - return integrity.trim().split(/\s+/).reduce((acc, string) => { - const hash = new Hash(string, opts) - if (hash.algorithm && hash.digest) { - const algo = hash.algorithm - if (!acc[algo]) { acc[algo] = [] } - acc[algo].push(hash) - } - return acc - }, new Integrity()) -} -module.exports.stringify = stringify -function stringify (obj, opts) { - if (obj.algorithm && obj.digest) { - return Hash.prototype.toString.call(obj, opts) - } else if (typeof obj === 'string') { - return stringify(parse(obj, opts), opts) - } else { - return Integrity.prototype.toString.call(obj, opts) + var flags = options.nocase ? 'i' : '' + try { + var regExp = new RegExp('^' + re + '$', flags) + } catch (er) { + // If it was an invalid regular expression, then it can't match + // anything. This trick looks for a character after the end of + // the string, which is of course impossible, except in multi-line + // mode, but it's not a /m regex. + return new RegExp('$.') } -} -module.exports.fromHex = fromHex -function fromHex (hexDigest, algorithm, opts) { - const optString = (opts && opts.options && opts.options.length) - ? `?${opts.options.join('?')}` - : '' - return parse( - `${algorithm}-${ - Buffer.from(hexDigest, 'hex').toString('base64') - }${optString}`, opts - ) -} + regExp._glob = pattern + regExp._src = re -module.exports.fromData = fromData -function fromData (data, opts) { - opts = opts || {} - const algorithms = opts.algorithms || ['sha512'] - const optString = opts.options && opts.options.length - ? `?${opts.options.join('?')}` - : '' - return algorithms.reduce((acc, algo) => { - const digest = crypto.createHash(algo).update(data).digest('base64') - const hash = new Hash( - `${algo}-${digest}${optString}`, - opts - ) - if (hash.algorithm && hash.digest) { - const algo = hash.algorithm - if (!acc[algo]) { acc[algo] = [] } - acc[algo].push(hash) - } - return acc - }, new Integrity()) + return regExp } -module.exports.fromStream = fromStream -function fromStream (stream, opts) { - opts = opts || {} - const P = opts.Promise || Promise - const istream = integrityStream(opts) - return new P((resolve, reject) => { - stream.pipe(istream) - stream.on('error', reject) - istream.on('error', reject) - let sri - istream.on('integrity', s => { sri = s }) - istream.on('end', () => resolve(sri)) - istream.on('data', () => {}) - }) +minimatch.makeRe = function (pattern, options) { + return new Minimatch(pattern, options || {}).makeRe() } -module.exports.checkData = checkData -function checkData (data, sri, opts) { - opts = opts || {} - sri = parse(sri, opts) - if (!Object.keys(sri).length) { - if (opts.error) { - throw Object.assign( - new Error('No valid integrity hashes to check against'), { - code: 'EINTEGRITY' - } - ) - } else { - return false - } - } - const algorithm = sri.pickAlgorithm(opts) - const digest = crypto.createHash(algorithm).update(data).digest('base64') - const newSri = parse({algorithm, digest}) - const match = newSri.match(sri, opts) - if (match || !opts.error) { - return match - } else if (typeof opts.size === 'number' && (data.length !== opts.size)) { - const err = new Error(`data size mismatch when checking ${sri}.\n Wanted: ${opts.size}\n Found: ${data.length}`) - err.code = 'EBADSIZE' - err.found = data.length - err.expected = opts.size - err.sri = sri - throw err - } else { - const err = new Error(`Integrity checksum failed when using ${algorithm}: Wanted ${sri}, but got ${newSri}. (${data.length} bytes)`) - err.code = 'EINTEGRITY' - err.found = newSri - err.expected = sri - err.algorithm = algorithm - err.sri = sri - throw err +Minimatch.prototype.makeRe = makeRe +function makeRe () { + if (this.regexp || this.regexp === false) return this.regexp + + // at this point, this.set is a 2d array of partial + // pattern strings, or "**". + // + // It's better to use .match(). This function shouldn't + // be used, really, but it's pretty convenient sometimes, + // when you just want to work with a regex. + var set = this.set + + if (!set.length) { + this.regexp = false + return this.regexp } -} + var options = this.options -module.exports.checkStream = checkStream -function checkStream (stream, sri, opts) { - opts = opts || {} - const P = opts.Promise || Promise - const checker = integrityStream(Object.assign({}, opts, { - integrity: sri - })) - return new P((resolve, reject) => { - stream.pipe(checker) - stream.on('error', reject) - checker.on('error', reject) - let sri - checker.on('verified', s => { sri = s }) - checker.on('end', () => resolve(sri)) - checker.on('data', () => {}) - }) -} + var twoStar = options.noglobstar ? star + : options.dot ? twoStarDot + : twoStarNoDot + var flags = options.nocase ? 'i' : '' -module.exports.integrityStream = integrityStream -function integrityStream (opts) { - opts = opts || {} - // For verification - const sri = opts.integrity && parse(opts.integrity, opts) - const goodSri = sri && Object.keys(sri).length - const algorithm = goodSri && sri.pickAlgorithm(opts) - const digests = goodSri && sri[algorithm] - // Calculating stream - const algorithms = Array.from( - new Set( - (opts.algorithms || ['sha512']) - .concat(algorithm ? [algorithm] : []) - ) - ) - const hashes = algorithms.map(crypto.createHash) - let streamSize = 0 - const stream = new Transform({ - transform (chunk, enc, cb) { - streamSize += chunk.length - hashes.forEach(h => h.update(chunk, enc)) - cb(null, chunk, enc) - } - }).on('end', () => { - const optString = (opts.options && opts.options.length) - ? `?${opts.options.join('?')}` - : '' - const newSri = parse(hashes.map((h, i) => { - return `${algorithms[i]}-${h.digest('base64')}${optString}` - }).join(' '), opts) - // Integrity verification mode - const match = goodSri && newSri.match(sri, opts) - if (typeof opts.size === 'number' && streamSize !== opts.size) { - const err = new Error(`stream size mismatch when checking ${sri}.\n Wanted: ${opts.size}\n Found: ${streamSize}`) - err.code = 'EBADSIZE' - err.found = streamSize - err.expected = opts.size - err.sri = sri - stream.emit('error', err) - } else if (opts.integrity && !match) { - const err = new Error(`${sri} integrity checksum failed when using ${algorithm}: wanted ${digests} but got ${newSri}. (${streamSize} bytes)`) - err.code = 'EINTEGRITY' - err.found = newSri - err.expected = digests - err.algorithm = algorithm - err.sri = sri - stream.emit('error', err) - } else { - stream.emit('size', streamSize) - stream.emit('integrity', newSri) - match && stream.emit('verified', match) - } - }) - return stream -} + var re = set.map(function (pattern) { + return pattern.map(function (p) { + return (p === GLOBSTAR) ? twoStar + : (typeof p === 'string') ? regExpEscape(p) + : p._src + }).join('\\\/') + }).join('|') -module.exports.create = createIntegrity -function createIntegrity (opts) { - opts = opts || {} - const algorithms = opts.algorithms || ['sha512'] - const optString = opts.options && opts.options.length - ? `?${opts.options.join('?')}` - : '' + // must match entire pattern + // ending in a * or ** will make it less strict. + re = '^(?:' + re + ')$' - const hashes = algorithms.map(crypto.createHash) + // can match anything, as long as it's not this. + if (this.negate) re = '^(?!' + re + ').*$' - return { - update: function (chunk, enc) { - hashes.forEach(h => h.update(chunk, enc)) - return this - }, - digest: function (enc) { - const integrity = algorithms.reduce((acc, algo) => { - const digest = hashes.shift().digest('base64') - const hash = new Hash( - `${algo}-${digest}${optString}`, - opts - ) - if (hash.algorithm && hash.digest) { - const algo = hash.algorithm - if (!acc[algo]) { acc[algo] = [] } - acc[algo].push(hash) - } - return acc - }, new Integrity()) + try { + this.regexp = new RegExp(re, flags) + } catch (ex) { + this.regexp = false + } + return this.regexp +} - return integrity - } +minimatch.match = function (list, pattern, options) { + options = options || {} + var mm = new Minimatch(pattern, options) + list = list.filter(function (f) { + return mm.match(f) + }) + if (mm.options.nonull && !list.length) { + list.push(pattern) } + return list } -const NODE_HASHES = new Set(crypto.getHashes()) +Minimatch.prototype.match = match +function match (f, partial) { + this.debug('match', f, this.pattern) + // short-circuit in the case of busted things. + // comments, etc. + if (this.comment) return false + if (this.empty) return f === '' -// This is a Best Effort™ at a reasonable priority for hash algos -const DEFAULT_PRIORITY = [ - 'md5', 'whirlpool', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512', - // TODO - it's unclear _which_ of these Node will actually use as its name - // for the algorithm, so we guesswork it based on the OpenSSL names. - 'sha3', - 'sha3-256', 'sha3-384', 'sha3-512', - 'sha3_256', 'sha3_384', 'sha3_512' -].filter(algo => NODE_HASHES.has(algo)) + if (f === '/' && partial) return true -function getPrioritizedHash (algo1, algo2) { - return DEFAULT_PRIORITY.indexOf(algo1.toLowerCase()) >= DEFAULT_PRIORITY.indexOf(algo2.toLowerCase()) - ? algo1 - : algo2 -} + var options = this.options + // windows: need to use /, not \ + if (path.sep !== '/') { + f = f.split(path.sep).join('/') + } -/***/ }), -/* 56 */, -/* 57 */, -/* 58 */, -/* 59 */, -/* 60 */ -/***/ (function(module, exports, __webpack_require__) { + // treat the test path as a set of pathparts. + f = f.split(slashSplit) + this.debug(this.pattern, 'split', f) -module.exports = minimatch -minimatch.Minimatch = Minimatch + // just ONE of the pattern sets in this.set needs to match + // in order for it to be valid. If negating, then just one + // match means that we have failed. + // Either way, return on the first hit. -var path = { sep: '/' } -try { - path = __webpack_require__(0) -} catch (er) {} + var set = this.set + this.debug(this.pattern, 'set', set) -var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} -var expand = __webpack_require__(175) + // Find the basename of the path by looking for the last non-empty segment + var filename + var i + for (i = f.length - 1; i >= 0; i--) { + filename = f[i] + if (filename) break + } -var plTypes = { - '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, - '?': { open: '(?:', close: ')?' }, - '+': { open: '(?:', close: ')+' }, - '*': { open: '(?:', close: ')*' }, - '@': { open: '(?:', close: ')' } + for (i = 0; i < set.length; i++) { + var pattern = set[i] + var file = f + if (options.matchBase && pattern.length === 1) { + file = [filename] + } + var hit = this.matchOne(file, pattern, partial) + if (hit) { + if (options.flipNegate) return true + return !this.negate + } + } + + // didn't get any hits. this is success if it's a negative + // pattern, failure otherwise. + if (options.flipNegate) return false + return this.negate } -// any single thing other than / -// don't need to escape / when using new RegExp() -var qmark = '[^/]' +// set partial to true to test if, for example, +// "/a/b" matches the start of "/*/b/*/d" +// Partial means, if you run out of file before you run +// out of pattern, then that's fine, as long as all +// the parts match. +Minimatch.prototype.matchOne = function (file, pattern, partial) { + var options = this.options -// * => any number of characters -var star = qmark + '*?' + this.debug('matchOne', + { 'this': this, file: file, pattern: pattern }) -// ** when dots are allowed. Anything goes, except .. and . -// not (^ or / followed by one or two dots followed by $ or /), -// followed by anything, any number of times. -var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' + this.debug('matchOne', file.length, pattern.length) -// not a ^ or / followed by a dot, -// followed by anything, any number of times. -var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' + for (var fi = 0, + pi = 0, + fl = file.length, + pl = pattern.length + ; (fi < fl) && (pi < pl) + ; fi++, pi++) { + this.debug('matchOne loop') + var p = pattern[pi] + var f = file[fi] -// characters that need to be escaped in RegExp. -var reSpecials = charSet('().*{}+?[]^$\\!') + this.debug(pattern, p, f) -// "abc" -> { a:true, b:true, c:true } -function charSet (s) { - return s.split('').reduce(function (set, c) { - set[c] = true - return set - }, {}) -} + // should be impossible. + // some invalid regexp stuff in the set. + if (p === false) return false -// normalizes slashes. -var slashSplit = /\/+/ + if (p === GLOBSTAR) { + this.debug('GLOBSTAR', [pattern, p, f]) -minimatch.filter = filter -function filter (pattern, options) { - options = options || {} - return function (p, i, list) { - return minimatch(p, pattern, options) - } -} + // "**" + // a/**/b/**/c would match the following: + // a/b/x/y/z/c + // a/x/y/z/b/c + // a/b/x/b/x/c + // a/b/c + // To do this, take the rest of the pattern after + // the **, and see if it would match the file remainder. + // If so, return success. + // If not, the ** "swallows" a segment, and try again. + // This is recursively awful. + // + // a/**/b/**/c matching a/b/x/y/z/c + // - a matches a + // - doublestar + // - matchOne(b/x/y/z/c, b/**/c) + // - b matches b + // - doublestar + // - matchOne(x/y/z/c, c) -> no + // - matchOne(y/z/c, c) -> no + // - matchOne(z/c, c) -> no + // - matchOne(c, c) yes, hit + var fr = fi + var pr = pi + 1 + if (pr === pl) { + this.debug('** at the end') + // a ** at the end will just swallow the rest. + // We have found a match. + // however, it will not swallow /.x, unless + // options.dot is set. + // . and .. are *never* matched by **, for explosively + // exponential reasons. + for (; fi < fl; fi++) { + if (file[fi] === '.' || file[fi] === '..' || + (!options.dot && file[fi].charAt(0) === '.')) return false + } + return true + } -function ext (a, b) { - a = a || {} - b = b || {} - var t = {} - Object.keys(b).forEach(function (k) { - t[k] = b[k] - }) - Object.keys(a).forEach(function (k) { - t[k] = a[k] - }) - return t -} + // ok, let's see if we can swallow whatever we can. + while (fr < fl) { + var swallowee = file[fr] -minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return minimatch + this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) - var orig = minimatch + // XXX remove this slice. Just pass the start index. + if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { + this.debug('globstar found match!', fr, fl, swallowee) + // found a match. + return true + } else { + // can't swallow "." or ".." ever. + // can only swallow ".foo" when explicitly asked. + if (swallowee === '.' || swallowee === '..' || + (!options.dot && swallowee.charAt(0) === '.')) { + this.debug('dot detected!', file, fr, pattern, pr) + break + } - var m = function minimatch (p, pattern, options) { - return orig.minimatch(p, pattern, ext(def, options)) + // ** swallows a segment, and continue. + this.debug('globstar swallow a segment, and continue') + fr++ + } + } + + // no match was found. + // However, in partial mode, we can't say this is necessarily over. + // If there's more *pattern* left, then + if (partial) { + // ran out of file + this.debug('\n>>> no match, partial?', file, fr, pattern, pr) + if (fr === fl) return true + } + return false + } + + // something other than ** + // non-magic patterns just have to match exactly + // patterns with magic have been turned into regexps. + var hit + if (typeof p === 'string') { + if (options.nocase) { + hit = f.toLowerCase() === p.toLowerCase() + } else { + hit = f === p + } + this.debug('string match', p, f, hit) + } else { + hit = f.match(p) + this.debug('pattern match', p, f, hit) + } + + if (!hit) return false } - m.Minimatch = function Minimatch (pattern, options) { - return new orig.Minimatch(pattern, ext(def, options)) + // Note: ending in / means that we'll get a final "" + // at the end of the pattern. This can only match a + // corresponding "" at the end of the file. + // If the file ends in /, then it can only match a + // a pattern that ends in /, unless the pattern just + // doesn't have any more for it. But, a/b/ should *not* + // match "a/b/*", even though "" matches against the + // [^/]*? pattern, except in partial mode, where it might + // simply not be reached yet. + // However, a/b/ should still satisfy a/* + + // now either we fell off the end of the pattern, or we're done. + if (fi === fl && pi === pl) { + // ran out of pattern and filename at the same time. + // an exact hit! + return true + } else if (fi === fl) { + // ran out of file, but still had pattern left. + // this is ok if we're doing the match as part of + // a glob fs traversal. + return partial + } else if (pi === pl) { + // ran out of pattern, still have file left. + // this is only acceptable if we're on the very last + // empty segment of a file with a trailing slash. + // a/* should match a/b/ + var emptyFileEnd = (fi === fl - 1) && (file[fi] === '') + return emptyFileEnd } - return m + // should be unreachable. + throw new Error('wtf?') } -Minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return Minimatch - return minimatch.defaults(def).Minimatch +// replace stuff like \* with * +function globUnescape (s) { + return s.replace(/\\(.)/g, '$1') } -function minimatch (p, pattern, options) { - if (typeof pattern !== 'string') { - throw new TypeError('glob pattern string required') - } +function regExpEscape (s) { + return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') +} - if (!options) options = {} - // shortcut: comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - return false - } +/***/ }), +/* 61 */ +/***/ (function(module, exports, __webpack_require__) { - // "" only matches "" - if (pattern.trim() === '') return p === '' +var wrappy = __webpack_require__(123) +module.exports = wrappy(once) +module.exports.strict = wrappy(onceStrict) - return new Minimatch(pattern, options).match(p) -} +once.proto = once(function () { + Object.defineProperty(Function.prototype, 'once', { + value: function () { + return once(this) + }, + configurable: true + }) -function Minimatch (pattern, options) { - if (!(this instanceof Minimatch)) { - return new Minimatch(pattern, options) - } + Object.defineProperty(Function.prototype, 'onceStrict', { + value: function () { + return onceStrict(this) + }, + configurable: true + }) +}) - if (typeof pattern !== 'string') { - throw new TypeError('glob pattern string required') +function once (fn) { + var f = function () { + if (f.called) return f.value + f.called = true + return f.value = fn.apply(this, arguments) } + f.called = false + return f +} - if (!options) options = {} - pattern = pattern.trim() - - // windows support: need to use /, not \ - if (path.sep !== '/') { - pattern = pattern.split(path.sep).join('/') +function onceStrict (fn) { + var f = function () { + if (f.called) + throw new Error(f.onceError) + f.called = true + return f.value = fn.apply(this, arguments) } - - this.options = options - this.set = [] - this.pattern = pattern - this.regexp = null - this.negate = false - this.comment = false - this.empty = false - - // make the set of regexps etc. - this.make() + var name = fn.name || 'Function wrapped with `once`' + f.onceError = name + " shouldn't be called more than once" + f.called = false + return f } -Minimatch.prototype.debug = function () {} -Minimatch.prototype.make = make -function make () { - // don't do it more than once. - if (this._made) return +/***/ }), +/* 62 */, +/* 63 */ +/***/ (function(module, exports) { - var pattern = this.pattern - var options = this.options +module.exports = __webpack_require__(281); - // empty patterns and comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - this.comment = true - return - } - if (!pattern) { - this.empty = true - return - } +/***/ }), +/* 64 */, +/* 65 */, +/* 66 */, +/* 67 */ +/***/ (function(module, exports) { - // step 1: figure out negation, etc. - this.parseNegate() +// 7.2.1 RequireObjectCoercible(argument) +module.exports = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; +}; - // step 2: expand braces - var set = this.globSet = this.braceExpand() - if (options.debug) this.debug = console.error +/***/ }), +/* 68 */ +/***/ (function(module, exports, __webpack_require__) { - this.debug(this.pattern, set) +var isObject = __webpack_require__(34); +var document = __webpack_require__(11).document; +// typeof document.createElement is 'object' in old IE +var is = isObject(document) && isObject(document.createElement); +module.exports = function (it) { + return is ? document.createElement(it) : {}; +}; - // step 3: now we have a set, so turn each one into a series of path-portion - // matching patterns. - // These will be regexps, except in the case of "**", which is - // set to the GLOBSTAR object for globstar behavior, - // and will not contain any / characters - set = this.globParts = set.map(function (s) { - return s.split(slashSplit) - }) - this.debug(this.pattern, set) +/***/ }), +/* 69 */ +/***/ (function(module, exports) { - // glob --> regexps - set = set.map(function (s, si, set) { - return s.map(this.parse, this) - }, this) +module.exports = true; - this.debug(this.pattern, set) - // filter out everything that didn't compile properly. - set = set.filter(function (s) { - return s.indexOf(false) === -1 - }) +/***/ }), +/* 70 */ +/***/ (function(module, exports, __webpack_require__) { - this.debug(this.pattern, set) +"use strict"; - this.set = set -} +// 25.4.1.5 NewPromiseCapability(C) +var aFunction = __webpack_require__(46); -Minimatch.prototype.parseNegate = parseNegate -function parseNegate () { - var pattern = this.pattern - var negate = false - var options = this.options - var negateOffset = 0 +function PromiseCapability(C) { + var resolve, reject; + this.promise = new C(function ($$resolve, $$reject) { + if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aFunction(resolve); + this.reject = aFunction(reject); +} - if (options.nonegate) return +module.exports.f = function (C) { + return new PromiseCapability(C); +}; - for (var i = 0, l = pattern.length - ; i < l && pattern.charAt(i) === '!' - ; i++) { - negate = !negate - negateOffset++ - } - if (negateOffset) this.pattern = pattern.substr(negateOffset) - this.negate = negate -} +/***/ }), +/* 71 */ +/***/ (function(module, exports, __webpack_require__) { -// Brace expansion: -// a{b,c}d -> abd acd -// a{b,}c -> abc ac -// a{0..3}d -> a0d a1d a2d a3d -// a{b,c{d,e}f}g -> abg acdfg acefg -// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg -// -// Invalid sets are not expanded. -// a{2..}b -> a{2..}b -// a{b}c -> a{b}c -minimatch.braceExpand = function (pattern, options) { - return braceExpand(pattern, options) -} +var def = __webpack_require__(50).f; +var has = __webpack_require__(49); +var TAG = __webpack_require__(13)('toStringTag'); -Minimatch.prototype.braceExpand = braceExpand +module.exports = function (it, tag, stat) { + if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag }); +}; -function braceExpand (pattern, options) { - if (!options) { - if (this instanceof Minimatch) { - options = this.options - } else { - options = {} - } - } - pattern = typeof pattern === 'undefined' - ? this.pattern : pattern +/***/ }), +/* 72 */ +/***/ (function(module, exports, __webpack_require__) { - if (typeof pattern === 'undefined') { - throw new TypeError('undefined pattern') - } +var shared = __webpack_require__(107)('keys'); +var uid = __webpack_require__(111); +module.exports = function (key) { + return shared[key] || (shared[key] = uid(key)); +}; - if (options.nobrace || - !pattern.match(/\{.*\}/)) { - // shortcut. no need to expand. - return [pattern] - } - return expand(pattern) -} +/***/ }), +/* 73 */ +/***/ (function(module, exports) { -// parse a component of the expanded set. -// At this point, no pattern may contain "/" in it -// so we're going to return a 2d array, where each entry is the full -// pattern, split on '/', and then turned into a regular expression. -// A regexp is made at the end which joins each array with an -// escaped /, and another full one which joins each regexp with |. -// -// Following the lead of Bash 4.1, note that "**" only has special meaning -// when it is the *only* thing in a path portion. Otherwise, any series -// of * is equivalent to a single *. Globstar behavior is enabled by -// default, and can be disabled by setting options.noglobstar. -Minimatch.prototype.parse = parse -var SUBPARSE = {} -function parse (pattern, isSub) { - if (pattern.length > 1024 * 64) { - throw new TypeError('pattern is too long') - } +// 7.1.4 ToInteger +var ceil = Math.ceil; +var floor = Math.floor; +module.exports = function (it) { + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); +}; - var options = this.options - // shortcuts - if (!options.noglobstar && pattern === '**') return GLOBSTAR - if (pattern === '') return '' +/***/ }), +/* 74 */ +/***/ (function(module, exports, __webpack_require__) { - var re = '' - var hasMagic = !!options.nocase - var escaping = false - // ? => one single character - var patternListStack = [] - var negativeLists = [] - var stateChar - var inClass = false - var reClassStart = -1 - var classStart = -1 - // . and .. never match anything that doesn't start with ., - // even when options.dot is set. - var patternStart = pattern.charAt(0) === '.' ? '' // anything - // not (start or / followed by . or .. followed by / or end) - : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' - : '(?!\\.)' - var self = this +// to indexed object, toObject with fallback for non-array-like ES3 strings +var IObject = __webpack_require__(131); +var defined = __webpack_require__(67); +module.exports = function (it) { + return IObject(defined(it)); +}; - function clearStateChar () { - if (stateChar) { - // we had some state-tracking character - // that wasn't consumed by this pass. - switch (stateChar) { - case '*': - re += star - hasMagic = true - break - case '?': - re += qmark - hasMagic = true - break - default: - re += '\\' + stateChar - break - } - self.debug('clearStateChar %j %j', stateChar, re) - stateChar = false - } - } - for (var i = 0, len = pattern.length, c - ; (i < len) && (c = pattern.charAt(i)) - ; i++) { - this.debug('%s\t%s %s %j', pattern, i, re, c) +/***/ }), +/* 75 */ +/***/ (function(module, exports, __webpack_require__) { - // skip over any that are escaped. - if (escaping && reSpecials[c]) { - re += '\\' + c - escaping = false - continue - } +// Approach: +// +// 1. Get the minimatch set +// 2. For each pattern in the set, PROCESS(pattern, false) +// 3. Store matches per-set, then uniq them +// +// PROCESS(pattern, inGlobStar) +// Get the first [n] items from pattern that are all strings +// Join these together. This is PREFIX. +// If there is no more remaining, then stat(PREFIX) and +// add to matches if it succeeds. END. +// +// If inGlobStar and PREFIX is symlink and points to dir +// set ENTRIES = [] +// else readdir(PREFIX) as ENTRIES +// If fail, END +// +// with ENTRIES +// If pattern[n] is GLOBSTAR +// // handle the case where the globstar match is empty +// // by pruning it out, and testing the resulting pattern +// PROCESS(pattern[0..n] + pattern[n+1 .. $], false) +// // handle other cases. +// for ENTRY in ENTRIES (not dotfiles) +// // attach globstar + tail onto the entry +// // Mark that this entry is a globstar match +// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true) +// +// else // not globstar +// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) +// Test ENTRY against pattern[n] +// If fails, continue +// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) +// +// Caveat: +// Cache all stats and readdirs results to minimize syscall. Since all +// we ever care about is existence and directory-ness, we can just keep +// `true` for files, and [children,...] for directories, or `false` for +// things that don't exist. - switch (c) { - case '/': - // completely not allowed, even escaped. - // Should already be path-split by now. - return false +module.exports = glob - case '\\': - clearStateChar() - escaping = true - continue +var fs = __webpack_require__(3) +var rp = __webpack_require__(114) +var minimatch = __webpack_require__(60) +var Minimatch = minimatch.Minimatch +var inherits = __webpack_require__(42) +var EE = __webpack_require__(54).EventEmitter +var path = __webpack_require__(0) +var assert = __webpack_require__(22) +var isAbsolute = __webpack_require__(76) +var globSync = __webpack_require__(218) +var common = __webpack_require__(115) +var alphasort = common.alphasort +var alphasorti = common.alphasorti +var setopts = common.setopts +var ownProp = common.ownProp +var inflight = __webpack_require__(223) +var util = __webpack_require__(2) +var childrenIgnored = common.childrenIgnored +var isIgnored = common.isIgnored - // the various stateChar values - // for the "extglob" stuff. - case '?': - case '*': - case '+': - case '@': - case '!': - this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) +var once = __webpack_require__(61) - // all of those are literals inside a class, except that - // the glob [!a] means [^a] in regexp - if (inClass) { - this.debug(' in class') - if (c === '!' && i === classStart + 1) c = '^' - re += c - continue - } +function glob (pattern, options, cb) { + if (typeof options === 'function') cb = options, options = {} + if (!options) options = {} - // if we already have a stateChar, then it means - // that there was something like ** or +? in there. - // Handle the stateChar, then proceed with this one. - self.debug('call clearStateChar %j', stateChar) - clearStateChar() - stateChar = c - // if extglob is disabled, then +(asdf|foo) isn't a thing. - // just clear the statechar *now*, rather than even diving into - // the patternList stuff. - if (options.noext) clearStateChar() - continue + if (options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return globSync(pattern, options) + } - case '(': - if (inClass) { - re += '(' - continue - } + return new Glob(pattern, options, cb) +} - if (!stateChar) { - re += '\\(' - continue - } +glob.sync = globSync +var GlobSync = glob.GlobSync = globSync.GlobSync - patternListStack.push({ - type: stateChar, - start: i - 1, - reStart: re.length, - open: plTypes[stateChar].open, - close: plTypes[stateChar].close - }) - // negation is (?:(?!js)[^/]*) - re += stateChar === '!' ? '(?:(?!(?:' : '(?:' - this.debug('plType %j %j', stateChar, re) - stateChar = false - continue +// old api surface +glob.glob = glob - case ')': - if (inClass || !patternListStack.length) { - re += '\\)' - continue - } +function extend (origin, add) { + if (add === null || typeof add !== 'object') { + return origin + } - clearStateChar() - hasMagic = true - var pl = patternListStack.pop() - // negation is (?:(?!js)[^/]*) - // The others are (?:) - re += pl.close - if (pl.type === '!') { - negativeLists.push(pl) - } - pl.reEnd = re.length - continue + var keys = Object.keys(add) + var i = keys.length + while (i--) { + origin[keys[i]] = add[keys[i]] + } + return origin +} - case '|': - if (inClass || !patternListStack.length || escaping) { - re += '\\|' - escaping = false - continue - } +glob.hasMagic = function (pattern, options_) { + var options = extend({}, options_) + options.noprocess = true - clearStateChar() - re += '|' - continue + var g = new Glob(pattern, options) + var set = g.minimatch.set - // these are mostly the same in regexp and glob - case '[': - // swallow any state-tracking char before the [ - clearStateChar() + if (!pattern) + return false - if (inClass) { - re += '\\' + c - continue - } + if (set.length > 1) + return true - inClass = true - classStart = i - reClassStart = re.length - re += c - continue + for (var j = 0; j < set[0].length; j++) { + if (typeof set[0][j] !== 'string') + return true + } - case ']': - // a right bracket shall lose its special - // meaning and represent itself in - // a bracket expression if it occurs - // first in the list. -- POSIX.2 2.8.3.2 - if (i === classStart + 1 || !inClass) { - re += '\\' + c - escaping = false - continue - } + return false +} - // handle the case where we left a class open. - // "[z-a]" is valid, equivalent to "\[z-a\]" - if (inClass) { - // split where the last [ was, make sure we don't have - // an invalid re. if so, re-walk the contents of the - // would-be class to re-translate any characters that - // were passed through as-is - // TODO: It would probably be faster to determine this - // without a try/catch and a new RegExp, but it's tricky - // to do safely. For now, this is safe and works. - var cs = pattern.substring(classStart + 1, i) - try { - RegExp('[' + cs + ']') - } catch (er) { - // not a valid class! - var sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' - hasMagic = hasMagic || sp[1] - inClass = false - continue - } - } +glob.Glob = Glob +inherits(Glob, EE) +function Glob (pattern, options, cb) { + if (typeof options === 'function') { + cb = options + options = null + } - // finish up the class. - hasMagic = true - inClass = false - re += c - continue + if (options && options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return new GlobSync(pattern, options) + } - default: - // swallow any state char that wasn't consumed - clearStateChar() + if (!(this instanceof Glob)) + return new Glob(pattern, options, cb) - if (escaping) { - // no need - escaping = false - } else if (reSpecials[c] - && !(c === '^' && inClass)) { - re += '\\' - } + setopts(this, pattern, options) + this._didRealPath = false - re += c + // process each pattern in the minimatch set + var n = this.minimatch.set.length - } // switch - } // for + // The matches are stored as {: true,...} so that + // duplicates are automagically pruned. + // Later, we do an Object.keys() on these. + // Keep them as a list so we can fill in when nonull is set. + this.matches = new Array(n) - // handle the case where we left a class open. - // "[abc" is valid, equivalent to "\[abc" - if (inClass) { - // split where the last [ was, and escape it - // this is a huge pita. We now have to re-walk - // the contents of the would-be class to re-translate - // any characters that were passed through as-is - cs = pattern.substr(classStart + 1) - sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + '\\[' + sp[0] - hasMagic = hasMagic || sp[1] + if (typeof cb === 'function') { + cb = once(cb) + this.on('error', cb) + this.on('end', function (matches) { + cb(null, matches) + }) } - // handle the case where we had a +( thing at the *end* - // of the pattern. - // each pattern list stack adds 3 chars, and we need to go through - // and escape any | chars that were passed through as-is for the regexp. - // Go through and escape them, taking care not to double-escape any - // | chars that were already escaped. - for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { - var tail = re.slice(pl.reStart + pl.open.length) - this.debug('setting tail', re, pl) - // maybe some even number of \, then maybe 1 \, followed by a | - tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { - if (!$2) { - // the | isn't already escaped, so escape it. - $2 = '\\' - } + var self = this + this._processing = 0 - // need to escape all those slashes *again*, without escaping the - // one that we need for escaping the | character. As it works out, - // escaping an even number of slashes can be done by simply repeating - // it exactly after itself. That's why this trick works. - // - // I am sorry that you have to see this. - return $1 + $1 + $2 + '|' - }) + this._emitQueue = [] + this._processQueue = [] + this.paused = false - this.debug('tail=%j\n %s', tail, tail, pl, re) - var t = pl.type === '*' ? star - : pl.type === '?' ? qmark - : '\\' + pl.type + if (this.noprocess) + return this - hasMagic = true - re = re.slice(0, pl.reStart) + t + '\\(' + tail - } + if (n === 0) + return done() - // handle trailing things that only matter at the very end. - clearStateChar() - if (escaping) { - // trailing \\ - re += '\\\\' + var sync = true + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false, done) } + sync = false - // only need to apply the nodot start if the re starts with - // something that could conceivably capture a dot - var addPatternStart = false - switch (re.charAt(0)) { - case '.': - case '[': - case '(': addPatternStart = true + function done () { + --self._processing + if (self._processing <= 0) { + if (sync) { + process.nextTick(function () { + self._finish() + }) + } else { + self._finish() + } + } } +} - // Hack to work around lack of negative lookbehind in JS - // A pattern like: *.!(x).!(y|z) needs to ensure that a name - // like 'a.xyz.yz' doesn't match. So, the first negative - // lookahead, has to look ALL the way ahead, to the end of - // the pattern. - for (var n = negativeLists.length - 1; n > -1; n--) { - var nl = negativeLists[n] +Glob.prototype._finish = function () { + assert(this instanceof Glob) + if (this.aborted) + return - var nlBefore = re.slice(0, nl.reStart) - var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) - var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) - var nlAfter = re.slice(nl.reEnd) + if (this.realpath && !this._didRealpath) + return this._realpath() - nlLast += nlAfter + common.finish(this) + this.emit('end', this.found) +} - // Handle nested stuff like *(*.js|!(*.json)), where open parens - // mean that we should *not* include the ) in the bit that is considered - // "after" the negated section. - var openParensBefore = nlBefore.split('(').length - 1 - var cleanAfter = nlAfter - for (i = 0; i < openParensBefore; i++) { - cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') - } - nlAfter = cleanAfter +Glob.prototype._realpath = function () { + if (this._didRealpath) + return - var dollar = '' - if (nlAfter === '' && isSub !== SUBPARSE) { - dollar = '$' - } - var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast - re = newRe - } + this._didRealpath = true - // if the re is not "" at this point, then we need to make sure - // it doesn't match against an empty path part. - // Otherwise a/* will match a/, which it should not. - if (re !== '' && hasMagic) { - re = '(?=.)' + re - } + var n = this.matches.length + if (n === 0) + return this._finish() - if (addPatternStart) { - re = patternStart + re - } + var self = this + for (var i = 0; i < this.matches.length; i++) + this._realpathSet(i, next) - // parsing just a piece of a larger pattern. - if (isSub === SUBPARSE) { - return [re, hasMagic] + function next () { + if (--n === 0) + self._finish() } +} - // skip the regexp for non-magical patterns - // unescape anything in it, though, so that it'll be - // an exact match against a file etc. - if (!hasMagic) { - return globUnescape(pattern) - } +Glob.prototype._realpathSet = function (index, cb) { + var matchset = this.matches[index] + if (!matchset) + return cb() - var flags = options.nocase ? 'i' : '' - try { - var regExp = new RegExp('^' + re + '$', flags) - } catch (er) { - // If it was an invalid regular expression, then it can't match - // anything. This trick looks for a character after the end of - // the string, which is of course impossible, except in multi-line - // mode, but it's not a /m regex. - return new RegExp('$.') - } + var found = Object.keys(matchset) + var self = this + var n = found.length - regExp._glob = pattern - regExp._src = re + if (n === 0) + return cb() - return regExp -} + var set = this.matches[index] = Object.create(null) + found.forEach(function (p, i) { + // If there's a problem with the stat, then it means that + // one or more of the links in the realpath couldn't be + // resolved. just return the abs value in that case. + p = self._makeAbs(p) + rp.realpath(p, self.realpathCache, function (er, real) { + if (!er) + set[real] = true + else if (er.syscall === 'stat') + set[p] = true + else + self.emit('error', er) // srsly wtf right here -minimatch.makeRe = function (pattern, options) { - return new Minimatch(pattern, options || {}).makeRe() + if (--n === 0) { + self.matches[index] = set + cb() + } + }) + }) } -Minimatch.prototype.makeRe = makeRe -function makeRe () { - if (this.regexp || this.regexp === false) return this.regexp - - // at this point, this.set is a 2d array of partial - // pattern strings, or "**". - // - // It's better to use .match(). This function shouldn't - // be used, really, but it's pretty convenient sometimes, - // when you just want to work with a regex. - var set = this.set - - if (!set.length) { - this.regexp = false - return this.regexp - } - var options = this.options - - var twoStar = options.noglobstar ? star - : options.dot ? twoStarDot - : twoStarNoDot - var flags = options.nocase ? 'i' : '' - - var re = set.map(function (pattern) { - return pattern.map(function (p) { - return (p === GLOBSTAR) ? twoStar - : (typeof p === 'string') ? regExpEscape(p) - : p._src - }).join('\\\/') - }).join('|') +Glob.prototype._mark = function (p) { + return common.mark(this, p) +} - // must match entire pattern - // ending in a * or ** will make it less strict. - re = '^(?:' + re + ')$' +Glob.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} - // can match anything, as long as it's not this. - if (this.negate) re = '^(?!' + re + ').*$' +Glob.prototype.abort = function () { + this.aborted = true + this.emit('abort') +} - try { - this.regexp = new RegExp(re, flags) - } catch (ex) { - this.regexp = false +Glob.prototype.pause = function () { + if (!this.paused) { + this.paused = true + this.emit('pause') } - return this.regexp } -minimatch.match = function (list, pattern, options) { - options = options || {} - var mm = new Minimatch(pattern, options) - list = list.filter(function (f) { - return mm.match(f) - }) - if (mm.options.nonull && !list.length) { - list.push(pattern) +Glob.prototype.resume = function () { + if (this.paused) { + this.emit('resume') + this.paused = false + if (this._emitQueue.length) { + var eq = this._emitQueue.slice(0) + this._emitQueue.length = 0 + for (var i = 0; i < eq.length; i ++) { + var e = eq[i] + this._emitMatch(e[0], e[1]) + } + } + if (this._processQueue.length) { + var pq = this._processQueue.slice(0) + this._processQueue.length = 0 + for (var i = 0; i < pq.length; i ++) { + var p = pq[i] + this._processing-- + this._process(p[0], p[1], p[2], p[3]) + } + } } - return list } -Minimatch.prototype.match = match -function match (f, partial) { - this.debug('match', f, this.pattern) - // short-circuit in the case of busted things. - // comments, etc. - if (this.comment) return false - if (this.empty) return f === '' - - if (f === '/' && partial) return true +Glob.prototype._process = function (pattern, index, inGlobStar, cb) { + assert(this instanceof Glob) + assert(typeof cb === 'function') - var options = this.options + if (this.aborted) + return - // windows: need to use /, not \ - if (path.sep !== '/') { - f = f.split(path.sep).join('/') + this._processing++ + if (this.paused) { + this._processQueue.push([pattern, index, inGlobStar, cb]) + return } - // treat the test path as a set of pathparts. - f = f.split(slashSplit) - this.debug(this.pattern, 'split', f) + //console.error('PROCESS %d', this._processing, pattern) - // just ONE of the pattern sets in this.set needs to match - // in order for it to be valid. If negating, then just one - // match means that we have failed. - // Either way, return on the first hit. + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. - var set = this.set - this.debug(this.pattern, 'set', set) + // see if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index, cb) + return - // Find the basename of the path by looking for the last non-empty segment - var filename - var i - for (i = f.length - 1; i >= 0; i--) { - filename = f[i] - if (filename) break - } + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break - for (i = 0; i < set.length; i++) { - var pattern = set[i] - var file = f - if (options.matchBase && pattern.length === 1) { - file = [filename] - } - var hit = this.matchOne(file, pattern, partial) - if (hit) { - if (options.flipNegate) return true - return !this.negate - } + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break } - // didn't get any hits. this is success if it's a negative - // pattern, failure otherwise. - if (options.flipNegate) return false - return this.negate -} + var remain = pattern.slice(n) -// set partial to true to test if, for example, -// "/a/b" matches the start of "/*/b/*/d" -// Partial means, if you run out of file before you run -// out of pattern, then that's fine, as long as all -// the parts match. -Minimatch.prototype.matchOne = function (file, pattern, partial) { - var options = this.options + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix - this.debug('matchOne', - { 'this': this, file: file, pattern: pattern }) + var abs = this._makeAbs(read) - this.debug('matchOne', file.length, pattern.length) + //if ignored, skip _processing + if (childrenIgnored(this, read)) + return cb() - for (var fi = 0, - pi = 0, - fl = file.length, - pl = pattern.length - ; (fi < fl) && (pi < pl) - ; fi++, pi++) { - this.debug('matchOne loop') - var p = pattern[pi] - var f = file[fi] + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb) +} - this.debug(pattern, p, f) +Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} - // should be impossible. - // some invalid regexp stuff in the set. - if (p === false) return false +Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { - if (p === GLOBSTAR) { - this.debug('GLOBSTAR', [pattern, p, f]) + // if the abs isn't a dir, then nothing can match! + if (!entries) + return cb() - // "**" - // a/**/b/**/c would match the following: - // a/b/x/y/z/c - // a/x/y/z/b/c - // a/b/x/b/x/c - // a/b/c - // To do this, take the rest of the pattern after - // the **, and see if it would match the file remainder. - // If so, return success. - // If not, the ** "swallows" a segment, and try again. - // This is recursively awful. - // - // a/**/b/**/c matching a/b/x/y/z/c - // - a matches a - // - doublestar - // - matchOne(b/x/y/z/c, b/**/c) - // - b matches b - // - doublestar - // - matchOne(x/y/z/c, c) -> no - // - matchOne(y/z/c, c) -> no - // - matchOne(z/c, c) -> no - // - matchOne(c, c) yes, hit - var fr = fi - var pr = pi + 1 - if (pr === pl) { - this.debug('** at the end') - // a ** at the end will just swallow the rest. - // We have found a match. - // however, it will not swallow /.x, unless - // options.dot is set. - // . and .. are *never* matched by **, for explosively - // exponential reasons. - for (; fi < fl; fi++) { - if (file[fi] === '.' || file[fi] === '..' || - (!options.dot && file[fi].charAt(0) === '.')) return false - } - return true + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) } + if (m) + matchedEntries.push(e) + } + } - // ok, let's see if we can swallow whatever we can. - while (fr < fl) { - var swallowee = file[fr] + //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries) - this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return cb() - // XXX remove this slice. Just pass the start index. - if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { - this.debug('globstar found match!', fr, fl, swallowee) - // found a match. - return true - } else { - // can't swallow "." or ".." ever. - // can only swallow ".foo" when explicitly asked. - if (swallowee === '.' || swallowee === '..' || - (!options.dot && swallowee.charAt(0) === '.')) { - this.debug('dot detected!', file, fr, pattern, pr) - break - } + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. - // ** swallows a segment, and continue. - this.debug('globstar swallow a segment, and continue') - fr++ - } - } + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) - // no match was found. - // However, in partial mode, we can't say this is necessarily over. - // If there's more *pattern* left, then - if (partial) { - // ran out of file - this.debug('\n>>> no match, partial?', file, fr, pattern, pr) - if (fr === fl) return true + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e } - return false - } - // something other than ** - // non-magic patterns just have to match exactly - // patterns with magic have been turned into regexps. - var hit - if (typeof p === 'string') { - if (options.nocase) { - hit = f.toLowerCase() === p.toLowerCase() - } else { - hit = f === p + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) } - this.debug('string match', p, f, hit) - } else { - hit = f.match(p) - this.debug('pattern match', p, f, hit) + this._emitMatch(index, e) } - - if (!hit) return false + // This was the last one, and no stats were needed + return cb() } - // Note: ending in / means that we'll get a final "" - // at the end of the pattern. This can only match a - // corresponding "" at the end of the file. - // If the file ends in /, then it can only match a - // a pattern that ends in /, unless the pattern just - // doesn't have any more for it. But, a/b/ should *not* - // match "a/b/*", even though "" matches against the - // [^/]*? pattern, except in partial mode, where it might - // simply not be reached yet. - // However, a/b/ should still satisfy a/* - - // now either we fell off the end of the pattern, or we're done. - if (fi === fl && pi === pl) { - // ran out of pattern and filename at the same time. - // an exact hit! - return true - } else if (fi === fl) { - // ran out of file, but still had pattern left. - // this is ok if we're doing the match as part of - // a glob fs traversal. - return partial - } else if (pi === pl) { - // ran out of pattern, still have file left. - // this is only acceptable if we're on the very last - // empty segment of a file with a trailing slash. - // a/* should match a/b/ - var emptyFileEnd = (fi === fl - 1) && (file[fi] === '') - return emptyFileEnd + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + this._process([e].concat(remain), index, inGlobStar, cb) } - - // should be unreachable. - throw new Error('wtf?') + cb() } -// replace stuff like \* with * -function globUnescape (s) { - return s.replace(/\\(.)/g, '$1') -} +Glob.prototype._emitMatch = function (index, e) { + if (this.aborted) + return -function regExpEscape (s) { - return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') -} + if (isIgnored(this, e)) + return + if (this.paused) { + this._emitQueue.push([index, e]) + return + } -/***/ }), -/* 61 */ -/***/ (function(module, exports, __webpack_require__) { + var abs = isAbsolute(e) ? e : this._makeAbs(e) -var wrappy = __webpack_require__(123) -module.exports = wrappy(once) -module.exports.strict = wrappy(onceStrict) + if (this.mark) + e = this._mark(e) -once.proto = once(function () { - Object.defineProperty(Function.prototype, 'once', { - value: function () { - return once(this) - }, - configurable: true - }) + if (this.absolute) + e = abs - Object.defineProperty(Function.prototype, 'onceStrict', { - value: function () { - return onceStrict(this) - }, - configurable: true - }) -}) + if (this.matches[index][e]) + return -function once (fn) { - var f = function () { - if (f.called) return f.value - f.called = true - return f.value = fn.apply(this, arguments) + if (this.nodir) { + var c = this.cache[abs] + if (c === 'DIR' || Array.isArray(c)) + return } - f.called = false - return f -} -function onceStrict (fn) { - var f = function () { - if (f.called) - throw new Error(f.onceError) - f.called = true - return f.value = fn.apply(this, arguments) - } - var name = fn.name || 'Function wrapped with `once`' - f.onceError = name + " shouldn't be called more than once" - f.called = false - return f -} + this.matches[index][e] = true + var st = this.statCache[abs] + if (st) + this.emit('stat', e, st) -/***/ }), -/* 62 */, -/* 63 */ -/***/ (function(module, exports) { + this.emit('match', e) +} -module.exports = __webpack_require__(285); +Glob.prototype._readdirInGlobStar = function (abs, cb) { + if (this.aborted) + return -/***/ }), -/* 64 */, -/* 65 */, -/* 66 */, -/* 67 */ -/***/ (function(module, exports) { - -// 7.2.1 RequireObjectCoercible(argument) -module.exports = function (it) { - if (it == undefined) throw TypeError("Can't call method on " + it); - return it; -}; + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false, cb) + var lstatkey = 'lstat\0' + abs + var self = this + var lstatcb = inflight(lstatkey, lstatcb_) -/***/ }), -/* 68 */ -/***/ (function(module, exports, __webpack_require__) { + if (lstatcb) + fs.lstat(abs, lstatcb) -var isObject = __webpack_require__(34); -var document = __webpack_require__(11).document; -// typeof document.createElement is 'object' in old IE -var is = isObject(document) && isObject(document.createElement); -module.exports = function (it) { - return is ? document.createElement(it) : {}; -}; + function lstatcb_ (er, lstat) { + if (er && er.code === 'ENOENT') + return cb() + var isSym = lstat && lstat.isSymbolicLink() + self.symlinks[abs] = isSym -/***/ }), -/* 69 */ -/***/ (function(module, exports) { + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && lstat && !lstat.isDirectory()) { + self.cache[abs] = 'FILE' + cb() + } else + self._readdir(abs, false, cb) + } +} -module.exports = true; +Glob.prototype._readdir = function (abs, inGlobStar, cb) { + if (this.aborted) + return + cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb) + if (!cb) + return -/***/ }), -/* 70 */ -/***/ (function(module, exports, __webpack_require__) { + //console.error('RD %j %j', +inGlobStar, abs) + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs, cb) -"use strict"; + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return cb() -// 25.4.1.5 NewPromiseCapability(C) -var aFunction = __webpack_require__(46); + if (Array.isArray(c)) + return cb(null, c) + } -function PromiseCapability(C) { - var resolve, reject; - this.promise = new C(function ($$resolve, $$reject) { - if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); - resolve = $$resolve; - reject = $$reject; - }); - this.resolve = aFunction(resolve); - this.reject = aFunction(reject); + var self = this + fs.readdir(abs, readdirCb(this, abs, cb)) } -module.exports.f = function (C) { - return new PromiseCapability(C); -}; - - -/***/ }), -/* 71 */ -/***/ (function(module, exports, __webpack_require__) { +function readdirCb (self, abs, cb) { + return function (er, entries) { + if (er) + self._readdirError(abs, er, cb) + else + self._readdirEntries(abs, entries, cb) + } +} -var def = __webpack_require__(50).f; -var has = __webpack_require__(49); -var TAG = __webpack_require__(13)('toStringTag'); +Glob.prototype._readdirEntries = function (abs, entries, cb) { + if (this.aborted) + return -module.exports = function (it, tag, stat) { - if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag }); -}; + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + this.cache[abs] = entries + return cb(null, entries) +} -/***/ }), -/* 72 */ -/***/ (function(module, exports, __webpack_require__) { +Glob.prototype._readdirError = function (f, er, cb) { + if (this.aborted) + return -var shared = __webpack_require__(107)('keys'); -var uid = __webpack_require__(111); -module.exports = function (key) { - return shared[key] || (shared[key] = uid(key)); -}; + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + var abs = this._makeAbs(f) + this.cache[abs] = 'FILE' + if (abs === this.cwdAbs) { + var error = new Error(er.code + ' invalid cwd ' + this.cwd) + error.path = this.cwd + error.code = er.code + this.emit('error', error) + this.abort() + } + break + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break -/***/ }), -/* 73 */ -/***/ (function(module, exports) { + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) { + this.emit('error', er) + // If the error is handled, then we abort + // if not, we threw out of here + this.abort() + } + if (!this.silent) + console.error('glob error', er) + break + } -// 7.1.4 ToInteger -var ceil = Math.ceil; -var floor = Math.floor; -module.exports = function (it) { - return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); -}; + return cb() +} +Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} -/***/ }), -/* 74 */ -/***/ (function(module, exports, __webpack_require__) { -// to indexed object, toObject with fallback for non-array-like ES3 strings -var IObject = __webpack_require__(131); -var defined = __webpack_require__(67); -module.exports = function (it) { - return IObject(defined(it)); -}; +Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + //console.error('pgs2', prefix, remain[0], entries) + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return cb() -/***/ }), -/* 75 */ -/***/ (function(module, exports, __webpack_require__) { + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) -// Approach: -// -// 1. Get the minimatch set -// 2. For each pattern in the set, PROCESS(pattern, false) -// 3. Store matches per-set, then uniq them -// -// PROCESS(pattern, inGlobStar) -// Get the first [n] items from pattern that are all strings -// Join these together. This is PREFIX. -// If there is no more remaining, then stat(PREFIX) and -// add to matches if it succeeds. END. -// -// If inGlobStar and PREFIX is symlink and points to dir -// set ENTRIES = [] -// else readdir(PREFIX) as ENTRIES -// If fail, END -// -// with ENTRIES -// If pattern[n] is GLOBSTAR -// // handle the case where the globstar match is empty -// // by pruning it out, and testing the resulting pattern -// PROCESS(pattern[0..n] + pattern[n+1 .. $], false) -// // handle other cases. -// for ENTRY in ENTRIES (not dotfiles) -// // attach globstar + tail onto the entry -// // Mark that this entry is a globstar match -// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true) -// -// else // not globstar -// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) -// Test ENTRY against pattern[n] -// If fails, continue -// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) -// -// Caveat: -// Cache all stats and readdirs results to minimize syscall. Since all -// we ever care about is existence and directory-ness, we can just keep -// `true` for files, and [children,...] for directories, or `false` for -// things that don't exist. + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false, cb) -module.exports = glob + var isSym = this.symlinks[abs] + var len = entries.length -var fs = __webpack_require__(3) -var rp = __webpack_require__(114) -var minimatch = __webpack_require__(60) -var Minimatch = minimatch.Minimatch -var inherits = __webpack_require__(42) -var EE = __webpack_require__(54).EventEmitter -var path = __webpack_require__(0) -var assert = __webpack_require__(22) -var isAbsolute = __webpack_require__(76) -var globSync = __webpack_require__(218) -var common = __webpack_require__(115) -var alphasort = common.alphasort -var alphasorti = common.alphasorti -var setopts = common.setopts -var ownProp = common.ownProp -var inflight = __webpack_require__(223) -var util = __webpack_require__(2) -var childrenIgnored = common.childrenIgnored -var isIgnored = common.isIgnored + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return cb() -var once = __webpack_require__(61) + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue -function glob (pattern, options, cb) { - if (typeof options === 'function') cb = options, options = {} - if (!options) options = {} + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true, cb) - if (options.sync) { - if (cb) - throw new TypeError('callback provided to sync glob') - return globSync(pattern, options) + var below = gspref.concat(entries[i], remain) + this._process(below, index, true, cb) } - return new Glob(pattern, options, cb) + cb() } -glob.sync = globSync -var GlobSync = glob.GlobSync = globSync.GlobSync - -// old api surface -glob.glob = glob - -function extend (origin, add) { - if (add === null || typeof add !== 'object') { - return origin - } - - var keys = Object.keys(add) - var i = keys.length - while (i--) { - origin[keys[i]] = add[keys[i]] - } - return origin +Glob.prototype._processSimple = function (prefix, index, cb) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var self = this + this._stat(prefix, function (er, exists) { + self._processSimple2(prefix, index, er, exists, cb) + }) } +Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { -glob.hasMagic = function (pattern, options_) { - var options = extend({}, options_) - options.noprocess = true - - var g = new Glob(pattern, options) - var set = g.minimatch.set + //console.error('ps2', prefix, exists) - if (!pattern) - return false + if (!this.matches[index]) + this.matches[index] = Object.create(null) - if (set.length > 1) - return true + // If it doesn't exist, then just mark the lack of results + if (!exists) + return cb() - for (var j = 0; j < set[0].length; j++) { - if (typeof set[0][j] !== 'string') - return true + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } } - return false + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this._emitMatch(index, prefix) + cb() } -glob.Glob = Glob -inherits(Glob, EE) -function Glob (pattern, options, cb) { - if (typeof options === 'function') { - cb = options - options = null - } +// Returns either 'DIR', 'FILE', or false +Glob.prototype._stat = function (f, cb) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' - if (options && options.sync) { - if (cb) - throw new TypeError('callback provided to sync glob') - return new GlobSync(pattern, options) - } + if (f.length > this.maxLength) + return cb() - if (!(this instanceof Glob)) - return new Glob(pattern, options, cb) + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] - setopts(this, pattern, options) - this._didRealPath = false + if (Array.isArray(c)) + c = 'DIR' - // process each pattern in the minimatch set - var n = this.minimatch.set.length + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return cb(null, c) - // The matches are stored as {: true,...} so that - // duplicates are automagically pruned. - // Later, we do an Object.keys() on these. - // Keep them as a list so we can fill in when nonull is set. - this.matches = new Array(n) + if (needDir && c === 'FILE') + return cb() - if (typeof cb === 'function') { - cb = once(cb) - this.on('error', cb) - this.on('end', function (matches) { - cb(null, matches) - }) + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. } - var self = this - this._processing = 0 - - this._emitQueue = [] - this._processQueue = [] - this.paused = false - - if (this.noprocess) - return this - - if (n === 0) - return done() - - var sync = true - for (var i = 0; i < n; i ++) { - this._process(this.minimatch.set[i], i, false, done) + var exists + var stat = this.statCache[abs] + if (stat !== undefined) { + if (stat === false) + return cb(null, stat) + else { + var type = stat.isDirectory() ? 'DIR' : 'FILE' + if (needDir && type === 'FILE') + return cb() + else + return cb(null, type, stat) + } } - sync = false - function done () { - --self._processing - if (self._processing <= 0) { - if (sync) { - process.nextTick(function () { - self._finish() - }) - } else { - self._finish() - } + var self = this + var statcb = inflight('stat\0' + abs, lstatcb_) + if (statcb) + fs.lstat(abs, statcb) + + function lstatcb_ (er, lstat) { + if (lstat && lstat.isSymbolicLink()) { + // If it's a symlink, then treat it as the target, unless + // the target does not exist, then treat it as a file. + return fs.stat(abs, function (er, stat) { + if (er) + self._stat2(f, abs, null, lstat, cb) + else + self._stat2(f, abs, er, stat, cb) + }) + } else { + self._stat2(f, abs, er, lstat, cb) } } } -Glob.prototype._finish = function () { - assert(this instanceof Glob) - if (this.aborted) - return +Glob.prototype._stat2 = function (f, abs, er, stat, cb) { + if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { + this.statCache[abs] = false + return cb() + } - if (this.realpath && !this._didRealpath) - return this._realpath() + var needDir = f.slice(-1) === '/' + this.statCache[abs] = stat - common.finish(this) - this.emit('end', this.found) -} + if (abs.slice(-1) === '/' && stat && !stat.isDirectory()) + return cb(null, false, stat) -Glob.prototype._realpath = function () { - if (this._didRealpath) - return + var c = true + if (stat) + c = stat.isDirectory() ? 'DIR' : 'FILE' + this.cache[abs] = this.cache[abs] || c - this._didRealpath = true + if (needDir && c === 'FILE') + return cb() - var n = this.matches.length - if (n === 0) - return this._finish() + return cb(null, c, stat) +} - var self = this - for (var i = 0; i < this.matches.length; i++) - this._realpathSet(i, next) - function next () { - if (--n === 0) - self._finish() - } -} +/***/ }), +/* 76 */ +/***/ (function(module, exports, __webpack_require__) { -Glob.prototype._realpathSet = function (index, cb) { - var matchset = this.matches[index] - if (!matchset) - return cb() +"use strict"; - var found = Object.keys(matchset) - var self = this - var n = found.length - if (n === 0) - return cb() +function posix(path) { + return path.charAt(0) === '/'; +} - var set = this.matches[index] = Object.create(null) - found.forEach(function (p, i) { - // If there's a problem with the stat, then it means that - // one or more of the links in the realpath couldn't be - // resolved. just return the abs value in that case. - p = self._makeAbs(p) - rp.realpath(p, self.realpathCache, function (er, real) { - if (!er) - set[real] = true - else if (er.syscall === 'stat') - set[p] = true - else - self.emit('error', er) // srsly wtf right here +function win32(path) { + // https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56 + var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; + var result = splitDeviceRe.exec(path); + var device = result[1] || ''; + var isUnc = Boolean(device && device.charAt(1) !== ':'); - if (--n === 0) { - self.matches[index] = set - cb() - } - }) - }) + // UNC paths are always absolute + return Boolean(result[2] || isUnc); } -Glob.prototype._mark = function (p) { - return common.mark(this, p) -} +module.exports = process.platform === 'win32' ? win32 : posix; +module.exports.posix = posix; +module.exports.win32 = win32; -Glob.prototype._makeAbs = function (f) { - return common.makeAbs(this, f) -} -Glob.prototype.abort = function () { - this.aborted = true - this.emit('abort') -} +/***/ }), +/* 77 */, +/* 78 */, +/* 79 */ +/***/ (function(module, exports) { -Glob.prototype.pause = function () { - if (!this.paused) { - this.paused = true - this.emit('pause') - } -} +module.exports = __webpack_require__(121); -Glob.prototype.resume = function () { - if (this.paused) { - this.emit('resume') - this.paused = false - if (this._emitQueue.length) { - var eq = this._emitQueue.slice(0) - this._emitQueue.length = 0 - for (var i = 0; i < eq.length; i ++) { - var e = eq[i] - this._emitMatch(e[0], e[1]) - } - } - if (this._processQueue.length) { - var pq = this._processQueue.slice(0) - this._processQueue.length = 0 - for (var i = 0; i < pq.length; i ++) { - var p = pq[i] - this._processing-- - this._process(p[0], p[1], p[2], p[3]) - } - } - } -} +/***/ }), +/* 80 */, +/* 81 */ +/***/ (function(module, exports, __webpack_require__) { -Glob.prototype._process = function (pattern, index, inGlobStar, cb) { - assert(this instanceof Glob) - assert(typeof cb === 'function') +"use strict"; - if (this.aborted) - return - this._processing++ - if (this.paused) { - this._processQueue.push([pattern, index, inGlobStar, cb]) - return - } +Object.defineProperty(exports, "__esModule", { + value: true +}); - //console.error('PROCESS %d', this._processing, pattern) +exports.default = function (str, fileLoc = 'lockfile') { + str = (0, (_stripBom || _load_stripBom()).default)(str); + return hasMergeConflicts(str) ? parseWithConflict(str, fileLoc) : { type: 'success', object: parse(str, fileLoc) }; +}; - // Get the first [n] parts of pattern that are all strings. - var n = 0 - while (typeof pattern[n] === 'string') { - n ++ - } - // now n is the index of the first one that is *not* a string. +var _util; - // see if there's anything else - var prefix - switch (n) { - // if not, then this is rather simple - case pattern.length: - this._processSimple(pattern.join('/'), index, cb) - return +function _load_util() { + return _util = _interopRequireDefault(__webpack_require__(2)); +} - case 0: - // pattern *starts* with some non-trivial item. - // going to readdir(cwd), but not include the prefix in matches. - prefix = null - break +var _invariant; - default: - // pattern has some string bits in the front. - // whatever it starts with, whether that's 'absolute' like /foo/bar, - // or 'relative' like '../baz' - prefix = pattern.slice(0, n).join('/') - break - } +function _load_invariant() { + return _invariant = _interopRequireDefault(__webpack_require__(7)); +} - var remain = pattern.slice(n) +var _stripBom; - // get the list of entries. - var read - if (prefix === null) - read = '.' - else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { - if (!prefix || !isAbsolute(prefix)) - prefix = '/' + prefix - read = prefix - } else - read = prefix +function _load_stripBom() { + return _stripBom = _interopRequireDefault(__webpack_require__(122)); +} - var abs = this._makeAbs(read) +var _constants; - //if ignored, skip _processing - if (childrenIgnored(this, read)) - return cb() +function _load_constants() { + return _constants = __webpack_require__(6); +} - var isGlobStar = remain[0] === minimatch.GLOBSTAR - if (isGlobStar) - this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb) - else - this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb) +var _errors; + +function _load_errors() { + return _errors = __webpack_require__(4); } -Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) { - var self = this - this._readdir(abs, inGlobStar, function (er, entries) { - return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb) - }) +var _map; + +function _load_map() { + return _map = _interopRequireDefault(__webpack_require__(20)); } -Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - // if the abs isn't a dir, then nothing can match! - if (!entries) - return cb() +/* eslint quotes: 0 */ - // It will only match dot entries if it starts with a dot, or if - // dot is set. Stuff like @(.foo|.bar) isn't allowed. - var pn = remain[0] - var negate = !!this.minimatch.negate - var rawGlob = pn._glob - var dotOk = this.dot || rawGlob.charAt(0) === '.' +const VERSION_REGEX = /^yarn lockfile v(\d+)$/; - var matchedEntries = [] - for (var i = 0; i < entries.length; i++) { - var e = entries[i] - if (e.charAt(0) !== '.' || dotOk) { - var m - if (negate && !prefix) { - m = !e.match(pn) - } else { - m = e.match(pn) - } - if (m) - matchedEntries.push(e) - } - } +const TOKEN_TYPES = { + boolean: 'BOOLEAN', + string: 'STRING', + identifier: 'IDENTIFIER', + eof: 'EOF', + colon: 'COLON', + newline: 'NEWLINE', + comment: 'COMMENT', + indent: 'INDENT', + invalid: 'INVALID', + number: 'NUMBER', + comma: 'COMMA' +}; - //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries) +const VALID_PROP_VALUE_TOKENS = [TOKEN_TYPES.boolean, TOKEN_TYPES.string, TOKEN_TYPES.number]; - var len = matchedEntries.length - // If there are no matched entries, then nothing matches. - if (len === 0) - return cb() +function isValidPropValueToken(token) { + return VALID_PROP_VALUE_TOKENS.indexOf(token.type) >= 0; +} - // if this is the last remaining pattern bit, then no need for - // an additional stat *unless* the user has specified mark or - // stat explicitly. We know they exist, since readdir returned - // them. +function* tokenise(input) { + let lastNewline = false; + let line = 1; + let col = 0; - if (remain.length === 1 && !this.mark && !this.stat) { - if (!this.matches[index]) - this.matches[index] = Object.create(null) + function buildToken(type, value) { + return { line, col, type, value }; + } - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i] - if (prefix) { - if (prefix !== '/') - e = prefix + '/' + e - else - e = prefix + e + while (input.length) { + let chop = 0; + + if (input[0] === '\n' || input[0] === '\r') { + chop++; + // If this is a \r\n line, ignore both chars but only add one new line + if (input[1] === '\n') { + chop++; } + line++; + col = 0; + yield buildToken(TOKEN_TYPES.newline); + } else if (input[0] === '#') { + chop++; - if (e.charAt(0) === '/' && !this.nomount) { - e = path.join(this.root, e) + let val = ''; + while (input[chop] !== '\n') { + val += input[chop]; + chop++; } - this._emitMatch(index, e) - } - // This was the last one, and no stats were needed - return cb() - } + yield buildToken(TOKEN_TYPES.comment, val); + } else if (input[0] === ' ') { + if (lastNewline) { + let indent = ''; + for (let i = 0; input[i] === ' '; i++) { + indent += input[i]; + } - // now test all matched entries as stand-ins for that part - // of the pattern. - remain.shift() - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i] - var newPattern - if (prefix) { - if (prefix !== '/') - e = prefix + '/' + e - else - e = prefix + e - } - this._process([e].concat(remain), index, inGlobStar, cb) - } - cb() -} + if (indent.length % 2) { + throw new TypeError('Invalid number of spaces'); + } else { + chop = indent.length; + yield buildToken(TOKEN_TYPES.indent, indent.length / 2); + } + } else { + chop++; + } + } else if (input[0] === '"') { + let val = ''; -Glob.prototype._emitMatch = function (index, e) { - if (this.aborted) - return + for (let i = 0;; i++) { + const currentChar = input[i]; + val += currentChar; - if (isIgnored(this, e)) - return + if (i > 0 && currentChar === '"') { + const isEscaped = input[i - 1] === '\\' && input[i - 2] !== '\\'; + if (!isEscaped) { + break; + } + } + } - if (this.paused) { - this._emitQueue.push([index, e]) - return - } + chop = val.length; - var abs = isAbsolute(e) ? e : this._makeAbs(e) + try { + yield buildToken(TOKEN_TYPES.string, JSON.parse(val)); + } catch (err) { + if (err instanceof SyntaxError) { + yield buildToken(TOKEN_TYPES.invalid); + } else { + throw err; + } + } + } else if (/^[0-9]/.test(input)) { + let val = ''; + for (let i = 0; /^[0-9]$/.test(input[i]); i++) { + val += input[i]; + } + chop = val.length; - if (this.mark) - e = this._mark(e) + yield buildToken(TOKEN_TYPES.number, +val); + } else if (/^true/.test(input)) { + yield buildToken(TOKEN_TYPES.boolean, true); + chop = 4; + } else if (/^false/.test(input)) { + yield buildToken(TOKEN_TYPES.boolean, false); + chop = 5; + } else if (input[0] === ':') { + yield buildToken(TOKEN_TYPES.colon); + chop++; + } else if (input[0] === ',') { + yield buildToken(TOKEN_TYPES.comma); + chop++; + } else if (/^[a-zA-Z\/-]/g.test(input)) { + let name = ''; + for (let i = 0; i < input.length; i++) { + const char = input[i]; + if (char === ':' || char === ' ' || char === '\n' || char === '\r' || char === ',') { + break; + } else { + name += char; + } + } + chop = name.length; - if (this.absolute) - e = abs + yield buildToken(TOKEN_TYPES.string, name); + } else { + yield buildToken(TOKEN_TYPES.invalid); + } - if (this.matches[index][e]) - return + if (!chop) { + // will trigger infinite recursion + yield buildToken(TOKEN_TYPES.invalid); + } - if (this.nodir) { - var c = this.cache[abs] - if (c === 'DIR' || Array.isArray(c)) - return + col += chop; + lastNewline = input[0] === '\n' || input[0] === '\r' && input[1] === '\n'; + input = input.slice(chop); } - this.matches[index][e] = true - - var st = this.statCache[abs] - if (st) - this.emit('stat', e, st) - - this.emit('match', e) + yield buildToken(TOKEN_TYPES.eof); } -Glob.prototype._readdirInGlobStar = function (abs, cb) { - if (this.aborted) - return - - // follow all symlinked directories forever - // just proceed as if this is a non-globstar situation - if (this.follow) - return this._readdir(abs, false, cb) - - var lstatkey = 'lstat\0' + abs - var self = this - var lstatcb = inflight(lstatkey, lstatcb_) +class Parser { + constructor(input, fileLoc = 'lockfile') { + this.comments = []; + this.tokens = tokenise(input); + this.fileLoc = fileLoc; + } - if (lstatcb) - fs.lstat(abs, lstatcb) + onComment(token) { + const value = token.value; + (0, (_invariant || _load_invariant()).default)(typeof value === 'string', 'expected token value to be a string'); - function lstatcb_ (er, lstat) { - if (er && er.code === 'ENOENT') - return cb() + const comment = value.trim(); - var isSym = lstat && lstat.isSymbolicLink() - self.symlinks[abs] = isSym + const versionMatch = comment.match(VERSION_REGEX); + if (versionMatch) { + const version = +versionMatch[1]; + if (version > (_constants || _load_constants()).LOCKFILE_VERSION) { + throw new (_errors || _load_errors()).MessageError(`Can't install from a lockfile of version ${version} as you're on an old yarn version that only supports ` + `versions up to ${(_constants || _load_constants()).LOCKFILE_VERSION}. Run \`$ yarn self-update\` to upgrade to the latest version.`); + } + } - // If it's not a symlink or a dir, then it's definitely a regular file. - // don't bother doing a readdir in that case. - if (!isSym && lstat && !lstat.isDirectory()) { - self.cache[abs] = 'FILE' - cb() - } else - self._readdir(abs, false, cb) + this.comments.push(comment); } -} - -Glob.prototype._readdir = function (abs, inGlobStar, cb) { - if (this.aborted) - return - - cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb) - if (!cb) - return - //console.error('RD %j %j', +inGlobStar, abs) - if (inGlobStar && !ownProp(this.symlinks, abs)) - return this._readdirInGlobStar(abs, cb) + next() { + const item = this.tokens.next(); + (0, (_invariant || _load_invariant()).default)(item, 'expected a token'); - if (ownProp(this.cache, abs)) { - var c = this.cache[abs] - if (!c || c === 'FILE') - return cb() + const done = item.done, + value = item.value; - if (Array.isArray(c)) - return cb(null, c) + if (done || !value) { + throw new Error('No more tokens'); + } else if (value.type === TOKEN_TYPES.comment) { + this.onComment(value); + return this.next(); + } else { + return this.token = value; + } } - var self = this - fs.readdir(abs, readdirCb(this, abs, cb)) -} - -function readdirCb (self, abs, cb) { - return function (er, entries) { - if (er) - self._readdirError(abs, er, cb) - else - self._readdirEntries(abs, entries, cb) + unexpected(msg = 'Unexpected token') { + throw new SyntaxError(`${msg} ${this.token.line}:${this.token.col} in ${this.fileLoc}`); } -} -Glob.prototype._readdirEntries = function (abs, entries, cb) { - if (this.aborted) - return + expect(tokType) { + if (this.token.type === tokType) { + this.next(); + } else { + this.unexpected(); + } + } - // if we haven't asked to stat everything, then just - // assume that everything in there exists, so we can avoid - // having to stat it a second time. - if (!this.mark && !this.stat) { - for (var i = 0; i < entries.length; i ++) { - var e = entries[i] - if (abs === '/') - e = abs + e - else - e = abs + '/' + e - this.cache[e] = true + eat(tokType) { + if (this.token.type === tokType) { + this.next(); + return true; + } else { + return false; } } - this.cache[abs] = entries - return cb(null, entries) -} + parse(indent = 0) { + const obj = (0, (_map || _load_map()).default)(); -Glob.prototype._readdirError = function (f, er, cb) { - if (this.aborted) - return - - // handle errors, and cache the information - switch (er.code) { - case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 - case 'ENOTDIR': // totally normal. means it *does* exist. - var abs = this._makeAbs(f) - this.cache[abs] = 'FILE' - if (abs === this.cwdAbs) { - var error = new Error(er.code + ' invalid cwd ' + this.cwd) - error.path = this.cwd - error.code = er.code - this.emit('error', error) - this.abort() - } - break - - case 'ENOENT': // not terribly unusual - case 'ELOOP': - case 'ENAMETOOLONG': - case 'UNKNOWN': - this.cache[this._makeAbs(f)] = false - break - - default: // some unusual error. Treat as failure. - this.cache[this._makeAbs(f)] = false - if (this.strict) { - this.emit('error', er) - // If the error is handled, then we abort - // if not, we threw out of here - this.abort() - } - if (!this.silent) - console.error('glob error', er) - break - } - - return cb() -} - -Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) { - var self = this - this._readdir(abs, inGlobStar, function (er, entries) { - self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb) - }) -} - - -Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { - //console.error('pgs2', prefix, remain[0], entries) - - // no entries means not a dir, so it can never have matches - // foo.txt/** doesn't match foo.txt - if (!entries) - return cb() - - // test without the globstar, and with every child both below - // and replacing the globstar. - var remainWithoutGlobStar = remain.slice(1) - var gspref = prefix ? [ prefix ] : [] - var noGlobStar = gspref.concat(remainWithoutGlobStar) - - // the noGlobStar pattern exits the inGlobStar state - this._process(noGlobStar, index, false, cb) - - var isSym = this.symlinks[abs] - var len = entries.length - - // If it's a symlink, and we're in a globstar, then stop - if (isSym && inGlobStar) - return cb() - - for (var i = 0; i < len; i++) { - var e = entries[i] - if (e.charAt(0) === '.' && !this.dot) - continue - - // these two cases enter the inGlobStar state - var instead = gspref.concat(entries[i], remainWithoutGlobStar) - this._process(instead, index, true, cb) - - var below = gspref.concat(entries[i], remain) - this._process(below, index, true, cb) - } - - cb() -} - -Glob.prototype._processSimple = function (prefix, index, cb) { - // XXX review this. Shouldn't it be doing the mounting etc - // before doing stat? kinda weird? - var self = this - this._stat(prefix, function (er, exists) { - self._processSimple2(prefix, index, er, exists, cb) - }) -} -Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { - - //console.error('ps2', prefix, exists) - - if (!this.matches[index]) - this.matches[index] = Object.create(null) - - // If it doesn't exist, then just mark the lack of results - if (!exists) - return cb() - - if (prefix && isAbsolute(prefix) && !this.nomount) { - var trail = /[\/\\]$/.test(prefix) - if (prefix.charAt(0) === '/') { - prefix = path.join(this.root, prefix) - } else { - prefix = path.resolve(this.root, prefix) - if (trail) - prefix += '/' - } - } - - if (process.platform === 'win32') - prefix = prefix.replace(/\\/g, '/') - - // Mark this as a match - this._emitMatch(index, prefix) - cb() -} - -// Returns either 'DIR', 'FILE', or false -Glob.prototype._stat = function (f, cb) { - var abs = this._makeAbs(f) - var needDir = f.slice(-1) === '/' - - if (f.length > this.maxLength) - return cb() - - if (!this.stat && ownProp(this.cache, abs)) { - var c = this.cache[abs] - - if (Array.isArray(c)) - c = 'DIR' - - // It exists, but maybe not how we need it - if (!needDir || c === 'DIR') - return cb(null, c) - - if (needDir && c === 'FILE') - return cb() - - // otherwise we have to stat, because maybe c=true - // if we know it exists, but not what it is. - } - - var exists - var stat = this.statCache[abs] - if (stat !== undefined) { - if (stat === false) - return cb(null, stat) - else { - var type = stat.isDirectory() ? 'DIR' : 'FILE' - if (needDir && type === 'FILE') - return cb() - else - return cb(null, type, stat) - } - } - - var self = this - var statcb = inflight('stat\0' + abs, lstatcb_) - if (statcb) - fs.lstat(abs, statcb) - - function lstatcb_ (er, lstat) { - if (lstat && lstat.isSymbolicLink()) { - // If it's a symlink, then treat it as the target, unless - // the target does not exist, then treat it as a file. - return fs.stat(abs, function (er, stat) { - if (er) - self._stat2(f, abs, null, lstat, cb) - else - self._stat2(f, abs, er, stat, cb) - }) - } else { - self._stat2(f, abs, er, lstat, cb) - } - } -} - -Glob.prototype._stat2 = function (f, abs, er, stat, cb) { - if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { - this.statCache[abs] = false - return cb() - } - - var needDir = f.slice(-1) === '/' - this.statCache[abs] = stat - - if (abs.slice(-1) === '/' && stat && !stat.isDirectory()) - return cb(null, false, stat) - - var c = true - if (stat) - c = stat.isDirectory() ? 'DIR' : 'FILE' - this.cache[abs] = this.cache[abs] || c - - if (needDir && c === 'FILE') - return cb() - - return cb(null, c, stat) -} - - -/***/ }), -/* 76 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -function posix(path) { - return path.charAt(0) === '/'; -} - -function win32(path) { - // https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56 - var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; - var result = splitDeviceRe.exec(path); - var device = result[1] || ''; - var isUnc = Boolean(device && device.charAt(1) !== ':'); - - // UNC paths are always absolute - return Boolean(result[2] || isUnc); -} - -module.exports = process.platform === 'win32' ? win32 : posix; -module.exports.posix = posix; -module.exports.win32 = win32; - - -/***/ }), -/* 77 */, -/* 78 */, -/* 79 */ -/***/ (function(module, exports) { - -module.exports = __webpack_require__(121); - -/***/ }), -/* 80 */, -/* 81 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -exports.default = function (str, fileLoc = 'lockfile') { - str = (0, (_stripBom || _load_stripBom()).default)(str); - return hasMergeConflicts(str) ? parseWithConflict(str, fileLoc) : { type: 'success', object: parse(str, fileLoc) }; -}; - -var _util; - -function _load_util() { - return _util = _interopRequireDefault(__webpack_require__(2)); -} - -var _invariant; - -function _load_invariant() { - return _invariant = _interopRequireDefault(__webpack_require__(7)); -} - -var _stripBom; - -function _load_stripBom() { - return _stripBom = _interopRequireDefault(__webpack_require__(122)); -} - -var _constants; - -function _load_constants() { - return _constants = __webpack_require__(6); -} - -var _errors; - -function _load_errors() { - return _errors = __webpack_require__(4); -} - -var _map; - -function _load_map() { - return _map = _interopRequireDefault(__webpack_require__(20)); -} - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/* eslint quotes: 0 */ - -const VERSION_REGEX = /^yarn lockfile v(\d+)$/; - -const TOKEN_TYPES = { - boolean: 'BOOLEAN', - string: 'STRING', - identifier: 'IDENTIFIER', - eof: 'EOF', - colon: 'COLON', - newline: 'NEWLINE', - comment: 'COMMENT', - indent: 'INDENT', - invalid: 'INVALID', - number: 'NUMBER', - comma: 'COMMA' -}; - -const VALID_PROP_VALUE_TOKENS = [TOKEN_TYPES.boolean, TOKEN_TYPES.string, TOKEN_TYPES.number]; - -function isValidPropValueToken(token) { - return VALID_PROP_VALUE_TOKENS.indexOf(token.type) >= 0; -} - -function* tokenise(input) { - let lastNewline = false; - let line = 1; - let col = 0; - - function buildToken(type, value) { - return { line, col, type, value }; - } - - while (input.length) { - let chop = 0; - - if (input[0] === '\n' || input[0] === '\r') { - chop++; - // If this is a \r\n line, ignore both chars but only add one new line - if (input[1] === '\n') { - chop++; - } - line++; - col = 0; - yield buildToken(TOKEN_TYPES.newline); - } else if (input[0] === '#') { - chop++; - - let val = ''; - while (input[chop] !== '\n') { - val += input[chop]; - chop++; - } - yield buildToken(TOKEN_TYPES.comment, val); - } else if (input[0] === ' ') { - if (lastNewline) { - let indent = ''; - for (let i = 0; input[i] === ' '; i++) { - indent += input[i]; - } - - if (indent.length % 2) { - throw new TypeError('Invalid number of spaces'); - } else { - chop = indent.length; - yield buildToken(TOKEN_TYPES.indent, indent.length / 2); - } - } else { - chop++; - } - } else if (input[0] === '"') { - let val = ''; - - for (let i = 0;; i++) { - const currentChar = input[i]; - val += currentChar; - - if (i > 0 && currentChar === '"') { - const isEscaped = input[i - 1] === '\\' && input[i - 2] !== '\\'; - if (!isEscaped) { - break; - } - } - } - - chop = val.length; - - try { - yield buildToken(TOKEN_TYPES.string, JSON.parse(val)); - } catch (err) { - if (err instanceof SyntaxError) { - yield buildToken(TOKEN_TYPES.invalid); - } else { - throw err; - } - } - } else if (/^[0-9]/.test(input)) { - let val = ''; - for (let i = 0; /^[0-9]$/.test(input[i]); i++) { - val += input[i]; - } - chop = val.length; - - yield buildToken(TOKEN_TYPES.number, +val); - } else if (/^true/.test(input)) { - yield buildToken(TOKEN_TYPES.boolean, true); - chop = 4; - } else if (/^false/.test(input)) { - yield buildToken(TOKEN_TYPES.boolean, false); - chop = 5; - } else if (input[0] === ':') { - yield buildToken(TOKEN_TYPES.colon); - chop++; - } else if (input[0] === ',') { - yield buildToken(TOKEN_TYPES.comma); - chop++; - } else if (/^[a-zA-Z\/-]/g.test(input)) { - let name = ''; - for (let i = 0; i < input.length; i++) { - const char = input[i]; - if (char === ':' || char === ' ' || char === '\n' || char === '\r' || char === ',') { - break; - } else { - name += char; - } - } - chop = name.length; - - yield buildToken(TOKEN_TYPES.string, name); - } else { - yield buildToken(TOKEN_TYPES.invalid); - } - - if (!chop) { - // will trigger infinite recursion - yield buildToken(TOKEN_TYPES.invalid); - } - - col += chop; - lastNewline = input[0] === '\n' || input[0] === '\r' && input[1] === '\n'; - input = input.slice(chop); - } - - yield buildToken(TOKEN_TYPES.eof); -} - -class Parser { - constructor(input, fileLoc = 'lockfile') { - this.comments = []; - this.tokens = tokenise(input); - this.fileLoc = fileLoc; - } - - onComment(token) { - const value = token.value; - (0, (_invariant || _load_invariant()).default)(typeof value === 'string', 'expected token value to be a string'); - - const comment = value.trim(); - - const versionMatch = comment.match(VERSION_REGEX); - if (versionMatch) { - const version = +versionMatch[1]; - if (version > (_constants || _load_constants()).LOCKFILE_VERSION) { - throw new (_errors || _load_errors()).MessageError(`Can't install from a lockfile of version ${version} as you're on an old yarn version that only supports ` + `versions up to ${(_constants || _load_constants()).LOCKFILE_VERSION}. Run \`$ yarn self-update\` to upgrade to the latest version.`); - } - } - - this.comments.push(comment); - } - - next() { - const item = this.tokens.next(); - (0, (_invariant || _load_invariant()).default)(item, 'expected a token'); - - const done = item.done, - value = item.value; - - if (done || !value) { - throw new Error('No more tokens'); - } else if (value.type === TOKEN_TYPES.comment) { - this.onComment(value); - return this.next(); - } else { - return this.token = value; - } - } - - unexpected(msg = 'Unexpected token') { - throw new SyntaxError(`${msg} ${this.token.line}:${this.token.col} in ${this.fileLoc}`); - } - - expect(tokType) { - if (this.token.type === tokType) { - this.next(); - } else { - this.unexpected(); - } - } - - eat(tokType) { - if (this.token.type === tokType) { - this.next(); - return true; - } else { - return false; - } - } - - parse(indent = 0) { - const obj = (0, (_map || _load_map()).default)(); - - while (true) { - const propToken = this.token; + while (true) { + const propToken = this.token; if (propToken.type === TOKEN_TYPES.newline) { const nextToken = this.next(); @@ -39492,13 +38286,13 @@ module.exports = process && support(supportLevel); /******/ ]); /***/ }), -/* 285 */ +/* 281 */ /***/ (function(module, exports) { module.exports = require("buffer"); /***/ }), -/* 286 */ +/* 282 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -39595,13 +38389,13 @@ class BootstrapCacheFile { } /***/ }), -/* 287 */ +/* 283 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "validateYarnLock", function() { return validateYarnLock; }); -/* harmony import */ var _yarnpkg_lockfile__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(284); +/* harmony import */ var _yarnpkg_lockfile__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(280); /* harmony import */ var _yarnpkg_lockfile__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_yarnpkg_lockfile__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var dedent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2); /* harmony import */ var dedent__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dedent__WEBPACK_IMPORTED_MODULE_1__); @@ -39702,15 +38496,15 @@ async function validateYarnLock(kbn, yarnLock) { } /***/ }), -/* 288 */ +/* 284 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CleanCommand", function() { return CleanCommand; }); -/* harmony import */ var del__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(289); +/* harmony import */ var del__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(285); /* harmony import */ var del__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(del__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var ora__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(376); +/* harmony import */ var ora__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(372); /* harmony import */ var ora__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(ora__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_2__); @@ -39810,21 +38604,21 @@ const CleanCommand = { }; /***/ }), -/* 289 */ +/* 285 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const {promisify} = __webpack_require__(111); const path = __webpack_require__(4); -const globby = __webpack_require__(290); -const isGlob = __webpack_require__(368); -const slash = __webpack_require__(366); +const globby = __webpack_require__(286); +const isGlob = __webpack_require__(364); +const slash = __webpack_require__(362); const gracefulFs = __webpack_require__(132); -const isPathCwd = __webpack_require__(369); -const isPathInside = __webpack_require__(370); -const rimraf = __webpack_require__(371); -const pMap = __webpack_require__(372); +const isPathCwd = __webpack_require__(365); +const isPathInside = __webpack_require__(366); +const rimraf = __webpack_require__(367); +const pMap = __webpack_require__(368); const rimrafP = promisify(rimraf); @@ -39938,19 +38732,19 @@ module.exports.sync = (patterns, {force, dryRun, cwd = process.cwd(), ...options /***/ }), -/* 290 */ +/* 286 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(133); -const arrayUnion = __webpack_require__(291); -const merge2 = __webpack_require__(292); +const arrayUnion = __webpack_require__(287); +const merge2 = __webpack_require__(288); const glob = __webpack_require__(146); -const fastGlob = __webpack_require__(293); -const dirGlob = __webpack_require__(362); -const gitignore = __webpack_require__(364); -const {FilterStream, UniqueStream} = __webpack_require__(367); +const fastGlob = __webpack_require__(289); +const dirGlob = __webpack_require__(358); +const gitignore = __webpack_require__(360); +const {FilterStream, UniqueStream} = __webpack_require__(363); const DEFAULT_FILTER = () => false; @@ -40123,7 +38917,7 @@ module.exports.gitignore = gitignore; /***/ }), -/* 291 */ +/* 287 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -40135,7 +38929,7 @@ module.exports = (...arguments_) => { /***/ }), -/* 292 */ +/* 288 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -40286,17 +39080,17 @@ function pauseStreams (streams, options) { /***/ }), -/* 293 */ +/* 289 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const taskManager = __webpack_require__(294); -const async_1 = __webpack_require__(323); -const stream_1 = __webpack_require__(358); -const sync_1 = __webpack_require__(359); -const settings_1 = __webpack_require__(361); -const utils = __webpack_require__(295); +const taskManager = __webpack_require__(290); +const async_1 = __webpack_require__(319); +const stream_1 = __webpack_require__(354); +const sync_1 = __webpack_require__(355); +const settings_1 = __webpack_require__(357); +const utils = __webpack_require__(291); async function FastGlob(source, options) { assertPatternsInput(source); const works = getWorks(source, async_1.default, options); @@ -40360,13 +39154,13 @@ module.exports = FastGlob; /***/ }), -/* 294 */ +/* 290 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const utils = __webpack_require__(295); +const utils = __webpack_require__(291); function generate(patterns, settings) { const positivePatterns = getPositivePatterns(patterns); const negativePatterns = getNegativePatternsAsPositive(patterns, settings.ignore); @@ -40431,30 +39225,30 @@ exports.convertPatternGroupToTask = convertPatternGroupToTask; /***/ }), -/* 295 */ +/* 291 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const array = __webpack_require__(296); +const array = __webpack_require__(292); exports.array = array; -const errno = __webpack_require__(297); +const errno = __webpack_require__(293); exports.errno = errno; -const fs = __webpack_require__(298); +const fs = __webpack_require__(294); exports.fs = fs; -const path = __webpack_require__(299); +const path = __webpack_require__(295); exports.path = path; -const pattern = __webpack_require__(300); +const pattern = __webpack_require__(296); exports.pattern = pattern; -const stream = __webpack_require__(321); +const stream = __webpack_require__(317); exports.stream = stream; -const string = __webpack_require__(322); +const string = __webpack_require__(318); exports.string = string; /***/ }), -/* 296 */ +/* 292 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -40482,7 +39276,7 @@ exports.splitWhen = splitWhen; /***/ }), -/* 297 */ +/* 293 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -40495,7 +39289,7 @@ exports.isEnoentCodeError = isEnoentCodeError; /***/ }), -/* 298 */ +/* 294 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -40520,7 +39314,7 @@ exports.createDirentFromStats = createDirentFromStats; /***/ }), -/* 299 */ +/* 295 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -40559,16 +39353,16 @@ exports.removeLeadingDotSegment = removeLeadingDotSegment; /***/ }), -/* 300 */ +/* 296 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const path = __webpack_require__(4); -const globParent = __webpack_require__(301); -const micromatch = __webpack_require__(304); -const picomatch = __webpack_require__(315); +const globParent = __webpack_require__(297); +const micromatch = __webpack_require__(300); +const picomatch = __webpack_require__(311); const GLOBSTAR = '**'; const ESCAPE_SYMBOL = '\\'; const COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/; @@ -40678,13 +39472,13 @@ exports.matchAny = matchAny; /***/ }), -/* 301 */ +/* 297 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isGlob = __webpack_require__(302); +var isGlob = __webpack_require__(298); var pathPosixDirname = __webpack_require__(4).posix.dirname; var isWin32 = __webpack_require__(120).platform() === 'win32'; @@ -40726,7 +39520,7 @@ module.exports = function globParent(str, opts) { /***/ }), -/* 302 */ +/* 298 */ /***/ (function(module, exports, __webpack_require__) { /*! @@ -40736,7 +39530,7 @@ module.exports = function globParent(str, opts) { * Released under the MIT License. */ -var isExtglob = __webpack_require__(303); +var isExtglob = __webpack_require__(299); var chars = { '{': '}', '(': ')', '[': ']'}; var strictRegex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/; var relaxedRegex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/; @@ -40780,7 +39574,7 @@ module.exports = function isGlob(str, options) { /***/ }), -/* 303 */ +/* 299 */ /***/ (function(module, exports) { /*! @@ -40806,16 +39600,16 @@ module.exports = function isExtglob(str) { /***/ }), -/* 304 */ +/* 300 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const util = __webpack_require__(111); -const braces = __webpack_require__(305); -const picomatch = __webpack_require__(315); -const utils = __webpack_require__(318); +const braces = __webpack_require__(301); +const picomatch = __webpack_require__(311); +const utils = __webpack_require__(314); const isEmptyString = val => typeof val === 'string' && (val === '' || val === './'); /** @@ -41280,16 +40074,16 @@ module.exports = micromatch; /***/ }), -/* 305 */ +/* 301 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const stringify = __webpack_require__(306); -const compile = __webpack_require__(308); -const expand = __webpack_require__(312); -const parse = __webpack_require__(313); +const stringify = __webpack_require__(302); +const compile = __webpack_require__(304); +const expand = __webpack_require__(308); +const parse = __webpack_require__(309); /** * Expand the given pattern or create a regex-compatible string. @@ -41457,13 +40251,13 @@ module.exports = braces; /***/ }), -/* 306 */ +/* 302 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const utils = __webpack_require__(307); +const utils = __webpack_require__(303); module.exports = (ast, options = {}) => { let stringify = (node, parent = {}) => { @@ -41496,7 +40290,7 @@ module.exports = (ast, options = {}) => { /***/ }), -/* 307 */ +/* 303 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -41615,14 +40409,14 @@ exports.flatten = (...args) => { /***/ }), -/* 308 */ +/* 304 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const fill = __webpack_require__(309); -const utils = __webpack_require__(307); +const fill = __webpack_require__(305); +const utils = __webpack_require__(303); const compile = (ast, options = {}) => { let walk = (node, parent = {}) => { @@ -41679,7 +40473,7 @@ module.exports = compile; /***/ }), -/* 309 */ +/* 305 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -41693,7 +40487,7 @@ module.exports = compile; const util = __webpack_require__(111); -const toRegexRange = __webpack_require__(310); +const toRegexRange = __webpack_require__(306); const isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val); @@ -41935,7 +40729,7 @@ module.exports = fill; /***/ }), -/* 310 */ +/* 306 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -41948,7 +40742,7 @@ module.exports = fill; -const isNumber = __webpack_require__(311); +const isNumber = __webpack_require__(307); const toRegexRange = (min, max, options) => { if (isNumber(min) === false) { @@ -42230,7 +41024,7 @@ module.exports = toRegexRange; /***/ }), -/* 311 */ +/* 307 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -42255,15 +41049,15 @@ module.exports = function(num) { /***/ }), -/* 312 */ +/* 308 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const fill = __webpack_require__(309); -const stringify = __webpack_require__(306); -const utils = __webpack_require__(307); +const fill = __webpack_require__(305); +const stringify = __webpack_require__(302); +const utils = __webpack_require__(303); const append = (queue = '', stash = '', enclose = false) => { let result = []; @@ -42375,13 +41169,13 @@ module.exports = expand; /***/ }), -/* 313 */ +/* 309 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const stringify = __webpack_require__(306); +const stringify = __webpack_require__(302); /** * Constants @@ -42403,7 +41197,7 @@ const { CHAR_SINGLE_QUOTE, /* ' */ CHAR_NO_BREAK_SPACE, CHAR_ZERO_WIDTH_NOBREAK_SPACE -} = __webpack_require__(314); +} = __webpack_require__(310); /** * parse @@ -42715,7 +41509,7 @@ module.exports = parse; /***/ }), -/* 314 */ +/* 310 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -42779,27 +41573,27 @@ module.exports = { /***/ }), -/* 315 */ +/* 311 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -module.exports = __webpack_require__(316); +module.exports = __webpack_require__(312); /***/ }), -/* 316 */ +/* 312 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(4); -const scan = __webpack_require__(317); -const parse = __webpack_require__(320); -const utils = __webpack_require__(318); -const constants = __webpack_require__(319); +const scan = __webpack_require__(313); +const parse = __webpack_require__(316); +const utils = __webpack_require__(314); +const constants = __webpack_require__(315); const isObject = val => val && typeof val === 'object' && !Array.isArray(val); /** @@ -43135,13 +41929,13 @@ module.exports = picomatch; /***/ }), -/* 317 */ +/* 313 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const utils = __webpack_require__(318); +const utils = __webpack_require__(314); const { CHAR_ASTERISK, /* * */ CHAR_AT, /* @ */ @@ -43158,7 +41952,7 @@ const { CHAR_RIGHT_CURLY_BRACE, /* } */ CHAR_RIGHT_PARENTHESES, /* ) */ CHAR_RIGHT_SQUARE_BRACKET /* ] */ -} = __webpack_require__(319); +} = __webpack_require__(315); const isPathSeparator = code => { return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH; @@ -43525,7 +42319,7 @@ module.exports = scan; /***/ }), -/* 318 */ +/* 314 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -43538,7 +42332,7 @@ const { REGEX_REMOVE_BACKSLASH, REGEX_SPECIAL_CHARS, REGEX_SPECIAL_CHARS_GLOBAL -} = __webpack_require__(319); +} = __webpack_require__(315); exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val); exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str); @@ -43596,7 +42390,7 @@ exports.wrapOutput = (input, state = {}, options = {}) => { /***/ }), -/* 319 */ +/* 315 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -43782,14 +42576,14 @@ module.exports = { /***/ }), -/* 320 */ +/* 316 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const constants = __webpack_require__(319); -const utils = __webpack_require__(318); +const constants = __webpack_require__(315); +const utils = __webpack_require__(314); /** * Constants @@ -44867,13 +43661,13 @@ module.exports = parse; /***/ }), -/* 321 */ +/* 317 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const merge2 = __webpack_require__(292); +const merge2 = __webpack_require__(288); function merge(streams) { const mergedStream = merge2(streams); streams.forEach((stream) => { @@ -44890,7 +43684,7 @@ function propagateCloseEventToSources(streams) { /***/ }), -/* 322 */ +/* 318 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -44907,14 +43701,14 @@ exports.isEmpty = isEmpty; /***/ }), -/* 323 */ +/* 319 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const stream_1 = __webpack_require__(324); -const provider_1 = __webpack_require__(351); +const stream_1 = __webpack_require__(320); +const provider_1 = __webpack_require__(347); class ProviderAsync extends provider_1.default { constructor() { super(...arguments); @@ -44942,16 +43736,16 @@ exports.default = ProviderAsync; /***/ }), -/* 324 */ +/* 320 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const stream_1 = __webpack_require__(137); -const fsStat = __webpack_require__(325); -const fsWalk = __webpack_require__(330); -const reader_1 = __webpack_require__(350); +const fsStat = __webpack_require__(321); +const fsWalk = __webpack_require__(326); +const reader_1 = __webpack_require__(346); class ReaderStream extends reader_1.default { constructor() { super(...arguments); @@ -45004,15 +43798,15 @@ exports.default = ReaderStream; /***/ }), -/* 325 */ +/* 321 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const async = __webpack_require__(326); -const sync = __webpack_require__(327); -const settings_1 = __webpack_require__(328); +const async = __webpack_require__(322); +const sync = __webpack_require__(323); +const settings_1 = __webpack_require__(324); exports.Settings = settings_1.default; function stat(path, optionsOrSettingsOrCallback, callback) { if (typeof optionsOrSettingsOrCallback === 'function') { @@ -45035,7 +43829,7 @@ function getSettings(settingsOrOptions = {}) { /***/ }), -/* 326 */ +/* 322 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -45073,7 +43867,7 @@ function callSuccessCallback(callback, result) { /***/ }), -/* 327 */ +/* 323 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -45102,13 +43896,13 @@ exports.read = read; /***/ }), -/* 328 */ +/* 324 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const fs = __webpack_require__(329); +const fs = __webpack_require__(325); class Settings { constructor(_options = {}) { this._options = _options; @@ -45125,7 +43919,7 @@ exports.default = Settings; /***/ }), -/* 329 */ +/* 325 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -45148,16 +43942,16 @@ exports.createFileSystemAdapter = createFileSystemAdapter; /***/ }), -/* 330 */ +/* 326 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const async_1 = __webpack_require__(331); -const stream_1 = __webpack_require__(346); -const sync_1 = __webpack_require__(347); -const settings_1 = __webpack_require__(349); +const async_1 = __webpack_require__(327); +const stream_1 = __webpack_require__(342); +const sync_1 = __webpack_require__(343); +const settings_1 = __webpack_require__(345); exports.Settings = settings_1.default; function walk(directory, optionsOrSettingsOrCallback, callback) { if (typeof optionsOrSettingsOrCallback === 'function') { @@ -45187,13 +43981,13 @@ function getSettings(settingsOrOptions = {}) { /***/ }), -/* 331 */ +/* 327 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const async_1 = __webpack_require__(332); +const async_1 = __webpack_require__(328); class AsyncProvider { constructor(_root, _settings) { this._root = _root; @@ -45224,17 +44018,17 @@ function callSuccessCallback(callback, entries) { /***/ }), -/* 332 */ +/* 328 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const events_1 = __webpack_require__(155); -const fsScandir = __webpack_require__(333); -const fastq = __webpack_require__(342); -const common = __webpack_require__(344); -const reader_1 = __webpack_require__(345); +const fsScandir = __webpack_require__(329); +const fastq = __webpack_require__(338); +const common = __webpack_require__(340); +const reader_1 = __webpack_require__(341); class AsyncReader extends reader_1.default { constructor(_root, _settings) { super(_root, _settings); @@ -45324,15 +44118,15 @@ exports.default = AsyncReader; /***/ }), -/* 333 */ +/* 329 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const async = __webpack_require__(334); -const sync = __webpack_require__(339); -const settings_1 = __webpack_require__(340); +const async = __webpack_require__(330); +const sync = __webpack_require__(335); +const settings_1 = __webpack_require__(336); exports.Settings = settings_1.default; function scandir(path, optionsOrSettingsOrCallback, callback) { if (typeof optionsOrSettingsOrCallback === 'function') { @@ -45355,16 +44149,16 @@ function getSettings(settingsOrOptions = {}) { /***/ }), -/* 334 */ +/* 330 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const fsStat = __webpack_require__(325); -const rpl = __webpack_require__(335); -const constants_1 = __webpack_require__(336); -const utils = __webpack_require__(337); +const fsStat = __webpack_require__(321); +const rpl = __webpack_require__(331); +const constants_1 = __webpack_require__(332); +const utils = __webpack_require__(333); function read(directory, settings, callback) { if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) { return readdirWithFileTypes(directory, settings, callback); @@ -45452,7 +44246,7 @@ function callSuccessCallback(callback, result) { /***/ }), -/* 335 */ +/* 331 */ /***/ (function(module, exports) { module.exports = runParallel @@ -45506,7 +44300,7 @@ function runParallel (tasks, cb) { /***/ }), -/* 336 */ +/* 332 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -45526,18 +44320,18 @@ exports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_B /***/ }), -/* 337 */ +/* 333 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const fs = __webpack_require__(338); +const fs = __webpack_require__(334); exports.fs = fs; /***/ }), -/* 338 */ +/* 334 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -45562,15 +44356,15 @@ exports.createDirentFromStats = createDirentFromStats; /***/ }), -/* 339 */ +/* 335 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const fsStat = __webpack_require__(325); -const constants_1 = __webpack_require__(336); -const utils = __webpack_require__(337); +const fsStat = __webpack_require__(321); +const constants_1 = __webpack_require__(332); +const utils = __webpack_require__(333); function read(directory, settings) { if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) { return readdirWithFileTypes(directory, settings); @@ -45621,15 +44415,15 @@ exports.readdir = readdir; /***/ }), -/* 340 */ +/* 336 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const path = __webpack_require__(4); -const fsStat = __webpack_require__(325); -const fs = __webpack_require__(341); +const fsStat = __webpack_require__(321); +const fs = __webpack_require__(337); class Settings { constructor(_options = {}) { this._options = _options; @@ -45652,7 +44446,7 @@ exports.default = Settings; /***/ }), -/* 341 */ +/* 337 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -45677,13 +44471,13 @@ exports.createFileSystemAdapter = createFileSystemAdapter; /***/ }), -/* 342 */ +/* 338 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var reusify = __webpack_require__(343) +var reusify = __webpack_require__(339) function fastqueue (context, worker, concurrency) { if (typeof context === 'function') { @@ -45857,7 +44651,7 @@ module.exports = fastqueue /***/ }), -/* 343 */ +/* 339 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -45897,7 +44691,7 @@ module.exports = reusify /***/ }), -/* 344 */ +/* 340 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -45928,13 +44722,13 @@ exports.joinPathSegments = joinPathSegments; /***/ }), -/* 345 */ +/* 341 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const common = __webpack_require__(344); +const common = __webpack_require__(340); class Reader { constructor(_root, _settings) { this._root = _root; @@ -45946,14 +44740,14 @@ exports.default = Reader; /***/ }), -/* 346 */ +/* 342 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const stream_1 = __webpack_require__(137); -const async_1 = __webpack_require__(332); +const async_1 = __webpack_require__(328); class StreamProvider { constructor(_root, _settings) { this._root = _root; @@ -45983,13 +44777,13 @@ exports.default = StreamProvider; /***/ }), -/* 347 */ +/* 343 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const sync_1 = __webpack_require__(348); +const sync_1 = __webpack_require__(344); class SyncProvider { constructor(_root, _settings) { this._root = _root; @@ -46004,15 +44798,15 @@ exports.default = SyncProvider; /***/ }), -/* 348 */ +/* 344 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const fsScandir = __webpack_require__(333); -const common = __webpack_require__(344); -const reader_1 = __webpack_require__(345); +const fsScandir = __webpack_require__(329); +const common = __webpack_require__(340); +const reader_1 = __webpack_require__(341); class SyncReader extends reader_1.default { constructor() { super(...arguments); @@ -46070,14 +44864,14 @@ exports.default = SyncReader; /***/ }), -/* 349 */ +/* 345 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const path = __webpack_require__(4); -const fsScandir = __webpack_require__(333); +const fsScandir = __webpack_require__(329); class Settings { constructor(_options = {}) { this._options = _options; @@ -46103,15 +44897,15 @@ exports.default = Settings; /***/ }), -/* 350 */ +/* 346 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const path = __webpack_require__(4); -const fsStat = __webpack_require__(325); -const utils = __webpack_require__(295); +const fsStat = __webpack_require__(321); +const utils = __webpack_require__(291); class Reader { constructor(_settings) { this._settings = _settings; @@ -46143,17 +44937,17 @@ exports.default = Reader; /***/ }), -/* 351 */ +/* 347 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const path = __webpack_require__(4); -const deep_1 = __webpack_require__(352); -const entry_1 = __webpack_require__(355); -const error_1 = __webpack_require__(356); -const entry_2 = __webpack_require__(357); +const deep_1 = __webpack_require__(348); +const entry_1 = __webpack_require__(351); +const error_1 = __webpack_require__(352); +const entry_2 = __webpack_require__(353); class Provider { constructor(_settings) { this._settings = _settings; @@ -46198,14 +44992,14 @@ exports.default = Provider; /***/ }), -/* 352 */ +/* 348 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const utils = __webpack_require__(295); -const partial_1 = __webpack_require__(353); +const utils = __webpack_require__(291); +const partial_1 = __webpack_require__(349); class DeepFilter { constructor(_settings, _micromatchOptions) { this._settings = _settings; @@ -46259,13 +45053,13 @@ exports.default = DeepFilter; /***/ }), -/* 353 */ +/* 349 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const matcher_1 = __webpack_require__(354); +const matcher_1 = __webpack_require__(350); class PartialMatcher extends matcher_1.default { match(filepath) { const parts = filepath.split('/'); @@ -46304,13 +45098,13 @@ exports.default = PartialMatcher; /***/ }), -/* 354 */ +/* 350 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const utils = __webpack_require__(295); +const utils = __webpack_require__(291); class Matcher { constructor(_patterns, _settings, _micromatchOptions) { this._patterns = _patterns; @@ -46361,13 +45155,13 @@ exports.default = Matcher; /***/ }), -/* 355 */ +/* 351 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const utils = __webpack_require__(295); +const utils = __webpack_require__(291); class EntryFilter { constructor(_settings, _micromatchOptions) { this._settings = _settings; @@ -46423,13 +45217,13 @@ exports.default = EntryFilter; /***/ }), -/* 356 */ +/* 352 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const utils = __webpack_require__(295); +const utils = __webpack_require__(291); class ErrorFilter { constructor(_settings) { this._settings = _settings; @@ -46445,13 +45239,13 @@ exports.default = ErrorFilter; /***/ }), -/* 357 */ +/* 353 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const utils = __webpack_require__(295); +const utils = __webpack_require__(291); class EntryTransformer { constructor(_settings) { this._settings = _settings; @@ -46478,15 +45272,15 @@ exports.default = EntryTransformer; /***/ }), -/* 358 */ +/* 354 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const stream_1 = __webpack_require__(137); -const stream_2 = __webpack_require__(324); -const provider_1 = __webpack_require__(351); +const stream_2 = __webpack_require__(320); +const provider_1 = __webpack_require__(347); class ProviderStream extends provider_1.default { constructor() { super(...arguments); @@ -46516,14 +45310,14 @@ exports.default = ProviderStream; /***/ }), -/* 359 */ +/* 355 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const sync_1 = __webpack_require__(360); -const provider_1 = __webpack_require__(351); +const sync_1 = __webpack_require__(356); +const provider_1 = __webpack_require__(347); class ProviderSync extends provider_1.default { constructor() { super(...arguments); @@ -46546,15 +45340,15 @@ exports.default = ProviderSync; /***/ }), -/* 360 */ +/* 356 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const fsStat = __webpack_require__(325); -const fsWalk = __webpack_require__(330); -const reader_1 = __webpack_require__(350); +const fsStat = __webpack_require__(321); +const fsWalk = __webpack_require__(326); +const reader_1 = __webpack_require__(346); class ReaderSync extends reader_1.default { constructor() { super(...arguments); @@ -46596,7 +45390,7 @@ exports.default = ReaderSync; /***/ }), -/* 361 */ +/* 357 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -46638,3444 +45432,2224 @@ class Settings { this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false); this.unique = this._getValue(this._options.unique, true); if (this.onlyDirectories) { - this.onlyFiles = false; - } - if (this.stats) { - this.objectMode = true; - } - } - _getValue(option, value) { - return option === undefined ? value : option; - } - _getFileSystemMethods(methods = {}) { - return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods); - } -} -exports.default = Settings; - - -/***/ }), -/* 362 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -const path = __webpack_require__(4); -const pathType = __webpack_require__(363); - -const getExtensions = extensions => extensions.length > 1 ? `{${extensions.join(',')}}` : extensions[0]; - -const getPath = (filepath, cwd) => { - const pth = filepath[0] === '!' ? filepath.slice(1) : filepath; - return path.isAbsolute(pth) ? pth : path.join(cwd, pth); -}; - -const addExtensions = (file, extensions) => { - if (path.extname(file)) { - return `**/${file}`; - } - - return `**/${file}.${getExtensions(extensions)}`; -}; - -const getGlob = (directory, options) => { - if (options.files && !Array.isArray(options.files)) { - throw new TypeError(`Expected \`files\` to be of type \`Array\` but received type \`${typeof options.files}\``); - } - - if (options.extensions && !Array.isArray(options.extensions)) { - throw new TypeError(`Expected \`extensions\` to be of type \`Array\` but received type \`${typeof options.extensions}\``); - } - - if (options.files && options.extensions) { - return options.files.map(x => path.posix.join(directory, addExtensions(x, options.extensions))); - } - - if (options.files) { - return options.files.map(x => path.posix.join(directory, `**/${x}`)); - } - - if (options.extensions) { - return [path.posix.join(directory, `**/*.${getExtensions(options.extensions)}`)]; - } - - return [path.posix.join(directory, '**')]; -}; - -module.exports = async (input, options) => { - options = { - cwd: process.cwd(), - ...options - }; - - if (typeof options.cwd !== 'string') { - throw new TypeError(`Expected \`cwd\` to be of type \`string\` but received type \`${typeof options.cwd}\``); - } - - const globs = await Promise.all([].concat(input).map(async x => { - const isDirectory = await pathType.isDirectory(getPath(x, options.cwd)); - return isDirectory ? getGlob(x, options) : x; - })); - - return [].concat.apply([], globs); // eslint-disable-line prefer-spread -}; - -module.exports.sync = (input, options) => { - options = { - cwd: process.cwd(), - ...options - }; - - if (typeof options.cwd !== 'string') { - throw new TypeError(`Expected \`cwd\` to be of type \`string\` but received type \`${typeof options.cwd}\``); - } - - const globs = [].concat(input).map(x => pathType.isDirectorySync(getPath(x, options.cwd)) ? getGlob(x, options) : x); - - return [].concat.apply([], globs); // eslint-disable-line prefer-spread -}; - - -/***/ }), -/* 363 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -const {promisify} = __webpack_require__(111); -const fs = __webpack_require__(133); - -async function isType(fsStatType, statsMethodName, filePath) { - if (typeof filePath !== 'string') { - throw new TypeError(`Expected a string, got ${typeof filePath}`); - } - - try { - const stats = await promisify(fs[fsStatType])(filePath); - return stats[statsMethodName](); - } catch (error) { - if (error.code === 'ENOENT') { - return false; - } - - throw error; - } -} - -function isTypeSync(fsStatType, statsMethodName, filePath) { - if (typeof filePath !== 'string') { - throw new TypeError(`Expected a string, got ${typeof filePath}`); - } - - try { - return fs[fsStatType](filePath)[statsMethodName](); - } catch (error) { - if (error.code === 'ENOENT') { - return false; - } - - throw error; - } -} - -exports.isFile = isType.bind(null, 'stat', 'isFile'); -exports.isDirectory = isType.bind(null, 'stat', 'isDirectory'); -exports.isSymlink = isType.bind(null, 'lstat', 'isSymbolicLink'); -exports.isFileSync = isTypeSync.bind(null, 'statSync', 'isFile'); -exports.isDirectorySync = isTypeSync.bind(null, 'statSync', 'isDirectory'); -exports.isSymlinkSync = isTypeSync.bind(null, 'lstatSync', 'isSymbolicLink'); - - -/***/ }), -/* 364 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -const {promisify} = __webpack_require__(111); -const fs = __webpack_require__(133); -const path = __webpack_require__(4); -const fastGlob = __webpack_require__(293); -const gitIgnore = __webpack_require__(365); -const slash = __webpack_require__(366); - -const DEFAULT_IGNORE = [ - '**/node_modules/**', - '**/flow-typed/**', - '**/coverage/**', - '**/.git' -]; - -const readFileP = promisify(fs.readFile); - -const mapGitIgnorePatternTo = base => ignore => { - if (ignore.startsWith('!')) { - return '!' + path.posix.join(base, ignore.slice(1)); - } - - return path.posix.join(base, ignore); -}; - -const parseGitIgnore = (content, options) => { - const base = slash(path.relative(options.cwd, path.dirname(options.fileName))); - - return content - .split(/\r?\n/) - .filter(Boolean) - .filter(line => !line.startsWith('#')) - .map(mapGitIgnorePatternTo(base)); -}; - -const reduceIgnore = files => { - return files.reduce((ignores, file) => { - ignores.add(parseGitIgnore(file.content, { - cwd: file.cwd, - fileName: file.filePath - })); - return ignores; - }, gitIgnore()); -}; - -const ensureAbsolutePathForCwd = (cwd, p) => { - if (path.isAbsolute(p)) { - if (p.startsWith(cwd)) { - return p; - } - - throw new Error(`Path ${p} is not in cwd ${cwd}`); - } - - return path.join(cwd, p); -}; - -const getIsIgnoredPredecate = (ignores, cwd) => { - return p => ignores.ignores(slash(path.relative(cwd, ensureAbsolutePathForCwd(cwd, p)))); -}; - -const getFile = async (file, cwd) => { - const filePath = path.join(cwd, file); - const content = await readFileP(filePath, 'utf8'); - - return { - cwd, - filePath, - content - }; -}; - -const getFileSync = (file, cwd) => { - const filePath = path.join(cwd, file); - const content = fs.readFileSync(filePath, 'utf8'); - - return { - cwd, - filePath, - content - }; -}; - -const normalizeOptions = ({ - ignore = [], - cwd = slash(process.cwd()) -} = {}) => { - return {ignore, cwd}; -}; - -module.exports = async options => { - options = normalizeOptions(options); - - const paths = await fastGlob('**/.gitignore', { - ignore: DEFAULT_IGNORE.concat(options.ignore), - cwd: options.cwd - }); - - const files = await Promise.all(paths.map(file => getFile(file, options.cwd))); - const ignores = reduceIgnore(files); - - return getIsIgnoredPredecate(ignores, options.cwd); -}; - -module.exports.sync = options => { - options = normalizeOptions(options); - - const paths = fastGlob.sync('**/.gitignore', { - ignore: DEFAULT_IGNORE.concat(options.ignore), - cwd: options.cwd - }); - - const files = paths.map(file => getFileSync(file, options.cwd)); - const ignores = reduceIgnore(files); - - return getIsIgnoredPredecate(ignores, options.cwd); -}; - - -/***/ }), -/* 365 */ -/***/ (function(module, exports) { - -// A simple implementation of make-array -function makeArray (subject) { - return Array.isArray(subject) - ? subject - : [subject] -} - -const EMPTY = '' -const SPACE = ' ' -const ESCAPE = '\\' -const REGEX_TEST_BLANK_LINE = /^\s+$/ -const REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/ -const REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/ -const REGEX_SPLITALL_CRLF = /\r?\n/g -// /foo, -// ./foo, -// ../foo, -// . -// .. -const REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/ - -const SLASH = '/' -const KEY_IGNORE = typeof Symbol !== 'undefined' - ? Symbol.for('node-ignore') - /* istanbul ignore next */ - : 'node-ignore' - -const define = (object, key, value) => - Object.defineProperty(object, key, {value}) - -const REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g - -// Sanitize the range of a regular expression -// The cases are complicated, see test cases for details -const sanitizeRange = range => range.replace( - REGEX_REGEXP_RANGE, - (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0) - ? match - // Invalid range (out of order) which is ok for gitignore rules but - // fatal for JavaScript regular expression, so eliminate it. - : EMPTY -) - -// See fixtures #59 -const cleanRangeBackSlash = slashes => { - const {length} = slashes - return slashes.slice(0, length - length % 2) -} - -// > If the pattern ends with a slash, -// > it is removed for the purpose of the following description, -// > but it would only find a match with a directory. -// > In other words, foo/ will match a directory foo and paths underneath it, -// > but will not match a regular file or a symbolic link foo -// > (this is consistent with the way how pathspec works in general in Git). -// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`' -// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call -// you could use option `mark: true` with `glob` - -// '`foo/`' should not continue with the '`..`' -const REPLACERS = [ - - // > Trailing spaces are ignored unless they are quoted with backslash ("\") - [ - // (a\ ) -> (a ) - // (a ) -> (a) - // (a \ ) -> (a ) - /\\?\s+$/, - match => match.indexOf('\\') === 0 - ? SPACE - : EMPTY - ], - - // replace (\ ) with ' ' - [ - /\\\s/g, - () => SPACE - ], - - // Escape metacharacters - // which is written down by users but means special for regular expressions. - - // > There are 12 characters with special meanings: - // > - the backslash \, - // > - the caret ^, - // > - the dollar sign $, - // > - the period or dot ., - // > - the vertical bar or pipe symbol |, - // > - the question mark ?, - // > - the asterisk or star *, - // > - the plus sign +, - // > - the opening parenthesis (, - // > - the closing parenthesis ), - // > - and the opening square bracket [, - // > - the opening curly brace {, - // > These special characters are often called "metacharacters". - [ - /[\\$.|*+(){^]/g, - match => `\\${match}` - ], - - [ - // > a question mark (?) matches a single character - /(?!\\)\?/g, - () => '[^/]' - ], - - // leading slash - [ - - // > A leading slash matches the beginning of the pathname. - // > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c". - // A leading slash matches the beginning of the pathname - /^\//, - () => '^' - ], - - // replace special metacharacter slash after the leading slash - [ - /\//g, - () => '\\/' - ], - - [ - // > A leading "**" followed by a slash means match in all directories. - // > For example, "**/foo" matches file or directory "foo" anywhere, - // > the same as pattern "foo". - // > "**/foo/bar" matches file or directory "bar" anywhere that is directly - // > under directory "foo". - // Notice that the '*'s have been replaced as '\\*' - /^\^*\\\*\\\*\\\//, - - // '**/foo' <-> 'foo' - () => '^(?:.*\\/)?' - ], - - // starting - [ - // there will be no leading '/' - // (which has been replaced by section "leading slash") - // If starts with '**', adding a '^' to the regular expression also works - /^(?=[^^])/, - function startingReplacer () { - // If has a slash `/` at the beginning or middle - return !/\/(?!$)/.test(this) - // > Prior to 2.22.1 - // > If the pattern does not contain a slash /, - // > Git treats it as a shell glob pattern - // Actually, if there is only a trailing slash, - // git also treats it as a shell glob pattern - - // After 2.22.1 (compatible but clearer) - // > If there is a separator at the beginning or middle (or both) - // > of the pattern, then the pattern is relative to the directory - // > level of the particular .gitignore file itself. - // > Otherwise the pattern may also match at any level below - // > the .gitignore level. - ? '(?:^|\\/)' - - // > Otherwise, Git treats the pattern as a shell glob suitable for - // > consumption by fnmatch(3) - : '^' - } - ], - - // two globstars - [ - // Use lookahead assertions so that we could match more than one `'/**'` - /\\\/\\\*\\\*(?=\\\/|$)/g, - - // Zero, one or several directories - // should not use '*', or it will be replaced by the next replacer - - // Check if it is not the last `'/**'` - (_, index, str) => index + 6 < str.length - - // case: /**/ - // > A slash followed by two consecutive asterisks then a slash matches - // > zero or more directories. - // > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on. - // '/**/' - ? '(?:\\/[^\\/]+)*' - - // case: /** - // > A trailing `"/**"` matches everything inside. - - // #21: everything inside but it should not include the current folder - : '\\/.+' - ], - - // intermediate wildcards - [ - // Never replace escaped '*' - // ignore rule '\*' will match the path '*' - - // 'abc.*/' -> go - // 'abc.*' -> skip this rule - /(^|[^\\]+)\\\*(?=.+)/g, - - // '*.js' matches '.js' - // '*.js' doesn't match 'abc' - (_, p1) => `${p1}[^\\/]*` - ], - - [ - // unescape, revert step 3 except for back slash - // For example, if a user escape a '\\*', - // after step 3, the result will be '\\\\\\*' - /\\\\\\(?=[$.|*+(){^])/g, - () => ESCAPE - ], - - [ - // '\\\\' -> '\\' - /\\\\/g, - () => ESCAPE - ], - - [ - // > The range notation, e.g. [a-zA-Z], - // > can be used to match one of the characters in a range. - - // `\` is escaped by step 3 - /(\\)?\[([^\]/]*?)(\\*)($|\])/g, - (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE - // '\\[bar]' -> '\\\\[bar\\]' - ? `\\[${range}${cleanRangeBackSlash(endEscape)}${close}` - : close === ']' - ? endEscape.length % 2 === 0 - // A normal case, and it is a range notation - // '[bar]' - // '[bar\\\\]' - ? `[${sanitizeRange(range)}${endEscape}]` - // Invalid range notaton - // '[bar\\]' -> '[bar\\\\]' - : '[]' - : '[]' - ], - - // ending - [ - // 'js' will not match 'js.' - // 'ab' will not match 'abc' - /(?:[^*])$/, - - // WTF! - // https://git-scm.com/docs/gitignore - // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1) - // which re-fixes #24, #38 - - // > If there is a separator at the end of the pattern then the pattern - // > will only match directories, otherwise the pattern can match both - // > files and directories. - - // 'js*' will not match 'a.js' - // 'js/' will not match 'a.js' - // 'js' will match 'a.js' and 'a.js/' - match => /\/$/.test(match) - // foo/ will not match 'foo' - ? `${match}$` - // foo matches 'foo' and 'foo/' - : `${match}(?=$|\\/$)` - ], - - // trailing wildcard - [ - /(\^|\\\/)?\\\*$/, - (_, p1) => { - const prefix = p1 - // '\^': - // '/*' does not match EMPTY - // '/*' does not match everything - - // '\\\/': - // 'abc/*' does not match 'abc/' - ? `${p1}[^/]+` - - // 'a*' matches 'a' - // 'a*' matches 'aa' - : '[^/]*' - - return `${prefix}(?=$|\\/$)` - } - ], -] - -// A simple cache, because an ignore rule only has only one certain meaning -const regexCache = Object.create(null) - -// @param {pattern} -const makeRegex = (pattern, negative, ignorecase) => { - const r = regexCache[pattern] - if (r) { - return r - } - - // const replacers = negative - // ? NEGATIVE_REPLACERS - // : POSITIVE_REPLACERS - - const source = REPLACERS.reduce( - (prev, current) => prev.replace(current[0], current[1].bind(pattern)), - pattern - ) - - return regexCache[pattern] = ignorecase - ? new RegExp(source, 'i') - : new RegExp(source) -} - -const isString = subject => typeof subject === 'string' - -// > A blank line matches no files, so it can serve as a separator for readability. -const checkPattern = pattern => pattern - && isString(pattern) - && !REGEX_TEST_BLANK_LINE.test(pattern) - - // > A line starting with # serves as a comment. - && pattern.indexOf('#') !== 0 - -const splitPattern = pattern => pattern.split(REGEX_SPLITALL_CRLF) - -class IgnoreRule { - constructor ( - origin, - pattern, - negative, - regex - ) { - this.origin = origin - this.pattern = pattern - this.negative = negative - this.regex = regex - } -} - -const createRule = (pattern, ignorecase) => { - const origin = pattern - let negative = false - - // > An optional prefix "!" which negates the pattern; - if (pattern.indexOf('!') === 0) { - negative = true - pattern = pattern.substr(1) - } - - pattern = pattern - // > Put a backslash ("\") in front of the first "!" for patterns that - // > begin with a literal "!", for example, `"\!important!.txt"`. - .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!') - // > Put a backslash ("\") in front of the first hash for patterns that - // > begin with a hash. - .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#') - - const regex = makeRegex(pattern, negative, ignorecase) - - return new IgnoreRule( - origin, - pattern, - negative, - regex - ) -} - -const throwError = (message, Ctor) => { - throw new Ctor(message) -} - -const checkPath = (path, originalPath, doThrow) => { - if (!isString(path)) { - return doThrow( - `path must be a string, but got \`${originalPath}\``, - TypeError - ) - } - - // We don't know if we should ignore EMPTY, so throw - if (!path) { - return doThrow(`path must not be empty`, TypeError) - } - - // Check if it is a relative path - if (checkPath.isNotRelative(path)) { - const r = '`path.relative()`d' - return doThrow( - `path should be a ${r} string, but got "${originalPath}"`, - RangeError - ) - } - - return true -} - -const isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path) - -checkPath.isNotRelative = isNotRelative -checkPath.convert = p => p - -class Ignore { - constructor ({ - ignorecase = true - } = {}) { - this._rules = [] - this._ignorecase = ignorecase - define(this, KEY_IGNORE, true) - this._initCache() - } - - _initCache () { - this._ignoreCache = Object.create(null) - this._testCache = Object.create(null) - } - - _addPattern (pattern) { - // #32 - if (pattern && pattern[KEY_IGNORE]) { - this._rules = this._rules.concat(pattern._rules) - this._added = true - return - } - - if (checkPattern(pattern)) { - const rule = createRule(pattern, this._ignorecase) - this._added = true - this._rules.push(rule) - } - } - - // @param {Array | string | Ignore} pattern - add (pattern) { - this._added = false - - makeArray( - isString(pattern) - ? splitPattern(pattern) - : pattern - ).forEach(this._addPattern, this) - - // Some rules have just added to the ignore, - // making the behavior changed. - if (this._added) { - this._initCache() - } - - return this - } - - // legacy - addPattern (pattern) { - return this.add(pattern) - } - - // | ignored : unignored - // negative | 0:0 | 0:1 | 1:0 | 1:1 - // -------- | ------- | ------- | ------- | -------- - // 0 | TEST | TEST | SKIP | X - // 1 | TESTIF | SKIP | TEST | X - - // - SKIP: always skip - // - TEST: always test - // - TESTIF: only test if checkUnignored - // - X: that never happen - - // @param {boolean} whether should check if the path is unignored, - // setting `checkUnignored` to `false` could reduce additional - // path matching. - - // @returns {TestResult} true if a file is ignored - _testOne (path, checkUnignored) { - let ignored = false - let unignored = false - - this._rules.forEach(rule => { - const {negative} = rule - if ( - unignored === negative && ignored !== unignored - || negative && !ignored && !unignored && !checkUnignored - ) { - return - } - - const matched = rule.regex.test(path) - - if (matched) { - ignored = !negative - unignored = negative - } - }) - - return { - ignored, - unignored - } - } - - // @returns {TestResult} - _test (originalPath, cache, checkUnignored, slices) { - const path = originalPath - // Supports nullable path - && checkPath.convert(originalPath) - - checkPath(path, originalPath, throwError) - - return this._t(path, cache, checkUnignored, slices) - } - - _t (path, cache, checkUnignored, slices) { - if (path in cache) { - return cache[path] - } - - if (!slices) { - // path/to/a.js - // ['path', 'to', 'a.js'] - slices = path.split(SLASH) - } - - slices.pop() - - // If the path has no parent directory, just test it - if (!slices.length) { - return cache[path] = this._testOne(path, checkUnignored) - } - - const parent = this._t( - slices.join(SLASH) + SLASH, - cache, - checkUnignored, - slices - ) - - // If the path contains a parent directory, check the parent first - return cache[path] = parent.ignored - // > It is not possible to re-include a file if a parent directory of - // > that file is excluded. - ? parent - : this._testOne(path, checkUnignored) - } - - ignores (path) { - return this._test(path, this._ignoreCache, false).ignored - } - - createFilter () { - return path => !this.ignores(path) - } - - filter (paths) { - return makeArray(paths).filter(this.createFilter()) - } - - // @returns {TestResult} - test (path) { - return this._test(path, this._testCache, true) - } -} - -const factory = options => new Ignore(options) - -const returnFalse = () => false - -const isPathValid = path => - checkPath(path && checkPath.convert(path), path, returnFalse) - -factory.isPathValid = isPathValid - -// Fixes typescript -factory.default = factory - -module.exports = factory - -// Windows -// -------------------------------------------------------------- -/* istanbul ignore if */ -if ( - // Detect `process` so that it can run in browsers. - typeof process !== 'undefined' - && ( - process.env && process.env.IGNORE_TEST_WIN32 - || process.platform === 'win32' - ) -) { - /* eslint no-control-regex: "off" */ - const makePosix = str => /^\\\\\?\\/.test(str) - || /["<>|\u0000-\u001F]+/u.test(str) - ? str - : str.replace(/\\/g, '/') - - checkPath.convert = makePosix - - // 'C:\\foo' <- 'C:\\foo' has been converted to 'C:/' - // 'd:\\foo' - const REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i - checkPath.isNotRelative = path => - REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path) - || isNotRelative(path) -} - - -/***/ }), -/* 366 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -module.exports = path => { - const isExtendedLengthPath = /^\\\\\?\\/.test(path); - const hasNonAscii = /[^\u0000-\u0080]+/.test(path); // eslint-disable-line no-control-regex - - if (isExtendedLengthPath || hasNonAscii) { - return path; - } - - return path.replace(/\\/g, '/'); -}; - - -/***/ }), -/* 367 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -const {Transform} = __webpack_require__(137); - -class ObjectTransform extends Transform { - constructor() { - super({ - objectMode: true - }); - } -} - -class FilterStream extends ObjectTransform { - constructor(filter) { - super(); - this._filter = filter; - } - - _transform(data, encoding, callback) { - if (this._filter(data)) { - this.push(data); - } - - callback(); - } -} - -class UniqueStream extends ObjectTransform { - constructor() { - super(); - this._pushed = new Set(); - } - - _transform(data, encoding, callback) { - if (!this._pushed.has(data)) { - this.push(data); - this._pushed.add(data); - } - - callback(); - } -} - -module.exports = { - FilterStream, - UniqueStream -}; - - -/***/ }), -/* 368 */ -/***/ (function(module, exports, __webpack_require__) { - -/*! - * is-glob - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -var isExtglob = __webpack_require__(303); -var chars = { '{': '}', '(': ')', '[': ']'}; -var strictRegex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/; -var relaxedRegex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/; - -module.exports = function isGlob(str, options) { - if (typeof str !== 'string' || str === '') { - return false; - } - - if (isExtglob(str)) { - return true; - } - - var regex = strictRegex; - var match; - - // optionally relax regex - if (options && options.strict === false) { - regex = relaxedRegex; - } - - while ((match = regex.exec(str))) { - if (match[2]) return true; - var idx = match.index + match[0].length; - - // if an open bracket/brace/paren is escaped, - // set the index to the next closing character - var open = match[1]; - var close = open ? chars[open] : null; - if (open && close) { - var n = str.indexOf(close, idx); - if (n !== -1) { - idx = n + 1; - } - } - - str = str.slice(idx); - } - return false; -}; - - -/***/ }), -/* 369 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -const path = __webpack_require__(4); - -module.exports = path_ => { - let cwd = process.cwd(); - - path_ = path.resolve(path_); - - if (process.platform === 'win32') { - cwd = cwd.toLowerCase(); - path_ = path_.toLowerCase(); - } - - return path_ === cwd; -}; - - -/***/ }), -/* 370 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -const path = __webpack_require__(4); - -module.exports = (childPath, parentPath) => { - childPath = path.resolve(childPath); - parentPath = path.resolve(parentPath); - - if (process.platform === 'win32') { - childPath = childPath.toLowerCase(); - parentPath = parentPath.toLowerCase(); - } - - if (childPath === parentPath) { - return false; - } - - childPath += path.sep; - parentPath += path.sep; - - return childPath.startsWith(parentPath); -}; - - -/***/ }), -/* 371 */ -/***/ (function(module, exports, __webpack_require__) { - -const assert = __webpack_require__(139) -const path = __webpack_require__(4) -const fs = __webpack_require__(133) -let glob = undefined -try { - glob = __webpack_require__(146) -} catch (_err) { - // treat glob as optional. -} - -const defaultGlobOpts = { - nosort: true, - silent: true -} - -// for EMFILE handling -let timeout = 0 - -const isWindows = (process.platform === "win32") - -const defaults = options => { - const methods = [ - 'unlink', - 'chmod', - 'stat', - 'lstat', - 'rmdir', - 'readdir' - ] - methods.forEach(m => { - options[m] = options[m] || fs[m] - m = m + 'Sync' - options[m] = options[m] || fs[m] - }) - - options.maxBusyTries = options.maxBusyTries || 3 - options.emfileWait = options.emfileWait || 1000 - if (options.glob === false) { - options.disableGlob = true - } - if (options.disableGlob !== true && glob === undefined) { - throw Error('glob dependency not found, set `options.disableGlob = true` if intentional') - } - options.disableGlob = options.disableGlob || false - options.glob = options.glob || defaultGlobOpts -} - -const rimraf = (p, options, cb) => { - if (typeof options === 'function') { - cb = options - options = {} - } - - assert(p, 'rimraf: missing path') - assert.equal(typeof p, 'string', 'rimraf: path should be a string') - assert.equal(typeof cb, 'function', 'rimraf: callback function required') - assert(options, 'rimraf: invalid options argument provided') - assert.equal(typeof options, 'object', 'rimraf: options should be object') - - defaults(options) - - let busyTries = 0 - let errState = null - let n = 0 - - const next = (er) => { - errState = errState || er - if (--n === 0) - cb(errState) - } - - const afterGlob = (er, results) => { - if (er) - return cb(er) - - n = results.length - if (n === 0) - return cb() - - results.forEach(p => { - const CB = (er) => { - if (er) { - if ((er.code === "EBUSY" || er.code === "ENOTEMPTY" || er.code === "EPERM") && - busyTries < options.maxBusyTries) { - busyTries ++ - // try again, with the same exact callback as this one. - return setTimeout(() => rimraf_(p, options, CB), busyTries * 100) - } - - // this one won't happen if graceful-fs is used. - if (er.code === "EMFILE" && timeout < options.emfileWait) { - return setTimeout(() => rimraf_(p, options, CB), timeout ++) - } - - // already gone - if (er.code === "ENOENT") er = null - } - - timeout = 0 - next(er) - } - rimraf_(p, options, CB) - }) - } - - if (options.disableGlob || !glob.hasMagic(p)) - return afterGlob(null, [p]) - - options.lstat(p, (er, stat) => { - if (!er) - return afterGlob(null, [p]) - - glob(p, options.glob, afterGlob) - }) - -} - -// Two possible strategies. -// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR -// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR -// -// Both result in an extra syscall when you guess wrong. However, there -// are likely far more normal files in the world than directories. This -// is based on the assumption that a the average number of files per -// directory is >= 1. -// -// If anyone ever complains about this, then I guess the strategy could -// be made configurable somehow. But until then, YAGNI. -const rimraf_ = (p, options, cb) => { - assert(p) - assert(options) - assert(typeof cb === 'function') - - // sunos lets the root user unlink directories, which is... weird. - // so we have to lstat here and make sure it's not a dir. - options.lstat(p, (er, st) => { - if (er && er.code === "ENOENT") - return cb(null) - - // Windows can EPERM on stat. Life is suffering. - if (er && er.code === "EPERM" && isWindows) - fixWinEPERM(p, options, er, cb) - - if (st && st.isDirectory()) - return rmdir(p, options, er, cb) - - options.unlink(p, er => { - if (er) { - if (er.code === "ENOENT") - return cb(null) - if (er.code === "EPERM") - return (isWindows) - ? fixWinEPERM(p, options, er, cb) - : rmdir(p, options, er, cb) - if (er.code === "EISDIR") - return rmdir(p, options, er, cb) - } - return cb(er) - }) - }) -} - -const fixWinEPERM = (p, options, er, cb) => { - assert(p) - assert(options) - assert(typeof cb === 'function') - - options.chmod(p, 0o666, er2 => { - if (er2) - cb(er2.code === "ENOENT" ? null : er) - else - options.stat(p, (er3, stats) => { - if (er3) - cb(er3.code === "ENOENT" ? null : er) - else if (stats.isDirectory()) - rmdir(p, options, er, cb) - else - options.unlink(p, cb) - }) - }) -} - -const fixWinEPERMSync = (p, options, er) => { - assert(p) - assert(options) - - try { - options.chmodSync(p, 0o666) - } catch (er2) { - if (er2.code === "ENOENT") - return - else - throw er - } - - let stats - try { - stats = options.statSync(p) - } catch (er3) { - if (er3.code === "ENOENT") - return - else - throw er - } - - if (stats.isDirectory()) - rmdirSync(p, options, er) - else - options.unlinkSync(p) -} - -const rmdir = (p, options, originalEr, cb) => { - assert(p) - assert(options) - assert(typeof cb === 'function') - - // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS) - // if we guessed wrong, and it's not a directory, then - // raise the original error. - options.rmdir(p, er => { - if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM")) - rmkids(p, options, cb) - else if (er && er.code === "ENOTDIR") - cb(originalEr) - else - cb(er) - }) -} - -const rmkids = (p, options, cb) => { - assert(p) - assert(options) - assert(typeof cb === 'function') - - options.readdir(p, (er, files) => { - if (er) - return cb(er) - let n = files.length - if (n === 0) - return options.rmdir(p, cb) - let errState - files.forEach(f => { - rimraf(path.join(p, f), options, er => { - if (errState) - return - if (er) - return cb(errState = er) - if (--n === 0) - options.rmdir(p, cb) - }) - }) - }) -} - -// this looks simpler, and is strictly *faster*, but will -// tie up the JavaScript thread and fail on excessively -// deep directory trees. -const rimrafSync = (p, options) => { - options = options || {} - defaults(options) - - assert(p, 'rimraf: missing path') - assert.equal(typeof p, 'string', 'rimraf: path should be a string') - assert(options, 'rimraf: missing options') - assert.equal(typeof options, 'object', 'rimraf: options should be object') - - let results - - if (options.disableGlob || !glob.hasMagic(p)) { - results = [p] - } else { - try { - options.lstatSync(p) - results = [p] - } catch (er) { - results = glob.sync(p, options.glob) - } - } - - if (!results.length) - return - - for (let i = 0; i < results.length; i++) { - const p = results[i] - - let st - try { - st = options.lstatSync(p) - } catch (er) { - if (er.code === "ENOENT") - return - - // Windows can EPERM on stat. Life is suffering. - if (er.code === "EPERM" && isWindows) - fixWinEPERMSync(p, options, er) - } - - try { - // sunos lets the root user unlink directories, which is... weird. - if (st && st.isDirectory()) - rmdirSync(p, options, null) - else - options.unlinkSync(p) - } catch (er) { - if (er.code === "ENOENT") - return - if (er.code === "EPERM") - return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er) - if (er.code !== "EISDIR") - throw er - - rmdirSync(p, options, er) - } - } -} - -const rmdirSync = (p, options, originalEr) => { - assert(p) - assert(options) - - try { - options.rmdirSync(p) - } catch (er) { - if (er.code === "ENOENT") - return - if (er.code === "ENOTDIR") - throw originalEr - if (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM") - rmkidsSync(p, options) - } -} - -const rmkidsSync = (p, options) => { - assert(p) - assert(options) - options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options)) - - // We only end up here once we got ENOTEMPTY at least once, and - // at this point, we are guaranteed to have removed all the kids. - // So, we know that it won't be ENOENT or ENOTDIR or anything else. - // try really hard to delete stuff on windows, because it has a - // PROFOUNDLY annoying habit of not closing handles promptly when - // files are deleted, resulting in spurious ENOTEMPTY errors. - const retries = isWindows ? 100 : 1 - let i = 0 - do { - let threw = true - try { - const ret = options.rmdirSync(p, options) - threw = false - return ret - } finally { - if (++i < retries && threw) - continue - } - } while (true) -} - -module.exports = rimraf -rimraf.sync = rimrafSync + this.onlyFiles = false; + } + if (this.stats) { + this.objectMode = true; + } + } + _getValue(option, value) { + return option === undefined ? value : option; + } + _getFileSystemMethods(methods = {}) { + return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods); + } +} +exports.default = Settings; /***/ }), -/* 372 */ +/* 358 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const AggregateError = __webpack_require__(373); +const path = __webpack_require__(4); +const pathType = __webpack_require__(359); -module.exports = async ( - iterable, - mapper, - { - concurrency = Infinity, - stopOnError = true - } = {} -) => { - return new Promise((resolve, reject) => { - if (typeof mapper !== 'function') { - throw new TypeError('Mapper function is required'); - } +const getExtensions = extensions => extensions.length > 1 ? `{${extensions.join(',')}}` : extensions[0]; - if (!(typeof concurrency === 'number' && concurrency >= 1)) { - throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${concurrency}\` (${typeof concurrency})`); - } +const getPath = (filepath, cwd) => { + const pth = filepath[0] === '!' ? filepath.slice(1) : filepath; + return path.isAbsolute(pth) ? pth : path.join(cwd, pth); +}; - const ret = []; - const errors = []; - const iterator = iterable[Symbol.iterator](); - let isRejected = false; - let isIterableDone = false; - let resolvingCount = 0; - let currentIndex = 0; +const addExtensions = (file, extensions) => { + if (path.extname(file)) { + return `**/${file}`; + } - const next = () => { - if (isRejected) { - return; - } + return `**/${file}.${getExtensions(extensions)}`; +}; - const nextItem = iterator.next(); - const i = currentIndex; - currentIndex++; +const getGlob = (directory, options) => { + if (options.files && !Array.isArray(options.files)) { + throw new TypeError(`Expected \`files\` to be of type \`Array\` but received type \`${typeof options.files}\``); + } - if (nextItem.done) { - isIterableDone = true; + if (options.extensions && !Array.isArray(options.extensions)) { + throw new TypeError(`Expected \`extensions\` to be of type \`Array\` but received type \`${typeof options.extensions}\``); + } - if (resolvingCount === 0) { - if (!stopOnError && errors.length !== 0) { - reject(new AggregateError(errors)); - } else { - resolve(ret); - } - } + if (options.files && options.extensions) { + return options.files.map(x => path.posix.join(directory, addExtensions(x, options.extensions))); + } - return; - } + if (options.files) { + return options.files.map(x => path.posix.join(directory, `**/${x}`)); + } - resolvingCount++; + if (options.extensions) { + return [path.posix.join(directory, `**/*.${getExtensions(options.extensions)}`)]; + } - (async () => { - try { - const element = await nextItem.value; - ret[i] = await mapper(element, i); - resolvingCount--; - next(); - } catch (error) { - if (stopOnError) { - isRejected = true; - reject(error); - } else { - errors.push(error); - resolvingCount--; - next(); - } - } - })(); - }; + return [path.posix.join(directory, '**')]; +}; - for (let i = 0; i < concurrency; i++) { - next(); +module.exports = async (input, options) => { + options = { + cwd: process.cwd(), + ...options + }; - if (isIterableDone) { - break; - } - } - }); + if (typeof options.cwd !== 'string') { + throw new TypeError(`Expected \`cwd\` to be of type \`string\` but received type \`${typeof options.cwd}\``); + } + + const globs = await Promise.all([].concat(input).map(async x => { + const isDirectory = await pathType.isDirectory(getPath(x, options.cwd)); + return isDirectory ? getGlob(x, options) : x; + })); + + return [].concat.apply([], globs); // eslint-disable-line prefer-spread +}; + +module.exports.sync = (input, options) => { + options = { + cwd: process.cwd(), + ...options + }; + + if (typeof options.cwd !== 'string') { + throw new TypeError(`Expected \`cwd\` to be of type \`string\` but received type \`${typeof options.cwd}\``); + } + + const globs = [].concat(input).map(x => pathType.isDirectorySync(getPath(x, options.cwd)) ? getGlob(x, options) : x); + + return [].concat.apply([], globs); // eslint-disable-line prefer-spread }; /***/ }), -/* 373 */ +/* 359 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const indentString = __webpack_require__(374); -const cleanStack = __webpack_require__(375); +const {promisify} = __webpack_require__(111); +const fs = __webpack_require__(133); -const cleanInternalStack = stack => stack.replace(/\s+at .*aggregate-error\/index.js:\d+:\d+\)?/g, ''); +async function isType(fsStatType, statsMethodName, filePath) { + if (typeof filePath !== 'string') { + throw new TypeError(`Expected a string, got ${typeof filePath}`); + } -class AggregateError extends Error { - constructor(errors) { - if (!Array.isArray(errors)) { - throw new TypeError(`Expected input to be an Array, got ${typeof errors}`); + try { + const stats = await promisify(fs[fsStatType])(filePath); + return stats[statsMethodName](); + } catch (error) { + if (error.code === 'ENOENT') { + return false; } - errors = [...errors].map(error => { - if (error instanceof Error) { - return error; - } - - if (error !== null && typeof error === 'object') { - // Handle plain error objects with message property and/or possibly other metadata - return Object.assign(new Error(error.message), error); - } - - return new Error(error); - }); - - let message = errors - .map(error => { - // The `stack` property is not standardized, so we can't assume it exists - return typeof error.stack === 'string' ? cleanInternalStack(cleanStack(error.stack)) : String(error); - }) - .join('\n'); - message = '\n' + indentString(message, 4); - super(message); - - this.name = 'AggregateError'; + throw error; + } +} - Object.defineProperty(this, '_errors', {value: errors}); +function isTypeSync(fsStatType, statsMethodName, filePath) { + if (typeof filePath !== 'string') { + throw new TypeError(`Expected a string, got ${typeof filePath}`); } - * [Symbol.iterator]() { - for (const error of this._errors) { - yield error; + try { + return fs[fsStatType](filePath)[statsMethodName](); + } catch (error) { + if (error.code === 'ENOENT') { + return false; } + + throw error; } } -module.exports = AggregateError; +exports.isFile = isType.bind(null, 'stat', 'isFile'); +exports.isDirectory = isType.bind(null, 'stat', 'isDirectory'); +exports.isSymlink = isType.bind(null, 'lstat', 'isSymbolicLink'); +exports.isFileSync = isTypeSync.bind(null, 'statSync', 'isFile'); +exports.isDirectorySync = isTypeSync.bind(null, 'statSync', 'isDirectory'); +exports.isSymlinkSync = isTypeSync.bind(null, 'lstatSync', 'isSymbolicLink'); /***/ }), -/* 374 */ +/* 360 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; +const {promisify} = __webpack_require__(111); +const fs = __webpack_require__(133); +const path = __webpack_require__(4); +const fastGlob = __webpack_require__(289); +const gitIgnore = __webpack_require__(361); +const slash = __webpack_require__(362); -module.exports = (string, count = 1, options) => { - options = { - indent: ' ', - includeEmptyLines: false, - ...options - }; +const DEFAULT_IGNORE = [ + '**/node_modules/**', + '**/flow-typed/**', + '**/coverage/**', + '**/.git' +]; - if (typeof string !== 'string') { - throw new TypeError( - `Expected \`input\` to be a \`string\`, got \`${typeof string}\`` - ); - } +const readFileP = promisify(fs.readFile); - if (typeof count !== 'number') { - throw new TypeError( - `Expected \`count\` to be a \`number\`, got \`${typeof count}\`` - ); +const mapGitIgnorePatternTo = base => ignore => { + if (ignore.startsWith('!')) { + return '!' + path.posix.join(base, ignore.slice(1)); } - if (typeof options.indent !== 'string') { - throw new TypeError( - `Expected \`options.indent\` to be a \`string\`, got \`${typeof options.indent}\`` - ); - } + return path.posix.join(base, ignore); +}; - if (count === 0) { - return string; +const parseGitIgnore = (content, options) => { + const base = slash(path.relative(options.cwd, path.dirname(options.fileName))); + + return content + .split(/\r?\n/) + .filter(Boolean) + .filter(line => !line.startsWith('#')) + .map(mapGitIgnorePatternTo(base)); +}; + +const reduceIgnore = files => { + return files.reduce((ignores, file) => { + ignores.add(parseGitIgnore(file.content, { + cwd: file.cwd, + fileName: file.filePath + })); + return ignores; + }, gitIgnore()); +}; + +const ensureAbsolutePathForCwd = (cwd, p) => { + if (path.isAbsolute(p)) { + if (p.startsWith(cwd)) { + return p; + } + + throw new Error(`Path ${p} is not in cwd ${cwd}`); } - const regex = options.includeEmptyLines ? /^/gm : /^(?!\s*$)/gm; + return path.join(cwd, p); +}; - return string.replace(regex, options.indent.repeat(count)); +const getIsIgnoredPredecate = (ignores, cwd) => { + return p => ignores.ignores(slash(path.relative(cwd, ensureAbsolutePathForCwd(cwd, p)))); }; +const getFile = async (file, cwd) => { + const filePath = path.join(cwd, file); + const content = await readFileP(filePath, 'utf8'); -/***/ }), -/* 375 */ -/***/ (function(module, exports, __webpack_require__) { + return { + cwd, + filePath, + content + }; +}; -"use strict"; +const getFileSync = (file, cwd) => { + const filePath = path.join(cwd, file); + const content = fs.readFileSync(filePath, 'utf8'); -const os = __webpack_require__(120); + return { + cwd, + filePath, + content + }; +}; -const extractPathRegex = /\s+at.*(?:\(|\s)(.*)\)?/; -const pathRegex = /^(?:(?:(?:node|(?:internal\/[\w/]*|.*node_modules\/(?:babel-polyfill|pirates)\/.*)?\w+)\.js:\d+:\d+)|native)/; -const homeDir = typeof os.homedir === 'undefined' ? '' : os.homedir(); +const normalizeOptions = ({ + ignore = [], + cwd = slash(process.cwd()) +} = {}) => { + return {ignore, cwd}; +}; -module.exports = (stack, options) => { - options = Object.assign({pretty: false}, options); +module.exports = async options => { + options = normalizeOptions(options); - return stack.replace(/\\/g, '/') - .split('\n') - .filter(line => { - const pathMatches = line.match(extractPathRegex); - if (pathMatches === null || !pathMatches[1]) { - return true; - } + const paths = await fastGlob('**/.gitignore', { + ignore: DEFAULT_IGNORE.concat(options.ignore), + cwd: options.cwd + }); - const match = pathMatches[1]; + const files = await Promise.all(paths.map(file => getFile(file, options.cwd))); + const ignores = reduceIgnore(files); - // Electron - if ( - match.includes('.app/Contents/Resources/electron.asar') || - match.includes('.app/Contents/Resources/default_app.asar') - ) { - return false; - } + return getIsIgnoredPredecate(ignores, options.cwd); +}; - return !pathRegex.test(match); - }) - .filter(line => line.trim() !== '') - .map(line => { - if (options.pretty) { - return line.replace(extractPathRegex, (m, p1) => m.replace(p1, p1.replace(homeDir, '~'))); - } +module.exports.sync = options => { + options = normalizeOptions(options); - return line; - }) - .join('\n'); + const paths = fastGlob.sync('**/.gitignore', { + ignore: DEFAULT_IGNORE.concat(options.ignore), + cwd: options.cwd + }); + + const files = paths.map(file => getFileSync(file, options.cwd)); + const ignores = reduceIgnore(files); + + return getIsIgnoredPredecate(ignores, options.cwd); }; -/***/ }), -/* 376 */ -/***/ (function(module, exports, __webpack_require__) { +/***/ }), +/* 361 */ +/***/ (function(module, exports) { + +// A simple implementation of make-array +function makeArray (subject) { + return Array.isArray(subject) + ? subject + : [subject] +} + +const EMPTY = '' +const SPACE = ' ' +const ESCAPE = '\\' +const REGEX_TEST_BLANK_LINE = /^\s+$/ +const REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/ +const REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/ +const REGEX_SPLITALL_CRLF = /\r?\n/g +// /foo, +// ./foo, +// ../foo, +// . +// .. +const REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/ + +const SLASH = '/' +const KEY_IGNORE = typeof Symbol !== 'undefined' + ? Symbol.for('node-ignore') + /* istanbul ignore next */ + : 'node-ignore' + +const define = (object, key, value) => + Object.defineProperty(object, key, {value}) + +const REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g + +// Sanitize the range of a regular expression +// The cases are complicated, see test cases for details +const sanitizeRange = range => range.replace( + REGEX_REGEXP_RANGE, + (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0) + ? match + // Invalid range (out of order) which is ok for gitignore rules but + // fatal for JavaScript regular expression, so eliminate it. + : EMPTY +) + +// See fixtures #59 +const cleanRangeBackSlash = slashes => { + const {length} = slashes + return slashes.slice(0, length - length % 2) +} + +// > If the pattern ends with a slash, +// > it is removed for the purpose of the following description, +// > but it would only find a match with a directory. +// > In other words, foo/ will match a directory foo and paths underneath it, +// > but will not match a regular file or a symbolic link foo +// > (this is consistent with the way how pathspec works in general in Git). +// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`' +// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call +// you could use option `mark: true` with `glob` + +// '`foo/`' should not continue with the '`..`' +const REPLACERS = [ + + // > Trailing spaces are ignored unless they are quoted with backslash ("\") + [ + // (a\ ) -> (a ) + // (a ) -> (a) + // (a \ ) -> (a ) + /\\?\s+$/, + match => match.indexOf('\\') === 0 + ? SPACE + : EMPTY + ], + + // replace (\ ) with ' ' + [ + /\\\s/g, + () => SPACE + ], + + // Escape metacharacters + // which is written down by users but means special for regular expressions. + + // > There are 12 characters with special meanings: + // > - the backslash \, + // > - the caret ^, + // > - the dollar sign $, + // > - the period or dot ., + // > - the vertical bar or pipe symbol |, + // > - the question mark ?, + // > - the asterisk or star *, + // > - the plus sign +, + // > - the opening parenthesis (, + // > - the closing parenthesis ), + // > - and the opening square bracket [, + // > - the opening curly brace {, + // > These special characters are often called "metacharacters". + [ + /[\\$.|*+(){^]/g, + match => `\\${match}` + ], + + [ + // > a question mark (?) matches a single character + /(?!\\)\?/g, + () => '[^/]' + ], + + // leading slash + [ + + // > A leading slash matches the beginning of the pathname. + // > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c". + // A leading slash matches the beginning of the pathname + /^\//, + () => '^' + ], + + // replace special metacharacter slash after the leading slash + [ + /\//g, + () => '\\/' + ], + + [ + // > A leading "**" followed by a slash means match in all directories. + // > For example, "**/foo" matches file or directory "foo" anywhere, + // > the same as pattern "foo". + // > "**/foo/bar" matches file or directory "bar" anywhere that is directly + // > under directory "foo". + // Notice that the '*'s have been replaced as '\\*' + /^\^*\\\*\\\*\\\//, + + // '**/foo' <-> 'foo' + () => '^(?:.*\\/)?' + ], + + // starting + [ + // there will be no leading '/' + // (which has been replaced by section "leading slash") + // If starts with '**', adding a '^' to the regular expression also works + /^(?=[^^])/, + function startingReplacer () { + // If has a slash `/` at the beginning or middle + return !/\/(?!$)/.test(this) + // > Prior to 2.22.1 + // > If the pattern does not contain a slash /, + // > Git treats it as a shell glob pattern + // Actually, if there is only a trailing slash, + // git also treats it as a shell glob pattern + + // After 2.22.1 (compatible but clearer) + // > If there is a separator at the beginning or middle (or both) + // > of the pattern, then the pattern is relative to the directory + // > level of the particular .gitignore file itself. + // > Otherwise the pattern may also match at any level below + // > the .gitignore level. + ? '(?:^|\\/)' -"use strict"; + // > Otherwise, Git treats the pattern as a shell glob suitable for + // > consumption by fnmatch(3) + : '^' + } + ], -const chalk = __webpack_require__(377); -const cliCursor = __webpack_require__(386); -const cliSpinners = __webpack_require__(390); -const logSymbols = __webpack_require__(392); + // two globstars + [ + // Use lookahead assertions so that we could match more than one `'/**'` + /\\\/\\\*\\\*(?=\\\/|$)/g, -class Ora { - constructor(options) { - if (typeof options === 'string') { - options = { - text: options - }; - } + // Zero, one or several directories + // should not use '*', or it will be replaced by the next replacer - this.options = Object.assign({ - text: '', - color: 'cyan', - stream: process.stderr - }, options); + // Check if it is not the last `'/**'` + (_, index, str) => index + 6 < str.length - const sp = this.options.spinner; - this.spinner = typeof sp === 'object' ? sp : (process.platform === 'win32' ? cliSpinners.line : (cliSpinners[sp] || cliSpinners.dots)); // eslint-disable-line no-nested-ternary + // case: /**/ + // > A slash followed by two consecutive asterisks then a slash matches + // > zero or more directories. + // > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on. + // '/**/' + ? '(?:\\/[^\\/]+)*' - if (this.spinner.frames === undefined) { - throw new Error('Spinner must define `frames`'); - } + // case: /** + // > A trailing `"/**"` matches everything inside. - this.text = this.options.text; - this.color = this.options.color; - this.interval = this.options.interval || this.spinner.interval || 100; - this.stream = this.options.stream; - this.id = null; - this.frameIndex = 0; - this.enabled = typeof this.options.enabled === 'boolean' ? this.options.enabled : ((this.stream && this.stream.isTTY) && !process.env.CI); - } - frame() { - const frames = this.spinner.frames; - let frame = frames[this.frameIndex]; + // #21: everything inside but it should not include the current folder + : '\\/.+' + ], - if (this.color) { - frame = chalk[this.color](frame); - } + // intermediate wildcards + [ + // Never replace escaped '*' + // ignore rule '\*' will match the path '*' - this.frameIndex = ++this.frameIndex % frames.length; + // 'abc.*/' -> go + // 'abc.*' -> skip this rule + /(^|[^\\]+)\\\*(?=.+)/g, - return frame + ' ' + this.text; - } - clear() { - if (!this.enabled) { - return this; - } + // '*.js' matches '.js' + // '*.js' doesn't match 'abc' + (_, p1) => `${p1}[^\\/]*` + ], - this.stream.clearLine(); - this.stream.cursorTo(0); + [ + // unescape, revert step 3 except for back slash + // For example, if a user escape a '\\*', + // after step 3, the result will be '\\\\\\*' + /\\\\\\(?=[$.|*+(){^])/g, + () => ESCAPE + ], - return this; - } - render() { - this.clear(); - this.stream.write(this.frame()); + [ + // '\\\\' -> '\\' + /\\\\/g, + () => ESCAPE + ], - return this; - } - start(text) { - if (text) { - this.text = text; - } + [ + // > The range notation, e.g. [a-zA-Z], + // > can be used to match one of the characters in a range. - if (!this.enabled || this.id) { - return this; - } + // `\` is escaped by step 3 + /(\\)?\[([^\]/]*?)(\\*)($|\])/g, + (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE + // '\\[bar]' -> '\\\\[bar\\]' + ? `\\[${range}${cleanRangeBackSlash(endEscape)}${close}` + : close === ']' + ? endEscape.length % 2 === 0 + // A normal case, and it is a range notation + // '[bar]' + // '[bar\\\\]' + ? `[${sanitizeRange(range)}${endEscape}]` + // Invalid range notaton + // '[bar\\]' -> '[bar\\\\]' + : '[]' + : '[]' + ], - cliCursor.hide(this.stream); - this.render(); - this.id = setInterval(this.render.bind(this), this.interval); + // ending + [ + // 'js' will not match 'js.' + // 'ab' will not match 'abc' + /(?:[^*])$/, - return this; - } - stop() { - if (!this.enabled) { - return this; - } + // WTF! + // https://git-scm.com/docs/gitignore + // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1) + // which re-fixes #24, #38 - clearInterval(this.id); - this.id = null; - this.frameIndex = 0; - this.clear(); - cliCursor.show(this.stream); + // > If there is a separator at the end of the pattern then the pattern + // > will only match directories, otherwise the pattern can match both + // > files and directories. - return this; - } - succeed(text) { - return this.stopAndPersist({symbol: logSymbols.success, text}); - } - fail(text) { - return this.stopAndPersist({symbol: logSymbols.error, text}); - } - warn(text) { - return this.stopAndPersist({symbol: logSymbols.warning, text}); - } - info(text) { - return this.stopAndPersist({symbol: logSymbols.info, text}); - } - stopAndPersist(options) { - if (!this.enabled) { - return this; - } + // 'js*' will not match 'a.js' + // 'js/' will not match 'a.js' + // 'js' will match 'a.js' and 'a.js/' + match => /\/$/.test(match) + // foo/ will not match 'foo' + ? `${match}$` + // foo matches 'foo' and 'foo/' + : `${match}(?=$|\\/$)` + ], - // Legacy argument - // TODO: Deprecate sometime in the future - if (typeof options === 'string') { - options = { - symbol: options - }; - } + // trailing wildcard + [ + /(\^|\\\/)?\\\*$/, + (_, p1) => { + const prefix = p1 + // '\^': + // '/*' does not match EMPTY + // '/*' does not match everything - options = options || {}; + // '\\\/': + // 'abc/*' does not match 'abc/' + ? `${p1}[^/]+` - this.stop(); - this.stream.write(`${options.symbol || ' '} ${options.text || this.text}\n`); + // 'a*' matches 'a' + // 'a*' matches 'aa' + : '[^/]*' - return this; - } -} + return `${prefix}(?=$|\\/$)` + } + ], +] -module.exports = function (opts) { - return new Ora(opts); -}; +// A simple cache, because an ignore rule only has only one certain meaning +const regexCache = Object.create(null) -module.exports.promise = (action, options) => { - if (typeof action.then !== 'function') { - throw new TypeError('Parameter `action` must be a Promise'); - } +// @param {pattern} +const makeRegex = (pattern, negative, ignorecase) => { + const r = regexCache[pattern] + if (r) { + return r + } - const spinner = new Ora(options); - spinner.start(); + // const replacers = negative + // ? NEGATIVE_REPLACERS + // : POSITIVE_REPLACERS - action.then( - () => { - spinner.succeed(); - }, - () => { - spinner.fail(); - } - ); + const source = REPLACERS.reduce( + (prev, current) => prev.replace(current[0], current[1].bind(pattern)), + pattern + ) - return spinner; -}; + return regexCache[pattern] = ignorecase + ? new RegExp(source, 'i') + : new RegExp(source) +} +const isString = subject => typeof subject === 'string' -/***/ }), -/* 377 */ -/***/ (function(module, exports, __webpack_require__) { +// > A blank line matches no files, so it can serve as a separator for readability. +const checkPattern = pattern => pattern + && isString(pattern) + && !REGEX_TEST_BLANK_LINE.test(pattern) -"use strict"; + // > A line starting with # serves as a comment. + && pattern.indexOf('#') !== 0 -const escapeStringRegexp = __webpack_require__(178); -const ansiStyles = __webpack_require__(378); -const stdoutColor = __webpack_require__(383).stdout; +const splitPattern = pattern => pattern.split(REGEX_SPLITALL_CRLF) -const template = __webpack_require__(385); +class IgnoreRule { + constructor ( + origin, + pattern, + negative, + regex + ) { + this.origin = origin + this.pattern = pattern + this.negative = negative + this.regex = regex + } +} -const isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm'); +const createRule = (pattern, ignorecase) => { + const origin = pattern + let negative = false -// `supportsColor.level` → `ansiStyles.color[name]` mapping -const levelMapping = ['ansi', 'ansi', 'ansi256', 'ansi16m']; + // > An optional prefix "!" which negates the pattern; + if (pattern.indexOf('!') === 0) { + negative = true + pattern = pattern.substr(1) + } -// `color-convert` models to exclude from the Chalk API due to conflicts and such -const skipModels = new Set(['gray']); + pattern = pattern + // > Put a backslash ("\") in front of the first "!" for patterns that + // > begin with a literal "!", for example, `"\!important!.txt"`. + .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!') + // > Put a backslash ("\") in front of the first hash for patterns that + // > begin with a hash. + .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#') -const styles = Object.create(null); + const regex = makeRegex(pattern, negative, ignorecase) -function applyOptions(obj, options) { - options = options || {}; + return new IgnoreRule( + origin, + pattern, + negative, + regex + ) +} - // Detect level if not set manually - const scLevel = stdoutColor ? stdoutColor.level : 0; - obj.level = options.level === undefined ? scLevel : options.level; - obj.enabled = 'enabled' in options ? options.enabled : obj.level > 0; +const throwError = (message, Ctor) => { + throw new Ctor(message) } -function Chalk(options) { - // We check for this.template here since calling `chalk.constructor()` - // by itself will have a `this` of a previously constructed chalk object - if (!this || !(this instanceof Chalk) || this.template) { - const chalk = {}; - applyOptions(chalk, options); +const checkPath = (path, originalPath, doThrow) => { + if (!isString(path)) { + return doThrow( + `path must be a string, but got \`${originalPath}\``, + TypeError + ) + } - chalk.template = function () { - const args = [].slice.call(arguments); - return chalkTag.apply(null, [chalk.template].concat(args)); - }; + // We don't know if we should ignore EMPTY, so throw + if (!path) { + return doThrow(`path must not be empty`, TypeError) + } - Object.setPrototypeOf(chalk, Chalk.prototype); - Object.setPrototypeOf(chalk.template, chalk); + // Check if it is a relative path + if (checkPath.isNotRelative(path)) { + const r = '`path.relative()`d' + return doThrow( + `path should be a ${r} string, but got "${originalPath}"`, + RangeError + ) + } - chalk.template.constructor = Chalk; + return true +} - return chalk.template; - } +const isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path) - applyOptions(this, options); -} +checkPath.isNotRelative = isNotRelative +checkPath.convert = p => p -// Use bright blue on Windows as the normal blue color is illegible -if (isSimpleWindowsTerm) { - ansiStyles.blue.open = '\u001B[94m'; -} +class Ignore { + constructor ({ + ignorecase = true + } = {}) { + this._rules = [] + this._ignorecase = ignorecase + define(this, KEY_IGNORE, true) + this._initCache() + } -for (const key of Object.keys(ansiStyles)) { - ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g'); + _initCache () { + this._ignoreCache = Object.create(null) + this._testCache = Object.create(null) + } - styles[key] = { - get() { - const codes = ansiStyles[key]; - return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, key); - } - }; -} + _addPattern (pattern) { + // #32 + if (pattern && pattern[KEY_IGNORE]) { + this._rules = this._rules.concat(pattern._rules) + this._added = true + return + } -styles.visible = { - get() { - return build.call(this, this._styles || [], true, 'visible'); - } -}; + if (checkPattern(pattern)) { + const rule = createRule(pattern, this._ignorecase) + this._added = true + this._rules.push(rule) + } + } -ansiStyles.color.closeRe = new RegExp(escapeStringRegexp(ansiStyles.color.close), 'g'); -for (const model of Object.keys(ansiStyles.color.ansi)) { - if (skipModels.has(model)) { - continue; - } + // @param {Array | string | Ignore} pattern + add (pattern) { + this._added = false - styles[model] = { - get() { - const level = this.level; - return function () { - const open = ansiStyles.color[levelMapping[level]][model].apply(null, arguments); - const codes = { - open, - close: ansiStyles.color.close, - closeRe: ansiStyles.color.closeRe - }; - return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model); - }; - } - }; -} + makeArray( + isString(pattern) + ? splitPattern(pattern) + : pattern + ).forEach(this._addPattern, this) -ansiStyles.bgColor.closeRe = new RegExp(escapeStringRegexp(ansiStyles.bgColor.close), 'g'); -for (const model of Object.keys(ansiStyles.bgColor.ansi)) { - if (skipModels.has(model)) { - continue; - } + // Some rules have just added to the ignore, + // making the behavior changed. + if (this._added) { + this._initCache() + } - const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1); - styles[bgModel] = { - get() { - const level = this.level; - return function () { - const open = ansiStyles.bgColor[levelMapping[level]][model].apply(null, arguments); - const codes = { - open, - close: ansiStyles.bgColor.close, - closeRe: ansiStyles.bgColor.closeRe - }; - return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model); - }; - } - }; -} + return this + } -const proto = Object.defineProperties(() => {}, styles); + // legacy + addPattern (pattern) { + return this.add(pattern) + } -function build(_styles, _empty, key) { - const builder = function () { - return applyStyle.apply(builder, arguments); - }; + // | ignored : unignored + // negative | 0:0 | 0:1 | 1:0 | 1:1 + // -------- | ------- | ------- | ------- | -------- + // 0 | TEST | TEST | SKIP | X + // 1 | TESTIF | SKIP | TEST | X - builder._styles = _styles; - builder._empty = _empty; + // - SKIP: always skip + // - TEST: always test + // - TESTIF: only test if checkUnignored + // - X: that never happen - const self = this; + // @param {boolean} whether should check if the path is unignored, + // setting `checkUnignored` to `false` could reduce additional + // path matching. - Object.defineProperty(builder, 'level', { - enumerable: true, - get() { - return self.level; - }, - set(level) { - self.level = level; - } - }); + // @returns {TestResult} true if a file is ignored + _testOne (path, checkUnignored) { + let ignored = false + let unignored = false - Object.defineProperty(builder, 'enabled', { - enumerable: true, - get() { - return self.enabled; - }, - set(enabled) { - self.enabled = enabled; - } - }); + this._rules.forEach(rule => { + const {negative} = rule + if ( + unignored === negative && ignored !== unignored + || negative && !ignored && !unignored && !checkUnignored + ) { + return + } - // See below for fix regarding invisible grey/dim combination on Windows - builder.hasGrey = this.hasGrey || key === 'gray' || key === 'grey'; + const matched = rule.regex.test(path) - // `__proto__` is used because we must return a function, but there is - // no way to create a function with a different prototype - builder.__proto__ = proto; // eslint-disable-line no-proto + if (matched) { + ignored = !negative + unignored = negative + } + }) - return builder; -} + return { + ignored, + unignored + } + } -function applyStyle() { - // Support varags, but simply cast to string in case there's only one arg - const args = arguments; - const argsLen = args.length; - let str = String(arguments[0]); + // @returns {TestResult} + _test (originalPath, cache, checkUnignored, slices) { + const path = originalPath + // Supports nullable path + && checkPath.convert(originalPath) - if (argsLen === 0) { - return ''; - } + checkPath(path, originalPath, throwError) - if (argsLen > 1) { - // Don't slice `arguments`, it prevents V8 optimizations - for (let a = 1; a < argsLen; a++) { - str += ' ' + args[a]; - } - } + return this._t(path, cache, checkUnignored, slices) + } - if (!this.enabled || this.level <= 0 || !str) { - return this._empty ? '' : str; - } + _t (path, cache, checkUnignored, slices) { + if (path in cache) { + return cache[path] + } - // Turns out that on Windows dimmed gray text becomes invisible in cmd.exe, - // see https://github.com/chalk/chalk/issues/58 - // If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop. - const originalDim = ansiStyles.dim.open; - if (isSimpleWindowsTerm && this.hasGrey) { - ansiStyles.dim.open = ''; - } + if (!slices) { + // path/to/a.js + // ['path', 'to', 'a.js'] + slices = path.split(SLASH) + } - for (const code of this._styles.slice().reverse()) { - // Replace any instances already present with a re-opening code - // otherwise only the part of the string until said closing code - // will be colored, and the rest will simply be 'plain'. - str = code.open + str.replace(code.closeRe, code.open) + code.close; + slices.pop() - // Close the styling before a linebreak and reopen - // after next line to fix a bleed issue on macOS - // https://github.com/chalk/chalk/pull/92 - str = str.replace(/\r?\n/g, `${code.close}$&${code.open}`); - } + // If the path has no parent directory, just test it + if (!slices.length) { + return cache[path] = this._testOne(path, checkUnignored) + } - // Reset the original `dim` if we changed it to work around the Windows dimmed gray issue - ansiStyles.dim.open = originalDim; + const parent = this._t( + slices.join(SLASH) + SLASH, + cache, + checkUnignored, + slices + ) - return str; -} + // If the path contains a parent directory, check the parent first + return cache[path] = parent.ignored + // > It is not possible to re-include a file if a parent directory of + // > that file is excluded. + ? parent + : this._testOne(path, checkUnignored) + } -function chalkTag(chalk, strings) { - if (!Array.isArray(strings)) { - // If chalk() was called by itself or with a string, - // return the string itself as a string. - return [].slice.call(arguments, 1).join(' '); - } + ignores (path) { + return this._test(path, this._ignoreCache, false).ignored + } - const args = [].slice.call(arguments, 2); - const parts = [strings.raw[0]]; + createFilter () { + return path => !this.ignores(path) + } - for (let i = 1; i < strings.length; i++) { - parts.push(String(args[i - 1]).replace(/[{}\\]/g, '\\$&')); - parts.push(String(strings.raw[i])); - } + filter (paths) { + return makeArray(paths).filter(this.createFilter()) + } - return template(chalk, parts.join('')); + // @returns {TestResult} + test (path) { + return this._test(path, this._testCache, true) + } } -Object.defineProperties(Chalk.prototype, styles); +const factory = options => new Ignore(options) -module.exports = Chalk(); // eslint-disable-line new-cap -module.exports.supportsColor = stdoutColor; -module.exports.default = module.exports; // For TypeScript +const returnFalse = () => false +const isPathValid = path => + checkPath(path && checkPath.convert(path), path, returnFalse) -/***/ }), -/* 378 */ -/***/ (function(module, exports, __webpack_require__) { +factory.isPathValid = isPathValid -"use strict"; -/* WEBPACK VAR INJECTION */(function(module) { -const colorConvert = __webpack_require__(379); +// Fixes typescript +factory.default = factory -const wrapAnsi16 = (fn, offset) => function () { - const code = fn.apply(colorConvert, arguments); - return `\u001B[${code + offset}m`; -}; +module.exports = factory -const wrapAnsi256 = (fn, offset) => function () { - const code = fn.apply(colorConvert, arguments); - return `\u001B[${38 + offset};5;${code}m`; -}; +// Windows +// -------------------------------------------------------------- +/* istanbul ignore if */ +if ( + // Detect `process` so that it can run in browsers. + typeof process !== 'undefined' + && ( + process.env && process.env.IGNORE_TEST_WIN32 + || process.platform === 'win32' + ) +) { + /* eslint no-control-regex: "off" */ + const makePosix = str => /^\\\\\?\\/.test(str) + || /["<>|\u0000-\u001F]+/u.test(str) + ? str + : str.replace(/\\/g, '/') -const wrapAnsi16m = (fn, offset) => function () { - const rgb = fn.apply(colorConvert, arguments); - return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; -}; + checkPath.convert = makePosix -function assembleStyles() { - const codes = new Map(); - const styles = { - modifier: { - reset: [0, 0], - // 21 isn't widely supported and 22 does the same thing - bold: [1, 22], - dim: [2, 22], - italic: [3, 23], - underline: [4, 24], - inverse: [7, 27], - hidden: [8, 28], - strikethrough: [9, 29] - }, - color: { - black: [30, 39], - red: [31, 39], - green: [32, 39], - yellow: [33, 39], - blue: [34, 39], - magenta: [35, 39], - cyan: [36, 39], - white: [37, 39], - gray: [90, 39], + // 'C:\\foo' <- 'C:\\foo' has been converted to 'C:/' + // 'd:\\foo' + const REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i + checkPath.isNotRelative = path => + REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path) + || isNotRelative(path) +} - // Bright color - redBright: [91, 39], - greenBright: [92, 39], - yellowBright: [93, 39], - blueBright: [94, 39], - magentaBright: [95, 39], - cyanBright: [96, 39], - whiteBright: [97, 39] - }, - bgColor: { - bgBlack: [40, 49], - bgRed: [41, 49], - bgGreen: [42, 49], - bgYellow: [43, 49], - bgBlue: [44, 49], - bgMagenta: [45, 49], - bgCyan: [46, 49], - bgWhite: [47, 49], - // Bright color - bgBlackBright: [100, 49], - bgRedBright: [101, 49], - bgGreenBright: [102, 49], - bgYellowBright: [103, 49], - bgBlueBright: [104, 49], - bgMagentaBright: [105, 49], - bgCyanBright: [106, 49], - bgWhiteBright: [107, 49] - } - }; +/***/ }), +/* 362 */ +/***/ (function(module, exports, __webpack_require__) { - // Fix humans - styles.color.grey = styles.color.gray; +"use strict"; - for (const groupName of Object.keys(styles)) { - const group = styles[groupName]; +module.exports = path => { + const isExtendedLengthPath = /^\\\\\?\\/.test(path); + const hasNonAscii = /[^\u0000-\u0080]+/.test(path); // eslint-disable-line no-control-regex - for (const styleName of Object.keys(group)) { - const style = group[styleName]; + if (isExtendedLengthPath || hasNonAscii) { + return path; + } - styles[styleName] = { - open: `\u001B[${style[0]}m`, - close: `\u001B[${style[1]}m` - }; + return path.replace(/\\/g, '/'); +}; - group[styleName] = styles[styleName]; - codes.set(style[0], style[1]); - } +/***/ }), +/* 363 */ +/***/ (function(module, exports, __webpack_require__) { - Object.defineProperty(styles, groupName, { - value: group, - enumerable: false - }); +"use strict"; - Object.defineProperty(styles, 'codes', { - value: codes, - enumerable: false +const {Transform} = __webpack_require__(137); + +class ObjectTransform extends Transform { + constructor() { + super({ + objectMode: true }); } +} - const ansi2ansi = n => n; - const rgb2rgb = (r, g, b) => [r, g, b]; - - styles.color.close = '\u001B[39m'; - styles.bgColor.close = '\u001B[49m'; - - styles.color.ansi = { - ansi: wrapAnsi16(ansi2ansi, 0) - }; - styles.color.ansi256 = { - ansi256: wrapAnsi256(ansi2ansi, 0) - }; - styles.color.ansi16m = { - rgb: wrapAnsi16m(rgb2rgb, 0) - }; - - styles.bgColor.ansi = { - ansi: wrapAnsi16(ansi2ansi, 10) - }; - styles.bgColor.ansi256 = { - ansi256: wrapAnsi256(ansi2ansi, 10) - }; - styles.bgColor.ansi16m = { - rgb: wrapAnsi16m(rgb2rgb, 10) - }; +class FilterStream extends ObjectTransform { + constructor(filter) { + super(); + this._filter = filter; + } - for (let key of Object.keys(colorConvert)) { - if (typeof colorConvert[key] !== 'object') { - continue; + _transform(data, encoding, callback) { + if (this._filter(data)) { + this.push(data); } - const suite = colorConvert[key]; - - if (key === 'ansi16') { - key = 'ansi'; - } + callback(); + } +} - if ('ansi16' in suite) { - styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0); - styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10); - } +class UniqueStream extends ObjectTransform { + constructor() { + super(); + this._pushed = new Set(); + } - if ('ansi256' in suite) { - styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0); - styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10); + _transform(data, encoding, callback) { + if (!this._pushed.has(data)) { + this.push(data); + this._pushed.add(data); } - if ('rgb' in suite) { - styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0); - styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10); - } + callback(); } - - return styles; } -// Make the export immutable -Object.defineProperty(module, 'exports', { - enumerable: true, - get: assembleStyles -}); +module.exports = { + FilterStream, + UniqueStream +}; -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(114)(module))) /***/ }), -/* 379 */ +/* 364 */ /***/ (function(module, exports, __webpack_require__) { -var conversions = __webpack_require__(380); -var route = __webpack_require__(382); +/*! + * is-glob + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ -var convert = {}; +var isExtglob = __webpack_require__(299); +var chars = { '{': '}', '(': ')', '[': ']'}; +var strictRegex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/; +var relaxedRegex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/; -var models = Object.keys(conversions); +module.exports = function isGlob(str, options) { + if (typeof str !== 'string' || str === '') { + return false; + } -function wrapRaw(fn) { - var wrappedFn = function (args) { - if (args === undefined || args === null) { - return args; - } + if (isExtglob(str)) { + return true; + } - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } + var regex = strictRegex; + var match; - return fn(args); - }; + // optionally relax regex + if (options && options.strict === false) { + regex = relaxedRegex; + } - // preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } + while ((match = regex.exec(str))) { + if (match[2]) return true; + var idx = match.index + match[0].length; - return wrappedFn; -} + // if an open bracket/brace/paren is escaped, + // set the index to the next closing character + var open = match[1]; + var close = open ? chars[open] : null; + if (open && close) { + var n = str.indexOf(close, idx); + if (n !== -1) { + idx = n + 1; + } + } -function wrapRounded(fn) { - var wrappedFn = function (args) { - if (args === undefined || args === null) { - return args; - } + str = str.slice(idx); + } + return false; +}; - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - var result = fn(args); +/***/ }), +/* 365 */ +/***/ (function(module, exports, __webpack_require__) { - // we're assuming the result is an array here. - // see notice in conversions.js; don't use box types - // in conversion functions. - if (typeof result === 'object') { - for (var len = result.length, i = 0; i < len; i++) { - result[i] = Math.round(result[i]); - } - } +"use strict"; - return result; - }; +const path = __webpack_require__(4); - // preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; +module.exports = path_ => { + let cwd = process.cwd(); + + path_ = path.resolve(path_); + + if (process.platform === 'win32') { + cwd = cwd.toLowerCase(); + path_ = path_.toLowerCase(); } - return wrappedFn; -} + return path_ === cwd; +}; -models.forEach(function (fromModel) { - convert[fromModel] = {}; - Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels}); - Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels}); +/***/ }), +/* 366 */ +/***/ (function(module, exports, __webpack_require__) { - var routes = route(fromModel); - var routeModels = Object.keys(routes); +"use strict"; - routeModels.forEach(function (toModel) { - var fn = routes[toModel]; +const path = __webpack_require__(4); - convert[fromModel][toModel] = wrapRounded(fn); - convert[fromModel][toModel].raw = wrapRaw(fn); - }); -}); +module.exports = (childPath, parentPath) => { + childPath = path.resolve(childPath); + parentPath = path.resolve(parentPath); -module.exports = convert; + if (process.platform === 'win32') { + childPath = childPath.toLowerCase(); + parentPath = parentPath.toLowerCase(); + } + if (childPath === parentPath) { + return false; + } -/***/ }), -/* 380 */ -/***/ (function(module, exports, __webpack_require__) { + childPath += path.sep; + parentPath += path.sep; -/* MIT license */ -var cssKeywords = __webpack_require__(381); + return childPath.startsWith(parentPath); +}; -// NOTE: conversions should only return primitive values (i.e. arrays, or -// values that give correct `typeof` results). -// do not use box values types (i.e. Number(), String(), etc.) -var reverseKeywords = {}; -for (var key in cssKeywords) { - if (cssKeywords.hasOwnProperty(key)) { - reverseKeywords[cssKeywords[key]] = key; - } -} +/***/ }), +/* 367 */ +/***/ (function(module, exports, __webpack_require__) { -var convert = module.exports = { - rgb: {channels: 3, labels: 'rgb'}, - hsl: {channels: 3, labels: 'hsl'}, - hsv: {channels: 3, labels: 'hsv'}, - hwb: {channels: 3, labels: 'hwb'}, - cmyk: {channels: 4, labels: 'cmyk'}, - xyz: {channels: 3, labels: 'xyz'}, - lab: {channels: 3, labels: 'lab'}, - lch: {channels: 3, labels: 'lch'}, - hex: {channels: 1, labels: ['hex']}, - keyword: {channels: 1, labels: ['keyword']}, - ansi16: {channels: 1, labels: ['ansi16']}, - ansi256: {channels: 1, labels: ['ansi256']}, - hcg: {channels: 3, labels: ['h', 'c', 'g']}, - apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, - gray: {channels: 1, labels: ['gray']} -}; +const assert = __webpack_require__(139) +const path = __webpack_require__(4) +const fs = __webpack_require__(133) +let glob = undefined +try { + glob = __webpack_require__(146) +} catch (_err) { + // treat glob as optional. +} -// hide .channels and .labels properties -for (var model in convert) { - if (convert.hasOwnProperty(model)) { - if (!('channels' in convert[model])) { - throw new Error('missing channels property: ' + model); - } +const defaultGlobOpts = { + nosort: true, + silent: true +} - if (!('labels' in convert[model])) { - throw new Error('missing channel labels property: ' + model); - } +// for EMFILE handling +let timeout = 0 - if (convert[model].labels.length !== convert[model].channels) { - throw new Error('channel and label counts mismatch: ' + model); - } +const isWindows = (process.platform === "win32") - var channels = convert[model].channels; - var labels = convert[model].labels; - delete convert[model].channels; - delete convert[model].labels; - Object.defineProperty(convert[model], 'channels', {value: channels}); - Object.defineProperty(convert[model], 'labels', {value: labels}); - } +const defaults = options => { + const methods = [ + 'unlink', + 'chmod', + 'stat', + 'lstat', + 'rmdir', + 'readdir' + ] + methods.forEach(m => { + options[m] = options[m] || fs[m] + m = m + 'Sync' + options[m] = options[m] || fs[m] + }) + + options.maxBusyTries = options.maxBusyTries || 3 + options.emfileWait = options.emfileWait || 1000 + if (options.glob === false) { + options.disableGlob = true + } + if (options.disableGlob !== true && glob === undefined) { + throw Error('glob dependency not found, set `options.disableGlob = true` if intentional') + } + options.disableGlob = options.disableGlob || false + options.glob = options.glob || defaultGlobOpts } -convert.rgb.hsl = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var min = Math.min(r, g, b); - var max = Math.max(r, g, b); - var delta = max - min; - var h; - var s; - var l; +const rimraf = (p, options, cb) => { + if (typeof options === 'function') { + cb = options + options = {} + } - if (max === min) { - h = 0; - } else if (r === max) { - h = (g - b) / delta; - } else if (g === max) { - h = 2 + (b - r) / delta; - } else if (b === max) { - h = 4 + (r - g) / delta; - } + assert(p, 'rimraf: missing path') + assert.equal(typeof p, 'string', 'rimraf: path should be a string') + assert.equal(typeof cb, 'function', 'rimraf: callback function required') + assert(options, 'rimraf: invalid options argument provided') + assert.equal(typeof options, 'object', 'rimraf: options should be object') - h = Math.min(h * 60, 360); + defaults(options) - if (h < 0) { - h += 360; - } + let busyTries = 0 + let errState = null + let n = 0 - l = (min + max) / 2; + const next = (er) => { + errState = errState || er + if (--n === 0) + cb(errState) + } - if (max === min) { - s = 0; - } else if (l <= 0.5) { - s = delta / (max + min); - } else { - s = delta / (2 - max - min); - } + const afterGlob = (er, results) => { + if (er) + return cb(er) - return [h, s * 100, l * 100]; -}; + n = results.length + if (n === 0) + return cb() -convert.rgb.hsv = function (rgb) { - var rdif; - var gdif; - var bdif; - var h; - var s; + results.forEach(p => { + const CB = (er) => { + if (er) { + if ((er.code === "EBUSY" || er.code === "ENOTEMPTY" || er.code === "EPERM") && + busyTries < options.maxBusyTries) { + busyTries ++ + // try again, with the same exact callback as this one. + return setTimeout(() => rimraf_(p, options, CB), busyTries * 100) + } - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var v = Math.max(r, g, b); - var diff = v - Math.min(r, g, b); - var diffc = function (c) { - return (v - c) / 6 / diff + 1 / 2; - }; + // this one won't happen if graceful-fs is used. + if (er.code === "EMFILE" && timeout < options.emfileWait) { + return setTimeout(() => rimraf_(p, options, CB), timeout ++) + } - if (diff === 0) { - h = s = 0; - } else { - s = diff / v; - rdif = diffc(r); - gdif = diffc(g); - bdif = diffc(b); + // already gone + if (er.code === "ENOENT") er = null + } - if (r === v) { - h = bdif - gdif; - } else if (g === v) { - h = (1 / 3) + rdif - bdif; - } else if (b === v) { - h = (2 / 3) + gdif - rdif; - } - if (h < 0) { - h += 1; - } else if (h > 1) { - h -= 1; - } - } + timeout = 0 + next(er) + } + rimraf_(p, options, CB) + }) + } - return [ - h * 360, - s * 100, - v * 100 - ]; -}; + if (options.disableGlob || !glob.hasMagic(p)) + return afterGlob(null, [p]) -convert.rgb.hwb = function (rgb) { - var r = rgb[0]; - var g = rgb[1]; - var b = rgb[2]; - var h = convert.rgb.hsl(rgb)[0]; - var w = 1 / 255 * Math.min(r, Math.min(g, b)); + options.lstat(p, (er, stat) => { + if (!er) + return afterGlob(null, [p]) - b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); + glob(p, options.glob, afterGlob) + }) - return [h, w * 100, b * 100]; -}; +} -convert.rgb.cmyk = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var c; - var m; - var y; - var k; +// Two possible strategies. +// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR +// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR +// +// Both result in an extra syscall when you guess wrong. However, there +// are likely far more normal files in the world than directories. This +// is based on the assumption that a the average number of files per +// directory is >= 1. +// +// If anyone ever complains about this, then I guess the strategy could +// be made configurable somehow. But until then, YAGNI. +const rimraf_ = (p, options, cb) => { + assert(p) + assert(options) + assert(typeof cb === 'function') - k = Math.min(1 - r, 1 - g, 1 - b); - c = (1 - r - k) / (1 - k) || 0; - m = (1 - g - k) / (1 - k) || 0; - y = (1 - b - k) / (1 - k) || 0; + // sunos lets the root user unlink directories, which is... weird. + // so we have to lstat here and make sure it's not a dir. + options.lstat(p, (er, st) => { + if (er && er.code === "ENOENT") + return cb(null) - return [c * 100, m * 100, y * 100, k * 100]; -}; + // Windows can EPERM on stat. Life is suffering. + if (er && er.code === "EPERM" && isWindows) + fixWinEPERM(p, options, er, cb) -/** - * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance - * */ -function comparativeDistance(x, y) { - return ( - Math.pow(x[0] - y[0], 2) + - Math.pow(x[1] - y[1], 2) + - Math.pow(x[2] - y[2], 2) - ); + if (st && st.isDirectory()) + return rmdir(p, options, er, cb) + + options.unlink(p, er => { + if (er) { + if (er.code === "ENOENT") + return cb(null) + if (er.code === "EPERM") + return (isWindows) + ? fixWinEPERM(p, options, er, cb) + : rmdir(p, options, er, cb) + if (er.code === "EISDIR") + return rmdir(p, options, er, cb) + } + return cb(er) + }) + }) } -convert.rgb.keyword = function (rgb) { - var reversed = reverseKeywords[rgb]; - if (reversed) { - return reversed; - } +const fixWinEPERM = (p, options, er, cb) => { + assert(p) + assert(options) + assert(typeof cb === 'function') - var currentClosestDistance = Infinity; - var currentClosestKeyword; + options.chmod(p, 0o666, er2 => { + if (er2) + cb(er2.code === "ENOENT" ? null : er) + else + options.stat(p, (er3, stats) => { + if (er3) + cb(er3.code === "ENOENT" ? null : er) + else if (stats.isDirectory()) + rmdir(p, options, er, cb) + else + options.unlink(p, cb) + }) + }) +} - for (var keyword in cssKeywords) { - if (cssKeywords.hasOwnProperty(keyword)) { - var value = cssKeywords[keyword]; +const fixWinEPERMSync = (p, options, er) => { + assert(p) + assert(options) - // Compute comparative distance - var distance = comparativeDistance(rgb, value); + try { + options.chmodSync(p, 0o666) + } catch (er2) { + if (er2.code === "ENOENT") + return + else + throw er + } - // Check if its less, if so set as closest - if (distance < currentClosestDistance) { - currentClosestDistance = distance; - currentClosestKeyword = keyword; - } - } - } + let stats + try { + stats = options.statSync(p) + } catch (er3) { + if (er3.code === "ENOENT") + return + else + throw er + } - return currentClosestKeyword; -}; + if (stats.isDirectory()) + rmdirSync(p, options, er) + else + options.unlinkSync(p) +} -convert.keyword.rgb = function (keyword) { - return cssKeywords[keyword]; -}; +const rmdir = (p, options, originalEr, cb) => { + assert(p) + assert(options) + assert(typeof cb === 'function') -convert.rgb.xyz = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; + // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS) + // if we guessed wrong, and it's not a directory, then + // raise the original error. + options.rmdir(p, er => { + if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM")) + rmkids(p, options, cb) + else if (er && er.code === "ENOTDIR") + cb(originalEr) + else + cb(er) + }) +} - // assume sRGB - r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); - g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); - b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); +const rmkids = (p, options, cb) => { + assert(p) + assert(options) + assert(typeof cb === 'function') - var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); - var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); - var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); + options.readdir(p, (er, files) => { + if (er) + return cb(er) + let n = files.length + if (n === 0) + return options.rmdir(p, cb) + let errState + files.forEach(f => { + rimraf(path.join(p, f), options, er => { + if (errState) + return + if (er) + return cb(errState = er) + if (--n === 0) + options.rmdir(p, cb) + }) + }) + }) +} - return [x * 100, y * 100, z * 100]; -}; +// this looks simpler, and is strictly *faster*, but will +// tie up the JavaScript thread and fail on excessively +// deep directory trees. +const rimrafSync = (p, options) => { + options = options || {} + defaults(options) -convert.rgb.lab = function (rgb) { - var xyz = convert.rgb.xyz(rgb); - var x = xyz[0]; - var y = xyz[1]; - var z = xyz[2]; - var l; - var a; - var b; + assert(p, 'rimraf: missing path') + assert.equal(typeof p, 'string', 'rimraf: path should be a string') + assert(options, 'rimraf: missing options') + assert.equal(typeof options, 'object', 'rimraf: options should be object') - x /= 95.047; - y /= 100; - z /= 108.883; + let results - x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + if (options.disableGlob || !glob.hasMagic(p)) { + results = [p] + } else { + try { + options.lstatSync(p) + results = [p] + } catch (er) { + results = glob.sync(p, options.glob) + } + } - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); + if (!results.length) + return - return [l, a, b]; -}; + for (let i = 0; i < results.length; i++) { + const p = results[i] -convert.hsl.rgb = function (hsl) { - var h = hsl[0] / 360; - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var t1; - var t2; - var t3; - var rgb; - var val; + let st + try { + st = options.lstatSync(p) + } catch (er) { + if (er.code === "ENOENT") + return - if (s === 0) { - val = l * 255; - return [val, val, val]; - } + // Windows can EPERM on stat. Life is suffering. + if (er.code === "EPERM" && isWindows) + fixWinEPERMSync(p, options, er) + } - if (l < 0.5) { - t2 = l * (1 + s); - } else { - t2 = l + s - l * s; - } + try { + // sunos lets the root user unlink directories, which is... weird. + if (st && st.isDirectory()) + rmdirSync(p, options, null) + else + options.unlinkSync(p) + } catch (er) { + if (er.code === "ENOENT") + return + if (er.code === "EPERM") + return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er) + if (er.code !== "EISDIR") + throw er - t1 = 2 * l - t2; + rmdirSync(p, options, er) + } + } +} - rgb = [0, 0, 0]; - for (var i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) { - t3++; - } - if (t3 > 1) { - t3--; - } +const rmdirSync = (p, options, originalEr) => { + assert(p) + assert(options) - if (6 * t3 < 1) { - val = t1 + (t2 - t1) * 6 * t3; - } else if (2 * t3 < 1) { - val = t2; - } else if (3 * t3 < 2) { - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - } else { - val = t1; - } + try { + options.rmdirSync(p) + } catch (er) { + if (er.code === "ENOENT") + return + if (er.code === "ENOTDIR") + throw originalEr + if (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM") + rmkidsSync(p, options) + } +} - rgb[i] = val * 255; - } +const rmkidsSync = (p, options) => { + assert(p) + assert(options) + options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options)) + + // We only end up here once we got ENOTEMPTY at least once, and + // at this point, we are guaranteed to have removed all the kids. + // So, we know that it won't be ENOENT or ENOTDIR or anything else. + // try really hard to delete stuff on windows, because it has a + // PROFOUNDLY annoying habit of not closing handles promptly when + // files are deleted, resulting in spurious ENOTEMPTY errors. + const retries = isWindows ? 100 : 1 + let i = 0 + do { + let threw = true + try { + const ret = options.rmdirSync(p, options) + threw = false + return ret + } finally { + if (++i < retries && threw) + continue + } + } while (true) +} - return rgb; -}; +module.exports = rimraf +rimraf.sync = rimrafSync -convert.hsl.hsv = function (hsl) { - var h = hsl[0]; - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var smin = s; - var lmin = Math.max(l, 0.01); - var sv; - var v; - l *= 2; - s *= (l <= 1) ? l : 2 - l; - smin *= lmin <= 1 ? lmin : 2 - lmin; - v = (l + s) / 2; - sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); +/***/ }), +/* 368 */ +/***/ (function(module, exports, __webpack_require__) { - return [h, sv * 100, v * 100]; -}; +"use strict"; -convert.hsv.rgb = function (hsv) { - var h = hsv[0] / 60; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var hi = Math.floor(h) % 6; +const AggregateError = __webpack_require__(369); - var f = h - Math.floor(h); - var p = 255 * v * (1 - s); - var q = 255 * v * (1 - (s * f)); - var t = 255 * v * (1 - (s * (1 - f))); - v *= 255; +module.exports = async ( + iterable, + mapper, + { + concurrency = Infinity, + stopOnError = true + } = {} +) => { + return new Promise((resolve, reject) => { + if (typeof mapper !== 'function') { + throw new TypeError('Mapper function is required'); + } - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } -}; + if (!(typeof concurrency === 'number' && concurrency >= 1)) { + throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${concurrency}\` (${typeof concurrency})`); + } -convert.hsv.hsl = function (hsv) { - var h = hsv[0]; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var vmin = Math.max(v, 0.01); - var lmin; - var sl; - var l; + const ret = []; + const errors = []; + const iterator = iterable[Symbol.iterator](); + let isRejected = false; + let isIterableDone = false; + let resolvingCount = 0; + let currentIndex = 0; - l = (2 - s) * v; - lmin = (2 - s) * vmin; - sl = s * vmin; - sl /= (lmin <= 1) ? lmin : 2 - lmin; - sl = sl || 0; - l /= 2; + const next = () => { + if (isRejected) { + return; + } - return [h, sl * 100, l * 100]; -}; + const nextItem = iterator.next(); + const i = currentIndex; + currentIndex++; -// http://dev.w3.org/csswg/css-color/#hwb-to-rgb -convert.hwb.rgb = function (hwb) { - var h = hwb[0] / 360; - var wh = hwb[1] / 100; - var bl = hwb[2] / 100; - var ratio = wh + bl; - var i; - var v; - var f; - var n; + if (nextItem.done) { + isIterableDone = true; - // wh + bl cant be > 1 - if (ratio > 1) { - wh /= ratio; - bl /= ratio; - } + if (resolvingCount === 0) { + if (!stopOnError && errors.length !== 0) { + reject(new AggregateError(errors)); + } else { + resolve(ret); + } + } - i = Math.floor(6 * h); - v = 1 - bl; - f = 6 * h - i; + return; + } - if ((i & 0x01) !== 0) { - f = 1 - f; - } + resolvingCount++; - n = wh + f * (v - wh); // linear interpolation + (async () => { + try { + const element = await nextItem.value; + ret[i] = await mapper(element, i); + resolvingCount--; + next(); + } catch (error) { + if (stopOnError) { + isRejected = true; + reject(error); + } else { + errors.push(error); + resolvingCount--; + next(); + } + } + })(); + }; - var r; - var g; - var b; - switch (i) { - default: - case 6: - case 0: r = v; g = n; b = wh; break; - case 1: r = n; g = v; b = wh; break; - case 2: r = wh; g = v; b = n; break; - case 3: r = wh; g = n; b = v; break; - case 4: r = n; g = wh; b = v; break; - case 5: r = v; g = wh; b = n; break; - } + for (let i = 0; i < concurrency; i++) { + next(); - return [r * 255, g * 255, b * 255]; + if (isIterableDone) { + break; + } + } + }); }; -convert.cmyk.rgb = function (cmyk) { - var c = cmyk[0] / 100; - var m = cmyk[1] / 100; - var y = cmyk[2] / 100; - var k = cmyk[3] / 100; - var r; - var g; - var b; - r = 1 - Math.min(1, c * (1 - k) + k); - g = 1 - Math.min(1, m * (1 - k) + k); - b = 1 - Math.min(1, y * (1 - k) + k); +/***/ }), +/* 369 */ +/***/ (function(module, exports, __webpack_require__) { - return [r * 255, g * 255, b * 255]; -}; +"use strict"; -convert.xyz.rgb = function (xyz) { - var x = xyz[0] / 100; - var y = xyz[1] / 100; - var z = xyz[2] / 100; - var r; - var g; - var b; +const indentString = __webpack_require__(370); +const cleanStack = __webpack_require__(371); - r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); - g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); - b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); +const cleanInternalStack = stack => stack.replace(/\s+at .*aggregate-error\/index.js:\d+:\d+\)?/g, ''); - // assume sRGB - r = r > 0.0031308 - ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) - : r * 12.92; +class AggregateError extends Error { + constructor(errors) { + if (!Array.isArray(errors)) { + throw new TypeError(`Expected input to be an Array, got ${typeof errors}`); + } - g = g > 0.0031308 - ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) - : g * 12.92; + errors = [...errors].map(error => { + if (error instanceof Error) { + return error; + } - b = b > 0.0031308 - ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) - : b * 12.92; + if (error !== null && typeof error === 'object') { + // Handle plain error objects with message property and/or possibly other metadata + return Object.assign(new Error(error.message), error); + } - r = Math.min(Math.max(0, r), 1); - g = Math.min(Math.max(0, g), 1); - b = Math.min(Math.max(0, b), 1); + return new Error(error); + }); - return [r * 255, g * 255, b * 255]; -}; + let message = errors + .map(error => { + // The `stack` property is not standardized, so we can't assume it exists + return typeof error.stack === 'string' ? cleanInternalStack(cleanStack(error.stack)) : String(error); + }) + .join('\n'); + message = '\n' + indentString(message, 4); + super(message); -convert.xyz.lab = function (xyz) { - var x = xyz[0]; - var y = xyz[1]; - var z = xyz[2]; - var l; - var a; - var b; + this.name = 'AggregateError'; - x /= 95.047; - y /= 100; - z /= 108.883; + Object.defineProperty(this, '_errors', {value: errors}); + } - x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + * [Symbol.iterator]() { + for (const error of this._errors) { + yield error; + } + } +} - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); +module.exports = AggregateError; - return [l, a, b]; -}; -convert.lab.xyz = function (lab) { - var l = lab[0]; - var a = lab[1]; - var b = lab[2]; - var x; - var y; - var z; +/***/ }), +/* 370 */ +/***/ (function(module, exports, __webpack_require__) { - y = (l + 16) / 116; - x = a / 500 + y; - z = y - b / 200; +"use strict"; - var y2 = Math.pow(y, 3); - var x2 = Math.pow(x, 3); - var z2 = Math.pow(z, 3); - y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; - x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; - z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; - x *= 95.047; - y *= 100; - z *= 108.883; +module.exports = (string, count = 1, options) => { + options = { + indent: ' ', + includeEmptyLines: false, + ...options + }; - return [x, y, z]; -}; + if (typeof string !== 'string') { + throw new TypeError( + `Expected \`input\` to be a \`string\`, got \`${typeof string}\`` + ); + } -convert.lab.lch = function (lab) { - var l = lab[0]; - var a = lab[1]; - var b = lab[2]; - var hr; - var h; - var c; + if (typeof count !== 'number') { + throw new TypeError( + `Expected \`count\` to be a \`number\`, got \`${typeof count}\`` + ); + } - hr = Math.atan2(b, a); - h = hr * 360 / 2 / Math.PI; + if (typeof options.indent !== 'string') { + throw new TypeError( + `Expected \`options.indent\` to be a \`string\`, got \`${typeof options.indent}\`` + ); + } - if (h < 0) { - h += 360; + if (count === 0) { + return string; } - c = Math.sqrt(a * a + b * b); + const regex = options.includeEmptyLines ? /^/gm : /^(?!\s*$)/gm; - return [l, c, h]; + return string.replace(regex, options.indent.repeat(count)); }; -convert.lch.lab = function (lch) { - var l = lch[0]; - var c = lch[1]; - var h = lch[2]; - var a; - var b; - var hr; - hr = h / 360 * 2 * Math.PI; - a = c * Math.cos(hr); - b = c * Math.sin(hr); +/***/ }), +/* 371 */ +/***/ (function(module, exports, __webpack_require__) { - return [l, a, b]; -}; +"use strict"; -convert.rgb.ansi16 = function (args) { - var r = args[0]; - var g = args[1]; - var b = args[2]; - var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization +const os = __webpack_require__(120); - value = Math.round(value / 50); +const extractPathRegex = /\s+at.*(?:\(|\s)(.*)\)?/; +const pathRegex = /^(?:(?:(?:node|(?:internal\/[\w/]*|.*node_modules\/(?:babel-polyfill|pirates)\/.*)?\w+)\.js:\d+:\d+)|native)/; +const homeDir = typeof os.homedir === 'undefined' ? '' : os.homedir(); - if (value === 0) { - return 30; - } +module.exports = (stack, options) => { + options = Object.assign({pretty: false}, options); - var ansi = 30 - + ((Math.round(b / 255) << 2) - | (Math.round(g / 255) << 1) - | Math.round(r / 255)); + return stack.replace(/\\/g, '/') + .split('\n') + .filter(line => { + const pathMatches = line.match(extractPathRegex); + if (pathMatches === null || !pathMatches[1]) { + return true; + } - if (value === 2) { - ansi += 60; - } + const match = pathMatches[1]; - return ansi; -}; + // Electron + if ( + match.includes('.app/Contents/Resources/electron.asar') || + match.includes('.app/Contents/Resources/default_app.asar') + ) { + return false; + } -convert.hsv.ansi16 = function (args) { - // optimization here; we already know the value and don't need to get - // it converted for us. - return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); + return !pathRegex.test(match); + }) + .filter(line => line.trim() !== '') + .map(line => { + if (options.pretty) { + return line.replace(extractPathRegex, (m, p1) => m.replace(p1, p1.replace(homeDir, '~'))); + } + + return line; + }) + .join('\n'); }; -convert.rgb.ansi256 = function (args) { - var r = args[0]; - var g = args[1]; - var b = args[2]; - // we use the extended greyscale palette here, with the exception of - // black and white. normal palette only has 4 greyscale shades. - if (r === g && g === b) { - if (r < 8) { - return 16; - } +/***/ }), +/* 372 */ +/***/ (function(module, exports, __webpack_require__) { - if (r > 248) { - return 231; - } +"use strict"; - return Math.round(((r - 8) / 247) * 24) + 232; - } +const chalk = __webpack_require__(373); +const cliCursor = __webpack_require__(378); +const cliSpinners = __webpack_require__(382); +const logSymbols = __webpack_require__(384); - var ansi = 16 - + (36 * Math.round(r / 255 * 5)) - + (6 * Math.round(g / 255 * 5)) - + Math.round(b / 255 * 5); +class Ora { + constructor(options) { + if (typeof options === 'string') { + options = { + text: options + }; + } - return ansi; -}; + this.options = Object.assign({ + text: '', + color: 'cyan', + stream: process.stderr + }, options); -convert.ansi16.rgb = function (args) { - var color = args % 10; + const sp = this.options.spinner; + this.spinner = typeof sp === 'object' ? sp : (process.platform === 'win32' ? cliSpinners.line : (cliSpinners[sp] || cliSpinners.dots)); // eslint-disable-line no-nested-ternary - // handle greyscale - if (color === 0 || color === 7) { - if (args > 50) { - color += 3.5; + if (this.spinner.frames === undefined) { + throw new Error('Spinner must define `frames`'); } - color = color / 10.5 * 255; - - return [color, color, color]; + this.text = this.options.text; + this.color = this.options.color; + this.interval = this.options.interval || this.spinner.interval || 100; + this.stream = this.options.stream; + this.id = null; + this.frameIndex = 0; + this.enabled = typeof this.options.enabled === 'boolean' ? this.options.enabled : ((this.stream && this.stream.isTTY) && !process.env.CI); } + frame() { + const frames = this.spinner.frames; + let frame = frames[this.frameIndex]; - var mult = (~~(args > 50) + 1) * 0.5; - var r = ((color & 1) * mult) * 255; - var g = (((color >> 1) & 1) * mult) * 255; - var b = (((color >> 2) & 1) * mult) * 255; + if (this.color) { + frame = chalk[this.color](frame); + } - return [r, g, b]; -}; + this.frameIndex = ++this.frameIndex % frames.length; -convert.ansi256.rgb = function (args) { - // handle greyscale - if (args >= 232) { - var c = (args - 232) * 10 + 8; - return [c, c, c]; + return frame + ' ' + this.text; } + clear() { + if (!this.enabled) { + return this; + } - args -= 16; + this.stream.clearLine(); + this.stream.cursorTo(0); - var rem; - var r = Math.floor(args / 36) / 5 * 255; - var g = Math.floor((rem = args % 36) / 6) / 5 * 255; - var b = (rem % 6) / 5 * 255; + return this; + } + render() { + this.clear(); + this.stream.write(this.frame()); - return [r, g, b]; -}; + return this; + } + start(text) { + if (text) { + this.text = text; + } -convert.rgb.hex = function (args) { - var integer = ((Math.round(args[0]) & 0xFF) << 16) - + ((Math.round(args[1]) & 0xFF) << 8) - + (Math.round(args[2]) & 0xFF); + if (!this.enabled || this.id) { + return this; + } - var string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; + cliCursor.hide(this.stream); + this.render(); + this.id = setInterval(this.render.bind(this), this.interval); -convert.hex.rgb = function (args) { - var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); - if (!match) { - return [0, 0, 0]; + return this; } + stop() { + if (!this.enabled) { + return this; + } - var colorString = match[0]; + clearInterval(this.id); + this.id = null; + this.frameIndex = 0; + this.clear(); + cliCursor.show(this.stream); - if (match[0].length === 3) { - colorString = colorString.split('').map(function (char) { - return char + char; - }).join(''); + return this; } + succeed(text) { + return this.stopAndPersist({symbol: logSymbols.success, text}); + } + fail(text) { + return this.stopAndPersist({symbol: logSymbols.error, text}); + } + warn(text) { + return this.stopAndPersist({symbol: logSymbols.warning, text}); + } + info(text) { + return this.stopAndPersist({symbol: logSymbols.info, text}); + } + stopAndPersist(options) { + if (!this.enabled) { + return this; + } - var integer = parseInt(colorString, 16); - var r = (integer >> 16) & 0xFF; - var g = (integer >> 8) & 0xFF; - var b = integer & 0xFF; - - return [r, g, b]; -}; + // Legacy argument + // TODO: Deprecate sometime in the future + if (typeof options === 'string') { + options = { + symbol: options + }; + } -convert.rgb.hcg = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var max = Math.max(Math.max(r, g), b); - var min = Math.min(Math.min(r, g), b); - var chroma = (max - min); - var grayscale; - var hue; + options = options || {}; - if (chroma < 1) { - grayscale = min / (1 - chroma); - } else { - grayscale = 0; - } + this.stop(); + this.stream.write(`${options.symbol || ' '} ${options.text || this.text}\n`); - if (chroma <= 0) { - hue = 0; - } else - if (max === r) { - hue = ((g - b) / chroma) % 6; - } else - if (max === g) { - hue = 2 + (b - r) / chroma; - } else { - hue = 4 + (r - g) / chroma + 4; + return this; } +} - hue /= 6; - hue %= 1; - - return [hue * 360, chroma * 100, grayscale * 100]; +module.exports = function (opts) { + return new Ora(opts); }; -convert.hsl.hcg = function (hsl) { - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var c = 1; - var f = 0; - - if (l < 0.5) { - c = 2.0 * s * l; - } else { - c = 2.0 * s * (1.0 - l); +module.exports.promise = (action, options) => { + if (typeof action.then !== 'function') { + throw new TypeError('Parameter `action` must be a Promise'); } - if (c < 1.0) { - f = (l - 0.5 * c) / (1.0 - c); - } + const spinner = new Ora(options); + spinner.start(); - return [hsl[0], c * 100, f * 100]; -}; + action.then( + () => { + spinner.succeed(); + }, + () => { + spinner.fail(); + } + ); -convert.hsv.hcg = function (hsv) { - var s = hsv[1] / 100; - var v = hsv[2] / 100; + return spinner; +}; - var c = s * v; - var f = 0; - if (c < 1.0) { - f = (v - c) / (1 - c); - } +/***/ }), +/* 373 */ +/***/ (function(module, exports, __webpack_require__) { - return [hsv[0], c * 100, f * 100]; -}; +"use strict"; -convert.hcg.rgb = function (hcg) { - var h = hcg[0] / 360; - var c = hcg[1] / 100; - var g = hcg[2] / 100; +const escapeStringRegexp = __webpack_require__(178); +const ansiStyles = __webpack_require__(374); +const stdoutColor = __webpack_require__(375).stdout; - if (c === 0.0) { - return [g * 255, g * 255, g * 255]; - } +const template = __webpack_require__(377); - var pure = [0, 0, 0]; - var hi = (h % 1) * 6; - var v = hi % 1; - var w = 1 - v; - var mg = 0; +const isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm'); - switch (Math.floor(hi)) { - case 0: - pure[0] = 1; pure[1] = v; pure[2] = 0; break; - case 1: - pure[0] = w; pure[1] = 1; pure[2] = 0; break; - case 2: - pure[0] = 0; pure[1] = 1; pure[2] = v; break; - case 3: - pure[0] = 0; pure[1] = w; pure[2] = 1; break; - case 4: - pure[0] = v; pure[1] = 0; pure[2] = 1; break; - default: - pure[0] = 1; pure[1] = 0; pure[2] = w; - } +// `supportsColor.level` → `ansiStyles.color[name]` mapping +const levelMapping = ['ansi', 'ansi', 'ansi256', 'ansi16m']; - mg = (1.0 - c) * g; +// `color-convert` models to exclude from the Chalk API due to conflicts and such +const skipModels = new Set(['gray']); - return [ - (c * pure[0] + mg) * 255, - (c * pure[1] + mg) * 255, - (c * pure[2] + mg) * 255 - ]; -}; +const styles = Object.create(null); -convert.hcg.hsv = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; +function applyOptions(obj, options) { + options = options || {}; - var v = c + g * (1.0 - c); - var f = 0; + // Detect level if not set manually + const scLevel = stdoutColor ? stdoutColor.level : 0; + obj.level = options.level === undefined ? scLevel : options.level; + obj.enabled = 'enabled' in options ? options.enabled : obj.level > 0; +} - if (v > 0.0) { - f = c / v; - } +function Chalk(options) { + // We check for this.template here since calling `chalk.constructor()` + // by itself will have a `this` of a previously constructed chalk object + if (!this || !(this instanceof Chalk) || this.template) { + const chalk = {}; + applyOptions(chalk, options); - return [hcg[0], f * 100, v * 100]; -}; + chalk.template = function () { + const args = [].slice.call(arguments); + return chalkTag.apply(null, [chalk.template].concat(args)); + }; -convert.hcg.hsl = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; + Object.setPrototypeOf(chalk, Chalk.prototype); + Object.setPrototypeOf(chalk.template, chalk); - var l = g * (1.0 - c) + 0.5 * c; - var s = 0; + chalk.template.constructor = Chalk; - if (l > 0.0 && l < 0.5) { - s = c / (2 * l); - } else - if (l >= 0.5 && l < 1.0) { - s = c / (2 * (1 - l)); + return chalk.template; } - return [hcg[0], s * 100, l * 100]; -}; - -convert.hcg.hwb = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - var v = c + g * (1.0 - c); - return [hcg[0], (v - c) * 100, (1 - v) * 100]; -}; + applyOptions(this, options); +} -convert.hwb.hcg = function (hwb) { - var w = hwb[1] / 100; - var b = hwb[2] / 100; - var v = 1 - b; - var c = v - w; - var g = 0; +// Use bright blue on Windows as the normal blue color is illegible +if (isSimpleWindowsTerm) { + ansiStyles.blue.open = '\u001B[94m'; +} - if (c < 1) { - g = (v - c) / (1 - c); - } +for (const key of Object.keys(ansiStyles)) { + ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g'); - return [hwb[0], c * 100, g * 100]; -}; + styles[key] = { + get() { + const codes = ansiStyles[key]; + return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, key); + } + }; +} -convert.apple.rgb = function (apple) { - return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; +styles.visible = { + get() { + return build.call(this, this._styles || [], true, 'visible'); + } }; -convert.rgb.apple = function (rgb) { - return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; -}; +ansiStyles.color.closeRe = new RegExp(escapeStringRegexp(ansiStyles.color.close), 'g'); +for (const model of Object.keys(ansiStyles.color.ansi)) { + if (skipModels.has(model)) { + continue; + } -convert.gray.rgb = function (args) { - return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; -}; + styles[model] = { + get() { + const level = this.level; + return function () { + const open = ansiStyles.color[levelMapping[level]][model].apply(null, arguments); + const codes = { + open, + close: ansiStyles.color.close, + closeRe: ansiStyles.color.closeRe + }; + return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model); + }; + } + }; +} -convert.gray.hsl = convert.gray.hsv = function (args) { - return [0, 0, args[0]]; -}; +ansiStyles.bgColor.closeRe = new RegExp(escapeStringRegexp(ansiStyles.bgColor.close), 'g'); +for (const model of Object.keys(ansiStyles.bgColor.ansi)) { + if (skipModels.has(model)) { + continue; + } -convert.gray.hwb = function (gray) { - return [0, 100, gray[0]]; -}; + const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1); + styles[bgModel] = { + get() { + const level = this.level; + return function () { + const open = ansiStyles.bgColor[levelMapping[level]][model].apply(null, arguments); + const codes = { + open, + close: ansiStyles.bgColor.close, + closeRe: ansiStyles.bgColor.closeRe + }; + return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model); + }; + } + }; +} -convert.gray.cmyk = function (gray) { - return [0, 0, 0, gray[0]]; -}; +const proto = Object.defineProperties(() => {}, styles); -convert.gray.lab = function (gray) { - return [gray[0], 0, 0]; -}; +function build(_styles, _empty, key) { + const builder = function () { + return applyStyle.apply(builder, arguments); + }; -convert.gray.hex = function (gray) { - var val = Math.round(gray[0] / 100 * 255) & 0xFF; - var integer = (val << 16) + (val << 8) + val; + builder._styles = _styles; + builder._empty = _empty; - var string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; + const self = this; -convert.rgb.gray = function (rgb) { - var val = (rgb[0] + rgb[1] + rgb[2]) / 3; - return [val / 255 * 100]; -}; + Object.defineProperty(builder, 'level', { + enumerable: true, + get() { + return self.level; + }, + set(level) { + self.level = level; + } + }); + Object.defineProperty(builder, 'enabled', { + enumerable: true, + get() { + return self.enabled; + }, + set(enabled) { + self.enabled = enabled; + } + }); -/***/ }), -/* 381 */ -/***/ (function(module, exports, __webpack_require__) { + // See below for fix regarding invisible grey/dim combination on Windows + builder.hasGrey = this.hasGrey || key === 'gray' || key === 'grey'; -"use strict"; - - -module.exports = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] -}; + // `__proto__` is used because we must return a function, but there is + // no way to create a function with a different prototype + builder.__proto__ = proto; // eslint-disable-line no-proto + return builder; +} -/***/ }), -/* 382 */ -/***/ (function(module, exports, __webpack_require__) { +function applyStyle() { + // Support varags, but simply cast to string in case there's only one arg + const args = arguments; + const argsLen = args.length; + let str = String(arguments[0]); -var conversions = __webpack_require__(380); + if (argsLen === 0) { + return ''; + } -/* - this function routes a model to all other models. + if (argsLen > 1) { + // Don't slice `arguments`, it prevents V8 optimizations + for (let a = 1; a < argsLen; a++) { + str += ' ' + args[a]; + } + } - all functions that are routed have a property `.conversion` attached - to the returned synthetic function. This property is an array - of strings, each with the steps in between the 'from' and 'to' - color models (inclusive). + if (!this.enabled || this.level <= 0 || !str) { + return this._empty ? '' : str; + } - conversions that are not possible simply are not included. -*/ + // Turns out that on Windows dimmed gray text becomes invisible in cmd.exe, + // see https://github.com/chalk/chalk/issues/58 + // If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop. + const originalDim = ansiStyles.dim.open; + if (isSimpleWindowsTerm && this.hasGrey) { + ansiStyles.dim.open = ''; + } -function buildGraph() { - var graph = {}; - // https://jsperf.com/object-keys-vs-for-in-with-closure/3 - var models = Object.keys(conversions); + for (const code of this._styles.slice().reverse()) { + // Replace any instances already present with a re-opening code + // otherwise only the part of the string until said closing code + // will be colored, and the rest will simply be 'plain'. + str = code.open + str.replace(code.closeRe, code.open) + code.close; - for (var len = models.length, i = 0; i < len; i++) { - graph[models[i]] = { - // http://jsperf.com/1-vs-infinity - // micro-opt, but this is simple. - distance: -1, - parent: null - }; + // Close the styling before a linebreak and reopen + // after next line to fix a bleed issue on macOS + // https://github.com/chalk/chalk/pull/92 + str = str.replace(/\r?\n/g, `${code.close}$&${code.open}`); } - return graph; -} - -// https://en.wikipedia.org/wiki/Breadth-first_search -function deriveBFS(fromModel) { - var graph = buildGraph(); - var queue = [fromModel]; // unshift -> queue -> pop + // Reset the original `dim` if we changed it to work around the Windows dimmed gray issue + ansiStyles.dim.open = originalDim; - graph[fromModel].distance = 0; + return str; +} - while (queue.length) { - var current = queue.pop(); - var adjacents = Object.keys(conversions[current]); +function chalkTag(chalk, strings) { + if (!Array.isArray(strings)) { + // If chalk() was called by itself or with a string, + // return the string itself as a string. + return [].slice.call(arguments, 1).join(' '); + } - for (var len = adjacents.length, i = 0; i < len; i++) { - var adjacent = adjacents[i]; - var node = graph[adjacent]; + const args = [].slice.call(arguments, 2); + const parts = [strings.raw[0]]; - if (node.distance === -1) { - node.distance = graph[current].distance + 1; - node.parent = current; - queue.unshift(adjacent); - } - } + for (let i = 1; i < strings.length; i++) { + parts.push(String(args[i - 1]).replace(/[{}\\]/g, '\\$&')); + parts.push(String(strings.raw[i])); } - return graph; + return template(chalk, parts.join('')); } -function link(from, to) { - return function (args) { - return to(from(args)); +Object.defineProperties(Chalk.prototype, styles); + +module.exports = Chalk(); // eslint-disable-line new-cap +module.exports.supportsColor = stdoutColor; +module.exports.default = module.exports; // For TypeScript + + +/***/ }), +/* 374 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(module) { +const colorConvert = __webpack_require__(180); + +const wrapAnsi16 = (fn, offset) => function () { + const code = fn.apply(colorConvert, arguments); + return `\u001B[${code + offset}m`; +}; + +const wrapAnsi256 = (fn, offset) => function () { + const code = fn.apply(colorConvert, arguments); + return `\u001B[${38 + offset};5;${code}m`; +}; + +const wrapAnsi16m = (fn, offset) => function () { + const rgb = fn.apply(colorConvert, arguments); + return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; +}; + +function assembleStyles() { + const codes = new Map(); + const styles = { + modifier: { + reset: [0, 0], + // 21 isn't widely supported and 22 does the same thing + bold: [1, 22], + dim: [2, 22], + italic: [3, 23], + underline: [4, 24], + inverse: [7, 27], + hidden: [8, 28], + strikethrough: [9, 29] + }, + color: { + black: [30, 39], + red: [31, 39], + green: [32, 39], + yellow: [33, 39], + blue: [34, 39], + magenta: [35, 39], + cyan: [36, 39], + white: [37, 39], + gray: [90, 39], + + // Bright color + redBright: [91, 39], + greenBright: [92, 39], + yellowBright: [93, 39], + blueBright: [94, 39], + magentaBright: [95, 39], + cyanBright: [96, 39], + whiteBright: [97, 39] + }, + bgColor: { + bgBlack: [40, 49], + bgRed: [41, 49], + bgGreen: [42, 49], + bgYellow: [43, 49], + bgBlue: [44, 49], + bgMagenta: [45, 49], + bgCyan: [46, 49], + bgWhite: [47, 49], + + // Bright color + bgBlackBright: [100, 49], + bgRedBright: [101, 49], + bgGreenBright: [102, 49], + bgYellowBright: [103, 49], + bgBlueBright: [104, 49], + bgMagentaBright: [105, 49], + bgCyanBright: [106, 49], + bgWhiteBright: [107, 49] + } }; -} -function wrapConversion(toModel, graph) { - var path = [graph[toModel].parent, toModel]; - var fn = conversions[graph[toModel].parent][toModel]; + // Fix humans + styles.color.grey = styles.color.gray; - var cur = graph[toModel].parent; - while (graph[cur].parent) { - path.unshift(graph[cur].parent); - fn = link(conversions[graph[cur].parent][cur], fn); - cur = graph[cur].parent; + for (const groupName of Object.keys(styles)) { + const group = styles[groupName]; + + for (const styleName of Object.keys(group)) { + const style = group[styleName]; + + styles[styleName] = { + open: `\u001B[${style[0]}m`, + close: `\u001B[${style[1]}m` + }; + + group[styleName] = styles[styleName]; + + codes.set(style[0], style[1]); + } + + Object.defineProperty(styles, groupName, { + value: group, + enumerable: false + }); + + Object.defineProperty(styles, 'codes', { + value: codes, + enumerable: false + }); } - fn.conversion = path; - return fn; -} + const ansi2ansi = n => n; + const rgb2rgb = (r, g, b) => [r, g, b]; -module.exports = function (fromModel) { - var graph = deriveBFS(fromModel); - var conversion = {}; + styles.color.close = '\u001B[39m'; + styles.bgColor.close = '\u001B[49m'; - var models = Object.keys(graph); - for (var len = models.length, i = 0; i < len; i++) { - var toModel = models[i]; - var node = graph[toModel]; + styles.color.ansi = { + ansi: wrapAnsi16(ansi2ansi, 0) + }; + styles.color.ansi256 = { + ansi256: wrapAnsi256(ansi2ansi, 0) + }; + styles.color.ansi16m = { + rgb: wrapAnsi16m(rgb2rgb, 0) + }; - if (node.parent === null) { - // no possible conversion, or this node is the source model. + styles.bgColor.ansi = { + ansi: wrapAnsi16(ansi2ansi, 10) + }; + styles.bgColor.ansi256 = { + ansi256: wrapAnsi256(ansi2ansi, 10) + }; + styles.bgColor.ansi16m = { + rgb: wrapAnsi16m(rgb2rgb, 10) + }; + + for (let key of Object.keys(colorConvert)) { + if (typeof colorConvert[key] !== 'object') { continue; } - conversion[toModel] = wrapConversion(toModel, graph); + const suite = colorConvert[key]; + + if (key === 'ansi16') { + key = 'ansi'; + } + + if ('ansi16' in suite) { + styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0); + styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10); + } + + if ('ansi256' in suite) { + styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0); + styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10); + } + + if ('rgb' in suite) { + styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0); + styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10); + } } - return conversion; -}; + return styles; +} +// Make the export immutable +Object.defineProperty(module, 'exports', { + enumerable: true, + get: assembleStyles +}); +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(114)(module))) /***/ }), -/* 383 */ +/* 375 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const os = __webpack_require__(120); -const hasFlag = __webpack_require__(384); +const hasFlag = __webpack_require__(376); const env = process.env; @@ -50207,7 +47781,7 @@ module.exports = { /***/ }), -/* 384 */ +/* 376 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -50222,7 +47796,7 @@ module.exports = (flag, argv) => { /***/ }), -/* 385 */ +/* 377 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -50357,12 +47931,12 @@ module.exports = (chalk, tmp) => { /***/ }), -/* 386 */ +/* 378 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const restoreCursor = __webpack_require__(387); +const restoreCursor = __webpack_require__(379); let hidden = false; @@ -50403,12 +47977,12 @@ exports.toggle = (force, stream) => { /***/ }), -/* 387 */ +/* 379 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const onetime = __webpack_require__(388); +const onetime = __webpack_require__(380); const signalExit = __webpack_require__(217); module.exports = onetime(() => { @@ -50419,12 +47993,12 @@ module.exports = onetime(() => { /***/ }), -/* 388 */ +/* 380 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const mimicFn = __webpack_require__(389); +const mimicFn = __webpack_require__(381); module.exports = (fn, opts) => { // TODO: Remove this in v3 @@ -50465,7 +48039,7 @@ module.exports = (fn, opts) => { /***/ }), -/* 389 */ +/* 381 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -50481,27 +48055,27 @@ module.exports = (to, from) => { /***/ }), -/* 390 */ +/* 382 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -module.exports = __webpack_require__(391); +module.exports = __webpack_require__(383); /***/ }), -/* 391 */ +/* 383 */ /***/ (function(module) { module.exports = JSON.parse("{\"dots\":{\"interval\":80,\"frames\":[\"⠋\",\"⠙\",\"⠹\",\"⠸\",\"⠼\",\"⠴\",\"⠦\",\"⠧\",\"⠇\",\"⠏\"]},\"dots2\":{\"interval\":80,\"frames\":[\"⣾\",\"⣽\",\"⣻\",\"⢿\",\"⡿\",\"⣟\",\"⣯\",\"⣷\"]},\"dots3\":{\"interval\":80,\"frames\":[\"⠋\",\"⠙\",\"⠚\",\"⠞\",\"⠖\",\"⠦\",\"⠴\",\"⠲\",\"⠳\",\"⠓\"]},\"dots4\":{\"interval\":80,\"frames\":[\"⠄\",\"⠆\",\"⠇\",\"⠋\",\"⠙\",\"⠸\",\"⠰\",\"⠠\",\"⠰\",\"⠸\",\"⠙\",\"⠋\",\"⠇\",\"⠆\"]},\"dots5\":{\"interval\":80,\"frames\":[\"⠋\",\"⠙\",\"⠚\",\"⠒\",\"⠂\",\"⠂\",\"⠒\",\"⠲\",\"⠴\",\"⠦\",\"⠖\",\"⠒\",\"⠐\",\"⠐\",\"⠒\",\"⠓\",\"⠋\"]},\"dots6\":{\"interval\":80,\"frames\":[\"⠁\",\"⠉\",\"⠙\",\"⠚\",\"⠒\",\"⠂\",\"⠂\",\"⠒\",\"⠲\",\"⠴\",\"⠤\",\"⠄\",\"⠄\",\"⠤\",\"⠴\",\"⠲\",\"⠒\",\"⠂\",\"⠂\",\"⠒\",\"⠚\",\"⠙\",\"⠉\",\"⠁\"]},\"dots7\":{\"interval\":80,\"frames\":[\"⠈\",\"⠉\",\"⠋\",\"⠓\",\"⠒\",\"⠐\",\"⠐\",\"⠒\",\"⠖\",\"⠦\",\"⠤\",\"⠠\",\"⠠\",\"⠤\",\"⠦\",\"⠖\",\"⠒\",\"⠐\",\"⠐\",\"⠒\",\"⠓\",\"⠋\",\"⠉\",\"⠈\"]},\"dots8\":{\"interval\":80,\"frames\":[\"⠁\",\"⠁\",\"⠉\",\"⠙\",\"⠚\",\"⠒\",\"⠂\",\"⠂\",\"⠒\",\"⠲\",\"⠴\",\"⠤\",\"⠄\",\"⠄\",\"⠤\",\"⠠\",\"⠠\",\"⠤\",\"⠦\",\"⠖\",\"⠒\",\"⠐\",\"⠐\",\"⠒\",\"⠓\",\"⠋\",\"⠉\",\"⠈\",\"⠈\"]},\"dots9\":{\"interval\":80,\"frames\":[\"⢹\",\"⢺\",\"⢼\",\"⣸\",\"⣇\",\"⡧\",\"⡗\",\"⡏\"]},\"dots10\":{\"interval\":80,\"frames\":[\"⢄\",\"⢂\",\"⢁\",\"⡁\",\"⡈\",\"⡐\",\"⡠\"]},\"dots11\":{\"interval\":100,\"frames\":[\"⠁\",\"⠂\",\"⠄\",\"⡀\",\"⢀\",\"⠠\",\"⠐\",\"⠈\"]},\"dots12\":{\"interval\":80,\"frames\":[\"⢀⠀\",\"⡀⠀\",\"⠄⠀\",\"⢂⠀\",\"⡂⠀\",\"⠅⠀\",\"⢃⠀\",\"⡃⠀\",\"⠍⠀\",\"⢋⠀\",\"⡋⠀\",\"⠍⠁\",\"⢋⠁\",\"⡋⠁\",\"⠍⠉\",\"⠋⠉\",\"⠋⠉\",\"⠉⠙\",\"⠉⠙\",\"⠉⠩\",\"⠈⢙\",\"⠈⡙\",\"⢈⠩\",\"⡀⢙\",\"⠄⡙\",\"⢂⠩\",\"⡂⢘\",\"⠅⡘\",\"⢃⠨\",\"⡃⢐\",\"⠍⡐\",\"⢋⠠\",\"⡋⢀\",\"⠍⡁\",\"⢋⠁\",\"⡋⠁\",\"⠍⠉\",\"⠋⠉\",\"⠋⠉\",\"⠉⠙\",\"⠉⠙\",\"⠉⠩\",\"⠈⢙\",\"⠈⡙\",\"⠈⠩\",\"⠀⢙\",\"⠀⡙\",\"⠀⠩\",\"⠀⢘\",\"⠀⡘\",\"⠀⠨\",\"⠀⢐\",\"⠀⡐\",\"⠀⠠\",\"⠀⢀\",\"⠀⡀\"]},\"line\":{\"interval\":130,\"frames\":[\"-\",\"\\\\\",\"|\",\"/\"]},\"line2\":{\"interval\":100,\"frames\":[\"⠂\",\"-\",\"–\",\"—\",\"–\",\"-\"]},\"pipe\":{\"interval\":100,\"frames\":[\"┤\",\"┘\",\"┴\",\"└\",\"├\",\"┌\",\"┬\",\"┐\"]},\"simpleDots\":{\"interval\":400,\"frames\":[\". \",\".. \",\"...\",\" \"]},\"simpleDotsScrolling\":{\"interval\":200,\"frames\":[\". \",\".. \",\"...\",\" ..\",\" .\",\" \"]},\"star\":{\"interval\":70,\"frames\":[\"✶\",\"✸\",\"✹\",\"✺\",\"✹\",\"✷\"]},\"star2\":{\"interval\":80,\"frames\":[\"+\",\"x\",\"*\"]},\"flip\":{\"interval\":70,\"frames\":[\"_\",\"_\",\"_\",\"-\",\"`\",\"`\",\"'\",\"´\",\"-\",\"_\",\"_\",\"_\"]},\"hamburger\":{\"interval\":100,\"frames\":[\"☱\",\"☲\",\"☴\"]},\"growVertical\":{\"interval\":120,\"frames\":[\"▁\",\"▃\",\"▄\",\"▅\",\"▆\",\"▇\",\"▆\",\"▅\",\"▄\",\"▃\"]},\"growHorizontal\":{\"interval\":120,\"frames\":[\"▏\",\"▎\",\"▍\",\"▌\",\"▋\",\"▊\",\"▉\",\"▊\",\"▋\",\"▌\",\"▍\",\"▎\"]},\"balloon\":{\"interval\":140,\"frames\":[\" \",\".\",\"o\",\"O\",\"@\",\"*\",\" \"]},\"balloon2\":{\"interval\":120,\"frames\":[\".\",\"o\",\"O\",\"°\",\"O\",\"o\",\".\"]},\"noise\":{\"interval\":100,\"frames\":[\"▓\",\"▒\",\"░\"]},\"bounce\":{\"interval\":120,\"frames\":[\"⠁\",\"⠂\",\"⠄\",\"⠂\"]},\"boxBounce\":{\"interval\":120,\"frames\":[\"▖\",\"▘\",\"▝\",\"▗\"]},\"boxBounce2\":{\"interval\":100,\"frames\":[\"▌\",\"▀\",\"▐\",\"▄\"]},\"triangle\":{\"interval\":50,\"frames\":[\"◢\",\"◣\",\"◤\",\"◥\"]},\"arc\":{\"interval\":100,\"frames\":[\"◜\",\"◠\",\"◝\",\"◞\",\"◡\",\"◟\"]},\"circle\":{\"interval\":120,\"frames\":[\"◡\",\"⊙\",\"◠\"]},\"squareCorners\":{\"interval\":180,\"frames\":[\"◰\",\"◳\",\"◲\",\"◱\"]},\"circleQuarters\":{\"interval\":120,\"frames\":[\"◴\",\"◷\",\"◶\",\"◵\"]},\"circleHalves\":{\"interval\":50,\"frames\":[\"◐\",\"◓\",\"◑\",\"◒\"]},\"squish\":{\"interval\":100,\"frames\":[\"╫\",\"╪\"]},\"toggle\":{\"interval\":250,\"frames\":[\"⊶\",\"⊷\"]},\"toggle2\":{\"interval\":80,\"frames\":[\"▫\",\"▪\"]},\"toggle3\":{\"interval\":120,\"frames\":[\"□\",\"■\"]},\"toggle4\":{\"interval\":100,\"frames\":[\"■\",\"□\",\"▪\",\"▫\"]},\"toggle5\":{\"interval\":100,\"frames\":[\"▮\",\"▯\"]},\"toggle6\":{\"interval\":300,\"frames\":[\"ဝ\",\"၀\"]},\"toggle7\":{\"interval\":80,\"frames\":[\"⦾\",\"⦿\"]},\"toggle8\":{\"interval\":100,\"frames\":[\"◍\",\"◌\"]},\"toggle9\":{\"interval\":100,\"frames\":[\"◉\",\"◎\"]},\"toggle10\":{\"interval\":100,\"frames\":[\"㊂\",\"㊀\",\"㊁\"]},\"toggle11\":{\"interval\":50,\"frames\":[\"⧇\",\"⧆\"]},\"toggle12\":{\"interval\":120,\"frames\":[\"☗\",\"☖\"]},\"toggle13\":{\"interval\":80,\"frames\":[\"=\",\"*\",\"-\"]},\"arrow\":{\"interval\":100,\"frames\":[\"←\",\"↖\",\"↑\",\"↗\",\"→\",\"↘\",\"↓\",\"↙\"]},\"arrow2\":{\"interval\":80,\"frames\":[\"⬆️ \",\"↗️ \",\"➡️ \",\"↘️ \",\"⬇️ \",\"↙️ \",\"⬅️ \",\"↖️ \"]},\"arrow3\":{\"interval\":120,\"frames\":[\"▹▹▹▹▹\",\"▸▹▹▹▹\",\"▹▸▹▹▹\",\"▹▹▸▹▹\",\"▹▹▹▸▹\",\"▹▹▹▹▸\"]},\"bouncingBar\":{\"interval\":80,\"frames\":[\"[ ]\",\"[= ]\",\"[== ]\",\"[=== ]\",\"[ ===]\",\"[ ==]\",\"[ =]\",\"[ ]\",\"[ =]\",\"[ ==]\",\"[ ===]\",\"[====]\",\"[=== ]\",\"[== ]\",\"[= ]\"]},\"bouncingBall\":{\"interval\":80,\"frames\":[\"( ● )\",\"( ● )\",\"( ● )\",\"( ● )\",\"( ●)\",\"( ● )\",\"( ● )\",\"( ● )\",\"( ● )\",\"(● )\"]},\"smiley\":{\"interval\":200,\"frames\":[\"😄 \",\"😝 \"]},\"monkey\":{\"interval\":300,\"frames\":[\"🙈 \",\"🙈 \",\"🙉 \",\"🙊 \"]},\"hearts\":{\"interval\":100,\"frames\":[\"💛 \",\"💙 \",\"💜 \",\"💚 \",\"❤️ \"]},\"clock\":{\"interval\":100,\"frames\":[\"🕐 \",\"🕑 \",\"🕒 \",\"🕓 \",\"🕔 \",\"🕕 \",\"🕖 \",\"🕗 \",\"🕘 \",\"🕙 \",\"🕚 \"]},\"earth\":{\"interval\":180,\"frames\":[\"🌍 \",\"🌎 \",\"🌏 \"]},\"moon\":{\"interval\":80,\"frames\":[\"🌑 \",\"🌒 \",\"🌓 \",\"🌔 \",\"🌕 \",\"🌖 \",\"🌗 \",\"🌘 \"]},\"runner\":{\"interval\":140,\"frames\":[\"🚶 \",\"🏃 \"]},\"pong\":{\"interval\":80,\"frames\":[\"▐⠂ ▌\",\"▐⠈ ▌\",\"▐ ⠂ ▌\",\"▐ ⠠ ▌\",\"▐ ⡀ ▌\",\"▐ ⠠ ▌\",\"▐ ⠂ ▌\",\"▐ ⠈ ▌\",\"▐ ⠂ ▌\",\"▐ ⠠ ▌\",\"▐ ⡀ ▌\",\"▐ ⠠ ▌\",\"▐ ⠂ ▌\",\"▐ ⠈ ▌\",\"▐ ⠂▌\",\"▐ ⠠▌\",\"▐ ⡀▌\",\"▐ ⠠ ▌\",\"▐ ⠂ ▌\",\"▐ ⠈ ▌\",\"▐ ⠂ ▌\",\"▐ ⠠ ▌\",\"▐ ⡀ ▌\",\"▐ ⠠ ▌\",\"▐ ⠂ ▌\",\"▐ ⠈ ▌\",\"▐ ⠂ ▌\",\"▐ ⠠ ▌\",\"▐ ⡀ ▌\",\"▐⠠ ▌\"]},\"shark\":{\"interval\":120,\"frames\":[\"▐|\\\\____________▌\",\"▐_|\\\\___________▌\",\"▐__|\\\\__________▌\",\"▐___|\\\\_________▌\",\"▐____|\\\\________▌\",\"▐_____|\\\\_______▌\",\"▐______|\\\\______▌\",\"▐_______|\\\\_____▌\",\"▐________|\\\\____▌\",\"▐_________|\\\\___▌\",\"▐__________|\\\\__▌\",\"▐___________|\\\\_▌\",\"▐____________|\\\\▌\",\"▐____________/|▌\",\"▐___________/|_▌\",\"▐__________/|__▌\",\"▐_________/|___▌\",\"▐________/|____▌\",\"▐_______/|_____▌\",\"▐______/|______▌\",\"▐_____/|_______▌\",\"▐____/|________▌\",\"▐___/|_________▌\",\"▐__/|__________▌\",\"▐_/|___________▌\",\"▐/|____________▌\"]},\"dqpb\":{\"interval\":100,\"frames\":[\"d\",\"q\",\"p\",\"b\"]},\"weather\":{\"interval\":100,\"frames\":[\"☀️ \",\"☀️ \",\"☀️ \",\"🌤 \",\"⛅️ \",\"🌥 \",\"☁️ \",\"🌧 \",\"🌨 \",\"🌧 \",\"🌨 \",\"🌧 \",\"🌨 \",\"⛈ \",\"🌨 \",\"🌧 \",\"🌨 \",\"☁️ \",\"🌥 \",\"⛅️ \",\"🌤 \",\"☀️ \",\"☀️ \"]},\"christmas\":{\"interval\":400,\"frames\":[\"🌲\",\"🎄\"]}}"); /***/ }), -/* 392 */ +/* 384 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const chalk = __webpack_require__(393); +const chalk = __webpack_require__(385); const isSupported = process.platform !== 'win32' || process.env.CI || process.env.TERM === 'xterm-256color'; @@ -50523,16 +48097,16 @@ module.exports = isSupported ? main : fallbacks; /***/ }), -/* 393 */ +/* 385 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const escapeStringRegexp = __webpack_require__(178); -const ansiStyles = __webpack_require__(394); +const ansiStyles = __webpack_require__(386); const stdoutColor = __webpack_require__(184).stdout; -const template = __webpack_require__(395); +const template = __webpack_require__(387); const isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm'); @@ -50758,7 +48332,7 @@ module.exports.default = module.exports; // For TypeScript /***/ }), -/* 394 */ +/* 386 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -50931,7 +48505,7 @@ Object.defineProperty(module, 'exports', { /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(114)(module))) /***/ }), -/* 395 */ +/* 387 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -51066,7 +48640,7 @@ module.exports = (chalk, tmp) => { /***/ }), -/* 396 */ +/* 388 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -51127,7 +48701,7 @@ const RunCommand = { }; /***/ }), -/* 397 */ +/* 389 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -51137,7 +48711,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _utils_log__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(143); /* harmony import */ var _utils_parallelize__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(144); /* harmony import */ var _utils_projects__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(145); -/* harmony import */ var _utils_watch__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(398); +/* harmony import */ var _utils_watch__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(390); /* * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with @@ -51222,14 +48796,14 @@ const WatchCommand = { }; /***/ }), -/* 398 */ +/* 390 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "waitUntilWatchIsReady", function() { return waitUntilWatchIsReady; }); /* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8); -/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(399); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(391); /* * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with @@ -51296,141 +48870,141 @@ function waitUntilWatchIsReady(stream, opts = {}) { } /***/ }), -/* 399 */ +/* 391 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _internal_operators_audit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(400); +/* harmony import */ var _internal_operators_audit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(392); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "audit", function() { return _internal_operators_audit__WEBPACK_IMPORTED_MODULE_0__["audit"]; }); -/* harmony import */ var _internal_operators_auditTime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(401); +/* harmony import */ var _internal_operators_auditTime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(393); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "auditTime", function() { return _internal_operators_auditTime__WEBPACK_IMPORTED_MODULE_1__["auditTime"]; }); -/* harmony import */ var _internal_operators_buffer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(402); +/* harmony import */ var _internal_operators_buffer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(394); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buffer", function() { return _internal_operators_buffer__WEBPACK_IMPORTED_MODULE_2__["buffer"]; }); -/* harmony import */ var _internal_operators_bufferCount__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(403); +/* harmony import */ var _internal_operators_bufferCount__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(395); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferCount", function() { return _internal_operators_bufferCount__WEBPACK_IMPORTED_MODULE_3__["bufferCount"]; }); -/* harmony import */ var _internal_operators_bufferTime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(404); +/* harmony import */ var _internal_operators_bufferTime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(396); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferTime", function() { return _internal_operators_bufferTime__WEBPACK_IMPORTED_MODULE_4__["bufferTime"]; }); -/* harmony import */ var _internal_operators_bufferToggle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(405); +/* harmony import */ var _internal_operators_bufferToggle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(397); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferToggle", function() { return _internal_operators_bufferToggle__WEBPACK_IMPORTED_MODULE_5__["bufferToggle"]; }); -/* harmony import */ var _internal_operators_bufferWhen__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(406); +/* harmony import */ var _internal_operators_bufferWhen__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(398); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferWhen", function() { return _internal_operators_bufferWhen__WEBPACK_IMPORTED_MODULE_6__["bufferWhen"]; }); -/* harmony import */ var _internal_operators_catchError__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(407); +/* harmony import */ var _internal_operators_catchError__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(399); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "catchError", function() { return _internal_operators_catchError__WEBPACK_IMPORTED_MODULE_7__["catchError"]; }); -/* harmony import */ var _internal_operators_combineAll__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(408); +/* harmony import */ var _internal_operators_combineAll__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(400); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "combineAll", function() { return _internal_operators_combineAll__WEBPACK_IMPORTED_MODULE_8__["combineAll"]; }); -/* harmony import */ var _internal_operators_combineLatest__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(409); +/* harmony import */ var _internal_operators_combineLatest__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(401); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "combineLatest", function() { return _internal_operators_combineLatest__WEBPACK_IMPORTED_MODULE_9__["combineLatest"]; }); -/* harmony import */ var _internal_operators_concat__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(410); +/* harmony import */ var _internal_operators_concat__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(402); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concat", function() { return _internal_operators_concat__WEBPACK_IMPORTED_MODULE_10__["concat"]; }); /* harmony import */ var _internal_operators_concatAll__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(80); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concatAll", function() { return _internal_operators_concatAll__WEBPACK_IMPORTED_MODULE_11__["concatAll"]; }); -/* harmony import */ var _internal_operators_concatMap__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(411); +/* harmony import */ var _internal_operators_concatMap__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(403); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concatMap", function() { return _internal_operators_concatMap__WEBPACK_IMPORTED_MODULE_12__["concatMap"]; }); -/* harmony import */ var _internal_operators_concatMapTo__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(412); +/* harmony import */ var _internal_operators_concatMapTo__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(404); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concatMapTo", function() { return _internal_operators_concatMapTo__WEBPACK_IMPORTED_MODULE_13__["concatMapTo"]; }); -/* harmony import */ var _internal_operators_count__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(413); +/* harmony import */ var _internal_operators_count__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(405); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "count", function() { return _internal_operators_count__WEBPACK_IMPORTED_MODULE_14__["count"]; }); -/* harmony import */ var _internal_operators_debounce__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(414); +/* harmony import */ var _internal_operators_debounce__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(406); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "debounce", function() { return _internal_operators_debounce__WEBPACK_IMPORTED_MODULE_15__["debounce"]; }); -/* harmony import */ var _internal_operators_debounceTime__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(415); +/* harmony import */ var _internal_operators_debounceTime__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(407); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "debounceTime", function() { return _internal_operators_debounceTime__WEBPACK_IMPORTED_MODULE_16__["debounceTime"]; }); -/* harmony import */ var _internal_operators_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(416); +/* harmony import */ var _internal_operators_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(408); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "defaultIfEmpty", function() { return _internal_operators_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_17__["defaultIfEmpty"]; }); -/* harmony import */ var _internal_operators_delay__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(417); +/* harmony import */ var _internal_operators_delay__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(409); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "delay", function() { return _internal_operators_delay__WEBPACK_IMPORTED_MODULE_18__["delay"]; }); -/* harmony import */ var _internal_operators_delayWhen__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(419); +/* harmony import */ var _internal_operators_delayWhen__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(411); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "delayWhen", function() { return _internal_operators_delayWhen__WEBPACK_IMPORTED_MODULE_19__["delayWhen"]; }); -/* harmony import */ var _internal_operators_dematerialize__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(420); +/* harmony import */ var _internal_operators_dematerialize__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(412); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dematerialize", function() { return _internal_operators_dematerialize__WEBPACK_IMPORTED_MODULE_20__["dematerialize"]; }); -/* harmony import */ var _internal_operators_distinct__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(421); +/* harmony import */ var _internal_operators_distinct__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(413); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "distinct", function() { return _internal_operators_distinct__WEBPACK_IMPORTED_MODULE_21__["distinct"]; }); -/* harmony import */ var _internal_operators_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(422); +/* harmony import */ var _internal_operators_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(414); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "distinctUntilChanged", function() { return _internal_operators_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_22__["distinctUntilChanged"]; }); -/* harmony import */ var _internal_operators_distinctUntilKeyChanged__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(423); +/* harmony import */ var _internal_operators_distinctUntilKeyChanged__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(415); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "distinctUntilKeyChanged", function() { return _internal_operators_distinctUntilKeyChanged__WEBPACK_IMPORTED_MODULE_23__["distinctUntilKeyChanged"]; }); -/* harmony import */ var _internal_operators_elementAt__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(424); +/* harmony import */ var _internal_operators_elementAt__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(416); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "elementAt", function() { return _internal_operators_elementAt__WEBPACK_IMPORTED_MODULE_24__["elementAt"]; }); -/* harmony import */ var _internal_operators_endWith__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(427); +/* harmony import */ var _internal_operators_endWith__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(419); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "endWith", function() { return _internal_operators_endWith__WEBPACK_IMPORTED_MODULE_25__["endWith"]; }); -/* harmony import */ var _internal_operators_every__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(428); +/* harmony import */ var _internal_operators_every__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(420); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "every", function() { return _internal_operators_every__WEBPACK_IMPORTED_MODULE_26__["every"]; }); -/* harmony import */ var _internal_operators_exhaust__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(429); +/* harmony import */ var _internal_operators_exhaust__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(421); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "exhaust", function() { return _internal_operators_exhaust__WEBPACK_IMPORTED_MODULE_27__["exhaust"]; }); -/* harmony import */ var _internal_operators_exhaustMap__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(430); +/* harmony import */ var _internal_operators_exhaustMap__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(422); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "exhaustMap", function() { return _internal_operators_exhaustMap__WEBPACK_IMPORTED_MODULE_28__["exhaustMap"]; }); -/* harmony import */ var _internal_operators_expand__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(431); +/* harmony import */ var _internal_operators_expand__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(423); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "expand", function() { return _internal_operators_expand__WEBPACK_IMPORTED_MODULE_29__["expand"]; }); /* harmony import */ var _internal_operators_filter__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(104); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "filter", function() { return _internal_operators_filter__WEBPACK_IMPORTED_MODULE_30__["filter"]; }); -/* harmony import */ var _internal_operators_finalize__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(432); +/* harmony import */ var _internal_operators_finalize__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(424); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "finalize", function() { return _internal_operators_finalize__WEBPACK_IMPORTED_MODULE_31__["finalize"]; }); -/* harmony import */ var _internal_operators_find__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(433); +/* harmony import */ var _internal_operators_find__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(425); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "find", function() { return _internal_operators_find__WEBPACK_IMPORTED_MODULE_32__["find"]; }); -/* harmony import */ var _internal_operators_findIndex__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(434); +/* harmony import */ var _internal_operators_findIndex__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(426); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "findIndex", function() { return _internal_operators_findIndex__WEBPACK_IMPORTED_MODULE_33__["findIndex"]; }); -/* harmony import */ var _internal_operators_first__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(435); +/* harmony import */ var _internal_operators_first__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(427); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "first", function() { return _internal_operators_first__WEBPACK_IMPORTED_MODULE_34__["first"]; }); /* harmony import */ var _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(31); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "groupBy", function() { return _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_35__["groupBy"]; }); -/* harmony import */ var _internal_operators_ignoreElements__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(436); +/* harmony import */ var _internal_operators_ignoreElements__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(428); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ignoreElements", function() { return _internal_operators_ignoreElements__WEBPACK_IMPORTED_MODULE_36__["ignoreElements"]; }); -/* harmony import */ var _internal_operators_isEmpty__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(437); +/* harmony import */ var _internal_operators_isEmpty__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(429); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isEmpty", function() { return _internal_operators_isEmpty__WEBPACK_IMPORTED_MODULE_37__["isEmpty"]; }); -/* harmony import */ var _internal_operators_last__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(438); +/* harmony import */ var _internal_operators_last__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(430); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "last", function() { return _internal_operators_last__WEBPACK_IMPORTED_MODULE_38__["last"]; }); /* harmony import */ var _internal_operators_map__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(66); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "map", function() { return _internal_operators_map__WEBPACK_IMPORTED_MODULE_39__["map"]; }); -/* harmony import */ var _internal_operators_mapTo__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(440); +/* harmony import */ var _internal_operators_mapTo__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(432); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mapTo", function() { return _internal_operators_mapTo__WEBPACK_IMPORTED_MODULE_40__["mapTo"]; }); -/* harmony import */ var _internal_operators_materialize__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(441); +/* harmony import */ var _internal_operators_materialize__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(433); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "materialize", function() { return _internal_operators_materialize__WEBPACK_IMPORTED_MODULE_41__["materialize"]; }); -/* harmony import */ var _internal_operators_max__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(442); +/* harmony import */ var _internal_operators_max__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(434); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "max", function() { return _internal_operators_max__WEBPACK_IMPORTED_MODULE_42__["max"]; }); -/* harmony import */ var _internal_operators_merge__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(445); +/* harmony import */ var _internal_operators_merge__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(437); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return _internal_operators_merge__WEBPACK_IMPORTED_MODULE_43__["merge"]; }); /* harmony import */ var _internal_operators_mergeAll__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(81); @@ -51441,175 +49015,175 @@ __webpack_require__.r(__webpack_exports__); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "flatMap", function() { return _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__["mergeMap"]; }); -/* harmony import */ var _internal_operators_mergeMapTo__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(446); +/* harmony import */ var _internal_operators_mergeMapTo__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(438); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeMapTo", function() { return _internal_operators_mergeMapTo__WEBPACK_IMPORTED_MODULE_46__["mergeMapTo"]; }); -/* harmony import */ var _internal_operators_mergeScan__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(447); +/* harmony import */ var _internal_operators_mergeScan__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(439); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeScan", function() { return _internal_operators_mergeScan__WEBPACK_IMPORTED_MODULE_47__["mergeScan"]; }); -/* harmony import */ var _internal_operators_min__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(448); +/* harmony import */ var _internal_operators_min__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(440); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "min", function() { return _internal_operators_min__WEBPACK_IMPORTED_MODULE_48__["min"]; }); -/* harmony import */ var _internal_operators_multicast__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(449); +/* harmony import */ var _internal_operators_multicast__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(441); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "multicast", function() { return _internal_operators_multicast__WEBPACK_IMPORTED_MODULE_49__["multicast"]; }); /* harmony import */ var _internal_operators_observeOn__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(41); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "observeOn", function() { return _internal_operators_observeOn__WEBPACK_IMPORTED_MODULE_50__["observeOn"]; }); -/* harmony import */ var _internal_operators_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(450); +/* harmony import */ var _internal_operators_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(442); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function() { return _internal_operators_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_51__["onErrorResumeNext"]; }); -/* harmony import */ var _internal_operators_pairwise__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(451); +/* harmony import */ var _internal_operators_pairwise__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(443); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pairwise", function() { return _internal_operators_pairwise__WEBPACK_IMPORTED_MODULE_52__["pairwise"]; }); -/* harmony import */ var _internal_operators_partition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(452); +/* harmony import */ var _internal_operators_partition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(444); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return _internal_operators_partition__WEBPACK_IMPORTED_MODULE_53__["partition"]; }); -/* harmony import */ var _internal_operators_pluck__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(453); +/* harmony import */ var _internal_operators_pluck__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(445); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pluck", function() { return _internal_operators_pluck__WEBPACK_IMPORTED_MODULE_54__["pluck"]; }); -/* harmony import */ var _internal_operators_publish__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(454); +/* harmony import */ var _internal_operators_publish__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(446); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publish", function() { return _internal_operators_publish__WEBPACK_IMPORTED_MODULE_55__["publish"]; }); -/* harmony import */ var _internal_operators_publishBehavior__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(455); +/* harmony import */ var _internal_operators_publishBehavior__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(447); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publishBehavior", function() { return _internal_operators_publishBehavior__WEBPACK_IMPORTED_MODULE_56__["publishBehavior"]; }); -/* harmony import */ var _internal_operators_publishLast__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(456); +/* harmony import */ var _internal_operators_publishLast__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(448); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publishLast", function() { return _internal_operators_publishLast__WEBPACK_IMPORTED_MODULE_57__["publishLast"]; }); -/* harmony import */ var _internal_operators_publishReplay__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(457); +/* harmony import */ var _internal_operators_publishReplay__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(449); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publishReplay", function() { return _internal_operators_publishReplay__WEBPACK_IMPORTED_MODULE_58__["publishReplay"]; }); -/* harmony import */ var _internal_operators_race__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(458); +/* harmony import */ var _internal_operators_race__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(450); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "race", function() { return _internal_operators_race__WEBPACK_IMPORTED_MODULE_59__["race"]; }); -/* harmony import */ var _internal_operators_reduce__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(443); +/* harmony import */ var _internal_operators_reduce__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(435); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "reduce", function() { return _internal_operators_reduce__WEBPACK_IMPORTED_MODULE_60__["reduce"]; }); -/* harmony import */ var _internal_operators_repeat__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(459); +/* harmony import */ var _internal_operators_repeat__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(451); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "repeat", function() { return _internal_operators_repeat__WEBPACK_IMPORTED_MODULE_61__["repeat"]; }); -/* harmony import */ var _internal_operators_repeatWhen__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(460); +/* harmony import */ var _internal_operators_repeatWhen__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(452); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "repeatWhen", function() { return _internal_operators_repeatWhen__WEBPACK_IMPORTED_MODULE_62__["repeatWhen"]; }); -/* harmony import */ var _internal_operators_retry__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(461); +/* harmony import */ var _internal_operators_retry__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(453); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "retry", function() { return _internal_operators_retry__WEBPACK_IMPORTED_MODULE_63__["retry"]; }); -/* harmony import */ var _internal_operators_retryWhen__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(462); +/* harmony import */ var _internal_operators_retryWhen__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(454); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "retryWhen", function() { return _internal_operators_retryWhen__WEBPACK_IMPORTED_MODULE_64__["retryWhen"]; }); /* harmony import */ var _internal_operators_refCount__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(30); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "refCount", function() { return _internal_operators_refCount__WEBPACK_IMPORTED_MODULE_65__["refCount"]; }); -/* harmony import */ var _internal_operators_sample__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(463); +/* harmony import */ var _internal_operators_sample__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(455); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sample", function() { return _internal_operators_sample__WEBPACK_IMPORTED_MODULE_66__["sample"]; }); -/* harmony import */ var _internal_operators_sampleTime__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(464); +/* harmony import */ var _internal_operators_sampleTime__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(456); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sampleTime", function() { return _internal_operators_sampleTime__WEBPACK_IMPORTED_MODULE_67__["sampleTime"]; }); -/* harmony import */ var _internal_operators_scan__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(444); +/* harmony import */ var _internal_operators_scan__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(436); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scan", function() { return _internal_operators_scan__WEBPACK_IMPORTED_MODULE_68__["scan"]; }); -/* harmony import */ var _internal_operators_sequenceEqual__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(465); +/* harmony import */ var _internal_operators_sequenceEqual__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(457); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sequenceEqual", function() { return _internal_operators_sequenceEqual__WEBPACK_IMPORTED_MODULE_69__["sequenceEqual"]; }); -/* harmony import */ var _internal_operators_share__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(466); +/* harmony import */ var _internal_operators_share__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(458); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "share", function() { return _internal_operators_share__WEBPACK_IMPORTED_MODULE_70__["share"]; }); -/* harmony import */ var _internal_operators_shareReplay__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(467); +/* harmony import */ var _internal_operators_shareReplay__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(459); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "shareReplay", function() { return _internal_operators_shareReplay__WEBPACK_IMPORTED_MODULE_71__["shareReplay"]; }); -/* harmony import */ var _internal_operators_single__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(468); +/* harmony import */ var _internal_operators_single__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(460); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "single", function() { return _internal_operators_single__WEBPACK_IMPORTED_MODULE_72__["single"]; }); -/* harmony import */ var _internal_operators_skip__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(469); +/* harmony import */ var _internal_operators_skip__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(461); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skip", function() { return _internal_operators_skip__WEBPACK_IMPORTED_MODULE_73__["skip"]; }); -/* harmony import */ var _internal_operators_skipLast__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(470); +/* harmony import */ var _internal_operators_skipLast__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(462); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skipLast", function() { return _internal_operators_skipLast__WEBPACK_IMPORTED_MODULE_74__["skipLast"]; }); -/* harmony import */ var _internal_operators_skipUntil__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(471); +/* harmony import */ var _internal_operators_skipUntil__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(463); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skipUntil", function() { return _internal_operators_skipUntil__WEBPACK_IMPORTED_MODULE_75__["skipUntil"]; }); -/* harmony import */ var _internal_operators_skipWhile__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(472); +/* harmony import */ var _internal_operators_skipWhile__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(464); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skipWhile", function() { return _internal_operators_skipWhile__WEBPACK_IMPORTED_MODULE_76__["skipWhile"]; }); -/* harmony import */ var _internal_operators_startWith__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(473); +/* harmony import */ var _internal_operators_startWith__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(465); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "startWith", function() { return _internal_operators_startWith__WEBPACK_IMPORTED_MODULE_77__["startWith"]; }); -/* harmony import */ var _internal_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(474); +/* harmony import */ var _internal_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(466); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "subscribeOn", function() { return _internal_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_78__["subscribeOn"]; }); -/* harmony import */ var _internal_operators_switchAll__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(476); +/* harmony import */ var _internal_operators_switchAll__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(468); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchAll", function() { return _internal_operators_switchAll__WEBPACK_IMPORTED_MODULE_79__["switchAll"]; }); -/* harmony import */ var _internal_operators_switchMap__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(477); +/* harmony import */ var _internal_operators_switchMap__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(469); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchMap", function() { return _internal_operators_switchMap__WEBPACK_IMPORTED_MODULE_80__["switchMap"]; }); -/* harmony import */ var _internal_operators_switchMapTo__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(478); +/* harmony import */ var _internal_operators_switchMapTo__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(470); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchMapTo", function() { return _internal_operators_switchMapTo__WEBPACK_IMPORTED_MODULE_81__["switchMapTo"]; }); -/* harmony import */ var _internal_operators_take__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(426); +/* harmony import */ var _internal_operators_take__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(418); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "take", function() { return _internal_operators_take__WEBPACK_IMPORTED_MODULE_82__["take"]; }); -/* harmony import */ var _internal_operators_takeLast__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(439); +/* harmony import */ var _internal_operators_takeLast__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(431); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "takeLast", function() { return _internal_operators_takeLast__WEBPACK_IMPORTED_MODULE_83__["takeLast"]; }); -/* harmony import */ var _internal_operators_takeUntil__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(479); +/* harmony import */ var _internal_operators_takeUntil__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(471); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "takeUntil", function() { return _internal_operators_takeUntil__WEBPACK_IMPORTED_MODULE_84__["takeUntil"]; }); -/* harmony import */ var _internal_operators_takeWhile__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(480); +/* harmony import */ var _internal_operators_takeWhile__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(472); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "takeWhile", function() { return _internal_operators_takeWhile__WEBPACK_IMPORTED_MODULE_85__["takeWhile"]; }); -/* harmony import */ var _internal_operators_tap__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(481); +/* harmony import */ var _internal_operators_tap__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(473); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tap", function() { return _internal_operators_tap__WEBPACK_IMPORTED_MODULE_86__["tap"]; }); -/* harmony import */ var _internal_operators_throttle__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(482); +/* harmony import */ var _internal_operators_throttle__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(474); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throttle", function() { return _internal_operators_throttle__WEBPACK_IMPORTED_MODULE_87__["throttle"]; }); -/* harmony import */ var _internal_operators_throttleTime__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(483); +/* harmony import */ var _internal_operators_throttleTime__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(475); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throttleTime", function() { return _internal_operators_throttleTime__WEBPACK_IMPORTED_MODULE_88__["throttleTime"]; }); -/* harmony import */ var _internal_operators_throwIfEmpty__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(425); +/* harmony import */ var _internal_operators_throwIfEmpty__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(417); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throwIfEmpty", function() { return _internal_operators_throwIfEmpty__WEBPACK_IMPORTED_MODULE_89__["throwIfEmpty"]; }); -/* harmony import */ var _internal_operators_timeInterval__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(484); +/* harmony import */ var _internal_operators_timeInterval__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(476); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeInterval", function() { return _internal_operators_timeInterval__WEBPACK_IMPORTED_MODULE_90__["timeInterval"]; }); -/* harmony import */ var _internal_operators_timeout__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(485); +/* harmony import */ var _internal_operators_timeout__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(477); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeout", function() { return _internal_operators_timeout__WEBPACK_IMPORTED_MODULE_91__["timeout"]; }); -/* harmony import */ var _internal_operators_timeoutWith__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(486); +/* harmony import */ var _internal_operators_timeoutWith__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(478); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeoutWith", function() { return _internal_operators_timeoutWith__WEBPACK_IMPORTED_MODULE_92__["timeoutWith"]; }); -/* harmony import */ var _internal_operators_timestamp__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(487); +/* harmony import */ var _internal_operators_timestamp__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(479); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timestamp", function() { return _internal_operators_timestamp__WEBPACK_IMPORTED_MODULE_93__["timestamp"]; }); -/* harmony import */ var _internal_operators_toArray__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(488); +/* harmony import */ var _internal_operators_toArray__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(480); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "toArray", function() { return _internal_operators_toArray__WEBPACK_IMPORTED_MODULE_94__["toArray"]; }); -/* harmony import */ var _internal_operators_window__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(489); +/* harmony import */ var _internal_operators_window__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(481); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "window", function() { return _internal_operators_window__WEBPACK_IMPORTED_MODULE_95__["window"]; }); -/* harmony import */ var _internal_operators_windowCount__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(490); +/* harmony import */ var _internal_operators_windowCount__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(482); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowCount", function() { return _internal_operators_windowCount__WEBPACK_IMPORTED_MODULE_96__["windowCount"]; }); -/* harmony import */ var _internal_operators_windowTime__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(491); +/* harmony import */ var _internal_operators_windowTime__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(483); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowTime", function() { return _internal_operators_windowTime__WEBPACK_IMPORTED_MODULE_97__["windowTime"]; }); -/* harmony import */ var _internal_operators_windowToggle__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(492); +/* harmony import */ var _internal_operators_windowToggle__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(484); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowToggle", function() { return _internal_operators_windowToggle__WEBPACK_IMPORTED_MODULE_98__["windowToggle"]; }); -/* harmony import */ var _internal_operators_windowWhen__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(493); +/* harmony import */ var _internal_operators_windowWhen__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(485); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowWhen", function() { return _internal_operators_windowWhen__WEBPACK_IMPORTED_MODULE_99__["windowWhen"]; }); -/* harmony import */ var _internal_operators_withLatestFrom__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(494); +/* harmony import */ var _internal_operators_withLatestFrom__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(486); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "withLatestFrom", function() { return _internal_operators_withLatestFrom__WEBPACK_IMPORTED_MODULE_100__["withLatestFrom"]; }); -/* harmony import */ var _internal_operators_zip__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(495); +/* harmony import */ var _internal_operators_zip__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(487); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return _internal_operators_zip__WEBPACK_IMPORTED_MODULE_101__["zip"]; }); -/* harmony import */ var _internal_operators_zipAll__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(496); +/* harmony import */ var _internal_operators_zipAll__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(488); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zipAll", function() { return _internal_operators_zipAll__WEBPACK_IMPORTED_MODULE_102__["zipAll"]; }); /** PURE_IMPORTS_START PURE_IMPORTS_END */ @@ -51721,7 +49295,7 @@ __webpack_require__.r(__webpack_exports__); /***/ }), -/* 400 */ +/* 392 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -51802,14 +49376,14 @@ var AuditSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 401 */ +/* 393 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "auditTime", function() { return auditTime; }); /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(55); -/* harmony import */ var _audit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(400); +/* harmony import */ var _audit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(392); /* harmony import */ var _observable_timer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(107); /** PURE_IMPORTS_START _scheduler_async,_audit,_observable_timer PURE_IMPORTS_END */ @@ -51825,7 +49399,7 @@ function auditTime(duration, scheduler) { /***/ }), -/* 402 */ +/* 394 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -51874,7 +49448,7 @@ var BufferSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 403 */ +/* 395 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -51975,7 +49549,7 @@ var BufferSkipCountSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 404 */ +/* 396 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52136,7 +49710,7 @@ function dispatchBufferClose(arg) { /***/ }), -/* 405 */ +/* 397 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52256,7 +49830,7 @@ var BufferToggleSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 406 */ +/* 398 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52351,7 +49925,7 @@ var BufferWhenSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 407 */ +/* 399 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52415,7 +49989,7 @@ var CatchSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 408 */ +/* 400 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52431,7 +50005,7 @@ function combineAll(project) { /***/ }), -/* 409 */ +/* 401 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52463,7 +50037,7 @@ function combineLatest() { /***/ }), -/* 410 */ +/* 402 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52483,7 +50057,7 @@ function concat() { /***/ }), -/* 411 */ +/* 403 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52499,13 +50073,13 @@ function concatMap(project, resultSelector) { /***/ }), -/* 412 */ +/* 404 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concatMapTo", function() { return concatMapTo; }); -/* harmony import */ var _concatMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(411); +/* harmony import */ var _concatMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(403); /** PURE_IMPORTS_START _concatMap PURE_IMPORTS_END */ function concatMapTo(innerObservable, resultSelector) { @@ -52515,7 +50089,7 @@ function concatMapTo(innerObservable, resultSelector) { /***/ }), -/* 413 */ +/* 405 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52580,7 +50154,7 @@ var CountSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 414 */ +/* 406 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52668,7 +50242,7 @@ var DebounceSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 415 */ +/* 407 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52744,7 +50318,7 @@ function dispatchNext(subscriber) { /***/ }), -/* 416 */ +/* 408 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52794,7 +50368,7 @@ var DefaultIfEmptySubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 417 */ +/* 409 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52802,7 +50376,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "delay", function() { return delay; }); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(12); /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(55); -/* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(418); +/* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(410); /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(11); /* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(42); /** PURE_IMPORTS_START tslib,_scheduler_async,_util_isDate,_Subscriber,_Notification PURE_IMPORTS_END */ @@ -52901,7 +50475,7 @@ var DelayMessage = /*@__PURE__*/ (function () { /***/ }), -/* 418 */ +/* 410 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -52915,7 +50489,7 @@ function isDate(value) { /***/ }), -/* 419 */ +/* 411 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53061,7 +50635,7 @@ var SubscriptionDelaySubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 420 */ +/* 412 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53099,7 +50673,7 @@ var DeMaterializeSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 421 */ +/* 413 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53177,7 +50751,7 @@ var DistinctSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 422 */ +/* 414 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53248,13 +50822,13 @@ var DistinctUntilChangedSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 423 */ +/* 415 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "distinctUntilKeyChanged", function() { return distinctUntilKeyChanged; }); -/* harmony import */ var _distinctUntilChanged__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(422); +/* harmony import */ var _distinctUntilChanged__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(414); /** PURE_IMPORTS_START _distinctUntilChanged PURE_IMPORTS_END */ function distinctUntilKeyChanged(key, compare) { @@ -53264,7 +50838,7 @@ function distinctUntilKeyChanged(key, compare) { /***/ }), -/* 424 */ +/* 416 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53272,9 +50846,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "elementAt", function() { return elementAt; }); /* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62); /* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(104); -/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(425); -/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(416); -/* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(426); +/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(417); +/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(408); +/* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(418); /** PURE_IMPORTS_START _util_ArgumentOutOfRangeError,_filter,_throwIfEmpty,_defaultIfEmpty,_take PURE_IMPORTS_END */ @@ -53296,7 +50870,7 @@ function elementAt(index, defaultValue) { /***/ }), -/* 425 */ +/* 417 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53362,7 +50936,7 @@ function defaultErrorFactory() { /***/ }), -/* 426 */ +/* 418 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53424,7 +50998,7 @@ var TakeSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 427 */ +/* 419 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53446,7 +51020,7 @@ function endWith() { /***/ }), -/* 428 */ +/* 420 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53508,7 +51082,7 @@ var EverySubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 429 */ +/* 421 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53565,7 +51139,7 @@ var SwitchFirstSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 430 */ +/* 422 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53665,7 +51239,7 @@ var ExhaustMapSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 431 */ +/* 423 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53784,7 +51358,7 @@ var ExpandSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 432 */ +/* 424 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53822,7 +51396,7 @@ var FinallySubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 433 */ +/* 425 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53894,13 +51468,13 @@ var FindValueSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 434 */ +/* 426 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findIndex", function() { return findIndex; }); -/* harmony import */ var _operators_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(433); +/* harmony import */ var _operators_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(425); /** PURE_IMPORTS_START _operators_find PURE_IMPORTS_END */ function findIndex(predicate, thisArg) { @@ -53910,7 +51484,7 @@ function findIndex(predicate, thisArg) { /***/ }), -/* 435 */ +/* 427 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53918,9 +51492,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "first", function() { return first; }); /* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63); /* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(104); -/* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(426); -/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(416); -/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(425); +/* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(418); +/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(408); +/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(417); /* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(25); /** PURE_IMPORTS_START _util_EmptyError,_filter,_take,_defaultIfEmpty,_throwIfEmpty,_util_identity PURE_IMPORTS_END */ @@ -53937,7 +51511,7 @@ function first(predicate, defaultValue) { /***/ }), -/* 436 */ +/* 428 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -53974,7 +51548,7 @@ var IgnoreElementsSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 437 */ +/* 429 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54018,7 +51592,7 @@ var IsEmptySubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 438 */ +/* 430 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54026,9 +51600,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "last", function() { return last; }); /* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63); /* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(104); -/* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(439); -/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(425); -/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(416); +/* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(431); +/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(417); +/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(408); /* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(25); /** PURE_IMPORTS_START _util_EmptyError,_filter,_takeLast,_throwIfEmpty,_defaultIfEmpty,_util_identity PURE_IMPORTS_END */ @@ -54045,7 +51619,7 @@ function last(predicate, defaultValue) { /***/ }), -/* 439 */ +/* 431 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54122,7 +51696,7 @@ var TakeLastSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 440 */ +/* 432 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54161,7 +51735,7 @@ var MapToSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 441 */ +/* 433 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54211,13 +51785,13 @@ var MaterializeSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 442 */ +/* 434 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "max", function() { return max; }); -/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(443); +/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(435); /** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */ function max(comparer) { @@ -54230,15 +51804,15 @@ function max(comparer) { /***/ }), -/* 443 */ +/* 435 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reduce", function() { return reduce; }); -/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(444); -/* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(439); -/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(416); +/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(436); +/* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(431); +/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(408); /* harmony import */ var _util_pipe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(24); /** PURE_IMPORTS_START _scan,_takeLast,_defaultIfEmpty,_util_pipe PURE_IMPORTS_END */ @@ -54259,7 +51833,7 @@ function reduce(accumulator, seed) { /***/ }), -/* 444 */ +/* 436 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54341,7 +51915,7 @@ var ScanSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 445 */ +/* 437 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54361,7 +51935,7 @@ function merge() { /***/ }), -/* 446 */ +/* 438 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54386,7 +51960,7 @@ function mergeMapTo(innerObservable, resultSelector, concurrent) { /***/ }), -/* 447 */ +/* 439 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54501,13 +52075,13 @@ var MergeScanSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 448 */ +/* 440 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "min", function() { return min; }); -/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(443); +/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(435); /** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */ function min(comparer) { @@ -54520,7 +52094,7 @@ function min(comparer) { /***/ }), -/* 449 */ +/* 441 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54569,7 +52143,7 @@ var MulticastOperator = /*@__PURE__*/ (function () { /***/ }), -/* 450 */ +/* 442 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54663,7 +52237,7 @@ var OnErrorResumeNextSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 451 */ +/* 443 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54711,7 +52285,7 @@ var PairwiseSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 452 */ +/* 444 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54734,7 +52308,7 @@ function partition(predicate, thisArg) { /***/ }), -/* 453 */ +/* 445 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54774,14 +52348,14 @@ function plucker(props, length) { /***/ }), -/* 454 */ +/* 446 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publish", function() { return publish; }); /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27); -/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(449); +/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(441); /** PURE_IMPORTS_START _Subject,_multicast PURE_IMPORTS_END */ @@ -54794,14 +52368,14 @@ function publish(selector) { /***/ }), -/* 455 */ +/* 447 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publishBehavior", function() { return publishBehavior; }); /* harmony import */ var _BehaviorSubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(32); -/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(449); +/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(441); /** PURE_IMPORTS_START _BehaviorSubject,_multicast PURE_IMPORTS_END */ @@ -54812,14 +52386,14 @@ function publishBehavior(value) { /***/ }), -/* 456 */ +/* 448 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publishLast", function() { return publishLast; }); /* harmony import */ var _AsyncSubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50); -/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(449); +/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(441); /** PURE_IMPORTS_START _AsyncSubject,_multicast PURE_IMPORTS_END */ @@ -54830,14 +52404,14 @@ function publishLast() { /***/ }), -/* 457 */ +/* 449 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publishReplay", function() { return publishReplay; }); /* harmony import */ var _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33); -/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(449); +/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(441); /** PURE_IMPORTS_START _ReplaySubject,_multicast PURE_IMPORTS_END */ @@ -54853,7 +52427,7 @@ function publishReplay(bufferSize, windowTime, selectorOrScheduler, scheduler) { /***/ }), -/* 458 */ +/* 450 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54880,7 +52454,7 @@ function race() { /***/ }), -/* 459 */ +/* 451 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -54945,7 +52519,7 @@ var RepeatSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 460 */ +/* 452 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55041,7 +52615,7 @@ var RepeatWhenSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 461 */ +/* 453 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55094,7 +52668,7 @@ var RetrySubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 462 */ +/* 454 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55182,7 +52756,7 @@ var RetryWhenSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 463 */ +/* 455 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55239,7 +52813,7 @@ var SampleSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 464 */ +/* 456 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55299,7 +52873,7 @@ function dispatchNotification(state) { /***/ }), -/* 465 */ +/* 457 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55422,13 +52996,13 @@ var SequenceEqualCompareToSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 466 */ +/* 458 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "share", function() { return share; }); -/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(449); +/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(441); /* harmony import */ var _refCount__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30); /* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27); /** PURE_IMPORTS_START _multicast,_refCount,_Subject PURE_IMPORTS_END */ @@ -55445,7 +53019,7 @@ function share() { /***/ }), -/* 467 */ +/* 459 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55510,7 +53084,7 @@ function shareReplayOperator(_a) { /***/ }), -/* 468 */ +/* 460 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55590,7 +53164,7 @@ var SingleSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 469 */ +/* 461 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55632,7 +53206,7 @@ var SkipSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 470 */ +/* 462 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55694,7 +53268,7 @@ var SkipLastSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 471 */ +/* 463 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55755,7 +53329,7 @@ var SkipUntilSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 472 */ +/* 464 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55811,7 +53385,7 @@ var SkipWhileSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 473 */ +/* 465 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55840,13 +53414,13 @@ function startWith() { /***/ }), -/* 474 */ +/* 466 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeOn", function() { return subscribeOn; }); -/* harmony import */ var _observable_SubscribeOnObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(475); +/* harmony import */ var _observable_SubscribeOnObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(467); /** PURE_IMPORTS_START _observable_SubscribeOnObservable PURE_IMPORTS_END */ function subscribeOn(scheduler, delay) { @@ -55871,7 +53445,7 @@ var SubscribeOnOperator = /*@__PURE__*/ (function () { /***/ }), -/* 475 */ +/* 467 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -55935,13 +53509,13 @@ var SubscribeOnObservable = /*@__PURE__*/ (function (_super) { /***/ }), -/* 476 */ +/* 468 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "switchAll", function() { return switchAll; }); -/* harmony import */ var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(477); +/* harmony import */ var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(469); /* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(25); /** PURE_IMPORTS_START _switchMap,_util_identity PURE_IMPORTS_END */ @@ -55953,7 +53527,7 @@ function switchAll() { /***/ }), -/* 477 */ +/* 469 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56047,13 +53621,13 @@ var SwitchMapSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 478 */ +/* 470 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "switchMapTo", function() { return switchMapTo; }); -/* harmony import */ var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(477); +/* harmony import */ var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(469); /** PURE_IMPORTS_START _switchMap PURE_IMPORTS_END */ function switchMapTo(innerObservable, resultSelector) { @@ -56063,7 +53637,7 @@ function switchMapTo(innerObservable, resultSelector) { /***/ }), -/* 479 */ +/* 471 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56113,7 +53687,7 @@ var TakeUntilSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 480 */ +/* 472 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56181,7 +53755,7 @@ var TakeWhileSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 481 */ +/* 473 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56269,7 +53843,7 @@ var TapSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 482 */ +/* 474 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56373,7 +53947,7 @@ var ThrottleSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 483 */ +/* 475 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56382,7 +53956,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(12); /* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(11); /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(55); -/* harmony import */ var _throttle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(482); +/* harmony import */ var _throttle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(474); /** PURE_IMPORTS_START tslib,_Subscriber,_scheduler_async,_throttle PURE_IMPORTS_END */ @@ -56471,7 +54045,7 @@ function dispatchNext(arg) { /***/ }), -/* 484 */ +/* 476 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56479,7 +54053,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeInterval", function() { return timeInterval; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TimeInterval", function() { return TimeInterval; }); /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(55); -/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(444); +/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(436); /* harmony import */ var _observable_defer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(90); /* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(66); /** PURE_IMPORTS_START _scheduler_async,_scan,_observable_defer,_map PURE_IMPORTS_END */ @@ -56515,7 +54089,7 @@ var TimeInterval = /*@__PURE__*/ (function () { /***/ }), -/* 485 */ +/* 477 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56523,7 +54097,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeout", function() { return timeout; }); /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(55); /* harmony import */ var _util_TimeoutError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(64); -/* harmony import */ var _timeoutWith__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(486); +/* harmony import */ var _timeoutWith__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(478); /* harmony import */ var _observable_throwError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49); /** PURE_IMPORTS_START _scheduler_async,_util_TimeoutError,_timeoutWith,_observable_throwError PURE_IMPORTS_END */ @@ -56540,7 +54114,7 @@ function timeout(due, scheduler) { /***/ }), -/* 486 */ +/* 478 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56548,7 +54122,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeoutWith", function() { return timeoutWith; }); /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(12); /* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(55); -/* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(418); +/* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(410); /* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(69); /* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(70); /** PURE_IMPORTS_START tslib,_scheduler_async,_util_isDate,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */ @@ -56622,7 +54196,7 @@ var TimeoutWithSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 487 */ +/* 479 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56652,13 +54226,13 @@ var Timestamp = /*@__PURE__*/ (function () { /***/ }), -/* 488 */ +/* 480 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toArray", function() { return toArray; }); -/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(443); +/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(435); /** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */ function toArrayReducer(arr, item, index) { @@ -56675,7 +54249,7 @@ function toArray() { /***/ }), -/* 489 */ +/* 481 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56755,7 +54329,7 @@ var WindowSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 490 */ +/* 482 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -56845,7 +54419,7 @@ var WindowCountSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 491 */ +/* 483 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -57015,7 +54589,7 @@ function dispatchWindowClose(state) { /***/ }), -/* 492 */ +/* 484 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -57158,7 +54732,7 @@ var WindowToggleSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 493 */ +/* 485 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -57255,7 +54829,7 @@ var WindowSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 494 */ +/* 486 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -57350,7 +54924,7 @@ var WithLatestFromSubscriber = /*@__PURE__*/ (function (_super) { /***/ }), -/* 495 */ +/* 487 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -57372,7 +54946,7 @@ function zip() { /***/ }), -/* 496 */ +/* 488 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -57388,7 +54962,7 @@ function zipAll(project) { /***/ }), -/* 497 */ +/* 489 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -57397,8 +54971,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _utils_errors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(162); /* harmony import */ var _utils_log__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(143); /* harmony import */ var _utils_projects__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(145); -/* harmony import */ var _utils_projects_tree__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(498); -/* harmony import */ var _utils_kibana__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(499); +/* harmony import */ var _utils_projects_tree__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(490); +/* harmony import */ var _utils_kibana__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(491); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } @@ -57480,7 +55054,7 @@ function toArray(value) { } /***/ }), -/* 498 */ +/* 490 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -57633,7 +55207,7 @@ function addProjectToTree(tree, pathParts, project) { } /***/ }), -/* 499 */ +/* 491 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -57641,13 +55215,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Kibana", function() { return Kibana; }); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var multimatch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(500); +/* harmony import */ var multimatch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(492); /* harmony import */ var multimatch__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(multimatch__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var is_path_inside__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(370); +/* harmony import */ var is_path_inside__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(366); /* harmony import */ var is_path_inside__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(is_path_inside__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _yarn_lock__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(283); +/* harmony import */ var _yarn_lock__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(279); /* harmony import */ var _projects__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(145); -/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(280); +/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(276); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } @@ -57809,15 +55383,15 @@ class Kibana { } /***/ }), -/* 500 */ +/* 492 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const minimatch = __webpack_require__(149); -const arrayUnion = __webpack_require__(501); -const arrayDiffer = __webpack_require__(502); -const arrify = __webpack_require__(503); +const arrayUnion = __webpack_require__(493); +const arrayDiffer = __webpack_require__(494); +const arrify = __webpack_require__(495); module.exports = (list, patterns, options = {}) => { list = arrify(list); @@ -57841,7 +55415,7 @@ module.exports = (list, patterns, options = {}) => { /***/ }), -/* 501 */ +/* 493 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -57853,7 +55427,7 @@ module.exports = (...arguments_) => { /***/ }), -/* 502 */ +/* 494 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -57868,7 +55442,7 @@ module.exports = arrayDiffer; /***/ }), -/* 503 */ +/* 495 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -57898,12 +55472,12 @@ module.exports = arrify; /***/ }), -/* 504 */ +/* 496 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _build_production_projects__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(505); +/* harmony import */ var _build_production_projects__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(497); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buildProductionProjects", function() { return _build_production_projects__WEBPACK_IMPORTED_MODULE_0__["buildProductionProjects"]; }); /* @@ -57927,19 +55501,19 @@ __webpack_require__.r(__webpack_exports__); /***/ }), -/* 505 */ +/* 497 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buildProductionProjects", function() { return buildProductionProjects; }); -/* harmony import */ var cpy__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(506); +/* harmony import */ var cpy__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(498); /* harmony import */ var cpy__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(cpy__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var del__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(289); +/* harmony import */ var del__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(285); /* harmony import */ var del__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(del__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4); /* harmony import */ var path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(280); +/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(276); /* harmony import */ var _utils_fs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(130); /* harmony import */ var _utils_log__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(143); /* harmony import */ var _utils_package_json__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(164); @@ -58075,7 +55649,7 @@ async function copyToBuild(project, kibanaRoot, buildRoot) { } /***/ }), -/* 506 */ +/* 498 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58083,13 +55657,13 @@ async function copyToBuild(project, kibanaRoot, buildRoot) { const EventEmitter = __webpack_require__(155); const path = __webpack_require__(4); const os = __webpack_require__(120); -const pAll = __webpack_require__(507); -const arrify = __webpack_require__(509); -const globby = __webpack_require__(510); -const isGlob = __webpack_require__(720); -const cpFile = __webpack_require__(721); -const junk = __webpack_require__(733); -const CpyError = __webpack_require__(734); +const pAll = __webpack_require__(499); +const arrify = __webpack_require__(501); +const globby = __webpack_require__(502); +const isGlob = __webpack_require__(700); +const cpFile = __webpack_require__(701); +const junk = __webpack_require__(713); +const CpyError = __webpack_require__(714); const defaultOptions = { ignoreJunk: true @@ -58208,12 +55782,12 @@ module.exports = (source, destination, { /***/ }), -/* 507 */ +/* 499 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const pMap = __webpack_require__(508); +const pMap = __webpack_require__(500); module.exports = (iterable, options) => pMap(iterable, element => element(), options); // TODO: Remove this for the next major release @@ -58221,7 +55795,7 @@ module.exports.default = module.exports; /***/ }), -/* 508 */ +/* 500 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58300,7 +55874,7 @@ module.exports.default = pMap; /***/ }), -/* 509 */ +/* 501 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58330,17 +55904,17 @@ module.exports = arrify; /***/ }), -/* 510 */ +/* 502 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(133); -const arrayUnion = __webpack_require__(511); +const arrayUnion = __webpack_require__(503); const glob = __webpack_require__(146); -const fastGlob = __webpack_require__(513); -const dirGlob = __webpack_require__(713); -const gitignore = __webpack_require__(716); +const fastGlob = __webpack_require__(505); +const dirGlob = __webpack_require__(693); +const gitignore = __webpack_require__(696); const DEFAULT_FILTER = () => false; @@ -58485,12 +56059,12 @@ module.exports.gitignore = gitignore; /***/ }), -/* 511 */ +/* 503 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var arrayUniq = __webpack_require__(512); +var arrayUniq = __webpack_require__(504); module.exports = function () { return arrayUniq([].concat.apply([], arguments)); @@ -58498,7 +56072,7 @@ module.exports = function () { /***/ }), -/* 512 */ +/* 504 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58567,10 +56141,10 @@ if ('Set' in global) { /***/ }), -/* 513 */ +/* 505 */ /***/ (function(module, exports, __webpack_require__) { -const pkg = __webpack_require__(514); +const pkg = __webpack_require__(506); module.exports = pkg.async; module.exports.default = pkg.async; @@ -58583,19 +56157,19 @@ module.exports.generateTasks = pkg.generateTasks; /***/ }), -/* 514 */ +/* 506 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var optionsManager = __webpack_require__(515); -var taskManager = __webpack_require__(516); -var reader_async_1 = __webpack_require__(684); -var reader_stream_1 = __webpack_require__(708); -var reader_sync_1 = __webpack_require__(709); -var arrayUtils = __webpack_require__(711); -var streamUtils = __webpack_require__(712); +var optionsManager = __webpack_require__(507); +var taskManager = __webpack_require__(508); +var reader_async_1 = __webpack_require__(664); +var reader_stream_1 = __webpack_require__(688); +var reader_sync_1 = __webpack_require__(689); +var arrayUtils = __webpack_require__(691); +var streamUtils = __webpack_require__(692); /** * Synchronous API. */ @@ -58661,7 +56235,7 @@ function isString(source) { /***/ }), -/* 515 */ +/* 507 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -58699,13 +56273,13 @@ exports.prepare = prepare; /***/ }), -/* 516 */ +/* 508 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var patternUtils = __webpack_require__(517); +var patternUtils = __webpack_require__(509); /** * Generate tasks based on parent directory of each pattern. */ @@ -58796,16 +56370,16 @@ exports.convertPatternGroupToTask = convertPatternGroupToTask; /***/ }), -/* 517 */ +/* 509 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var path = __webpack_require__(4); -var globParent = __webpack_require__(518); -var isGlob = __webpack_require__(521); -var micromatch = __webpack_require__(522); +var globParent = __webpack_require__(510); +var isGlob = __webpack_require__(513); +var micromatch = __webpack_require__(514); var GLOBSTAR = '**'; /** * Return true for static pattern. @@ -58951,15 +56525,15 @@ exports.matchAny = matchAny; /***/ }), -/* 518 */ +/* 510 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var path = __webpack_require__(4); -var isglob = __webpack_require__(519); -var pathDirname = __webpack_require__(520); +var isglob = __webpack_require__(511); +var pathDirname = __webpack_require__(512); var isWin32 = __webpack_require__(120).platform() === 'win32'; module.exports = function globParent(str) { @@ -58982,7 +56556,7 @@ module.exports = function globParent(str) { /***/ }), -/* 519 */ +/* 511 */ /***/ (function(module, exports, __webpack_require__) { /*! @@ -58992,7 +56566,7 @@ module.exports = function globParent(str) { * Licensed under the MIT License. */ -var isExtglob = __webpack_require__(303); +var isExtglob = __webpack_require__(299); module.exports = function isGlob(str) { if (typeof str !== 'string' || str === '') { @@ -59013,7 +56587,7 @@ module.exports = function isGlob(str) { /***/ }), -/* 520 */ +/* 512 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -59163,7 +56737,7 @@ module.exports.win32 = win32; /***/ }), -/* 521 */ +/* 513 */ /***/ (function(module, exports, __webpack_require__) { /*! @@ -59173,7 +56747,7 @@ module.exports.win32 = win32; * Released under the MIT License. */ -var isExtglob = __webpack_require__(303); +var isExtglob = __webpack_require__(299); var chars = { '{': '}', '(': ')', '[': ']'}; module.exports = function isGlob(str, options) { @@ -59215,7 +56789,7 @@ module.exports = function isGlob(str, options) { /***/ }), -/* 522 */ +/* 514 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -59226,18 +56800,18 @@ module.exports = function isGlob(str, options) { */ var util = __webpack_require__(111); -var braces = __webpack_require__(523); -var toRegex = __webpack_require__(636); -var extend = __webpack_require__(644); +var braces = __webpack_require__(515); +var toRegex = __webpack_require__(617); +var extend = __webpack_require__(625); /** * Local dependencies */ -var compilers = __webpack_require__(647); -var parsers = __webpack_require__(680); -var cache = __webpack_require__(681); -var utils = __webpack_require__(682); +var compilers = __webpack_require__(628); +var parsers = __webpack_require__(660); +var cache = __webpack_require__(661); +var utils = __webpack_require__(662); var MAX_LENGTH = 1024 * 64; /** @@ -60099,7 +57673,7 @@ module.exports = micromatch; /***/ }), -/* 523 */ +/* 515 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -60109,18 +57683,18 @@ module.exports = micromatch; * Module dependencies */ -var toRegex = __webpack_require__(524); -var unique = __webpack_require__(538); -var extend = __webpack_require__(533); +var toRegex = __webpack_require__(516); +var unique = __webpack_require__(528); +var extend = __webpack_require__(525); /** * Local dependencies */ -var compilers = __webpack_require__(539); -var parsers = __webpack_require__(556); -var Braces = __webpack_require__(566); -var utils = __webpack_require__(540); +var compilers = __webpack_require__(529); +var parsers = __webpack_require__(544); +var Braces = __webpack_require__(554); +var utils = __webpack_require__(530); var MAX_LENGTH = 1024 * 64; var cache = {}; @@ -60424,15 +57998,15 @@ module.exports = braces; /***/ }), -/* 524 */ +/* 516 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var define = __webpack_require__(525); -var extend = __webpack_require__(533); -var not = __webpack_require__(535); +var define = __webpack_require__(517); +var extend = __webpack_require__(525); +var not = __webpack_require__(527); var MAX_LENGTH = 1024 * 64; /** @@ -60579,7 +58153,7 @@ module.exports.makeRe = makeRe; /***/ }), -/* 525 */ +/* 517 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -60592,7 +58166,7 @@ module.exports.makeRe = makeRe; -var isDescriptor = __webpack_require__(526); +var isDescriptor = __webpack_require__(518); module.exports = function defineProperty(obj, prop, val) { if (typeof obj !== 'object' && typeof obj !== 'function') { @@ -60617,7 +58191,7 @@ module.exports = function defineProperty(obj, prop, val) { /***/ }), -/* 526 */ +/* 518 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -60630,9 +58204,9 @@ module.exports = function defineProperty(obj, prop, val) { -var typeOf = __webpack_require__(527); -var isAccessor = __webpack_require__(528); -var isData = __webpack_require__(531); +var typeOf = __webpack_require__(519); +var isAccessor = __webpack_require__(520); +var isData = __webpack_require__(523); module.exports = function isDescriptor(obj, key) { if (typeOf(obj) !== 'object') { @@ -60646,7 +58220,7 @@ module.exports = function isDescriptor(obj, key) { /***/ }), -/* 527 */ +/* 519 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -60799,7 +58373,7 @@ function isBuffer(val) { /***/ }), -/* 528 */ +/* 520 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -60812,7 +58386,7 @@ function isBuffer(val) { -var typeOf = __webpack_require__(529); +var typeOf = __webpack_require__(521); // accessor descriptor properties var accessor = { @@ -60875,10 +58449,10 @@ module.exports = isAccessorDescriptor; /***/ }), -/* 529 */ +/* 521 */ /***/ (function(module, exports, __webpack_require__) { -var isBuffer = __webpack_require__(530); +var isBuffer = __webpack_require__(522); var toString = Object.prototype.toString; /** @@ -60997,7 +58571,7 @@ module.exports = function kindOf(val) { /***/ }), -/* 530 */ +/* 522 */ /***/ (function(module, exports) { /*! @@ -61024,7 +58598,7 @@ function isSlowBuffer (obj) { /***/ }), -/* 531 */ +/* 523 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61037,7 +58611,7 @@ function isSlowBuffer (obj) { -var typeOf = __webpack_require__(532); +var typeOf = __webpack_require__(524); // data descriptor properties var data = { @@ -61086,10 +58660,10 @@ module.exports = isDataDescriptor; /***/ }), -/* 532 */ +/* 524 */ /***/ (function(module, exports, __webpack_require__) { -var isBuffer = __webpack_require__(530); +var isBuffer = __webpack_require__(522); var toString = Object.prototype.toString; /** @@ -61208,13 +58782,13 @@ module.exports = function kindOf(val) { /***/ }), -/* 533 */ +/* 525 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isObject = __webpack_require__(534); +var isObject = __webpack_require__(526); module.exports = function extend(o/*, objects*/) { if (!isObject(o)) { o = {}; } @@ -61248,7 +58822,7 @@ function hasOwn(obj, key) { /***/ }), -/* 534 */ +/* 526 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61268,13 +58842,13 @@ module.exports = function isExtendable(val) { /***/ }), -/* 535 */ +/* 527 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var extend = __webpack_require__(536); +var extend = __webpack_require__(525); /** * The main export is a function that takes a `pattern` string and an `options` object. @@ -61341,67 +58915,7 @@ module.exports = toRegex; /***/ }), -/* 536 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var isObject = __webpack_require__(537); - -module.exports = function extend(o/*, objects*/) { - if (!isObject(o)) { o = {}; } - - var len = arguments.length; - for (var i = 1; i < len; i++) { - var obj = arguments[i]; - - if (isObject(obj)) { - assign(o, obj); - } - } - return o; -}; - -function assign(a, b) { - for (var key in b) { - if (hasOwn(b, key)) { - a[key] = b[key]; - } - } -} - -/** - * Returns true if the given `key` is an own property of `obj`. - */ - -function hasOwn(obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key); -} - - -/***/ }), -/* 537 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/*! - * is-extendable - * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - - - -module.exports = function isExtendable(val) { - return typeof val !== 'undefined' && val !== null - && (typeof val === 'object' || typeof val === 'function'); -}; - - -/***/ }), -/* 538 */ +/* 528 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -61451,13 +58965,13 @@ module.exports.immutable = function uniqueImmutable(arr) { /***/ }), -/* 539 */ +/* 529 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var utils = __webpack_require__(540); +var utils = __webpack_require__(530); module.exports = function(braces, options) { braces.compiler @@ -61740,25 +59254,25 @@ function hasQueue(node) { /***/ }), -/* 540 */ +/* 530 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var splitString = __webpack_require__(541); +var splitString = __webpack_require__(531); var utils = module.exports; /** * Module dependencies */ -utils.extend = __webpack_require__(533); -utils.flatten = __webpack_require__(547); -utils.isObject = __webpack_require__(545); -utils.fillRange = __webpack_require__(548); -utils.repeat = __webpack_require__(555); -utils.unique = __webpack_require__(538); +utils.extend = __webpack_require__(525); +utils.flatten = __webpack_require__(537); +utils.isObject = __webpack_require__(535); +utils.fillRange = __webpack_require__(538); +utils.repeat = __webpack_require__(543); +utils.unique = __webpack_require__(528); utils.define = function(obj, key, val) { Object.defineProperty(obj, key, { @@ -62090,7 +59604,7 @@ utils.escapeRegex = function(str) { /***/ }), -/* 541 */ +/* 531 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62103,7 +59617,7 @@ utils.escapeRegex = function(str) { -var extend = __webpack_require__(542); +var extend = __webpack_require__(532); module.exports = function(str, options, fn) { if (typeof str !== 'string') { @@ -62268,14 +59782,14 @@ function keepEscaping(opts, str, idx) { /***/ }), -/* 542 */ +/* 532 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(543); -var assignSymbols = __webpack_require__(546); +var isExtendable = __webpack_require__(533); +var assignSymbols = __webpack_require__(536); module.exports = Object.assign || function(obj/*, objects*/) { if (obj === null || typeof obj === 'undefined') { @@ -62335,7 +59849,7 @@ function isEnum(obj, key) { /***/ }), -/* 543 */ +/* 533 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62348,7 +59862,7 @@ function isEnum(obj, key) { -var isPlainObject = __webpack_require__(544); +var isPlainObject = __webpack_require__(534); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -62356,7 +59870,7 @@ module.exports = function isExtendable(val) { /***/ }), -/* 544 */ +/* 534 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62369,7 +59883,7 @@ module.exports = function isExtendable(val) { -var isObject = __webpack_require__(545); +var isObject = __webpack_require__(535); function isObjectObject(o) { return isObject(o) === true @@ -62400,7 +59914,7 @@ module.exports = function isPlainObject(o) { /***/ }), -/* 545 */ +/* 535 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62419,7 +59933,7 @@ module.exports = function isObject(val) { /***/ }), -/* 546 */ +/* 536 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62466,7 +59980,7 @@ module.exports = function(receiver, objects) { /***/ }), -/* 547 */ +/* 537 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62495,7 +60009,7 @@ function flat(arr, res) { /***/ }), -/* 548 */ +/* 538 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62509,10 +60023,10 @@ function flat(arr, res) { var util = __webpack_require__(111); -var isNumber = __webpack_require__(549); -var extend = __webpack_require__(551); -var repeat = __webpack_require__(553); -var toRegex = __webpack_require__(554); +var isNumber = __webpack_require__(539); +var extend = __webpack_require__(525); +var repeat = __webpack_require__(541); +var toRegex = __webpack_require__(542); /** * Return a range of numbers or letters. @@ -62710,7 +60224,7 @@ module.exports = fillRange; /***/ }), -/* 549 */ +/* 539 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62723,7 +60237,7 @@ module.exports = fillRange; -var typeOf = __webpack_require__(550); +var typeOf = __webpack_require__(540); module.exports = function isNumber(num) { var type = typeOf(num); @@ -62739,10 +60253,10 @@ module.exports = function isNumber(num) { /***/ }), -/* 550 */ +/* 540 */ /***/ (function(module, exports, __webpack_require__) { -var isBuffer = __webpack_require__(530); +var isBuffer = __webpack_require__(522); var toString = Object.prototype.toString; /** @@ -62861,67 +60375,7 @@ module.exports = function kindOf(val) { /***/ }), -/* 551 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var isObject = __webpack_require__(552); - -module.exports = function extend(o/*, objects*/) { - if (!isObject(o)) { o = {}; } - - var len = arguments.length; - for (var i = 1; i < len; i++) { - var obj = arguments[i]; - - if (isObject(obj)) { - assign(o, obj); - } - } - return o; -}; - -function assign(a, b) { - for (var key in b) { - if (hasOwn(b, key)) { - a[key] = b[key]; - } - } -} - -/** - * Returns true if the given `key` is an own property of `obj`. - */ - -function hasOwn(obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key); -} - - -/***/ }), -/* 552 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/*! - * is-extendable - * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - - - -module.exports = function isExtendable(val) { - return typeof val !== 'undefined' && val !== null - && (typeof val === 'object' || typeof val === 'function'); -}; - - -/***/ }), -/* 553 */ +/* 541 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -62998,7 +60452,7 @@ function repeat(str, num) { /***/ }), -/* 554 */ +/* 542 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63011,8 +60465,8 @@ function repeat(str, num) { -var repeat = __webpack_require__(553); -var isNumber = __webpack_require__(549); +var repeat = __webpack_require__(541); +var isNumber = __webpack_require__(539); var cache = {}; function toRegexRange(min, max, options) { @@ -63299,7 +60753,7 @@ module.exports = toRegexRange; /***/ }), -/* 555 */ +/* 543 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -63324,14 +60778,14 @@ module.exports = function repeat(ele, num) { /***/ }), -/* 556 */ +/* 544 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var Node = __webpack_require__(557); -var utils = __webpack_require__(540); +var Node = __webpack_require__(545); +var utils = __webpack_require__(530); /** * Braces parsers @@ -63691,15 +61145,15 @@ function concatNodes(pos, node, parent, options) { /***/ }), -/* 557 */ +/* 545 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isObject = __webpack_require__(545); -var define = __webpack_require__(558); -var utils = __webpack_require__(565); +var isObject = __webpack_require__(535); +var define = __webpack_require__(546); +var utils = __webpack_require__(553); var ownNames; /** @@ -64190,7 +61644,7 @@ exports = module.exports = Node; /***/ }), -/* 558 */ +/* 546 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -64203,7 +61657,7 @@ exports = module.exports = Node; -var isDescriptor = __webpack_require__(559); +var isDescriptor = __webpack_require__(547); module.exports = function defineProperty(obj, prop, val) { if (typeof obj !== 'object' && typeof obj !== 'function') { @@ -64228,7 +61682,7 @@ module.exports = function defineProperty(obj, prop, val) { /***/ }), -/* 559 */ +/* 547 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -64241,9 +61695,9 @@ module.exports = function defineProperty(obj, prop, val) { -var typeOf = __webpack_require__(560); -var isAccessor = __webpack_require__(561); -var isData = __webpack_require__(563); +var typeOf = __webpack_require__(548); +var isAccessor = __webpack_require__(549); +var isData = __webpack_require__(551); module.exports = function isDescriptor(obj, key) { if (typeOf(obj) !== 'object') { @@ -64257,7 +61711,7 @@ module.exports = function isDescriptor(obj, key) { /***/ }), -/* 560 */ +/* 548 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -64392,7 +61846,7 @@ function isBuffer(val) { /***/ }), -/* 561 */ +/* 549 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -64405,7 +61859,7 @@ function isBuffer(val) { -var typeOf = __webpack_require__(562); +var typeOf = __webpack_require__(550); // accessor descriptor properties var accessor = { @@ -64468,7 +61922,7 @@ module.exports = isAccessorDescriptor; /***/ }), -/* 562 */ +/* 550 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -64603,7 +62057,7 @@ function isBuffer(val) { /***/ }), -/* 563 */ +/* 551 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -64616,7 +62070,7 @@ function isBuffer(val) { -var typeOf = __webpack_require__(564); +var typeOf = __webpack_require__(552); module.exports = function isDataDescriptor(obj, prop) { // data descriptor properties @@ -64659,7 +62113,7 @@ module.exports = function isDataDescriptor(obj, prop) { /***/ }), -/* 564 */ +/* 552 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -64794,13 +62248,13 @@ function isBuffer(val) { /***/ }), -/* 565 */ +/* 553 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var typeOf = __webpack_require__(550); +var typeOf = __webpack_require__(540); var utils = module.exports; /** @@ -65820,17 +63274,17 @@ function assert(val, message) { /***/ }), -/* 566 */ +/* 554 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var extend = __webpack_require__(533); -var Snapdragon = __webpack_require__(567); -var compilers = __webpack_require__(539); -var parsers = __webpack_require__(556); -var utils = __webpack_require__(540); +var extend = __webpack_require__(525); +var Snapdragon = __webpack_require__(555); +var compilers = __webpack_require__(529); +var parsers = __webpack_require__(544); +var utils = __webpack_require__(530); /** * Customize Snapdragon parser and renderer @@ -65931,17 +63385,17 @@ module.exports = Braces; /***/ }), -/* 567 */ +/* 555 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var Base = __webpack_require__(568); -var define = __webpack_require__(594); -var Compiler = __webpack_require__(604); -var Parser = __webpack_require__(633); -var utils = __webpack_require__(613); +var Base = __webpack_require__(556); +var define = __webpack_require__(517); +var Compiler = __webpack_require__(585); +var Parser = __webpack_require__(614); +var utils = __webpack_require__(594); var regexCache = {}; var cache = {}; @@ -66112,20 +63566,20 @@ module.exports.Parser = Parser; /***/ }), -/* 568 */ +/* 556 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var util = __webpack_require__(111); -var define = __webpack_require__(569); -var CacheBase = __webpack_require__(570); -var Emitter = __webpack_require__(571); -var isObject = __webpack_require__(545); -var merge = __webpack_require__(588); -var pascal = __webpack_require__(591); -var cu = __webpack_require__(592); +var define = __webpack_require__(557); +var CacheBase = __webpack_require__(558); +var Emitter = __webpack_require__(559); +var isObject = __webpack_require__(535); +var merge = __webpack_require__(576); +var pascal = __webpack_require__(579); +var cu = __webpack_require__(580); /** * Optionally define a custom `cache` namespace to use. @@ -66554,7 +64008,7 @@ module.exports.namespace = namespace; /***/ }), -/* 569 */ +/* 557 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -66567,7 +64021,7 @@ module.exports.namespace = namespace; -var isDescriptor = __webpack_require__(559); +var isDescriptor = __webpack_require__(547); module.exports = function defineProperty(obj, prop, val) { if (typeof obj !== 'object' && typeof obj !== 'function') { @@ -66592,21 +64046,21 @@ module.exports = function defineProperty(obj, prop, val) { /***/ }), -/* 570 */ +/* 558 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isObject = __webpack_require__(545); -var Emitter = __webpack_require__(571); -var visit = __webpack_require__(572); -var toPath = __webpack_require__(575); -var union = __webpack_require__(576); -var del = __webpack_require__(580); -var get = __webpack_require__(578); -var has = __webpack_require__(585); -var set = __webpack_require__(579); +var isObject = __webpack_require__(535); +var Emitter = __webpack_require__(559); +var visit = __webpack_require__(560); +var toPath = __webpack_require__(563); +var union = __webpack_require__(564); +var del = __webpack_require__(568); +var get = __webpack_require__(566); +var has = __webpack_require__(573); +var set = __webpack_require__(567); /** * Create a `Cache` constructor that when instantiated will @@ -66860,7 +64314,7 @@ module.exports.namespace = namespace; /***/ }), -/* 571 */ +/* 559 */ /***/ (function(module, exports, __webpack_require__) { @@ -66973,420 +64427,105 @@ Emitter.prototype.removeEventListener = function(event, fn){ cb = callbacks[i]; if (cb === fn || cb.fn === fn) { callbacks.splice(i, 1); - break; - } - } - return this; -}; - -/** - * Emit `event` with the given args. - * - * @param {String} event - * @param {Mixed} ... - * @return {Emitter} - */ - -Emitter.prototype.emit = function(event){ - this._callbacks = this._callbacks || {}; - var args = [].slice.call(arguments, 1) - , callbacks = this._callbacks['$' + event]; - - if (callbacks) { - callbacks = callbacks.slice(0); - for (var i = 0, len = callbacks.length; i < len; ++i) { - callbacks[i].apply(this, args); - } - } - - return this; -}; - -/** - * Return array of callbacks for `event`. - * - * @param {String} event - * @return {Array} - * @api public - */ - -Emitter.prototype.listeners = function(event){ - this._callbacks = this._callbacks || {}; - return this._callbacks['$' + event] || []; -}; - -/** - * Check if this emitter has `event` handlers. - * - * @param {String} event - * @return {Boolean} - * @api public - */ - -Emitter.prototype.hasListeners = function(event){ - return !! this.listeners(event).length; -}; - - -/***/ }), -/* 572 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/*! - * collection-visit - * - * Copyright (c) 2015, 2017, Jon Schlinkert. - * Released under the MIT License. - */ - - - -var visit = __webpack_require__(573); -var mapVisit = __webpack_require__(574); - -module.exports = function(collection, method, val) { - var result; - - if (typeof val === 'string' && (method in collection)) { - var args = [].slice.call(arguments, 2); - result = collection[method].apply(collection, args); - } else if (Array.isArray(val)) { - result = mapVisit.apply(null, arguments); - } else { - result = visit.apply(null, arguments); - } - - if (typeof result !== 'undefined') { - return result; - } - - return collection; -}; - - -/***/ }), -/* 573 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/*! - * object-visit - * - * Copyright (c) 2015, 2017, Jon Schlinkert. - * Released under the MIT License. - */ - - - -var isObject = __webpack_require__(545); - -module.exports = function visit(thisArg, method, target, val) { - if (!isObject(thisArg) && typeof thisArg !== 'function') { - throw new Error('object-visit expects `thisArg` to be an object.'); - } - - if (typeof method !== 'string') { - throw new Error('object-visit expects `method` name to be a string'); - } - - if (typeof thisArg[method] !== 'function') { - return thisArg; - } - - var args = [].slice.call(arguments, 3); - target = target || {}; - - for (var key in target) { - var arr = [key, target[key]].concat(args); - thisArg[method].apply(thisArg, arr); - } - return thisArg; -}; - - -/***/ }), -/* 574 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var util = __webpack_require__(111); -var visit = __webpack_require__(573); - -/** - * Map `visit` over an array of objects. - * - * @param {Object} `collection` The context in which to invoke `method` - * @param {String} `method` Name of the method to call on `collection` - * @param {Object} `arr` Array of objects. - */ - -module.exports = function mapVisit(collection, method, val) { - if (isObject(val)) { - return visit.apply(null, arguments); - } - - if (!Array.isArray(val)) { - throw new TypeError('expected an array: ' + util.inspect(val)); - } - - var args = [].slice.call(arguments, 3); - - for (var i = 0; i < val.length; i++) { - var ele = val[i]; - if (isObject(ele)) { - visit.apply(null, [collection, method, ele].concat(args)); - } else { - collection[method].apply(collection, [ele].concat(args)); - } - } -}; - -function isObject(val) { - return val && (typeof val === 'function' || (!Array.isArray(val) && typeof val === 'object')); -} - - -/***/ }), -/* 575 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/*! - * to-object-path - * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - - - -var typeOf = __webpack_require__(550); - -module.exports = function toPath(args) { - if (typeOf(args) !== 'arguments') { - args = arguments; - } - return filter(args).join('.'); -}; - -function filter(arr) { - var len = arr.length; - var idx = -1; - var res = []; - - while (++idx < len) { - var ele = arr[idx]; - if (typeOf(ele) === 'arguments' || Array.isArray(ele)) { - res.push.apply(res, filter(ele)); - } else if (typeof ele === 'string') { - res.push(ele); - } - } - return res; -} - - -/***/ }), -/* 576 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var isObject = __webpack_require__(537); -var union = __webpack_require__(577); -var get = __webpack_require__(578); -var set = __webpack_require__(579); - -module.exports = function unionValue(obj, prop, value) { - if (!isObject(obj)) { - throw new TypeError('union-value expects the first argument to be an object.'); - } - - if (typeof prop !== 'string') { - throw new TypeError('union-value expects `prop` to be a string.'); - } - - var arr = arrayify(get(obj, prop)); - set(obj, prop, union(arr, arrayify(value))); - return obj; -}; - -function arrayify(val) { - if (val === null || typeof val === 'undefined') { - return []; - } - if (Array.isArray(val)) { - return val; - } - return [val]; -} - - -/***/ }), -/* 577 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = function union(init) { - if (!Array.isArray(init)) { - throw new TypeError('arr-union expects the first argument to be an array.'); - } - - var len = arguments.length; - var i = 0; - - while (++i < len) { - var arg = arguments[i]; - if (!arg) continue; - - if (!Array.isArray(arg)) { - arg = [arg]; - } - - for (var j = 0; j < arg.length; j++) { - var ele = arg[j]; - - if (init.indexOf(ele) >= 0) { - continue; - } - init.push(ele); - } - } - return init; -}; - - -/***/ }), -/* 578 */ -/***/ (function(module, exports) { - -/*! - * get-value - * - * Copyright (c) 2014-2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -module.exports = function(obj, prop, a, b, c) { - if (!isObject(obj) || !prop) { - return obj; - } - - prop = toString(prop); - - // allowing for multiple properties to be passed as - // a string or array, but much faster (3-4x) than doing - // `[].slice.call(arguments)` - if (a) prop += '.' + toString(a); - if (b) prop += '.' + toString(b); - if (c) prop += '.' + toString(c); - - if (prop in obj) { - return obj[prop]; - } - - var segs = prop.split('.'); - var len = segs.length; - var i = -1; - - while (obj && (++i < len)) { - var key = segs[i]; - while (key[key.length - 1] === '\\') { - key = key.slice(0, -1) + '.' + segs[++i]; - } - obj = obj[key]; - } - return obj; -}; - -function isObject(val) { - return val !== null && (typeof val === 'object' || typeof val === 'function'); -} - -function toString(val) { - if (!val) return ''; - if (Array.isArray(val)) { - return val.join('.'); - } - return val; -} + break; + } + } + return this; +}; + +/** + * Emit `event` with the given args. + * + * @param {String} event + * @param {Mixed} ... + * @return {Emitter} + */ + +Emitter.prototype.emit = function(event){ + this._callbacks = this._callbacks || {}; + var args = [].slice.call(arguments, 1) + , callbacks = this._callbacks['$' + event]; + + if (callbacks) { + callbacks = callbacks.slice(0); + for (var i = 0, len = callbacks.length; i < len; ++i) { + callbacks[i].apply(this, args); + } + } + + return this; +}; + +/** + * Return array of callbacks for `event`. + * + * @param {String} event + * @return {Array} + * @api public + */ + +Emitter.prototype.listeners = function(event){ + this._callbacks = this._callbacks || {}; + return this._callbacks['$' + event] || []; +}; + +/** + * Check if this emitter has `event` handlers. + * + * @param {String} event + * @return {Boolean} + * @api public + */ + +Emitter.prototype.hasListeners = function(event){ + return !! this.listeners(event).length; +}; /***/ }), -/* 579 */ +/* 560 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /*! - * set-value + * collection-visit * - * Copyright (c) 2014-2015, 2017, Jon Schlinkert. + * Copyright (c) 2015, 2017, Jon Schlinkert. * Released under the MIT License. */ -var split = __webpack_require__(541); -var extend = __webpack_require__(536); -var isPlainObject = __webpack_require__(544); -var isObject = __webpack_require__(537); - -module.exports = function(obj, prop, val) { - if (!isObject(obj)) { - return obj; - } +var visit = __webpack_require__(561); +var mapVisit = __webpack_require__(562); - if (Array.isArray(prop)) { - prop = [].concat.apply([], prop).join('.'); - } +module.exports = function(collection, method, val) { + var result; - if (typeof prop !== 'string') { - return obj; + if (typeof val === 'string' && (method in collection)) { + var args = [].slice.call(arguments, 2); + result = collection[method].apply(collection, args); + } else if (Array.isArray(val)) { + result = mapVisit.apply(null, arguments); + } else { + result = visit.apply(null, arguments); } - var keys = split(prop, {sep: '.', brackets: true}).filter(isValidKey); - var len = keys.length; - var idx = -1; - var current = obj; - - while (++idx < len) { - var key = keys[idx]; - if (idx !== len - 1) { - if (!isObject(current[key])) { - current[key] = {}; - } - current = current[key]; - continue; - } - - if (isPlainObject(current[key]) && isPlainObject(val)) { - current[key] = extend({}, current[key], val); - } else { - current[key] = val; - } + if (typeof result !== 'undefined') { + return result; } - return obj; + return collection; }; -function isValidKey(key) { - return key !== '__proto__' && key !== 'constructor' && key !== 'prototype'; -} - /***/ }), -/* 580 */ +/* 561 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /*! - * unset-value + * object-visit * * Copyright (c) 2015, 2017, Jon Schlinkert. * Released under the MIT License. @@ -67394,960 +64533,542 @@ function isValidKey(key) { -var isObject = __webpack_require__(545); -var has = __webpack_require__(581); +var isObject = __webpack_require__(535); -module.exports = function unset(obj, prop) { - if (!isObject(obj)) { - throw new TypeError('expected an object.'); - } - if (obj.hasOwnProperty(prop)) { - delete obj[prop]; - return true; +module.exports = function visit(thisArg, method, target, val) { + if (!isObject(thisArg) && typeof thisArg !== 'function') { + throw new Error('object-visit expects `thisArg` to be an object.'); } - if (has(obj, prop)) { - var segs = prop.split('.'); - var last = segs.pop(); - while (segs.length && segs[segs.length - 1].slice(-1) === '\\') { - last = segs.pop().slice(0, -1) + '.' + last; - } - while (segs.length) obj = obj[prop = segs.shift()]; - return (delete obj[last]); + if (typeof method !== 'string') { + throw new Error('object-visit expects `method` name to be a string'); } - return true; -}; - - -/***/ }), -/* 581 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/*! - * has-value - * - * Copyright (c) 2014-2016, Jon Schlinkert. - * Licensed under the MIT License. - */ - + if (typeof thisArg[method] !== 'function') { + return thisArg; + } -var isObject = __webpack_require__(582); -var hasValues = __webpack_require__(584); -var get = __webpack_require__(578); + var args = [].slice.call(arguments, 3); + target = target || {}; -module.exports = function(obj, prop, noZero) { - if (isObject(obj)) { - return hasValues(get(obj, prop), noZero); + for (var key in target) { + var arr = [key, target[key]].concat(args); + thisArg[method].apply(thisArg, arr); } - return hasValues(obj, prop); + return thisArg; }; /***/ }), -/* 582 */ +/* 562 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -/*! - * isobject - * - * Copyright (c) 2014-2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - - - -var isArray = __webpack_require__(583); - -module.exports = function isObject(val) { - return val != null && typeof val === 'object' && isArray(val) === false; -}; - - -/***/ }), -/* 583 */ -/***/ (function(module, exports) { - -var toString = {}.toString; - -module.exports = Array.isArray || function (arr) { - return toString.call(arr) == '[object Array]'; -}; -/***/ }), -/* 584 */ -/***/ (function(module, exports, __webpack_require__) { +var util = __webpack_require__(111); +var visit = __webpack_require__(561); -"use strict"; -/*! - * has-values +/** + * Map `visit` over an array of objects. * - * Copyright (c) 2014-2015, Jon Schlinkert. - * Licensed under the MIT License. + * @param {Object} `collection` The context in which to invoke `method` + * @param {String} `method` Name of the method to call on `collection` + * @param {Object} `arr` Array of objects. */ - - -module.exports = function hasValue(o, noZero) { - if (o === null || o === undefined) { - return false; - } - - if (typeof o === 'boolean') { - return true; +module.exports = function mapVisit(collection, method, val) { + if (isObject(val)) { + return visit.apply(null, arguments); } - if (typeof o === 'number') { - if (o === 0 && noZero === true) { - return false; - } - return true; + if (!Array.isArray(val)) { + throw new TypeError('expected an array: ' + util.inspect(val)); } - if (o.length !== undefined) { - return o.length !== 0; - } + var args = [].slice.call(arguments, 3); - for (var key in o) { - if (o.hasOwnProperty(key)) { - return true; + for (var i = 0; i < val.length; i++) { + var ele = val[i]; + if (isObject(ele)) { + visit.apply(null, [collection, method, ele].concat(args)); + } else { + collection[method].apply(collection, [ele].concat(args)); } } - return false; }; - -/***/ }), -/* 585 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/*! - * has-value - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Licensed under the MIT License. - */ - - - -var isObject = __webpack_require__(545); -var hasValues = __webpack_require__(586); -var get = __webpack_require__(578); - -module.exports = function(val, prop) { - return hasValues(isObject(val) && prop ? get(val, prop) : val); -}; +function isObject(val) { + return val && (typeof val === 'function' || (!Array.isArray(val) && typeof val === 'object')); +} /***/ }), -/* 586 */ +/* 563 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /*! - * has-values - * - * Copyright (c) 2014-2015, 2017, Jon Schlinkert. - * Released under the MIT License. - */ - - - -var typeOf = __webpack_require__(587); -var isNumber = __webpack_require__(549); - -module.exports = function hasValue(val) { - // is-number checks for NaN and other edge cases - if (isNumber(val)) { - return true; - } - - switch (typeOf(val)) { - case 'null': - case 'boolean': - case 'function': - return true; - case 'string': - case 'arguments': - return val.length !== 0; - case 'error': - return val.message !== ''; - case 'array': - var len = val.length; - if (len === 0) { - return false; - } - for (var i = 0; i < len; i++) { - if (hasValue(val[i])) { - return true; - } - } - return false; - case 'file': - case 'map': - case 'set': - return val.size !== 0; - case 'object': - var keys = Object.keys(val); - if (keys.length === 0) { - return false; - } - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - if (hasValue(val[key])) { - return true; - } - } - return false; - default: { - return false; - } - } -}; - - -/***/ }), -/* 587 */ -/***/ (function(module, exports, __webpack_require__) { - -var isBuffer = __webpack_require__(530); -var toString = Object.prototype.toString; - -/** - * Get the native `typeof` a value. + * to-object-path * - * @param {*} `val` - * @return {*} Native javascript type + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. */ -module.exports = function kindOf(val) { - // primitivies - if (typeof val === 'undefined') { - return 'undefined'; - } - if (val === null) { - return 'null'; - } - if (val === true || val === false || val instanceof Boolean) { - return 'boolean'; - } - if (typeof val === 'string' || val instanceof String) { - return 'string'; - } - if (typeof val === 'number' || val instanceof Number) { - return 'number'; - } - - // functions - if (typeof val === 'function' || val instanceof Function) { - return 'function'; - } - - // array - if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) { - return 'array'; - } - - // check for instances of RegExp and Date before calling `toString` - if (val instanceof RegExp) { - return 'regexp'; - } - if (val instanceof Date) { - return 'date'; - } - - // other objects - var type = toString.call(val); - - if (type === '[object RegExp]') { - return 'regexp'; - } - if (type === '[object Date]') { - return 'date'; - } - if (type === '[object Arguments]') { - return 'arguments'; - } - if (type === '[object Error]') { - return 'error'; - } - if (type === '[object Promise]') { - return 'promise'; - } - // buffer - if (isBuffer(val)) { - return 'buffer'; - } - // es6: Map, WeakMap, Set, WeakSet - if (type === '[object Set]') { - return 'set'; - } - if (type === '[object WeakSet]') { - return 'weakset'; - } - if (type === '[object Map]') { - return 'map'; - } - if (type === '[object WeakMap]') { - return 'weakmap'; - } - if (type === '[object Symbol]') { - return 'symbol'; - } +var typeOf = __webpack_require__(540); - // typed arrays - if (type === '[object Int8Array]') { - return 'int8array'; - } - if (type === '[object Uint8Array]') { - return 'uint8array'; - } - if (type === '[object Uint8ClampedArray]') { - return 'uint8clampedarray'; - } - if (type === '[object Int16Array]') { - return 'int16array'; - } - if (type === '[object Uint16Array]') { - return 'uint16array'; - } - if (type === '[object Int32Array]') { - return 'int32array'; - } - if (type === '[object Uint32Array]') { - return 'uint32array'; - } - if (type === '[object Float32Array]') { - return 'float32array'; - } - if (type === '[object Float64Array]') { - return 'float64array'; +module.exports = function toPath(args) { + if (typeOf(args) !== 'arguments') { + args = arguments; } - - // must be a plain object - return 'object'; + return filter(args).join('.'); }; +function filter(arr) { + var len = arr.length; + var idx = -1; + var res = []; -/***/ }), -/* 588 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var isExtendable = __webpack_require__(589); -var forIn = __webpack_require__(590); - -function mixinDeep(target, objects) { - var len = arguments.length, i = 0; - while (++i < len) { - var obj = arguments[i]; - if (isObject(obj)) { - forIn(obj, copy, target); + while (++idx < len) { + var ele = arr[idx]; + if (typeOf(ele) === 'arguments' || Array.isArray(ele)) { + res.push.apply(res, filter(ele)); + } else if (typeof ele === 'string') { + res.push(ele); } - } - return target; -} - -/** - * Copy properties from the source object to the - * target object. - * - * @param {*} `val` - * @param {String} `key` - */ - -function copy(val, key) { - if (!isValidKey(key)) { - return; - } - - var obj = this[key]; - if (isObject(val) && isObject(obj)) { - mixinDeep(obj, val); - } else { - this[key] = val; - } -} - -/** - * Returns true if `val` is an object or function. - * - * @param {any} val - * @return {Boolean} - */ - -function isObject(val) { - return isExtendable(val) && !Array.isArray(val); -} - -/** - * Returns true if `key` is a valid key to use when extending objects. - * - * @param {String} `key` - * @return {Boolean} - */ - -function isValidKey(key) { - return key !== '__proto__' && key !== 'constructor' && key !== 'prototype'; -}; - -/** - * Expose `mixinDeep` - */ - -module.exports = mixinDeep; + } + return res; +} /***/ }), -/* 589 */ +/* 564 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -/*! - * is-extendable - * - * Copyright (c) 2015-2017, Jon Schlinkert. - * Released under the MIT License. - */ +var isObject = __webpack_require__(526); +var union = __webpack_require__(565); +var get = __webpack_require__(566); +var set = __webpack_require__(567); -var isPlainObject = __webpack_require__(544); +module.exports = function unionValue(obj, prop, value) { + if (!isObject(obj)) { + throw new TypeError('union-value expects the first argument to be an object.'); + } -module.exports = function isExtendable(val) { - return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); + if (typeof prop !== 'string') { + throw new TypeError('union-value expects `prop` to be a string.'); + } + + var arr = arrayify(get(obj, prop)); + set(obj, prop, union(arr, arrayify(value))); + return obj; }; +function arrayify(val) { + if (val === null || typeof val === 'undefined') { + return []; + } + if (Array.isArray(val)) { + return val; + } + return [val]; +} + /***/ }), -/* 590 */ +/* 565 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -/*! - * for-in - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ +module.exports = function union(init) { + if (!Array.isArray(init)) { + throw new TypeError('arr-union expects the first argument to be an array.'); + } -module.exports = function forIn(obj, fn, thisArg) { - for (var key in obj) { - if (fn.call(thisArg, obj[key], key, obj) === false) { - break; + var len = arguments.length; + var i = 0; + + while (++i < len) { + var arg = arguments[i]; + if (!arg) continue; + + if (!Array.isArray(arg)) { + arg = [arg]; + } + + for (var j = 0; j < arg.length; j++) { + var ele = arg[j]; + + if (init.indexOf(ele) >= 0) { + continue; + } + init.push(ele); } } + return init; }; /***/ }), -/* 591 */ +/* 566 */ /***/ (function(module, exports) { /*! - * pascalcase + * get-value * - * Copyright (c) 2015, Jon Schlinkert. + * Copyright (c) 2014-2015, Jon Schlinkert. * Licensed under the MIT License. */ -function pascalcase(str) { - if (typeof str !== 'string') { - throw new TypeError('expected a string.'); +module.exports = function(obj, prop, a, b, c) { + if (!isObject(obj) || !prop) { + return obj; } - str = str.replace(/([A-Z])/g, ' $1'); - if (str.length === 1) { return str.toUpperCase(); } - str = str.replace(/^[\W_]+|[\W_]+$/g, '').toLowerCase(); - str = str.charAt(0).toUpperCase() + str.slice(1); - return str.replace(/[\W_]+(\w|$)/g, function (_, ch) { - return ch.toUpperCase(); - }); -} - -module.exports = pascalcase; + prop = toString(prop); -/***/ }), -/* 592 */ -/***/ (function(module, exports, __webpack_require__) { + // allowing for multiple properties to be passed as + // a string or array, but much faster (3-4x) than doing + // `[].slice.call(arguments)` + if (a) prop += '.' + toString(a); + if (b) prop += '.' + toString(b); + if (c) prop += '.' + toString(c); -"use strict"; + if (prop in obj) { + return obj[prop]; + } + var segs = prop.split('.'); + var len = segs.length; + var i = -1; -var util = __webpack_require__(111); -var utils = __webpack_require__(593); + while (obj && (++i < len)) { + var key = segs[i]; + while (key[key.length - 1] === '\\') { + key = key.slice(0, -1) + '.' + segs[++i]; + } + obj = obj[key]; + } + return obj; +}; -/** - * Expose class utils - */ +function isObject(val) { + return val !== null && (typeof val === 'object' || typeof val === 'function'); +} -var cu = module.exports; +function toString(val) { + if (!val) return ''; + if (Array.isArray(val)) { + return val.join('.'); + } + return val; +} -/** - * Expose class utils: `cu` - */ -cu.isObject = function isObject(val) { - return utils.isObj(val) || typeof val === 'function'; -}; +/***/ }), +/* 567 */ +/***/ (function(module, exports, __webpack_require__) { -/** - * Returns true if an array has any of the given elements, or an - * object has any of the give keys. - * - * ```js - * cu.has(['a', 'b', 'c'], 'c'); - * //=> true - * - * cu.has(['a', 'b', 'c'], ['c', 'z']); - * //=> true +"use strict"; +/*! + * set-value * - * cu.has({a: 'b', c: 'd'}, ['c', 'z']); - * //=> true - * ``` - * @param {Object} `obj` - * @param {String|Array} `val` - * @return {Boolean} - * @api public + * Copyright (c) 2014-2015, 2017, Jon Schlinkert. + * Released under the MIT License. */ -cu.has = function has(obj, val) { - val = cu.arrayify(val); - var len = val.length; - if (cu.isObject(obj)) { - for (var key in obj) { - if (val.indexOf(key) > -1) { - return true; - } - } - var keys = cu.nativeKeys(obj); - return cu.has(keys, val); +var split = __webpack_require__(531); +var extend = __webpack_require__(525); +var isPlainObject = __webpack_require__(534); +var isObject = __webpack_require__(526); + +module.exports = function(obj, prop, val) { + if (!isObject(obj)) { + return obj; } - if (Array.isArray(obj)) { - var arr = obj; - while (len--) { - if (arr.indexOf(val[len]) > -1) { - return true; - } - } - return false; + if (Array.isArray(prop)) { + prop = [].concat.apply([], prop).join('.'); } - throw new TypeError('expected an array or object.'); -}; + if (typeof prop !== 'string') { + return obj; + } -/** - * Returns true if an array or object has all of the given values. - * - * ```js - * cu.hasAll(['a', 'b', 'c'], 'c'); - * //=> true - * - * cu.hasAll(['a', 'b', 'c'], ['c', 'z']); - * //=> false - * - * cu.hasAll({a: 'b', c: 'd'}, ['c', 'z']); - * //=> false - * ``` - * @param {Object|Array} `val` - * @param {String|Array} `values` - * @return {Boolean} - * @api public - */ + var keys = split(prop, {sep: '.', brackets: true}).filter(isValidKey); + var len = keys.length; + var idx = -1; + var current = obj; -cu.hasAll = function hasAll(val, values) { - values = cu.arrayify(values); - var len = values.length; - while (len--) { - if (!cu.has(val, values[len])) { - return false; + while (++idx < len) { + var key = keys[idx]; + if (idx !== len - 1) { + if (!isObject(current[key])) { + current[key] = {}; + } + current = current[key]; + continue; } - } - return true; -}; -/** - * Cast the given value to an array. - * - * ```js - * cu.arrayify('foo'); - * //=> ['foo'] - * - * cu.arrayify(['foo']); - * //=> ['foo'] - * ``` - * - * @param {String|Array} `val` - * @return {Array} - * @api public - */ + if (isPlainObject(current[key]) && isPlainObject(val)) { + current[key] = extend({}, current[key], val); + } else { + current[key] = val; + } + } -cu.arrayify = function arrayify(val) { - return val ? (Array.isArray(val) ? val : [val]) : []; + return obj; }; -/** - * Noop - */ - -cu.noop = function noop() { - return; -}; +function isValidKey(key) { + return key !== '__proto__' && key !== 'constructor' && key !== 'prototype'; +} -/** - * Returns the first argument passed to the function. - */ -cu.identity = function identity(val) { - return val; -}; +/***/ }), +/* 568 */ +/***/ (function(module, exports, __webpack_require__) { -/** - * Returns true if a value has a `contructor` - * - * ```js - * cu.hasConstructor({}); - * //=> true +"use strict"; +/*! + * unset-value * - * cu.hasConstructor(Object.create(null)); - * //=> false - * ``` - * @param {Object} `value` - * @return {Boolean} - * @api public + * Copyright (c) 2015, 2017, Jon Schlinkert. + * Released under the MIT License. */ -cu.hasConstructor = function hasConstructor(val) { - return cu.isObject(val) && typeof val.constructor !== 'undefined'; -}; - -/** - * Get the native `ownPropertyNames` from the constructor of the - * given `object`. An empty array is returned if the object does - * not have a constructor. - * - * ```js - * cu.nativeKeys({a: 'b', b: 'c', c: 'd'}) - * //=> ['a', 'b', 'c'] - * - * cu.nativeKeys(function(){}) - * //=> ['length', 'caller'] - * ``` - * - * @param {Object} `obj` Object that has a `constructor`. - * @return {Array} Array of keys. - * @api public - */ -cu.nativeKeys = function nativeKeys(val) { - if (!cu.hasConstructor(val)) return []; - return Object.getOwnPropertyNames(val); -}; -/** - * Returns property descriptor `key` if it's an "own" property - * of the given object. - * - * ```js - * function App() {} - * Object.defineProperty(App.prototype, 'count', { - * get: function() { - * return Object.keys(this).length; - * } - * }); - * cu.getDescriptor(App.prototype, 'count'); - * // returns: - * // { - * // get: [Function], - * // set: undefined, - * // enumerable: false, - * // configurable: false - * // } - * ``` - * - * @param {Object} `obj` - * @param {String} `key` - * @return {Object} Returns descriptor `key` - * @api public - */ +var isObject = __webpack_require__(535); +var has = __webpack_require__(569); -cu.getDescriptor = function getDescriptor(obj, key) { - if (!cu.isObject(obj)) { +module.exports = function unset(obj, prop) { + if (!isObject(obj)) { throw new TypeError('expected an object.'); } - if (typeof key !== 'string') { - throw new TypeError('expected key to be a string.'); - } - return Object.getOwnPropertyDescriptor(obj, key); -}; - -/** - * Copy a descriptor from one object to another. - * - * ```js - * function App() {} - * Object.defineProperty(App.prototype, 'count', { - * get: function() { - * return Object.keys(this).length; - * } - * }); - * var obj = {}; - * cu.copyDescriptor(obj, App.prototype, 'count'); - * ``` - * @param {Object} `receiver` - * @param {Object} `provider` - * @param {String} `name` - * @return {Object} - * @api public - */ - -cu.copyDescriptor = function copyDescriptor(receiver, provider, name) { - if (!cu.isObject(receiver)) { - throw new TypeError('expected receiving object to be an object.'); - } - if (!cu.isObject(provider)) { - throw new TypeError('expected providing object to be an object.'); - } - if (typeof name !== 'string') { - throw new TypeError('expected name to be a string.'); - } - - var val = cu.getDescriptor(provider, name); - if (val) Object.defineProperty(receiver, name, val); -}; - -/** - * Copy static properties, prototype properties, and descriptors - * from one object to another. - * - * @param {Object} `receiver` - * @param {Object} `provider` - * @param {String|Array} `omit` One or more properties to omit - * @return {Object} - * @api public - */ - -cu.copy = function copy(receiver, provider, omit) { - if (!cu.isObject(receiver)) { - throw new TypeError('expected receiving object to be an object.'); - } - if (!cu.isObject(provider)) { - throw new TypeError('expected providing object to be an object.'); + if (obj.hasOwnProperty(prop)) { + delete obj[prop]; + return true; } - var props = Object.getOwnPropertyNames(provider); - var keys = Object.keys(provider); - var len = props.length, - key; - omit = cu.arrayify(omit); - - while (len--) { - key = props[len]; - if (cu.has(keys, key)) { - utils.define(receiver, key, provider[key]); - } else if (!(key in receiver) && !cu.has(omit, key)) { - cu.copyDescriptor(receiver, provider, key); + if (has(obj, prop)) { + var segs = prop.split('.'); + var last = segs.pop(); + while (segs.length && segs[segs.length - 1].slice(-1) === '\\') { + last = segs.pop().slice(0, -1) + '.' + last; } + while (segs.length) obj = obj[prop = segs.shift()]; + return (delete obj[last]); } + return true; }; -/** - * Inherit the static properties, prototype properties, and descriptors - * from of an object. - * - * @param {Object} `receiver` - * @param {Object} `provider` - * @param {String|Array} `omit` One or more properties to omit - * @return {Object} - * @api public - */ - -cu.inherit = function inherit(receiver, provider, omit) { - if (!cu.isObject(receiver)) { - throw new TypeError('expected receiving object to be an object.'); - } - if (!cu.isObject(provider)) { - throw new TypeError('expected providing object to be an object.'); - } - - var keys = []; - for (var key in provider) { - keys.push(key); - receiver[key] = provider[key]; - } - - keys = keys.concat(cu.arrayify(omit)); - - var a = provider.prototype || provider; - var b = receiver.prototype || receiver; - cu.copy(b, a, keys); -}; - -/** - * Returns a function for extending the static properties, - * prototype properties, and descriptors from the `Parent` - * constructor onto `Child` constructors. - * - * ```js - * var extend = cu.extend(Parent); - * Parent.extend(Child); - * - * // optional methods - * Parent.extend(Child, { - * foo: function() {}, - * bar: function() {} - * }); - * ``` - * @param {Function} `Parent` Parent ctor - * @param {Function} `extend` Optional extend function to handle custom extensions. Useful when updating methods that require a specific prototype. - * @param {Function} `Child` Child ctor - * @param {Object} `proto` Optionally pass additional prototype properties to inherit. - * @return {Object} - * @api public - */ - -cu.extend = function() { - // keep it lazy, instead of assigning to `cu.extend` - return utils.staticExtend.apply(null, arguments); -}; -/** - * Bubble up events emitted from static methods on the Parent ctor. - * - * @param {Object} `Parent` - * @param {Array} `events` Event names to bubble up - * @api public - */ +/***/ }), +/* 569 */ +/***/ (function(module, exports, __webpack_require__) { -cu.bubble = function(Parent, events) { - events = events || []; - Parent.bubble = function(Child, arr) { - if (Array.isArray(arr)) { - events = utils.union([], events, arr); - } - var len = events.length; - var idx = -1; - while (++idx < len) { - var name = events[idx]; - Parent.on(name, Child.emit.bind(Child, name)); - } - cu.bubble(Child, events); - }; +"use strict"; +/*! + * has-value + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + */ + + + +var isObject = __webpack_require__(570); +var hasValues = __webpack_require__(572); +var get = __webpack_require__(566); + +module.exports = function(obj, prop, noZero) { + if (isObject(obj)) { + return hasValues(get(obj, prop), noZero); + } + return hasValues(obj, prop); }; /***/ }), -/* 593 */ +/* 570 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; +/*! + * isobject + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ -var utils = {}; - +var isArray = __webpack_require__(571); -/** - * Lazily required module dependencies - */ +module.exports = function isObject(val) { + return val != null && typeof val === 'object' && isArray(val) === false; +}; -utils.union = __webpack_require__(577); -utils.define = __webpack_require__(594); -utils.isObj = __webpack_require__(545); -utils.staticExtend = __webpack_require__(601); +/***/ }), +/* 571 */ +/***/ (function(module, exports) { -/** - * Expose `utils` - */ +var toString = {}.toString; -module.exports = utils; +module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; +}; /***/ }), -/* 594 */ +/* 572 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /*! - * define-property + * has-values * - * Copyright (c) 2015, Jon Schlinkert. + * Copyright (c) 2014-2015, Jon Schlinkert. * Licensed under the MIT License. */ -var isDescriptor = __webpack_require__(595); +module.exports = function hasValue(o, noZero) { + if (o === null || o === undefined) { + return false; + } -module.exports = function defineProperty(obj, prop, val) { - if (typeof obj !== 'object' && typeof obj !== 'function') { - throw new TypeError('expected an object or function.'); + if (typeof o === 'boolean') { + return true; } - if (typeof prop !== 'string') { - throw new TypeError('expected `prop` to be a string.'); + if (typeof o === 'number') { + if (o === 0 && noZero === true) { + return false; + } + return true; } - if (isDescriptor(val) && ('set' in val || 'get' in val)) { - return Object.defineProperty(obj, prop, val); + if (o.length !== undefined) { + return o.length !== 0; } - return Object.defineProperty(obj, prop, { - configurable: true, - enumerable: false, - writable: true, - value: val - }); + for (var key in o) { + if (o.hasOwnProperty(key)) { + return true; + } + } + return false; }; /***/ }), -/* 595 */ +/* 573 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /*! - * is-descriptor + * has-value * - * Copyright (c) 2015-2017, Jon Schlinkert. + * Copyright (c) 2014-2017, Jon Schlinkert. + * Licensed under the MIT License. + */ + + + +var isObject = __webpack_require__(535); +var hasValues = __webpack_require__(574); +var get = __webpack_require__(566); + +module.exports = function(val, prop) { + return hasValues(isObject(val) && prop ? get(val, prop) : val); +}; + + +/***/ }), +/* 574 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * has-values + * + * Copyright (c) 2014-2015, 2017, Jon Schlinkert. * Released under the MIT License. */ -var typeOf = __webpack_require__(596); -var isAccessor = __webpack_require__(597); -var isData = __webpack_require__(599); +var typeOf = __webpack_require__(575); +var isNumber = __webpack_require__(539); -module.exports = function isDescriptor(obj, key) { - if (typeOf(obj) !== 'object') { - return false; +module.exports = function hasValue(val) { + // is-number checks for NaN and other edge cases + if (isNumber(val)) { + return true; } - if ('get' in obj) { - return isAccessor(obj, key); + + switch (typeOf(val)) { + case 'null': + case 'boolean': + case 'function': + return true; + case 'string': + case 'arguments': + return val.length !== 0; + case 'error': + return val.message !== ''; + case 'array': + var len = val.length; + if (len === 0) { + return false; + } + for (var i = 0; i < len; i++) { + if (hasValue(val[i])) { + return true; + } + } + return false; + case 'file': + case 'map': + case 'set': + return val.size !== 0; + case 'object': + var keys = Object.keys(val); + if (keys.length === 0) { + return false; + } + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (hasValue(val[key])) { + return true; + } + } + return false; + default: { + return false; + } } - return isData(obj, key); }; /***/ }), -/* 596 */ -/***/ (function(module, exports) { +/* 575 */ +/***/ (function(module, exports, __webpack_require__) { +var isBuffer = __webpack_require__(522); var toString = Object.prototype.toString; /** @@ -68358,10 +65079,8 @@ var toString = Object.prototype.toString; */ module.exports = function kindOf(val) { - var type = typeof val; - // primitivies - if (type === 'undefined') { + if (typeof val === 'undefined') { return 'undefined'; } if (val === null) { @@ -68370,18 +65089,15 @@ module.exports = function kindOf(val) { if (val === true || val === false || val instanceof Boolean) { return 'boolean'; } - if (type === 'string' || val instanceof String) { + if (typeof val === 'string' || val instanceof String) { return 'string'; } - if (type === 'number' || val instanceof Number) { + if (typeof val === 'number' || val instanceof Number) { return 'number'; } // functions - if (type === 'function' || val instanceof Function) { - if (typeof val.constructor.name !== 'undefined' && val.constructor.name.slice(0, 9) === 'Generator') { - return 'generatorfunction'; - } + if (typeof val === 'function' || val instanceof Function) { return 'function'; } @@ -68399,7 +65115,7 @@ module.exports = function kindOf(val) { } // other objects - type = toString.call(val); + var type = toString.call(val); if (type === '[object RegExp]') { return 'regexp'; @@ -68438,20 +65154,7 @@ module.exports = function kindOf(val) { if (type === '[object Symbol]') { return 'symbol'; } - - if (type === '[object Map Iterator]') { - return 'mapiterator'; - } - if (type === '[object Set Iterator]') { - return 'setiterator'; - } - if (type === '[object String Iterator]') { - return 'stringiterator'; - } - if (type === '[object Array Iterator]') { - return 'arrayiterator'; - } - + // typed arrays if (type === '[object Int8Array]') { return 'int8array'; @@ -68485,402 +65188,551 @@ module.exports = function kindOf(val) { return 'object'; }; + +/***/ }), +/* 576 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var isExtendable = __webpack_require__(577); +var forIn = __webpack_require__(578); + +function mixinDeep(target, objects) { + var len = arguments.length, i = 0; + while (++i < len) { + var obj = arguments[i]; + if (isObject(obj)) { + forIn(obj, copy, target); + } + } + return target; +} + /** - * If you need to support Safari 5-7 (8-10 yr-old browser), - * take a look at https://github.com/feross/is-buffer + * Copy properties from the source object to the + * target object. + * + * @param {*} `val` + * @param {String} `key` */ -function isBuffer(val) { - return val.constructor - && typeof val.constructor.isBuffer === 'function' - && val.constructor.isBuffer(val); +function copy(val, key) { + if (!isValidKey(key)) { + return; + } + + var obj = this[key]; + if (isObject(val) && isObject(obj)) { + mixinDeep(obj, val); + } else { + this[key] = val; + } +} + +/** + * Returns true if `val` is an object or function. + * + * @param {any} val + * @return {Boolean} + */ + +function isObject(val) { + return isExtendable(val) && !Array.isArray(val); } +/** + * Returns true if `key` is a valid key to use when extending objects. + * + * @param {String} `key` + * @return {Boolean} + */ + +function isValidKey(key) { + return key !== '__proto__' && key !== 'constructor' && key !== 'prototype'; +}; + +/** + * Expose `mixinDeep` + */ + +module.exports = mixinDeep; + /***/ }), -/* 597 */ +/* 577 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /*! - * is-accessor-descriptor + * is-extendable * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. + * Copyright (c) 2015-2017, Jon Schlinkert. + * Released under the MIT License. */ -var typeOf = __webpack_require__(598); +var isPlainObject = __webpack_require__(534); -// accessor descriptor properties -var accessor = { - get: 'function', - set: 'function', - configurable: 'boolean', - enumerable: 'boolean' +module.exports = function isExtendable(val) { + return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); }; -function isAccessorDescriptor(obj, prop) { - if (typeof prop === 'string') { - var val = Object.getOwnPropertyDescriptor(obj, prop); - return typeof val !== 'undefined'; - } - if (typeOf(obj) !== 'object') { - return false; +/***/ }), +/* 578 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * for-in + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +module.exports = function forIn(obj, fn, thisArg) { + for (var key in obj) { + if (fn.call(thisArg, obj[key], key, obj) === false) { + break; + } } +}; - if (has(obj, 'value') || has(obj, 'writable')) { - return false; + +/***/ }), +/* 579 */ +/***/ (function(module, exports) { + +/*! + * pascalcase + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +function pascalcase(str) { + if (typeof str !== 'string') { + throw new TypeError('expected a string.'); } + str = str.replace(/([A-Z])/g, ' $1'); + if (str.length === 1) { return str.toUpperCase(); } + str = str.replace(/^[\W_]+|[\W_]+$/g, '').toLowerCase(); + str = str.charAt(0).toUpperCase() + str.slice(1); + return str.replace(/[\W_]+(\w|$)/g, function (_, ch) { + return ch.toUpperCase(); + }); +} - if (!has(obj, 'get') || typeof obj.get !== 'function') { - return false; +module.exports = pascalcase; + + +/***/ }), +/* 580 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var util = __webpack_require__(111); +var utils = __webpack_require__(581); + +/** + * Expose class utils + */ + +var cu = module.exports; + +/** + * Expose class utils: `cu` + */ + +cu.isObject = function isObject(val) { + return utils.isObj(val) || typeof val === 'function'; +}; + +/** + * Returns true if an array has any of the given elements, or an + * object has any of the give keys. + * + * ```js + * cu.has(['a', 'b', 'c'], 'c'); + * //=> true + * + * cu.has(['a', 'b', 'c'], ['c', 'z']); + * //=> true + * + * cu.has({a: 'b', c: 'd'}, ['c', 'z']); + * //=> true + * ``` + * @param {Object} `obj` + * @param {String|Array} `val` + * @return {Boolean} + * @api public + */ + +cu.has = function has(obj, val) { + val = cu.arrayify(val); + var len = val.length; + + if (cu.isObject(obj)) { + for (var key in obj) { + if (val.indexOf(key) > -1) { + return true; + } + } + + var keys = cu.nativeKeys(obj); + return cu.has(keys, val); } - // tldr: it's valid to have "set" be undefined - // "set" might be undefined if `Object.getOwnPropertyDescriptor` - // was used to get the value, and only `get` was defined by the user - if (has(obj, 'set') && typeof obj[key] !== 'function' && typeof obj[key] !== 'undefined') { + if (Array.isArray(obj)) { + var arr = obj; + while (len--) { + if (arr.indexOf(val[len]) > -1) { + return true; + } + } return false; } - for (var key in obj) { - if (!accessor.hasOwnProperty(key)) { - continue; - } + throw new TypeError('expected an array or object.'); +}; - if (typeOf(obj[key]) === accessor[key]) { - continue; - } +/** + * Returns true if an array or object has all of the given values. + * + * ```js + * cu.hasAll(['a', 'b', 'c'], 'c'); + * //=> true + * + * cu.hasAll(['a', 'b', 'c'], ['c', 'z']); + * //=> false + * + * cu.hasAll({a: 'b', c: 'd'}, ['c', 'z']); + * //=> false + * ``` + * @param {Object|Array} `val` + * @param {String|Array} `values` + * @return {Boolean} + * @api public + */ - if (typeof obj[key] !== 'undefined') { +cu.hasAll = function hasAll(val, values) { + values = cu.arrayify(values); + var len = values.length; + while (len--) { + if (!cu.has(val, values[len])) { return false; } } return true; -} +}; -function has(obj, key) { - return {}.hasOwnProperty.call(obj, key); -} +/** + * Cast the given value to an array. + * + * ```js + * cu.arrayify('foo'); + * //=> ['foo'] + * + * cu.arrayify(['foo']); + * //=> ['foo'] + * ``` + * + * @param {String|Array} `val` + * @return {Array} + * @api public + */ + +cu.arrayify = function arrayify(val) { + return val ? (Array.isArray(val) ? val : [val]) : []; +}; /** - * Expose `isAccessorDescriptor` + * Noop */ -module.exports = isAccessorDescriptor; +cu.noop = function noop() { + return; +}; +/** + * Returns the first argument passed to the function. + */ -/***/ }), -/* 598 */ -/***/ (function(module, exports, __webpack_require__) { +cu.identity = function identity(val) { + return val; +}; -var isBuffer = __webpack_require__(530); -var toString = Object.prototype.toString; +/** + * Returns true if a value has a `contructor` + * + * ```js + * cu.hasConstructor({}); + * //=> true + * + * cu.hasConstructor(Object.create(null)); + * //=> false + * ``` + * @param {Object} `value` + * @return {Boolean} + * @api public + */ + +cu.hasConstructor = function hasConstructor(val) { + return cu.isObject(val) && typeof val.constructor !== 'undefined'; +}; + +/** + * Get the native `ownPropertyNames` from the constructor of the + * given `object`. An empty array is returned if the object does + * not have a constructor. + * + * ```js + * cu.nativeKeys({a: 'b', b: 'c', c: 'd'}) + * //=> ['a', 'b', 'c'] + * + * cu.nativeKeys(function(){}) + * //=> ['length', 'caller'] + * ``` + * + * @param {Object} `obj` Object that has a `constructor`. + * @return {Array} Array of keys. + * @api public + */ + +cu.nativeKeys = function nativeKeys(val) { + if (!cu.hasConstructor(val)) return []; + return Object.getOwnPropertyNames(val); +}; /** - * Get the native `typeof` a value. + * Returns property descriptor `key` if it's an "own" property + * of the given object. * - * @param {*} `val` - * @return {*} Native javascript type + * ```js + * function App() {} + * Object.defineProperty(App.prototype, 'count', { + * get: function() { + * return Object.keys(this).length; + * } + * }); + * cu.getDescriptor(App.prototype, 'count'); + * // returns: + * // { + * // get: [Function], + * // set: undefined, + * // enumerable: false, + * // configurable: false + * // } + * ``` + * + * @param {Object} `obj` + * @param {String} `key` + * @return {Object} Returns descriptor `key` + * @api public */ -module.exports = function kindOf(val) { - // primitivies - if (typeof val === 'undefined') { - return 'undefined'; - } - if (val === null) { - return 'null'; - } - if (val === true || val === false || val instanceof Boolean) { - return 'boolean'; - } - if (typeof val === 'string' || val instanceof String) { - return 'string'; +cu.getDescriptor = function getDescriptor(obj, key) { + if (!cu.isObject(obj)) { + throw new TypeError('expected an object.'); } - if (typeof val === 'number' || val instanceof Number) { - return 'number'; + if (typeof key !== 'string') { + throw new TypeError('expected key to be a string.'); } + return Object.getOwnPropertyDescriptor(obj, key); +}; - // functions - if (typeof val === 'function' || val instanceof Function) { - return 'function'; - } +/** + * Copy a descriptor from one object to another. + * + * ```js + * function App() {} + * Object.defineProperty(App.prototype, 'count', { + * get: function() { + * return Object.keys(this).length; + * } + * }); + * var obj = {}; + * cu.copyDescriptor(obj, App.prototype, 'count'); + * ``` + * @param {Object} `receiver` + * @param {Object} `provider` + * @param {String} `name` + * @return {Object} + * @api public + */ - // array - if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) { - return 'array'; +cu.copyDescriptor = function copyDescriptor(receiver, provider, name) { + if (!cu.isObject(receiver)) { + throw new TypeError('expected receiving object to be an object.'); } - - // check for instances of RegExp and Date before calling `toString` - if (val instanceof RegExp) { - return 'regexp'; + if (!cu.isObject(provider)) { + throw new TypeError('expected providing object to be an object.'); } - if (val instanceof Date) { - return 'date'; + if (typeof name !== 'string') { + throw new TypeError('expected name to be a string.'); } - // other objects - var type = toString.call(val); - - if (type === '[object RegExp]') { - return 'regexp'; - } - if (type === '[object Date]') { - return 'date'; - } - if (type === '[object Arguments]') { - return 'arguments'; - } - if (type === '[object Error]') { - return 'error'; - } + var val = cu.getDescriptor(provider, name); + if (val) Object.defineProperty(receiver, name, val); +}; - // buffer - if (isBuffer(val)) { - return 'buffer'; - } +/** + * Copy static properties, prototype properties, and descriptors + * from one object to another. + * + * @param {Object} `receiver` + * @param {Object} `provider` + * @param {String|Array} `omit` One or more properties to omit + * @return {Object} + * @api public + */ - // es6: Map, WeakMap, Set, WeakSet - if (type === '[object Set]') { - return 'set'; - } - if (type === '[object WeakSet]') { - return 'weakset'; - } - if (type === '[object Map]') { - return 'map'; - } - if (type === '[object WeakMap]') { - return 'weakmap'; +cu.copy = function copy(receiver, provider, omit) { + if (!cu.isObject(receiver)) { + throw new TypeError('expected receiving object to be an object.'); } - if (type === '[object Symbol]') { - return 'symbol'; + if (!cu.isObject(provider)) { + throw new TypeError('expected providing object to be an object.'); } + var props = Object.getOwnPropertyNames(provider); + var keys = Object.keys(provider); + var len = props.length, + key; + omit = cu.arrayify(omit); - // typed arrays - if (type === '[object Int8Array]') { - return 'int8array'; - } - if (type === '[object Uint8Array]') { - return 'uint8array'; - } - if (type === '[object Uint8ClampedArray]') { - return 'uint8clampedarray'; - } - if (type === '[object Int16Array]') { - return 'int16array'; - } - if (type === '[object Uint16Array]') { - return 'uint16array'; - } - if (type === '[object Int32Array]') { - return 'int32array'; - } - if (type === '[object Uint32Array]') { - return 'uint32array'; - } - if (type === '[object Float32Array]') { - return 'float32array'; - } - if (type === '[object Float64Array]') { - return 'float64array'; - } + while (len--) { + key = props[len]; - // must be a plain object - return 'object'; + if (cu.has(keys, key)) { + utils.define(receiver, key, provider[key]); + } else if (!(key in receiver) && !cu.has(omit, key)) { + cu.copyDescriptor(receiver, provider, key); + } + } }; - -/***/ }), -/* 599 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/*! - * is-data-descriptor +/** + * Inherit the static properties, prototype properties, and descriptors + * from of an object. * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. + * @param {Object} `receiver` + * @param {Object} `provider` + * @param {String|Array} `omit` One or more properties to omit + * @return {Object} + * @api public */ - - -var typeOf = __webpack_require__(600); - -// data descriptor properties -var data = { - configurable: 'boolean', - enumerable: 'boolean', - writable: 'boolean' -}; - -function isDataDescriptor(obj, prop) { - if (typeOf(obj) !== 'object') { - return false; +cu.inherit = function inherit(receiver, provider, omit) { + if (!cu.isObject(receiver)) { + throw new TypeError('expected receiving object to be an object.'); } - - if (typeof prop === 'string') { - var val = Object.getOwnPropertyDescriptor(obj, prop); - return typeof val !== 'undefined'; + if (!cu.isObject(provider)) { + throw new TypeError('expected providing object to be an object.'); } - if (!('value' in obj) && !('writable' in obj)) { - return false; + var keys = []; + for (var key in provider) { + keys.push(key); + receiver[key] = provider[key]; } - for (var key in obj) { - if (key === 'value') continue; + keys = keys.concat(cu.arrayify(omit)); - if (!data.hasOwnProperty(key)) { - continue; - } + var a = provider.prototype || provider; + var b = receiver.prototype || receiver; + cu.copy(b, a, keys); +}; - if (typeOf(obj[key]) === data[key]) { - continue; - } +/** + * Returns a function for extending the static properties, + * prototype properties, and descriptors from the `Parent` + * constructor onto `Child` constructors. + * + * ```js + * var extend = cu.extend(Parent); + * Parent.extend(Child); + * + * // optional methods + * Parent.extend(Child, { + * foo: function() {}, + * bar: function() {} + * }); + * ``` + * @param {Function} `Parent` Parent ctor + * @param {Function} `extend` Optional extend function to handle custom extensions. Useful when updating methods that require a specific prototype. + * @param {Function} `Child` Child ctor + * @param {Object} `proto` Optionally pass additional prototype properties to inherit. + * @return {Object} + * @api public + */ - if (typeof obj[key] !== 'undefined') { - return false; - } - } - return true; -} +cu.extend = function() { + // keep it lazy, instead of assigning to `cu.extend` + return utils.staticExtend.apply(null, arguments); +}; /** - * Expose `isDataDescriptor` + * Bubble up events emitted from static methods on the Parent ctor. + * + * @param {Object} `Parent` + * @param {Array} `events` Event names to bubble up + * @api public */ -module.exports = isDataDescriptor; +cu.bubble = function(Parent, events) { + events = events || []; + Parent.bubble = function(Child, arr) { + if (Array.isArray(arr)) { + events = utils.union([], events, arr); + } + var len = events.length; + var idx = -1; + while (++idx < len) { + var name = events[idx]; + Parent.on(name, Child.emit.bind(Child, name)); + } + cu.bubble(Child, events); + }; +}; /***/ }), -/* 600 */ +/* 581 */ /***/ (function(module, exports, __webpack_require__) { -var isBuffer = __webpack_require__(530); -var toString = Object.prototype.toString; - -/** - * Get the native `typeof` a value. - * - * @param {*} `val` - * @return {*} Native javascript type - */ - -module.exports = function kindOf(val) { - // primitivies - if (typeof val === 'undefined') { - return 'undefined'; - } - if (val === null) { - return 'null'; - } - if (val === true || val === false || val instanceof Boolean) { - return 'boolean'; - } - if (typeof val === 'string' || val instanceof String) { - return 'string'; - } - if (typeof val === 'number' || val instanceof Number) { - return 'number'; - } +"use strict"; - // functions - if (typeof val === 'function' || val instanceof Function) { - return 'function'; - } - // array - if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) { - return 'array'; - } +var utils = {}; - // check for instances of RegExp and Date before calling `toString` - if (val instanceof RegExp) { - return 'regexp'; - } - if (val instanceof Date) { - return 'date'; - } - // other objects - var type = toString.call(val); - if (type === '[object RegExp]') { - return 'regexp'; - } - if (type === '[object Date]') { - return 'date'; - } - if (type === '[object Arguments]') { - return 'arguments'; - } - if (type === '[object Error]') { - return 'error'; - } +/** + * Lazily required module dependencies + */ - // buffer - if (isBuffer(val)) { - return 'buffer'; - } +utils.union = __webpack_require__(565); +utils.define = __webpack_require__(517); +utils.isObj = __webpack_require__(535); +utils.staticExtend = __webpack_require__(582); - // es6: Map, WeakMap, Set, WeakSet - if (type === '[object Set]') { - return 'set'; - } - if (type === '[object WeakSet]') { - return 'weakset'; - } - if (type === '[object Map]') { - return 'map'; - } - if (type === '[object WeakMap]') { - return 'weakmap'; - } - if (type === '[object Symbol]') { - return 'symbol'; - } - // typed arrays - if (type === '[object Int8Array]') { - return 'int8array'; - } - if (type === '[object Uint8Array]') { - return 'uint8array'; - } - if (type === '[object Uint8ClampedArray]') { - return 'uint8clampedarray'; - } - if (type === '[object Int16Array]') { - return 'int16array'; - } - if (type === '[object Uint16Array]') { - return 'uint16array'; - } - if (type === '[object Int32Array]') { - return 'int32array'; - } - if (type === '[object Uint32Array]') { - return 'uint32array'; - } - if (type === '[object Float32Array]') { - return 'float32array'; - } - if (type === '[object Float64Array]') { - return 'float64array'; - } +/** + * Expose `utils` + */ - // must be a plain object - return 'object'; -}; +module.exports = utils; /***/ }), -/* 601 */ +/* 582 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -68893,8 +65745,8 @@ module.exports = function kindOf(val) { -var copy = __webpack_require__(602); -var define = __webpack_require__(594); +var copy = __webpack_require__(583); +var define = __webpack_require__(517); var util = __webpack_require__(111); /** @@ -68977,15 +65829,15 @@ module.exports = extend; /***/ }), -/* 602 */ +/* 583 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var typeOf = __webpack_require__(550); -var copyDescriptor = __webpack_require__(603); -var define = __webpack_require__(594); +var typeOf = __webpack_require__(540); +var copyDescriptor = __webpack_require__(584); +var define = __webpack_require__(517); /** * Copy static properties, prototype properties, and descriptors from one object to another. @@ -69158,7 +66010,7 @@ module.exports.has = has; /***/ }), -/* 603 */ +/* 584 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69246,16 +66098,16 @@ function isObject(val) { /***/ }), -/* 604 */ +/* 585 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var use = __webpack_require__(605); -var define = __webpack_require__(594); -var debug = __webpack_require__(607)('snapdragon:compiler'); -var utils = __webpack_require__(613); +var use = __webpack_require__(586); +var define = __webpack_require__(517); +var debug = __webpack_require__(588)('snapdragon:compiler'); +var utils = __webpack_require__(594); /** * Create a new `Compiler` with the given `options`. @@ -69409,7 +66261,7 @@ Compiler.prototype = { // source map support if (opts.sourcemap) { - var sourcemaps = __webpack_require__(632); + var sourcemaps = __webpack_require__(613); sourcemaps(this); this.mapVisit(this.ast.nodes); this.applySourceMaps(); @@ -69430,7 +66282,7 @@ module.exports = Compiler; /***/ }), -/* 605 */ +/* 586 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69443,7 +66295,7 @@ module.exports = Compiler; -var utils = __webpack_require__(606); +var utils = __webpack_require__(587); module.exports = function base(app, opts) { if (!utils.isObject(app) && typeof app !== 'function') { @@ -69558,7 +66410,7 @@ module.exports = function base(app, opts) { /***/ }), -/* 606 */ +/* 587 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -69572,8 +66424,8 @@ var utils = {}; * Lazily required module dependencies */ -utils.define = __webpack_require__(594); -utils.isObject = __webpack_require__(545); +utils.define = __webpack_require__(517); +utils.isObject = __webpack_require__(535); utils.isString = function(val) { @@ -69588,7 +66440,7 @@ module.exports = utils; /***/ }), -/* 607 */ +/* 588 */ /***/ (function(module, exports, __webpack_require__) { /** @@ -69597,14 +66449,14 @@ module.exports = utils; */ if (typeof process !== 'undefined' && process.type === 'renderer') { - module.exports = __webpack_require__(608); + module.exports = __webpack_require__(589); } else { - module.exports = __webpack_require__(611); + module.exports = __webpack_require__(592); } /***/ }), -/* 608 */ +/* 589 */ /***/ (function(module, exports, __webpack_require__) { /** @@ -69613,7 +66465,7 @@ if (typeof process !== 'undefined' && process.type === 'renderer') { * Expose `debug()` as the module. */ -exports = module.exports = __webpack_require__(609); +exports = module.exports = __webpack_require__(590); exports.log = log; exports.formatArgs = formatArgs; exports.save = save; @@ -69795,7 +66647,7 @@ function localstorage() { /***/ }), -/* 609 */ +/* 590 */ /***/ (function(module, exports, __webpack_require__) { @@ -69811,7 +66663,7 @@ exports.coerce = coerce; exports.disable = disable; exports.enable = enable; exports.enabled = enabled; -exports.humanize = __webpack_require__(610); +exports.humanize = __webpack_require__(591); /** * The currently active debug mode names, and names to skip. @@ -70003,7 +66855,7 @@ function coerce(val) { /***/ }), -/* 610 */ +/* 591 */ /***/ (function(module, exports) { /** @@ -70161,7 +67013,7 @@ function plural(ms, n, name) { /***/ }), -/* 611 */ +/* 592 */ /***/ (function(module, exports, __webpack_require__) { /** @@ -70177,7 +67029,7 @@ var util = __webpack_require__(111); * Expose `debug()` as the module. */ -exports = module.exports = __webpack_require__(609); +exports = module.exports = __webpack_require__(590); exports.init = init; exports.log = log; exports.formatArgs = formatArgs; @@ -70356,7 +67208,7 @@ function createWritableStdioStream (fd) { case 'PIPE': case 'TCP': - var net = __webpack_require__(612); + var net = __webpack_require__(593); stream = new net.Socket({ fd: fd, readable: false, @@ -70415,13 +67267,13 @@ exports.enable(load()); /***/ }), -/* 612 */ +/* 593 */ /***/ (function(module, exports) { module.exports = require("net"); /***/ }), -/* 613 */ +/* 594 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -70431,9 +67283,9 @@ module.exports = require("net"); * Module dependencies */ -exports.extend = __webpack_require__(536); -exports.SourceMap = __webpack_require__(614); -exports.sourceMapResolve = __webpack_require__(625); +exports.extend = __webpack_require__(525); +exports.SourceMap = __webpack_require__(595); +exports.sourceMapResolve = __webpack_require__(606); /** * Convert backslash in the given string to forward slashes @@ -70476,7 +67328,7 @@ exports.last = function(arr, n) { /***/ }), -/* 614 */ +/* 595 */ /***/ (function(module, exports, __webpack_require__) { /* @@ -70484,13 +67336,13 @@ exports.last = function(arr, n) { * Licensed under the New BSD license. See LICENSE.txt or: * http://opensource.org/licenses/BSD-3-Clause */ -exports.SourceMapGenerator = __webpack_require__(615).SourceMapGenerator; -exports.SourceMapConsumer = __webpack_require__(621).SourceMapConsumer; -exports.SourceNode = __webpack_require__(624).SourceNode; +exports.SourceMapGenerator = __webpack_require__(596).SourceMapGenerator; +exports.SourceMapConsumer = __webpack_require__(602).SourceMapConsumer; +exports.SourceNode = __webpack_require__(605).SourceNode; /***/ }), -/* 615 */ +/* 596 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -70500,10 +67352,10 @@ exports.SourceNode = __webpack_require__(624).SourceNode; * http://opensource.org/licenses/BSD-3-Clause */ -var base64VLQ = __webpack_require__(616); -var util = __webpack_require__(618); -var ArraySet = __webpack_require__(619).ArraySet; -var MappingList = __webpack_require__(620).MappingList; +var base64VLQ = __webpack_require__(597); +var util = __webpack_require__(599); +var ArraySet = __webpack_require__(600).ArraySet; +var MappingList = __webpack_require__(601).MappingList; /** * An instance of the SourceMapGenerator represents a source map which is @@ -70912,7 +67764,7 @@ exports.SourceMapGenerator = SourceMapGenerator; /***/ }), -/* 616 */ +/* 597 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -70952,7 +67804,7 @@ exports.SourceMapGenerator = SourceMapGenerator; * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -var base64 = __webpack_require__(617); +var base64 = __webpack_require__(598); // A single base 64 digit can contain 6 bits of data. For the base 64 variable // length quantities we use in the source map spec, the first bit is the sign, @@ -71058,7 +67910,7 @@ exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { /***/ }), -/* 617 */ +/* 598 */ /***/ (function(module, exports) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -71131,7 +67983,7 @@ exports.decode = function (charCode) { /***/ }), -/* 618 */ +/* 599 */ /***/ (function(module, exports) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -71554,7 +68406,7 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate /***/ }), -/* 619 */ +/* 600 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -71564,7 +68416,7 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate * http://opensource.org/licenses/BSD-3-Clause */ -var util = __webpack_require__(618); +var util = __webpack_require__(599); var has = Object.prototype.hasOwnProperty; var hasNativeMap = typeof Map !== "undefined"; @@ -71681,7 +68533,7 @@ exports.ArraySet = ArraySet; /***/ }), -/* 620 */ +/* 601 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -71691,7 +68543,7 @@ exports.ArraySet = ArraySet; * http://opensource.org/licenses/BSD-3-Clause */ -var util = __webpack_require__(618); +var util = __webpack_require__(599); /** * Determine whether mappingB is after mappingA with respect to generated @@ -71766,7 +68618,7 @@ exports.MappingList = MappingList; /***/ }), -/* 621 */ +/* 602 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -71776,11 +68628,11 @@ exports.MappingList = MappingList; * http://opensource.org/licenses/BSD-3-Clause */ -var util = __webpack_require__(618); -var binarySearch = __webpack_require__(622); -var ArraySet = __webpack_require__(619).ArraySet; -var base64VLQ = __webpack_require__(616); -var quickSort = __webpack_require__(623).quickSort; +var util = __webpack_require__(599); +var binarySearch = __webpack_require__(603); +var ArraySet = __webpack_require__(600).ArraySet; +var base64VLQ = __webpack_require__(597); +var quickSort = __webpack_require__(604).quickSort; function SourceMapConsumer(aSourceMap) { var sourceMap = aSourceMap; @@ -72854,7 +69706,7 @@ exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; /***/ }), -/* 622 */ +/* 603 */ /***/ (function(module, exports) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -72971,7 +69823,7 @@ exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { /***/ }), -/* 623 */ +/* 604 */ /***/ (function(module, exports) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -73091,7 +69943,7 @@ exports.quickSort = function (ary, comparator) { /***/ }), -/* 624 */ +/* 605 */ /***/ (function(module, exports, __webpack_require__) { /* -*- Mode: js; js-indent-level: 2; -*- */ @@ -73101,8 +69953,8 @@ exports.quickSort = function (ary, comparator) { * http://opensource.org/licenses/BSD-3-Clause */ -var SourceMapGenerator = __webpack_require__(615).SourceMapGenerator; -var util = __webpack_require__(618); +var SourceMapGenerator = __webpack_require__(596).SourceMapGenerator; +var util = __webpack_require__(599); // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other // operating systems these days (capturing the result). @@ -73510,17 +70362,17 @@ exports.SourceNode = SourceNode; /***/ }), -/* 625 */ +/* 606 */ /***/ (function(module, exports, __webpack_require__) { // Copyright 2014, 2015, 2016, 2017 Simon Lydell // X11 (“MIT”) Licensed. (See LICENSE.) -var sourceMappingURL = __webpack_require__(626) -var resolveUrl = __webpack_require__(627) -var decodeUriComponent = __webpack_require__(628) -var urix = __webpack_require__(630) -var atob = __webpack_require__(631) +var sourceMappingURL = __webpack_require__(607) +var resolveUrl = __webpack_require__(608) +var decodeUriComponent = __webpack_require__(609) +var urix = __webpack_require__(611) +var atob = __webpack_require__(612) @@ -73818,7 +70670,7 @@ module.exports = { /***/ }), -/* 626 */ +/* 607 */ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;// Copyright 2014 Simon Lydell @@ -73881,7 +70733,7 @@ void (function(root, factory) { /***/ }), -/* 627 */ +/* 608 */ /***/ (function(module, exports, __webpack_require__) { // Copyright 2014 Simon Lydell @@ -73899,13 +70751,13 @@ module.exports = resolveUrl /***/ }), -/* 628 */ +/* 609 */ /***/ (function(module, exports, __webpack_require__) { // Copyright 2017 Simon Lydell // X11 (“MIT”) Licensed. (See LICENSE.) -var decodeUriComponent = __webpack_require__(629) +var decodeUriComponent = __webpack_require__(610) function customDecodeUriComponent(string) { // `decodeUriComponent` turns `+` into ` `, but that's not wanted. @@ -73916,7 +70768,7 @@ module.exports = customDecodeUriComponent /***/ }), -/* 629 */ +/* 610 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -74017,7 +70869,7 @@ module.exports = function (encodedURI) { /***/ }), -/* 630 */ +/* 611 */ /***/ (function(module, exports, __webpack_require__) { // Copyright 2014 Simon Lydell @@ -74040,7 +70892,7 @@ module.exports = urix /***/ }), -/* 631 */ +/* 612 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -74054,7 +70906,7 @@ module.exports = atob.atob = atob; /***/ }), -/* 632 */ +/* 613 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -74062,8 +70914,8 @@ module.exports = atob.atob = atob; var fs = __webpack_require__(133); var path = __webpack_require__(4); -var define = __webpack_require__(594); -var utils = __webpack_require__(613); +var define = __webpack_require__(517); +var utils = __webpack_require__(594); /** * Expose `mixin()`. @@ -74206,19 +71058,19 @@ exports.comment = function(node) { /***/ }), -/* 633 */ +/* 614 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var use = __webpack_require__(605); +var use = __webpack_require__(586); var util = __webpack_require__(111); -var Cache = __webpack_require__(634); -var define = __webpack_require__(594); -var debug = __webpack_require__(607)('snapdragon:parser'); -var Position = __webpack_require__(635); -var utils = __webpack_require__(613); +var Cache = __webpack_require__(615); +var define = __webpack_require__(517); +var debug = __webpack_require__(588)('snapdragon:parser'); +var Position = __webpack_require__(616); +var utils = __webpack_require__(594); /** * Create a new `Parser` with the given `input` and `options`. @@ -74746,7 +71598,7 @@ module.exports = Parser; /***/ }), -/* 634 */ +/* 615 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -74853,13 +71705,13 @@ MapCache.prototype.del = function mapDelete(key) { /***/ }), -/* 635 */ +/* 616 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var define = __webpack_require__(594); +var define = __webpack_require__(517); /** * Store position for a node @@ -74874,16 +71726,16 @@ module.exports = function Position(start, parser) { /***/ }), -/* 636 */ +/* 617 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var safe = __webpack_require__(637); -var define = __webpack_require__(643); -var extend = __webpack_require__(644); -var not = __webpack_require__(646); +var safe = __webpack_require__(618); +var define = __webpack_require__(624); +var extend = __webpack_require__(625); +var not = __webpack_require__(627); var MAX_LENGTH = 1024 * 64; /** @@ -75036,10 +71888,10 @@ module.exports.makeRe = makeRe; /***/ }), -/* 637 */ +/* 618 */ /***/ (function(module, exports, __webpack_require__) { -var parse = __webpack_require__(638); +var parse = __webpack_require__(619); var types = parse.types; module.exports = function (re, opts) { @@ -75085,13 +71937,13 @@ function isRegExp (x) { /***/ }), -/* 638 */ +/* 619 */ /***/ (function(module, exports, __webpack_require__) { -var util = __webpack_require__(639); -var types = __webpack_require__(640); -var sets = __webpack_require__(641); -var positions = __webpack_require__(642); +var util = __webpack_require__(620); +var types = __webpack_require__(621); +var sets = __webpack_require__(622); +var positions = __webpack_require__(623); module.exports = function(regexpStr) { @@ -75373,11 +72225,11 @@ module.exports.types = types; /***/ }), -/* 639 */ +/* 620 */ /***/ (function(module, exports, __webpack_require__) { -var types = __webpack_require__(640); -var sets = __webpack_require__(641); +var types = __webpack_require__(621); +var sets = __webpack_require__(622); // All of these are private and only used by randexp. @@ -75490,7 +72342,7 @@ exports.error = function(regexp, msg) { /***/ }), -/* 640 */ +/* 621 */ /***/ (function(module, exports) { module.exports = { @@ -75506,10 +72358,10 @@ module.exports = { /***/ }), -/* 641 */ +/* 622 */ /***/ (function(module, exports, __webpack_require__) { -var types = __webpack_require__(640); +var types = __webpack_require__(621); var INTS = function() { return [{ type: types.RANGE , from: 48, to: 57 }]; @@ -75594,10 +72446,10 @@ exports.anyChar = function() { /***/ }), -/* 642 */ +/* 623 */ /***/ (function(module, exports, __webpack_require__) { -var types = __webpack_require__(640); +var types = __webpack_require__(621); exports.wordBoundary = function() { return { type: types.POSITION, value: 'b' }; @@ -75617,7 +72469,7 @@ exports.end = function() { /***/ }), -/* 643 */ +/* 624 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -75630,8 +72482,8 @@ exports.end = function() { -var isobject = __webpack_require__(545); -var isDescriptor = __webpack_require__(559); +var isobject = __webpack_require__(535); +var isDescriptor = __webpack_require__(547); var define = (typeof Reflect !== 'undefined' && Reflect.defineProperty) ? Reflect.defineProperty : Object.defineProperty; @@ -75662,14 +72514,14 @@ module.exports = function defineProperty(obj, key, val) { /***/ }), -/* 644 */ +/* 625 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(645); -var assignSymbols = __webpack_require__(546); +var isExtendable = __webpack_require__(626); +var assignSymbols = __webpack_require__(536); module.exports = Object.assign || function(obj/*, objects*/) { if (obj === null || typeof obj === 'undefined') { @@ -75729,7 +72581,7 @@ function isEnum(obj, key) { /***/ }), -/* 645 */ +/* 626 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -75742,7 +72594,7 @@ function isEnum(obj, key) { -var isPlainObject = __webpack_require__(544); +var isPlainObject = __webpack_require__(534); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -75750,14 +72602,14 @@ module.exports = function isExtendable(val) { /***/ }), -/* 646 */ +/* 627 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var extend = __webpack_require__(644); -var safe = __webpack_require__(637); +var extend = __webpack_require__(625); +var safe = __webpack_require__(618); /** * The main export is a function that takes a `pattern` string and an `options` object. @@ -75829,14 +72681,14 @@ module.exports = toRegex; /***/ }), -/* 647 */ +/* 628 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var nanomatch = __webpack_require__(648); -var extglob = __webpack_require__(664); +var nanomatch = __webpack_require__(629); +var extglob = __webpack_require__(644); module.exports = function(snapdragon) { var compilers = snapdragon.compiler.compilers; @@ -75913,7 +72765,7 @@ function escapeExtglobs(compiler) { /***/ }), -/* 648 */ +/* 629 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -75924,17 +72776,17 @@ function escapeExtglobs(compiler) { */ var util = __webpack_require__(111); -var toRegex = __webpack_require__(649); -var extend = __webpack_require__(650); +var toRegex = __webpack_require__(516); +var extend = __webpack_require__(630); /** * Local dependencies */ -var compilers = __webpack_require__(652); -var parsers = __webpack_require__(653); -var cache = __webpack_require__(656); -var utils = __webpack_require__(658); +var compilers = __webpack_require__(632); +var parsers = __webpack_require__(633); +var cache = __webpack_require__(636); +var utils = __webpack_require__(638); var MAX_LENGTH = 1024 * 64; /** @@ -76758,169 +73610,14 @@ module.exports = nanomatch; /***/ }), -/* 649 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var define = __webpack_require__(594); -var extend = __webpack_require__(536); -var not = __webpack_require__(535); -var MAX_LENGTH = 1024 * 64; - -/** - * Session cache - */ - -var cache = {}; - -/** - * Create a regular expression from the given `pattern` string. - * - * @param {String|RegExp} `pattern` Pattern can be a string or regular expression. - * @param {Object} `options` - * @return {RegExp} - * @api public - */ - -module.exports = function(patterns, options) { - if (!Array.isArray(patterns)) { - return makeRe(patterns, options); - } - return makeRe(patterns.join('|'), options); -}; - -/** - * Create a regular expression from the given `pattern` string. - * - * @param {String|RegExp} `pattern` Pattern can be a string or regular expression. - * @param {Object} `options` - * @return {RegExp} - * @api public - */ - -function makeRe(pattern, options) { - if (pattern instanceof RegExp) { - return pattern; - } - - if (typeof pattern !== 'string') { - throw new TypeError('expected a string'); - } - - if (pattern.length > MAX_LENGTH) { - throw new Error('expected pattern to be less than ' + MAX_LENGTH + ' characters'); - } - - var key = pattern; - // do this before shallow cloning options, it's a lot faster - if (!options || (options && options.cache !== false)) { - key = createKey(pattern, options); - - if (cache.hasOwnProperty(key)) { - return cache[key]; - } - } - - var opts = extend({}, options); - if (opts.contains === true) { - if (opts.negate === true) { - opts.strictNegate = false; - } else { - opts.strict = false; - } - } - - if (opts.strict === false) { - opts.strictOpen = false; - opts.strictClose = false; - } - - var open = opts.strictOpen !== false ? '^' : ''; - var close = opts.strictClose !== false ? '$' : ''; - var flags = opts.flags || ''; - var regex; - - if (opts.nocase === true && !/i/.test(flags)) { - flags += 'i'; - } - - try { - if (opts.negate || typeof opts.strictNegate === 'boolean') { - pattern = not.create(pattern, opts); - } - var str = open + '(?:' + pattern + ')' + close; - regex = new RegExp(str, flags); - } catch (err) { - if (opts.strictErrors === true) { - err.key = key; - err.pattern = pattern; - err.originalOptions = options; - err.createdOptions = opts; - throw err; - } - - try { - regex = new RegExp('^' + pattern.replace(/(\W)/g, '\\$1') + '$'); - } catch (err) { - regex = /.^/; //<= match nothing - } - } - - if (opts.cache !== false) { - cacheRegex(regex, key, pattern, opts); - } - return regex; -} - -/** - * Cache generated regex. This can result in dramatic speed improvements - * and simplify debugging by adding options and pattern to the regex. It can be - * disabled by passing setting `options.cache` to false. - */ - -function cacheRegex(regex, key, pattern, options) { - define(regex, 'cached', true); - define(regex, 'pattern', pattern); - define(regex, 'options', options); - define(regex, 'key', key); - cache[key] = regex; -} - -/** - * Create the key to use for memoization. The key is generated - * by iterating over the options and concatenating key-value pairs - * to the pattern string. - */ - -function createKey(pattern, options) { - if (!options) return pattern; - var key = pattern; - for (var prop in options) { - if (options.hasOwnProperty(prop)) { - key += ';' + prop + '=' + String(options[prop]); - } - } - return key; -} - -/** - * Expose `makeRe` - */ - -module.exports.makeRe = makeRe; - - -/***/ }), -/* 650 */ +/* 630 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var isExtendable = __webpack_require__(651); -var assignSymbols = __webpack_require__(546); +var isExtendable = __webpack_require__(631); +var assignSymbols = __webpack_require__(536); module.exports = Object.assign || function(obj/*, objects*/) { if (obj === null || typeof obj === 'undefined') { @@ -76980,7 +73677,7 @@ function isEnum(obj, key) { /***/ }), -/* 651 */ +/* 631 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -76993,7 +73690,7 @@ function isEnum(obj, key) { -var isPlainObject = __webpack_require__(544); +var isPlainObject = __webpack_require__(534); module.exports = function isExtendable(val) { return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); @@ -77001,7 +73698,7 @@ module.exports = function isExtendable(val) { /***/ }), -/* 652 */ +/* 632 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -77347,15 +74044,15 @@ module.exports = function(nanomatch, options) { /***/ }), -/* 653 */ +/* 633 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var regexNot = __webpack_require__(535); -var toRegex = __webpack_require__(649); -var isOdd = __webpack_require__(654); +var regexNot = __webpack_require__(527); +var toRegex = __webpack_require__(516); +var isOdd = __webpack_require__(634); /** * Characters to use in negation regex (we want to "not" match @@ -77741,7 +74438,7 @@ module.exports.not = NOT_REGEX; /***/ }), -/* 654 */ +/* 634 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -77754,7 +74451,7 @@ module.exports.not = NOT_REGEX; -var isNumber = __webpack_require__(655); +var isNumber = __webpack_require__(635); module.exports = function isOdd(i) { if (!isNumber(i)) { @@ -77768,7 +74465,7 @@ module.exports = function isOdd(i) { /***/ }), -/* 655 */ +/* 635 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -77796,14 +74493,14 @@ module.exports = function isNumber(num) { /***/ }), -/* 656 */ +/* 636 */ /***/ (function(module, exports, __webpack_require__) { -module.exports = new (__webpack_require__(657))(); +module.exports = new (__webpack_require__(637))(); /***/ }), -/* 657 */ +/* 637 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -77816,7 +74513,7 @@ module.exports = new (__webpack_require__(657))(); -var MapCache = __webpack_require__(634); +var MapCache = __webpack_require__(615); /** * Create a new `FragmentCache` with an optional object to use for `caches`. @@ -77938,7 +74635,7 @@ exports = module.exports = FragmentCache; /***/ }), -/* 658 */ +/* 638 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -77951,14 +74648,14 @@ var path = __webpack_require__(4); * Module dependencies */ -var isWindows = __webpack_require__(659)(); -var Snapdragon = __webpack_require__(567); -utils.define = __webpack_require__(660); -utils.diff = __webpack_require__(661); -utils.extend = __webpack_require__(650); -utils.pick = __webpack_require__(662); -utils.typeOf = __webpack_require__(663); -utils.unique = __webpack_require__(538); +var isWindows = __webpack_require__(639)(); +var Snapdragon = __webpack_require__(555); +utils.define = __webpack_require__(640); +utils.diff = __webpack_require__(641); +utils.extend = __webpack_require__(630); +utils.pick = __webpack_require__(642); +utils.typeOf = __webpack_require__(643); +utils.unique = __webpack_require__(528); /** * Returns true if the given value is effectively an empty string @@ -78324,7 +75021,7 @@ utils.unixify = function(options) { /***/ }), -/* 659 */ +/* 639 */ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! @@ -78352,7 +75049,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ /***/ }), -/* 660 */ +/* 640 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -78365,8 +75062,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ -var isobject = __webpack_require__(545); -var isDescriptor = __webpack_require__(559); +var isobject = __webpack_require__(535); +var isDescriptor = __webpack_require__(547); var define = (typeof Reflect !== 'undefined' && Reflect.defineProperty) ? Reflect.defineProperty : Object.defineProperty; @@ -78397,7 +75094,7 @@ module.exports = function defineProperty(obj, key, val) { /***/ }), -/* 661 */ +/* 641 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -78451,7 +75148,7 @@ function diffArray(one, two) { /***/ }), -/* 662 */ +/* 642 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -78464,7 +75161,7 @@ function diffArray(one, two) { -var isObject = __webpack_require__(545); +var isObject = __webpack_require__(535); module.exports = function pick(obj, keys) { if (!isObject(obj) && typeof obj !== 'function') { @@ -78493,7 +75190,7 @@ module.exports = function pick(obj, keys) { /***/ }), -/* 663 */ +/* 643 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -78628,7 +75325,7 @@ function isBuffer(val) { /***/ }), -/* 664 */ +/* 644 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -78638,18 +75335,18 @@ function isBuffer(val) { * Module dependencies */ -var extend = __webpack_require__(536); -var unique = __webpack_require__(538); -var toRegex = __webpack_require__(649); +var extend = __webpack_require__(525); +var unique = __webpack_require__(528); +var toRegex = __webpack_require__(516); /** * Local dependencies */ -var compilers = __webpack_require__(665); -var parsers = __webpack_require__(676); -var Extglob = __webpack_require__(679); -var utils = __webpack_require__(678); +var compilers = __webpack_require__(645); +var parsers = __webpack_require__(656); +var Extglob = __webpack_require__(659); +var utils = __webpack_require__(658); var MAX_LENGTH = 1024 * 64; /** @@ -78966,13 +75663,13 @@ module.exports = extglob; /***/ }), -/* 665 */ +/* 645 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var brackets = __webpack_require__(666); +var brackets = __webpack_require__(646); /** * Extglob compilers @@ -79142,7 +75839,7 @@ module.exports = function(extglob) { /***/ }), -/* 666 */ +/* 646 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -79152,17 +75849,17 @@ module.exports = function(extglob) { * Local dependencies */ -var compilers = __webpack_require__(667); -var parsers = __webpack_require__(669); +var compilers = __webpack_require__(647); +var parsers = __webpack_require__(649); /** * Module dependencies */ -var debug = __webpack_require__(671)('expand-brackets'); -var extend = __webpack_require__(536); -var Snapdragon = __webpack_require__(567); -var toRegex = __webpack_require__(649); +var debug = __webpack_require__(651)('expand-brackets'); +var extend = __webpack_require__(525); +var Snapdragon = __webpack_require__(555); +var toRegex = __webpack_require__(516); /** * Parses the given POSIX character class `pattern` and returns a @@ -79360,13 +76057,13 @@ module.exports = brackets; /***/ }), -/* 667 */ +/* 647 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var posix = __webpack_require__(668); +var posix = __webpack_require__(648); module.exports = function(brackets) { brackets.compiler @@ -79454,7 +76151,7 @@ module.exports = function(brackets) { /***/ }), -/* 668 */ +/* 648 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -79483,14 +76180,14 @@ module.exports = { /***/ }), -/* 669 */ +/* 649 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var utils = __webpack_require__(670); -var define = __webpack_require__(594); +var utils = __webpack_require__(650); +var define = __webpack_require__(517); /** * Text regex @@ -79709,14 +76406,14 @@ module.exports.TEXT_REGEX = TEXT_REGEX; /***/ }), -/* 670 */ +/* 650 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var toRegex = __webpack_require__(649); -var regexNot = __webpack_require__(535); +var toRegex = __webpack_require__(516); +var regexNot = __webpack_require__(527); var cached; /** @@ -79750,7 +76447,7 @@ exports.createRegex = function(pattern, include) { /***/ }), -/* 671 */ +/* 651 */ /***/ (function(module, exports, __webpack_require__) { /** @@ -79759,14 +76456,14 @@ exports.createRegex = function(pattern, include) { */ if (typeof process !== 'undefined' && process.type === 'renderer') { - module.exports = __webpack_require__(672); + module.exports = __webpack_require__(652); } else { - module.exports = __webpack_require__(675); + module.exports = __webpack_require__(655); } /***/ }), -/* 672 */ +/* 652 */ /***/ (function(module, exports, __webpack_require__) { /** @@ -79775,7 +76472,7 @@ if (typeof process !== 'undefined' && process.type === 'renderer') { * Expose `debug()` as the module. */ -exports = module.exports = __webpack_require__(673); +exports = module.exports = __webpack_require__(653); exports.log = log; exports.formatArgs = formatArgs; exports.save = save; @@ -79957,7 +76654,7 @@ function localstorage() { /***/ }), -/* 673 */ +/* 653 */ /***/ (function(module, exports, __webpack_require__) { @@ -79973,7 +76670,7 @@ exports.coerce = coerce; exports.disable = disable; exports.enable = enable; exports.enabled = enabled; -exports.humanize = __webpack_require__(674); +exports.humanize = __webpack_require__(654); /** * The currently active debug mode names, and names to skip. @@ -80165,7 +76862,7 @@ function coerce(val) { /***/ }), -/* 674 */ +/* 654 */ /***/ (function(module, exports) { /** @@ -80323,7 +77020,7 @@ function plural(ms, n, name) { /***/ }), -/* 675 */ +/* 655 */ /***/ (function(module, exports, __webpack_require__) { /** @@ -80339,7 +77036,7 @@ var util = __webpack_require__(111); * Expose `debug()` as the module. */ -exports = module.exports = __webpack_require__(673); +exports = module.exports = __webpack_require__(653); exports.init = init; exports.log = log; exports.formatArgs = formatArgs; @@ -80518,7 +77215,7 @@ function createWritableStdioStream (fd) { case 'PIPE': case 'TCP': - var net = __webpack_require__(612); + var net = __webpack_require__(593); stream = new net.Socket({ fd: fd, readable: false, @@ -80577,15 +77274,15 @@ exports.enable(load()); /***/ }), -/* 676 */ +/* 656 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var brackets = __webpack_require__(666); -var define = __webpack_require__(677); -var utils = __webpack_require__(678); +var brackets = __webpack_require__(646); +var define = __webpack_require__(657); +var utils = __webpack_require__(658); /** * Characters to use in text regex (we want to "not" match @@ -80740,7 +77437,7 @@ module.exports = parsers; /***/ }), -/* 677 */ +/* 657 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -80753,7 +77450,7 @@ module.exports = parsers; -var isDescriptor = __webpack_require__(559); +var isDescriptor = __webpack_require__(547); module.exports = function defineProperty(obj, prop, val) { if (typeof obj !== 'object' && typeof obj !== 'function') { @@ -80778,14 +77475,14 @@ module.exports = function defineProperty(obj, prop, val) { /***/ }), -/* 678 */ +/* 658 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var regex = __webpack_require__(535); -var Cache = __webpack_require__(657); +var regex = __webpack_require__(527); +var Cache = __webpack_require__(637); /** * Utils @@ -80854,7 +77551,7 @@ utils.createRegex = function(str) { /***/ }), -/* 679 */ +/* 659 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -80864,16 +77561,16 @@ utils.createRegex = function(str) { * Module dependencies */ -var Snapdragon = __webpack_require__(567); -var define = __webpack_require__(677); -var extend = __webpack_require__(536); +var Snapdragon = __webpack_require__(555); +var define = __webpack_require__(657); +var extend = __webpack_require__(525); /** * Local dependencies */ -var compilers = __webpack_require__(665); -var parsers = __webpack_require__(676); +var compilers = __webpack_require__(645); +var parsers = __webpack_require__(656); /** * Customize Snapdragon parser and renderer @@ -80939,16 +77636,16 @@ module.exports = Extglob; /***/ }), -/* 680 */ +/* 660 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -var extglob = __webpack_require__(664); -var nanomatch = __webpack_require__(648); -var regexNot = __webpack_require__(535); -var toRegex = __webpack_require__(636); +var extglob = __webpack_require__(644); +var nanomatch = __webpack_require__(629); +var regexNot = __webpack_require__(527); +var toRegex = __webpack_require__(617); var not; /** @@ -81029,14 +77726,14 @@ function textRegex(pattern) { /***/ }), -/* 681 */ +/* 661 */ /***/ (function(module, exports, __webpack_require__) { -module.exports = new (__webpack_require__(657))(); +module.exports = new (__webpack_require__(637))(); /***/ }), -/* 682 */ +/* 662 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81049,13 +77746,13 @@ var path = __webpack_require__(4); * Module dependencies */ -var Snapdragon = __webpack_require__(567); -utils.define = __webpack_require__(643); -utils.diff = __webpack_require__(661); -utils.extend = __webpack_require__(644); -utils.pick = __webpack_require__(662); -utils.typeOf = __webpack_require__(683); -utils.unique = __webpack_require__(538); +var Snapdragon = __webpack_require__(555); +utils.define = __webpack_require__(624); +utils.diff = __webpack_require__(641); +utils.extend = __webpack_require__(625); +utils.pick = __webpack_require__(642); +utils.typeOf = __webpack_require__(663); +utils.unique = __webpack_require__(528); /** * Returns true if the platform is windows, or `path.sep` is `\\`. @@ -81352,7 +78049,7 @@ utils.unixify = function(options) { /***/ }), -/* 683 */ +/* 663 */ /***/ (function(module, exports) { var toString = Object.prototype.toString; @@ -81487,7 +78184,7 @@ function isBuffer(val) { /***/ }), -/* 684 */ +/* 664 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81506,9 +78203,9 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var readdir = __webpack_require__(685); -var reader_1 = __webpack_require__(698); -var fs_stream_1 = __webpack_require__(702); +var readdir = __webpack_require__(665); +var reader_1 = __webpack_require__(678); +var fs_stream_1 = __webpack_require__(682); var ReaderAsync = /** @class */ (function (_super) { __extends(ReaderAsync, _super); function ReaderAsync() { @@ -81569,15 +78266,15 @@ exports.default = ReaderAsync; /***/ }), -/* 685 */ +/* 665 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const readdirSync = __webpack_require__(686); -const readdirAsync = __webpack_require__(694); -const readdirStream = __webpack_require__(697); +const readdirSync = __webpack_require__(666); +const readdirAsync = __webpack_require__(674); +const readdirStream = __webpack_require__(677); module.exports = exports = readdirAsyncPath; exports.readdir = exports.readdirAsync = exports.async = readdirAsyncPath; @@ -81661,7 +78358,7 @@ function readdirStreamStat (dir, options) { /***/ }), -/* 686 */ +/* 666 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81669,11 +78366,11 @@ function readdirStreamStat (dir, options) { module.exports = readdirSync; -const DirectoryReader = __webpack_require__(687); +const DirectoryReader = __webpack_require__(667); let syncFacade = { - fs: __webpack_require__(692), - forEach: __webpack_require__(693), + fs: __webpack_require__(672), + forEach: __webpack_require__(673), sync: true }; @@ -81702,7 +78399,7 @@ function readdirSync (dir, options, internalOptions) { /***/ }), -/* 687 */ +/* 667 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -81711,9 +78408,9 @@ function readdirSync (dir, options, internalOptions) { const Readable = __webpack_require__(137).Readable; const EventEmitter = __webpack_require__(155).EventEmitter; const path = __webpack_require__(4); -const normalizeOptions = __webpack_require__(688); -const stat = __webpack_require__(690); -const call = __webpack_require__(691); +const normalizeOptions = __webpack_require__(668); +const stat = __webpack_require__(670); +const call = __webpack_require__(671); /** * Asynchronously reads the contents of a directory and streams the results @@ -82089,14 +78786,14 @@ module.exports = DirectoryReader; /***/ }), -/* 688 */ +/* 668 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(4); -const globToRegExp = __webpack_require__(689); +const globToRegExp = __webpack_require__(669); module.exports = normalizeOptions; @@ -82273,7 +78970,7 @@ function normalizeOptions (options, internalOptions) { /***/ }), -/* 689 */ +/* 669 */ /***/ (function(module, exports) { module.exports = function (glob, opts) { @@ -82410,13 +79107,13 @@ module.exports = function (glob, opts) { /***/ }), -/* 690 */ +/* 670 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const call = __webpack_require__(691); +const call = __webpack_require__(671); module.exports = stat; @@ -82491,7 +79188,7 @@ function symlinkStat (fs, path, lstats, callback) { /***/ }), -/* 691 */ +/* 671 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82552,14 +79249,14 @@ function callOnce (fn) { /***/ }), -/* 692 */ +/* 672 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(133); -const call = __webpack_require__(691); +const call = __webpack_require__(671); /** * A facade around {@link fs.readdirSync} that allows it to be called @@ -82623,7 +79320,7 @@ exports.lstat = function (path, callback) { /***/ }), -/* 693 */ +/* 673 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82652,7 +79349,7 @@ function syncForEach (array, iterator, done) { /***/ }), -/* 694 */ +/* 674 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82660,12 +79357,12 @@ function syncForEach (array, iterator, done) { module.exports = readdirAsync; -const maybe = __webpack_require__(695); -const DirectoryReader = __webpack_require__(687); +const maybe = __webpack_require__(675); +const DirectoryReader = __webpack_require__(667); let asyncFacade = { fs: __webpack_require__(133), - forEach: __webpack_require__(696), + forEach: __webpack_require__(676), async: true }; @@ -82707,7 +79404,7 @@ function readdirAsync (dir, options, callback, internalOptions) { /***/ }), -/* 695 */ +/* 675 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82734,7 +79431,7 @@ module.exports = function maybe (cb, promise) { /***/ }), -/* 696 */ +/* 676 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82770,7 +79467,7 @@ function asyncForEach (array, iterator, done) { /***/ }), -/* 697 */ +/* 677 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82778,11 +79475,11 @@ function asyncForEach (array, iterator, done) { module.exports = readdirStream; -const DirectoryReader = __webpack_require__(687); +const DirectoryReader = __webpack_require__(667); let streamFacade = { fs: __webpack_require__(133), - forEach: __webpack_require__(696), + forEach: __webpack_require__(676), async: true }; @@ -82802,16 +79499,16 @@ function readdirStream (dir, options, internalOptions) { /***/ }), -/* 698 */ +/* 678 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var path = __webpack_require__(4); -var deep_1 = __webpack_require__(699); -var entry_1 = __webpack_require__(701); -var pathUtil = __webpack_require__(700); +var deep_1 = __webpack_require__(679); +var entry_1 = __webpack_require__(681); +var pathUtil = __webpack_require__(680); var Reader = /** @class */ (function () { function Reader(options) { this.options = options; @@ -82877,14 +79574,14 @@ exports.default = Reader; /***/ }), -/* 699 */ +/* 679 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var pathUtils = __webpack_require__(700); -var patternUtils = __webpack_require__(517); +var pathUtils = __webpack_require__(680); +var patternUtils = __webpack_require__(509); var DeepFilter = /** @class */ (function () { function DeepFilter(options, micromatchOptions) { this.options = options; @@ -82967,7 +79664,7 @@ exports.default = DeepFilter; /***/ }), -/* 700 */ +/* 680 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -82998,14 +79695,14 @@ exports.makeAbsolute = makeAbsolute; /***/ }), -/* 701 */ +/* 681 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var pathUtils = __webpack_require__(700); -var patternUtils = __webpack_require__(517); +var pathUtils = __webpack_require__(680); +var patternUtils = __webpack_require__(509); var EntryFilter = /** @class */ (function () { function EntryFilter(options, micromatchOptions) { this.options = options; @@ -83090,7 +79787,7 @@ exports.default = EntryFilter; /***/ }), -/* 702 */ +/* 682 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83110,8 +79807,8 @@ var __extends = (this && this.__extends) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); var stream = __webpack_require__(137); -var fsStat = __webpack_require__(703); -var fs_1 = __webpack_require__(707); +var fsStat = __webpack_require__(683); +var fs_1 = __webpack_require__(687); var FileSystemStream = /** @class */ (function (_super) { __extends(FileSystemStream, _super); function FileSystemStream() { @@ -83161,14 +79858,14 @@ exports.default = FileSystemStream; /***/ }), -/* 703 */ +/* 683 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const optionsManager = __webpack_require__(704); -const statProvider = __webpack_require__(706); +const optionsManager = __webpack_require__(684); +const statProvider = __webpack_require__(686); /** * Asynchronous API. */ @@ -83199,13 +79896,13 @@ exports.statSync = statSync; /***/ }), -/* 704 */ +/* 684 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -const fsAdapter = __webpack_require__(705); +const fsAdapter = __webpack_require__(685); function prepare(opts) { const options = Object.assign({ fs: fsAdapter.getFileSystemAdapter(opts ? opts.fs : undefined), @@ -83218,7 +79915,7 @@ exports.prepare = prepare; /***/ }), -/* 705 */ +/* 685 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83241,7 +79938,7 @@ exports.getFileSystemAdapter = getFileSystemAdapter; /***/ }), -/* 706 */ +/* 686 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83293,7 +79990,7 @@ exports.isFollowedSymlink = isFollowedSymlink; /***/ }), -/* 707 */ +/* 687 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83324,7 +80021,7 @@ exports.default = FileSystem; /***/ }), -/* 708 */ +/* 688 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83344,9 +80041,9 @@ var __extends = (this && this.__extends) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); var stream = __webpack_require__(137); -var readdir = __webpack_require__(685); -var reader_1 = __webpack_require__(698); -var fs_stream_1 = __webpack_require__(702); +var readdir = __webpack_require__(665); +var reader_1 = __webpack_require__(678); +var fs_stream_1 = __webpack_require__(682); var TransformStream = /** @class */ (function (_super) { __extends(TransformStream, _super); function TransformStream(reader) { @@ -83414,7 +80111,7 @@ exports.default = ReaderStream; /***/ }), -/* 709 */ +/* 689 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83433,9 +80130,9 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var readdir = __webpack_require__(685); -var reader_1 = __webpack_require__(698); -var fs_sync_1 = __webpack_require__(710); +var readdir = __webpack_require__(665); +var reader_1 = __webpack_require__(678); +var fs_sync_1 = __webpack_require__(690); var ReaderSync = /** @class */ (function (_super) { __extends(ReaderSync, _super); function ReaderSync() { @@ -83495,7 +80192,7 @@ exports.default = ReaderSync; /***/ }), -/* 710 */ +/* 690 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83514,8 +80211,8 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var fsStat = __webpack_require__(703); -var fs_1 = __webpack_require__(707); +var fsStat = __webpack_require__(683); +var fs_1 = __webpack_require__(687); var FileSystemSync = /** @class */ (function (_super) { __extends(FileSystemSync, _super); function FileSystemSync() { @@ -83561,7 +80258,7 @@ exports.default = FileSystemSync; /***/ }), -/* 711 */ +/* 691 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83577,13 +80274,13 @@ exports.flatten = flatten; /***/ }), -/* 712 */ +/* 692 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var merge2 = __webpack_require__(292); +var merge2 = __webpack_require__(288); /** * Merge multiple streams and propagate their errors into one stream in parallel. */ @@ -83598,13 +80295,13 @@ exports.merge = merge; /***/ }), -/* 713 */ +/* 693 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(4); -const pathType = __webpack_require__(714); +const pathType = __webpack_require__(694); const getExtensions = extensions => extensions.length > 1 ? `{${extensions.join(',')}}` : extensions[0]; @@ -83670,13 +80367,13 @@ module.exports.sync = (input, opts) => { /***/ }), -/* 714 */ +/* 694 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(133); -const pify = __webpack_require__(715); +const pify = __webpack_require__(695); function type(fn, fn2, fp) { if (typeof fp !== 'string') { @@ -83719,7 +80416,7 @@ exports.symlinkSync = typeSync.bind(null, 'lstatSync', 'isSymbolicLink'); /***/ }), -/* 715 */ +/* 695 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -83810,17 +80507,17 @@ module.exports = (obj, opts) => { /***/ }), -/* 716 */ +/* 696 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const fs = __webpack_require__(133); const path = __webpack_require__(4); -const fastGlob = __webpack_require__(513); -const gitIgnore = __webpack_require__(717); -const pify = __webpack_require__(718); -const slash = __webpack_require__(719); +const fastGlob = __webpack_require__(505); +const gitIgnore = __webpack_require__(697); +const pify = __webpack_require__(698); +const slash = __webpack_require__(699); const DEFAULT_IGNORE = [ '**/node_modules/**', @@ -83918,7 +80615,7 @@ module.exports.sync = options => { /***/ }), -/* 717 */ +/* 697 */ /***/ (function(module, exports) { // A simple implementation of make-array @@ -84387,7 +81084,7 @@ module.exports = options => new IgnoreBase(options) /***/ }), -/* 718 */ +/* 698 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -84462,7 +81159,7 @@ module.exports = (input, options) => { /***/ }), -/* 719 */ +/* 699 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -84480,7 +81177,7 @@ module.exports = input => { /***/ }), -/* 720 */ +/* 700 */ /***/ (function(module, exports, __webpack_require__) { /*! @@ -84490,7 +81187,7 @@ module.exports = input => { * Released under the MIT License. */ -var isExtglob = __webpack_require__(303); +var isExtglob = __webpack_require__(299); var chars = { '{': '}', '(': ')', '[': ']'}; var strictRegex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/; var relaxedRegex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/; @@ -84534,17 +81231,17 @@ module.exports = function isGlob(str, options) { /***/ }), -/* 721 */ +/* 701 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const path = __webpack_require__(4); const {constants: fsConstants} = __webpack_require__(133); -const pEvent = __webpack_require__(722); -const CpFileError = __webpack_require__(725); -const fs = __webpack_require__(729); -const ProgressEmitter = __webpack_require__(732); +const pEvent = __webpack_require__(702); +const CpFileError = __webpack_require__(705); +const fs = __webpack_require__(709); +const ProgressEmitter = __webpack_require__(712); const cpFileAsync = async (source, destination, options, progressEmitter) => { let readError; @@ -84658,12 +81355,12 @@ module.exports.sync = (source, destination, options) => { /***/ }), -/* 722 */ +/* 702 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const pTimeout = __webpack_require__(723); +const pTimeout = __webpack_require__(703); const symbolAsyncIterator = Symbol.asyncIterator || '@@asyncIterator'; @@ -84954,12 +81651,12 @@ module.exports.iterator = (emitter, event, options) => { /***/ }), -/* 723 */ +/* 703 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const pFinally = __webpack_require__(724); +const pFinally = __webpack_require__(704); class TimeoutError extends Error { constructor(message) { @@ -85005,7 +81702,7 @@ module.exports.TimeoutError = TimeoutError; /***/ }), -/* 724 */ +/* 704 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -85027,12 +81724,12 @@ module.exports = (promise, onFinally) => { /***/ }), -/* 725 */ +/* 705 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const NestedError = __webpack_require__(726); +const NestedError = __webpack_require__(706); class CpFileError extends NestedError { constructor(message, nested) { @@ -85046,10 +81743,10 @@ module.exports = CpFileError; /***/ }), -/* 726 */ +/* 706 */ /***/ (function(module, exports, __webpack_require__) { -var inherits = __webpack_require__(727); +var inherits = __webpack_require__(707); var NestedError = function (message, nested) { this.nested = nested; @@ -85100,7 +81797,7 @@ module.exports = NestedError; /***/ }), -/* 727 */ +/* 707 */ /***/ (function(module, exports, __webpack_require__) { try { @@ -85108,12 +81805,12 @@ try { if (typeof util.inherits !== 'function') throw ''; module.exports = util.inherits; } catch (e) { - module.exports = __webpack_require__(728); + module.exports = __webpack_require__(708); } /***/ }), -/* 728 */ +/* 708 */ /***/ (function(module, exports) { if (typeof Object.create === 'function') { @@ -85142,16 +81839,16 @@ if (typeof Object.create === 'function') { /***/ }), -/* 729 */ +/* 709 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; const {promisify} = __webpack_require__(111); const fs = __webpack_require__(132); -const makeDir = __webpack_require__(730); -const pEvent = __webpack_require__(722); -const CpFileError = __webpack_require__(725); +const makeDir = __webpack_require__(710); +const pEvent = __webpack_require__(702); +const CpFileError = __webpack_require__(705); const stat = promisify(fs.stat); const lstat = promisify(fs.lstat); @@ -85248,7 +81945,7 @@ exports.copyFileSync = (source, destination, flags) => { /***/ }), -/* 730 */ +/* 710 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -85256,7 +81953,7 @@ exports.copyFileSync = (source, destination, flags) => { const fs = __webpack_require__(133); const path = __webpack_require__(4); const {promisify} = __webpack_require__(111); -const semver = __webpack_require__(731); +const semver = __webpack_require__(711); const useNativeRecursiveOption = semver.satisfies(process.version, '>=10.12.0'); @@ -85411,7 +82108,7 @@ module.exports.sync = (input, options) => { /***/ }), -/* 731 */ +/* 711 */ /***/ (function(module, exports) { exports = module.exports = SemVer @@ -87013,7 +83710,7 @@ function coerce (version, options) { /***/ }), -/* 732 */ +/* 712 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -87054,7 +83751,7 @@ module.exports = ProgressEmitter; /***/ }), -/* 733 */ +/* 713 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -87100,12 +83797,12 @@ exports.default = module.exports; /***/ }), -/* 734 */ +/* 714 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; -const NestedError = __webpack_require__(735); +const NestedError = __webpack_require__(715); class CpyError extends NestedError { constructor(message, nested) { @@ -87119,7 +83816,7 @@ module.exports = CpyError; /***/ }), -/* 735 */ +/* 715 */ /***/ (function(module, exports, __webpack_require__) { var inherits = __webpack_require__(111).inherits; diff --git a/packages/kbn-pm/package.json b/packages/kbn-pm/package.json index 1fb94e4c92ce1..c2f9236d9e798 100644 --- a/packages/kbn-pm/package.json +++ b/packages/kbn-pm/package.json @@ -19,8 +19,8 @@ "@types/cpy": "^5.1.0", "@types/dedent": "^0.7.0", "@types/getopts": "^2.0.1", - "@types/glob": "^5.0.35", - "@types/globby": "^6.1.0", + "@types/glob": "^7.1.2", + "@types/globby": "^8.0.0", "@types/has-ansi": "^3.0.0", "@types/lodash": "^4.14.159", "@types/log-symbols": "^2.0.0", @@ -41,12 +41,12 @@ "dedent": "^0.7.0", "del": "^5.1.0", "execa": "^4.0.2", - "getopts": "^2.2.4", + "getopts": "^2.2.5", "glob": "^7.1.2", "globby": "^8.0.1", "has-ansi": "^3.0.0", "is-path-inside": "^3.0.2", - "lodash": "^4.17.15", + "lodash": "^4.17.20", "log-symbols": "^2.2.0", "multimatch": "^4.0.0", "ncp": "^2.0.0", diff --git a/packages/kbn-spec-to-console/package.json b/packages/kbn-spec-to-console/package.json index 63ce93ac54f46..0c80c949c1d11 100644 --- a/packages/kbn-spec-to-console/package.json +++ b/packages/kbn-spec-to-console/package.json @@ -21,7 +21,7 @@ "prettier": "^2.1.1" }, "dependencies": { - "commander": "^3.0.0", + "commander": "^3.0.2", "glob": "^7.1.2" } -} \ No newline at end of file +} diff --git a/packages/kbn-std/package.json b/packages/kbn-std/package.json index 2cc9fd72082be..a931dd3f3154d 100644 --- a/packages/kbn-std/package.json +++ b/packages/kbn-std/package.json @@ -15,6 +15,6 @@ }, "dependencies": { "@kbn/utility-types": "1.0.0", - "lodash": "^4.17.15" + "lodash": "^4.17.20" } } diff --git a/packages/kbn-std/src/merge.ts b/packages/kbn-std/src/merge.ts index dca8077435657..43878c27b1e19 100644 --- a/packages/kbn-std/src/merge.ts +++ b/packages/kbn-std/src/merge.ts @@ -16,9 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import isPlainObject from 'lodash/isPlainObject'; +import { isPlainObject } from 'lodash'; /** * Deeply merges two objects, omitting undefined values, and not deeply merging Arrays. * diff --git a/packages/kbn-storybook/README.md b/packages/kbn-storybook/README.md index c9195f41ebf26..eea8912c8715e 100644 --- a/packages/kbn-storybook/README.md +++ b/packages/kbn-storybook/README.md @@ -2,32 +2,40 @@ This package provides ability to add [Storybook](https://storybook.js.org/) to any Kibana plugin. -- [Setup Instructions](#setup-instructions) - +- [Kibana Storybook](#kibana-storybook) + - [Setup Instructions](#setup-instructions) + - [Customizing configuration](#customizing-configuration) ## Setup Instructions -1. Add `storybook.js` launcher file to your plugin. For example, create a file at - `src/plugins//scripts/storybook.js`, with the following contents: - - ```js - import { join } from 'path'; - - // eslint-disable-next-line - require('@kbn/storybook').runStorybookCli({ - name: '', - storyGlobs: [join(__dirname, '..', 'public', 'components', '**', '*.examples.tsx')], - }); - ``` -2. Add your plugin alias to `src/dev/storybook/aliases.ts` config. -3. Create sample Storybook stories. For example, in your plugin create create a file at - `src/plugins//public/components/hello_world/__examples__/hello_world.examples.tsx` with - the following contents: - - ```jsx - import * as React from 'react'; - import { storiesOf } from '@storybook/react'; - - storiesOf('Hello world', module).add('default', () =>

); - ``` -4. Launch Storybook with `yarn storybook `. +- Add a `.storybook/main.js` configuration file to your plugin. For example, create a file at + `src/plugins//.storybook/main.js`, with the following contents: + + ```js + module.exports = require('@kbn/storybook').defaultConfig; + ``` + +- Add your plugin alias to `src/dev/storybook/aliases.ts` config. +- Create sample Storybook stories. For example, in your plugin create a file at + `src/plugins//public/components/hello_world/hello_world.stories.tsx` with + the following [Component Story Format](https://storybook.js.org/docs/react/api/csf) contents: + + ```jsx + import { MyComponent } from './my_component'; + + export default { + component: MyComponent, + title: 'Path/In/Side/Navigation/ToComponent', + }; + + export function Example() { + return ; + } + ``` + +- Launch Storybook with `yarn storybook `, or build a static site with `yarn storybook --site `. + +## Customizing configuration + +The `defaultConfig` object provided by the @kbn/storybook package should be all you need to get running, but you can +override this in your .storybook/main.js. Using [Storybook's configuration options](https://storybook.js.org/docs/react/configure/overview). diff --git a/packages/kbn-storybook/index.js b/packages/kbn-storybook/index.js deleted file mode 100644 index 77d457f2bb3c0..0000000000000 --- a/packages/kbn-storybook/index.js +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -const fs = require('fs'); -const { join } = require('path'); -const Rx = require('rxjs'); -const { first } = require('rxjs/operators'); -const storybook = require('@storybook/react/standalone'); -const { run } = require('@kbn/dev-utils'); -const { generateStorybookEntry } = require('./lib/storybook_entry'); -const { ASSET_DIR, CURRENT_CONFIG } = require('./lib/constants'); -const { buildDll } = require('./lib/dll'); - -exports.runStorybookCli = (config) => { - const { name, storyGlobs } = config; - run( - async ({ flags, log, procRunner }) => { - log.debug('Global config:\n', require('./lib/constants')); - - const currentConfig = JSON.stringify(config, null, 2); - const currentConfigDir = join(CURRENT_CONFIG, '..'); - await fs.promises.mkdir(currentConfigDir, { recursive: true }); - log.debug('Writing currentConfig:\n', CURRENT_CONFIG + '\n', currentConfig); - await fs.promises.writeFile(CURRENT_CONFIG, `exports.currentConfig = ${currentConfig};`); - - await buildDll({ - rebuildDll: flags.rebuildDll, - log, - procRunner, - }); - - const subj = new Rx.ReplaySubject(1); - generateStorybookEntry({ log, storyGlobs }).subscribe(subj); - - await subj.pipe(first()).toPromise(); - - await Promise.all([ - // route errors - subj.toPromise(), - - new Promise(async () => { - // storybook never completes, so neither will this promise - const configDir = join(__dirname, 'storybook_config'); - log.debug('Config dir:', configDir); - - const config = { - mode: flags.site ? 'static' : 'dev', - port: 9001, - configDir, - }; - if (flags.site) { - config.outputDir = join(ASSET_DIR, name); - } - - await storybook(config); - - // Line is only reached when building the static version - if (flags.site) process.exit(); - }), - ]); - }, - { - flags: { - boolean: ['rebuildDll', 'site'], - }, - description: ` - Run the storybook examples for ${name} - `, - } - ); -}; diff --git a/packages/kbn-storybook/storybook_config/mocks/noop.js b/packages/kbn-storybook/index.ts old mode 100755 new mode 100644 similarity index 87% rename from packages/kbn-storybook/storybook_config/mocks/noop.js rename to packages/kbn-storybook/index.ts index e78d222eaa560..a0c944f9a6e28 --- a/packages/kbn-storybook/storybook_config/mocks/noop.js +++ b/packages/kbn-storybook/index.ts @@ -17,4 +17,5 @@ * under the License. */ -export default function () {} +export { defaultConfig } from './lib/default_config'; +export { runStorybookCli } from './lib/run_storybook_cli'; diff --git a/packages/kbn-storybook/storybook_config/mocks/ui_storage.js b/packages/kbn-storybook/lib/constants.ts similarity index 79% rename from packages/kbn-storybook/storybook_config/mocks/ui_storage.js rename to packages/kbn-storybook/lib/constants.ts index 4bd8cdeddfc22..7ca0ff349af97 100644 --- a/packages/kbn-storybook/storybook_config/mocks/ui_storage.js +++ b/packages/kbn-storybook/lib/constants.ts @@ -17,12 +17,8 @@ * under the License. */ -export class Storage { - get(key) { - return this[key]; - } +import { resolve } from 'path'; +import { REPO_ROOT as KIBANA_ROOT } from '@kbn/dev-utils'; - set(key, value) { - this[key] = value; - } -} +export const REPO_ROOT = KIBANA_ROOT; +export const ASSET_DIR = resolve(KIBANA_ROOT, 'built_assets/storybook'); diff --git a/packages/kbn-storybook/storybook_config/middleware.js b/packages/kbn-storybook/lib/default_config.ts similarity index 73% rename from packages/kbn-storybook/storybook_config/middleware.js rename to packages/kbn-storybook/lib/default_config.ts index 9410bb66030d9..1fad9e2a3e087 100644 --- a/packages/kbn-storybook/storybook_config/middleware.js +++ b/packages/kbn-storybook/lib/default_config.ts @@ -17,10 +17,12 @@ * under the License. */ -const serve = require('serve-static'); -const path = require('path'); +import { StorybookConfig } from '@storybook/core/types'; -// Extend the Storybook Middleware to include a route to access Legacy UI assets -module.exports = function (router) { - router.get('/ui', serve(path.resolve(__dirname, '../../../src/core/server/core_app/assets'))); +export const defaultConfig: StorybookConfig = { + addons: ['@kbn/storybook/preset', '@storybook/addon-knobs', '@storybook/addon-essentials'], + stories: ['../**/*.stories.tsx'], + typescript: { + reactDocgen: false, + }, }; diff --git a/packages/kbn-storybook/lib/register.ts b/packages/kbn-storybook/lib/register.ts new file mode 100644 index 0000000000000..5121b6f614902 --- /dev/null +++ b/packages/kbn-storybook/lib/register.ts @@ -0,0 +1,35 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { addons } from '@storybook/addons'; +import { create } from '@storybook/theming'; + +// This configures the "Manager", or main outer view of Storybook. It is an +// addon that's loaded by the `managerEntries` part of the preset in ../preset.js. +addons.setConfig({ + theme: create({ + base: 'light', + brandTitle: 'Kibana Storybook', + brandUrl: 'https://github.com/elastic/kibana/tree/master/packages/kbn-storybook', + }), + showPanel: false, + isFullscreen: false, + panelPosition: 'bottom', + isToolshown: true, +}); diff --git a/packages/kbn-storybook/lib/run_storybook_cli.ts b/packages/kbn-storybook/lib/run_storybook_cli.ts new file mode 100644 index 0000000000000..3c4cdbf3dcf84 --- /dev/null +++ b/packages/kbn-storybook/lib/run_storybook_cli.ts @@ -0,0 +1,75 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { join } from 'path'; +import { logger } from '@storybook/node-logger'; +import buildStandalone from '@storybook/react/standalone'; +import { Flags, run } from '@kbn/dev-utils'; +import { distDir } from '@kbn/ui-shared-deps'; +import * as constants from './constants'; + +// Convert the flags to a Storybook loglevel +function getLogLevelFromFlags(flags: Flags) { + if (flags.debug) { + return 'silly'; + } + if (flags.verbose) { + return 'verbose'; + } + if (flags.quiet) { + return 'warn'; + } + if (flags.silent) { + return 'silent'; + } + return 'info'; +} + +export function runStorybookCli({ configDir, name }: { configDir: string; name: string }) { + run( + async ({ flags, log }) => { + log.debug('Global config:\n', constants); + + const staticDir = [distDir]; + const config: Record = { + configDir, + mode: flags.site ? 'static' : 'dev', + port: 9001, + staticDir, + }; + if (flags.site) { + config.outputDir = join(constants.ASSET_DIR, name); + } + + logger.setLevel(getLogLevelFromFlags(flags)); + await buildStandalone(config); + + // Line is only reached when building the static version + if (flags.site) process.exit(); + }, + { + flags: { + boolean: ['site'], + }, + description: ` + Run the storybook examples for ${name} + `, + } + ); +} diff --git a/packages/kbn-storybook/lib/storybook_entry.js b/packages/kbn-storybook/lib/storybook_entry.js deleted file mode 100644 index fc970b1ff9d2a..0000000000000 --- a/packages/kbn-storybook/lib/storybook_entry.js +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -const { resolve, relative, dirname } = require('path'); -const Fs = require('fs'); -const Rx = require('rxjs'); -const { mergeMap, map, debounceTime } = require('rxjs/operators'); -const normalize = require('normalize-path'); -const { promisify } = require('util'); - -const watch = require('glob-watcher'); -const mkdirp = require('mkdirp'); // eslint-disable-line -const glob = require('fast-glob'); -const { REPO_ROOT } = require('@kbn/utils'); - -const mkdirpAsync = promisify(mkdirp); -const writeFileAsync = promisify(Fs.writeFile); - -const { STORY_ENTRY_PATH } = require('./constants'); -const STORE_ENTRY_DIR = dirname(STORY_ENTRY_PATH); - -exports.generateStorybookEntry = ({ log, storyGlobs }) => { - const globs = [...storyGlobs]; - log.info('Storybook globs:\n', globs); - const norm = (p) => normalize(relative(STORE_ENTRY_DIR, p)); - - return Rx.defer(() => - glob(globs, { - absolute: true, - cwd: REPO_ROOT, - onlyFiles: true, - }) - ).pipe( - map((paths) => { - log.info('Discovered Storybook entry points:\n', paths); - return new Set(paths.map(norm)); - }), - mergeMap( - (paths) => - new Rx.Observable((observer) => { - observer.next(paths); - - const chokidar = watch(globs, { cwd: REPO_ROOT }) - .on('add', (path) => { - observer.next(paths.add(norm(resolve(REPO_ROOT, path)))); - }) - .on('unlink', (path) => { - observer.next(paths.delete(norm(resolve(REPO_ROOT, path)))); - }); - - return () => { - chokidar.close(); - }; - }) - ), - debounceTime(200), - mergeMap(async (paths, i) => { - await mkdirpAsync(STORE_ENTRY_DIR); - - let content = ''; - for (const path of paths) { - content += `require('${path}');\n`; - } - - await writeFileAsync(STORY_ENTRY_PATH, content); - - if (i === 0) { - log.info('%d paths written to entry file', paths.size); - } else { - log.info('entry file updated'); - } - }) - ); -}; diff --git a/packages/kbn-storybook/lib/templates/index.ejs b/packages/kbn-storybook/lib/templates/index.ejs new file mode 100644 index 0000000000000..a4f8204c95d7a --- /dev/null +++ b/packages/kbn-storybook/lib/templates/index.ejs @@ -0,0 +1,59 @@ + + + + + + <%= options.title || 'Storybook'%> + + <% if (files.favicon) { %> + + <% } %> + + + + + + + + + + + + <% if (typeof headHtmlSnippet !== 'undefined') { %> <%= headHtmlSnippet %> <% } %> <% + files.css.forEach(file => { %> + + <% }); %> + + + + + <% if (typeof bodyHtmlSnippet !== 'undefined') { %> <%= bodyHtmlSnippet %> <% } %> + +
+
+ + <% if (typeof globals !== 'undefined' && Object.keys(globals).length) { %> + + <% } %> <% dlls.forEach(file => { %> + + <% }); %> <% files.js.forEach(file => { %> + + <% }); %> + + diff --git a/packages/kbn-storybook/lib/webpack.dll.config.js b/packages/kbn-storybook/lib/webpack.dll.config.js deleted file mode 100644 index 6e3b4d41bd7f0..0000000000000 --- a/packages/kbn-storybook/lib/webpack.dll.config.js +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -const webpack = require('webpack'); -const path = require('path'); -const MiniCssExtractPlugin = require('mini-css-extract-plugin'); -const { REPO_ROOT } = require('@kbn/utils'); - -const { DLL_NAME, DLL_DIST_DIR } = require('./constants'); - -// This is the Webpack config for the DLL of CSS and JS assets that are -// not expected to change during development. This saves compile and run -// times considerably. -module.exports = { - context: REPO_ROOT, - mode: 'development', - - // This is a (potentially growing) list of modules that can be safely - // included in the DLL. Only add to this list modules or other code - // which Storybook stories and their components would require, but don't - // change during development. - entry: [ - '@elastic/eui/dist/eui_theme_light.css', - '@kbn/ui-framework/dist/kui_light.css', - '@storybook/addon-info', - '@storybook/addon-knobs', - '@storybook/addon-knobs/react', - '@storybook/addon-knobs/register', - '@storybook/addon-options', - '@storybook/addon-options/register', - '@storybook/core', - '@storybook/core/dist/server/common/polyfills.js', - '@storybook/react', - '@storybook/theming', - 'angular-mocks', - 'angular', - 'brace', - 'chroma-js', - 'highlight.js', - 'html-entities', - 'jquery', - 'lodash', - 'markdown-it', - 'mocha', - 'prop-types', - 'react-ace', - 'react-beautiful-dnd', - 'react-dom', - 'react-focus-lock', - 'react-markdown', - 'react-resize-detector', - 'react-virtualized', - 'react', - 'recompose', - 'redux-actions', - 'remark-parse', - 'rxjs', - 'sinon', - 'tinycolor2', - ], - plugins: [ - // Produce the DLL and its manifest - new webpack.DllPlugin({ - name: DLL_NAME, - path: path.resolve(DLL_DIST_DIR, 'manifest.json'), - }), - // Produce the DLL CSS file - new MiniCssExtractPlugin({ - filename: 'dll.css', - }), - ], - // Output the DLL JS file - output: { - path: DLL_DIST_DIR, - filename: 'dll.js', - library: DLL_NAME, - }, - // Include a require alias for legacy UI code and styles - resolve: { - alias: { - ui: path.resolve(REPO_ROOT, 'src/legacy/ui/public'), - }, - mainFields: ['browser', 'main'], - }, - module: { - rules: [ - { - test: /\.css$/, - use: [ - { - loader: MiniCssExtractPlugin.loader, - options: {}, - }, - { loader: 'css-loader' }, - { - loader: 'string-replace-loader', - options: { - search: '__REPLACE_WITH_PUBLIC_PATH__', - replace: '/', - flags: 'g', - }, - }, - ], - }, - { - test: /\.(woff|woff2|ttf|eot|svg|ico)(\?|$)/, - loader: 'file-loader', - }, - ], - }, - node: { - fs: 'empty', - child_process: 'empty', - }, -}; diff --git a/packages/kbn-storybook/package.json b/packages/kbn-storybook/package.json index 5271ddb96d842..05fdb8489a1c3 100644 --- a/packages/kbn-storybook/package.json +++ b/packages/kbn-storybook/package.json @@ -3,18 +3,21 @@ "version": "1.0.0", "private": true, "license": "Apache-2.0", + "main": "./target/index.js", "dependencies": { - "@kbn/babel-preset": "1.0.0", "@kbn/dev-utils": "1.0.0", + "@storybook/addon-actions": "^6.0.16", + "@storybook/addon-essentials": "^6.0.16", + "@storybook/addon-knobs": "^6.0.16", + "@storybook/addon-storyshots": "^6.0.16", + "@storybook/core": "^6.0.16", + "@storybook/react": "^6.0.16", + "@storybook/theming": "^6.0.16", + "@types/loader-utils": "^2.0.1", + "@types/webpack": "^4.41.5", + "@types/webpack-env": "^1.15.2", + "@types/webpack-merge": "^4.1.5", "@kbn/utils": "1.0.0", - "@storybook/addon-actions": "^5.3.19", - "@storybook/addon-console": "^1.2.1", - "@storybook/addon-info": "^5.3.19", - "@storybook/addon-knobs": "^5.3.19", - "@storybook/addon-options": "^5.3.19", - "@storybook/addon-storyshots": "^5.3.19", - "@storybook/react": "^5.3.19", - "@storybook/theming": "^5.3.19", "babel-loader": "^8.0.6", "copy-webpack-plugin": "^6.0.2", "fast-glob": "2.2.7", @@ -22,12 +25,17 @@ "jest-specific-snapshot": "2.0.0", "jest-styled-components": "^7.0.2", "mkdirp": "0.5.1", - "mini-css-extract-plugin": "0.7.0", - "normalize-path": "3.0.0", - "react-docgen-typescript-loader": "3.1.0", - "rxjs": "6.5.5", + "mini-css-extract-plugin": "0.8.0", + "normalize-path": "^3.0.0", + "react-docgen-typescript-loader": "^3.1.1", + "rxjs": "^6.5.5", "serve-static": "1.14.1", "styled-components": "^5.1.0", "webpack": "^4.41.5" + }, + "scripts": { + "build": "tsc", + "kbn:bootstrap": "yarn build", + "watch": "yarn build --watch" } -} \ No newline at end of file +} diff --git a/src/plugins/kibana_react/public/code_editor/scripts/storybook.ts b/packages/kbn-storybook/preset.js similarity index 75% rename from src/plugins/kibana_react/public/code_editor/scripts/storybook.ts rename to packages/kbn-storybook/preset.js index 4fe7286987397..8c17f78e208d8 100644 --- a/src/plugins/kibana_react/public/code_editor/scripts/storybook.ts +++ b/packages/kbn-storybook/preset.js @@ -17,10 +17,13 @@ * under the License. */ -import { join } from 'path'; +const webpackConfig = require('./target/webpack.config').default; -// eslint-disable-next-line -require('@kbn/storybook').runStorybookCli({ - name: 'code-editor', - storyGlobs: [join(__dirname, '..', '*.examples.tsx')], -}); +module.exports = { + managerEntries: (entry = []) => { + return [...entry, require.resolve('./target/lib/register')]; + }, + webpackFinal: (config) => { + return webpackConfig({ config }); + }, +}; diff --git a/packages/kbn-storybook/storybook_config/addons.js b/packages/kbn-storybook/storybook_config/addons.js deleted file mode 100644 index f439d1d8892f8..0000000000000 --- a/packages/kbn-storybook/storybook_config/addons.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import '@storybook/addon-options/register'; -import '@storybook/addon-actions/register'; -import '@storybook/addon-knobs/register'; -import '@storybook/addon-console'; diff --git a/packages/kbn-storybook/storybook_config/config.js b/packages/kbn-storybook/storybook_config/config.js deleted file mode 100644 index d97bd3f7c2dcc..0000000000000 --- a/packages/kbn-storybook/storybook_config/config.js +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { configure, addDecorator, addParameters } from '@storybook/react'; -import { withKnobs } from '@storybook/addon-knobs/react'; -import { withInfo } from '@storybook/addon-info'; -import { create } from '@storybook/theming'; - -// If we're running Storyshots, be sure to register the require context hook. -// Otherwise, add the other decorators. -if (process.env.NODE_ENV === 'test') { - // eslint-disable-next-line - require('babel-plugin-require-context-hook/register')(); -} else { - // Customize the info for each story. - addDecorator( - withInfo({ - inline: true, - styles: { - infoBody: { - margin: 20, - }, - infoStory: { - margin: '40px 60px', - }, - }, - }) - ); - - // Add optional knobs to customize each story. - addDecorator(withKnobs); -} - -// Set up the Storybook environment with custom settings. -addParameters({ - options: { - theme: create({ - base: 'light', - brandTitle: 'Kibana Storybook', - brandUrl: 'https://github.com/elastic/kibana/tree/master/packages/kbn-storybook', - }), - showPanel: false, - isFullscreen: false, - panelPosition: 'bottom', - isToolshown: true, - }, -}); - -configure(() => { - // eslint-disable-next-line - require('../../../built_assets/storybook/stories.entry.js'); -}, module); diff --git a/packages/kbn-storybook/storybook_config/mocks/absolute_to_parsed_url.js b/packages/kbn-storybook/storybook_config/mocks/absolute_to_parsed_url.js deleted file mode 100644 index 65a27b095f84e..0000000000000 --- a/packages/kbn-storybook/storybook_config/mocks/absolute_to_parsed_url.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -export const absoluteToParsedUrl = () => { - getAbsoluteUrl: () => - 'http://localhost:5601/kbp/app/canvas#/workpad/workpad-24d56dad-ae70-42b8-9ef1-c5350ecd426c/page/1'; -}; // noop diff --git a/packages/kbn-storybook/storybook_config/preview-head.html b/packages/kbn-storybook/storybook_config/preview-head.html deleted file mode 100644 index 16754ad550da0..0000000000000 --- a/packages/kbn-storybook/storybook_config/preview-head.html +++ /dev/null @@ -1,6 +0,0 @@ - - - diff --git a/packages/kbn-storybook/storybook_config/webpack.config.js b/packages/kbn-storybook/storybook_config/webpack.config.js deleted file mode 100644 index 60b6b6add66d1..0000000000000 --- a/packages/kbn-storybook/storybook_config/webpack.config.js +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Licensed to Elasticsearch B.V. under one or more contributor - * license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright - * ownership. Elasticsearch B.V. licenses this file to you under - * the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -const { resolve } = require('path'); -const webpack = require('webpack'); -const webpackMerge = require('webpack-merge'); -const { stringifyRequest } = require('loader-utils'); -const CopyWebpackPlugin = require('copy-webpack-plugin'); -const { REPO_ROOT } = require('@kbn/utils'); -const { DLL_DIST_DIR } = require('../lib/constants'); -// eslint-disable-next-line import/no-unresolved -const { currentConfig } = require('../../../built_assets/storybook/current.config'); - -// Extend the Storybook Webpack config with some customizations -module.exports = async ({ config: storybookConfig }) => { - let config = { - module: { - rules: [ - // Include the React preset from Kibana for JS(X) and TS(X) - { - test: /\.(j|t)sx?$/, - exclude: /node_modules/, - loaders: 'babel-loader', - options: { - presets: [require.resolve('@kbn/babel-preset/webpack_preset')], - }, - }, - { - test: /\.(html|md|txt|tmpl)$/, - use: { - loader: 'raw-loader', - }, - }, - // Parse props data for .tsx files - // This is notoriously slow, and is making Storybook unusable. Disabling for now. - // See: https://github.com/storybookjs/storybook/issues/7998 - // - // { - // test: /\.tsx$/, - // // Exclude example files, as we don't display props info for them - // exclude: /\.stories.tsx$/, - // use: [ - // // Parse TS comments to create Props tables in the UI - // require.resolve('react-docgen-typescript-loader'), - // ], - // }, - { - test: /\.scss$/, - exclude: /\.module.(s(a|c)ss)$/, - use: [ - { loader: 'style-loader' }, - { loader: 'css-loader', options: { importLoaders: 2 } }, - { - loader: 'postcss-loader', - options: { - config: { - path: require.resolve('@kbn/optimizer/postcss.config.js'), - }, - }, - }, - { - loader: 'sass-loader', - options: { - prependData(loaderContext) { - return `@import ${stringifyRequest( - loaderContext, - resolve(REPO_ROOT, 'src/core/public/core_app/styles/_globals_v7light.scss') - )};\n`; - }, - sassOptions: { - includePaths: [resolve(REPO_ROOT, 'node_modules')], - }, - }, - }, - ], - }, - ], - }, - plugins: [ - // Reference the built DLL file of static(ish) dependencies, which are removed - // during kbn:bootstrap and rebuilt if missing. - new webpack.DllReferencePlugin({ - manifest: resolve(DLL_DIST_DIR, 'manifest.json'), - context: REPO_ROOT, - }), - // Copy the DLL files to the Webpack build for use in the Storybook UI - - new CopyWebpackPlugin({ - patterns: [ - { - from: resolve(DLL_DIST_DIR, 'dll.js'), - to: 'dll.js', - }, - { - from: resolve(DLL_DIST_DIR, 'dll.css'), - to: 'dll.css', - }, - ], - }), - ], - resolve: { - // Tell Webpack about the ts/x extensions - extensions: ['.ts', '.tsx', '.scss'], - alias: { - core_app_image_assets: resolve(REPO_ROOT, 'src/core/public/core_app/images'), - }, - }, - }; - - // Find and alter the CSS rule to replace the Kibana public path string with a path - // to the route we've added in middleware.js - const cssRule = storybookConfig.module.rules.find((rule) => rule.test.source.includes('.css$')); - cssRule.use.push({ - loader: 'string-replace-loader', - options: { - search: '__REPLACE_WITH_PUBLIC_PATH__', - replace: '/', - flags: 'g', - }, - }); - - config = webpackMerge(storybookConfig, config); - - // Load custom Webpack config specified by a plugin. - if (currentConfig.webpackHook) { - // eslint-disable-next-line import/no-dynamic-require - return await require(currentConfig.webpackHook)({ config }); - } - - return config; -}; diff --git a/packages/kbn-storybook/tsconfig.json b/packages/kbn-storybook/tsconfig.json new file mode 100644 index 0000000000000..814a3963c9f49 --- /dev/null +++ b/packages/kbn-storybook/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "declaration": true, + "outDir": "target", + "skipLibCheck": true + }, + "include": ["*.ts", "lib/*.ts"] +} diff --git a/packages/kbn-storybook/storybook_config/mocks/state_store.js b/packages/kbn-storybook/typings.d.ts similarity index 87% rename from packages/kbn-storybook/storybook_config/mocks/state_store.js rename to packages/kbn-storybook/typings.d.ts index 11bdf6632321d..a20af34a0eb06 100644 --- a/packages/kbn-storybook/storybook_config/mocks/state_store.js +++ b/packages/kbn-storybook/typings.d.ts @@ -17,10 +17,5 @@ * under the License. */ -export function getState() { - return { - assets: { - yay: { value: 'here is your image' }, - }, - }; -} +// Storybook react doesn't declare this in its typings, but it's there. +declare module '@storybook/react/standalone'; diff --git a/packages/kbn-storybook/webpack.config.ts b/packages/kbn-storybook/webpack.config.ts new file mode 100644 index 0000000000000..98fca597ffd78 --- /dev/null +++ b/packages/kbn-storybook/webpack.config.ts @@ -0,0 +1,108 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { resolve } from 'path'; +import { stringifyRequest } from 'loader-utils'; +import { Configuration, Stats } from 'webpack'; +import webpackMerge from 'webpack-merge'; +import { externals } from '@kbn/ui-shared-deps'; +import { REPO_ROOT } from './lib/constants'; + +const stats = { + ...Stats.presetToOptions('minimal'), + colors: true, + errorDetails: true, + errors: true, + moduleTrace: true, + warningsFilter: /(export .* was not found in)|(entrypoint size limit)/, +}; + +// Extend the Storybook Webpack config with some customizations +/* eslint-disable import/no-default-export */ +export default function ({ config: storybookConfig }: { config: Configuration }) { + const config = { + devServer: { + stats, + }, + externals, + module: { + rules: [ + { + test: /\.(html|md|txt|tmpl)$/, + use: { + loader: 'raw-loader', + }, + }, + { + test: /\.scss$/, + exclude: /\.module.(s(a|c)ss)$/, + use: [ + { loader: 'style-loader' }, + { loader: 'css-loader', options: { importLoaders: 2 } }, + { + loader: 'postcss-loader', + options: { + config: { + path: require.resolve('@kbn/optimizer/postcss.config.js'), + }, + }, + }, + { + loader: 'sass-loader', + options: { + prependData(loaderContext: any) { + return `@import ${stringifyRequest( + loaderContext, + resolve(REPO_ROOT, 'src/core/public/core_app/styles/_globals_v7light.scss') + )};\n`; + }, + sassOptions: { + includePaths: [resolve(REPO_ROOT, 'node_modules')], + }, + }, + }, + ], + }, + ], + }, + resolve: { + // Tell Webpack about the scss extension + extensions: ['.scss'], + alias: { + core_app_image_assets: resolve(REPO_ROOT, 'src/core/public/core_app/images'), + }, + }, + stats, + }; + + // This is the hacky part. We find something that looks like the + // HtmlWebpackPlugin and mutate its `options.template` to point at our + // revised template. + const htmlWebpackPlugin: any = (storybookConfig.plugins || []).find((plugin: any) => { + return plugin.options && typeof plugin.options.template === 'string'; + }); + if (htmlWebpackPlugin) { + htmlWebpackPlugin.options.template = require.resolve('../lib/templates/index.ejs'); + } + + // @ts-expect-error There's a long error here about the types of the + // incompatibility of Configuration, but it looks like it just may be Webpack + // type definition related. + return webpackMerge(storybookConfig, config); +} diff --git a/packages/kbn-telemetry-tools/src/tools/__fixture__/parsed_schema_defined_with_spreads_collector.ts b/packages/kbn-telemetry-tools/src/tools/__fixture__/parsed_schema_defined_with_spreads_collector.ts new file mode 100644 index 0000000000000..833344fa368b0 --- /dev/null +++ b/packages/kbn-telemetry-tools/src/tools/__fixture__/parsed_schema_defined_with_spreads_collector.ts @@ -0,0 +1,69 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { SyntaxKind } from 'typescript'; +import { ParsedUsageCollection } from '../ts_parser'; + +export const parsedSchemaDefinedWithSpreadsCollector: ParsedUsageCollection = [ + 'src/fixtures/telemetry_collectors/schema_defined_with_spreads_collector.ts', + { + collectorName: 'schema_defined_with_spreads', + schema: { + value: { + flat: { + type: 'keyword', + }, + my_str: { + type: 'text', + }, + my_objects: { + total: { + type: 'number', + }, + type: { + type: 'boolean', + }, + }, + }, + }, + fetch: { + typeName: 'Usage', + typeDescriptor: { + flat: { + kind: SyntaxKind.StringKeyword, + type: 'StringKeyword', + }, + my_str: { + kind: SyntaxKind.StringKeyword, + type: 'StringKeyword', + }, + my_objects: { + total: { + kind: SyntaxKind.NumberKeyword, + type: 'NumberKeyword', + }, + type: { + kind: SyntaxKind.BooleanKeyword, + type: 'BooleanKeyword', + }, + }, + }, + }, + }, +]; diff --git a/packages/kbn-telemetry-tools/src/tools/__snapshots__/extract_collectors.test.ts.snap b/packages/kbn-telemetry-tools/src/tools/__snapshots__/extract_collectors.test.ts.snap index 206f573b0af78..4725be77533af 100644 --- a/packages/kbn-telemetry-tools/src/tools/__snapshots__/extract_collectors.test.ts.snap +++ b/packages/kbn-telemetry-tools/src/tools/__snapshots__/extract_collectors.test.ts.snap @@ -142,6 +142,53 @@ Array [ }, }, ], + Array [ + "src/fixtures/telemetry_collectors/schema_defined_with_spreads_collector.ts", + Object { + "collectorName": "schema_defined_with_spreads", + "fetch": Object { + "typeDescriptor": Object { + "flat": Object { + "kind": 146, + "type": "StringKeyword", + }, + "my_objects": Object { + "total": Object { + "kind": 143, + "type": "NumberKeyword", + }, + "type": Object { + "kind": 131, + "type": "BooleanKeyword", + }, + }, + "my_str": Object { + "kind": 146, + "type": "StringKeyword", + }, + }, + "typeName": "Usage", + }, + "schema": Object { + "value": Object { + "flat": Object { + "type": "keyword", + }, + "my_objects": Object { + "total": Object { + "type": "number", + }, + "type": Object { + "type": "boolean", + }, + }, + "my_str": Object { + "type": "text", + }, + }, + }, + }, + ], Array [ "src/fixtures/telemetry_collectors/working_collector.ts", Object { diff --git a/packages/kbn-telemetry-tools/src/tools/extract_collectors.test.ts b/packages/kbn-telemetry-tools/src/tools/extract_collectors.test.ts index 0517cb9034d0a..b03db75b219f6 100644 --- a/packages/kbn-telemetry-tools/src/tools/extract_collectors.test.ts +++ b/packages/kbn-telemetry-tools/src/tools/extract_collectors.test.ts @@ -34,7 +34,7 @@ describe('extractCollectors', () => { const programPaths = await getProgramPaths(configs[0]); const results = [...extractCollectors(programPaths, tsConfig)]; - expect(results).toHaveLength(7); + expect(results).toHaveLength(8); expect(results).toMatchSnapshot(); }); }); diff --git a/packages/kbn-telemetry-tools/src/tools/serializer.test.ts b/packages/kbn-telemetry-tools/src/tools/serializer.test.ts index 02d663f4d29eb..652b26c8edb23 100644 --- a/packages/kbn-telemetry-tools/src/tools/serializer.test.ts +++ b/packages/kbn-telemetry-tools/src/tools/serializer.test.ts @@ -124,4 +124,18 @@ describe('getDescriptor', () => { '@@INDEX@@': { kind: ts.SyntaxKind.NumberKeyword, type: 'NumberKeyword' }, }); }); + + it('serializes MappedTypes', () => { + const usageInterface = usageInterfaces.get('MappedTypes')!; + const descriptor = getDescriptor(usageInterface, tsProgram); + expect(descriptor).toEqual({ + mappedTypeWithExternallyDefinedProps: { + prop1: { kind: ts.SyntaxKind.NumberKeyword, type: 'NumberKeyword' }, + prop2: { kind: ts.SyntaxKind.NumberKeyword, type: 'NumberKeyword' }, + }, + mappedTypeWithOneInlineProp: { + prop3: { kind: ts.SyntaxKind.NumberKeyword, type: 'NumberKeyword' }, + }, + }); + }); }); diff --git a/packages/kbn-telemetry-tools/src/tools/serializer.ts b/packages/kbn-telemetry-tools/src/tools/serializer.ts index 422b298c58374..cd845a680ad06 100644 --- a/packages/kbn-telemetry-tools/src/tools/serializer.ts +++ b/packages/kbn-telemetry-tools/src/tools/serializer.ts @@ -71,6 +71,33 @@ export function kindToDescriptorName(kind: number) { } } +export function getConstraints(node: ts.Node, program: ts.Program): any { + if (ts.isTypeReferenceNode(node)) { + const typeChecker = program.getTypeChecker(); + const symbol = typeChecker.getSymbolAtLocation(node.typeName); + const declaration = (symbol?.getDeclarations() || [])[0]; + if (declaration) { + return getConstraints(declaration, program); + } + return getConstraints(node.typeName, program); + } + + if (ts.isTypeAliasDeclaration(node)) { + return getConstraints(node.type, program); + } + + if (ts.isUnionTypeNode(node)) { + const types = node.types.filter(discardNullOrUndefined); + return types.map((typeNode) => getConstraints(typeNode, program)); + } + + if (ts.isLiteralTypeNode(node) && ts.isLiteralExpression(node.literal)) { + return node.literal.text; + } + + throw Error(`Unsupported constraint`); +} + export function getDescriptor(node: ts.Node, program: ts.Program): Descriptor | DescriptorValue { if (ts.isMethodSignature(node) || ts.isPropertySignature(node)) { if (node.type) { @@ -89,8 +116,19 @@ export function getDescriptor(node: ts.Node, program: ts.Program): Descriptor | } // If it's defined as signature { [key: string]: OtherInterface } - if (ts.isIndexSignatureDeclaration(node) && node.type) { - return { '@@INDEX@@': getDescriptor(node.type, program) }; + if ((ts.isIndexSignatureDeclaration(node) || ts.isMappedTypeNode(node)) && node.type) { + const descriptor = getDescriptor(node.type, program); + + // If we know the constraints of `string` ({ [key in 'prop1' | 'prop2']: value }) + const constraint = (node as ts.MappedTypeNode).typeParameter?.constraint; + if (constraint) { + const constraints = getConstraints(constraint, program); + const constraintsArray = Array.isArray(constraints) ? constraints : [constraints]; + if (typeof constraintsArray[0] === 'string') { + return constraintsArray.reduce((acc, c) => ({ ...acc, [c]: descriptor }), {}); + } + } + return { '@@INDEX@@': descriptor }; } if (ts.SyntaxKind.FirstNode === node.kind) { diff --git a/packages/kbn-telemetry-tools/src/tools/ts_parser.test.ts b/packages/kbn-telemetry-tools/src/tools/ts_parser.test.ts index b7ca33a7bcd74..d036b93a7bbf9 100644 --- a/packages/kbn-telemetry-tools/src/tools/ts_parser.test.ts +++ b/packages/kbn-telemetry-tools/src/tools/ts_parser.test.ts @@ -25,6 +25,7 @@ import { parsedNestedCollector } from './__fixture__/parsed_nested_collector'; import { parsedExternallyDefinedCollector } from './__fixture__/parsed_externally_defined_collector'; import { parsedImportedUsageInterface } from './__fixture__/parsed_imported_usage_interface'; import { parsedImportedSchemaCollector } from './__fixture__/parsed_imported_schema'; +import { parsedSchemaDefinedWithSpreadsCollector } from './__fixture__/parsed_schema_defined_with_spreads_collector'; export function loadFixtureProgram(fixtureName: string) { const fixturePath = path.resolve( @@ -62,6 +63,12 @@ describe('parseUsageCollection', () => { expect(result).toEqual([parsedWorkingCollector]); }); + it('parses collector with schema defined as union of spreads', () => { + const { program, sourceFile } = loadFixtureProgram('schema_defined_with_spreads_collector'); + const result = [...parseUsageCollection(sourceFile, program)]; + expect(result).toEqual([parsedSchemaDefinedWithSpreadsCollector]); + }); + it('parses nested collectors', () => { const { program, sourceFile } = loadFixtureProgram('nested_collector'); const result = [...parseUsageCollection(sourceFile, program)]; diff --git a/packages/kbn-telemetry-tools/src/tools/utils.ts b/packages/kbn-telemetry-tools/src/tools/utils.ts index e8e1b3fed1aef..947a4f66908f6 100644 --- a/packages/kbn-telemetry-tools/src/tools/utils.ts +++ b/packages/kbn-telemetry-tools/src/tools/utils.ts @@ -100,42 +100,57 @@ export function getIdentifierDeclaration(node: ts.Node) { return getIdentifierDeclarationFromSource(node, source); } -export function getVariableValue(node: ts.Node): string | Record { +export function getVariableValue(node: ts.Node, program: ts.Program): string | Record { if (ts.isStringLiteral(node) || ts.isNumericLiteral(node)) { return node.text; } if (ts.isObjectLiteralExpression(node)) { - return serializeObject(node); + return serializeObject(node, program); } if (ts.isIdentifier(node)) { const declaration = getIdentifierDeclaration(node); if (ts.isVariableDeclaration(declaration) && declaration.initializer) { - return getVariableValue(declaration.initializer); + return getVariableValue(declaration.initializer, program); + } else { + // Go fetch it in another file + return getIdentifierValue(node, node, program, { chaseImport: true }); } - // TODO: If this is another imported value from another file, we'll need to go fetch it like in getPropertyValue } - throw Error(`Unsuppored Node: cannot get value of node (${node.getText()}) of kind ${node.kind}`); + if (ts.isSpreadAssignment(node)) { + return getVariableValue(node.expression, program); + } + + throw Error( + `Unsupported Node: cannot get value of node (${node.getText()}) of kind ${node.kind} [${ + ts.SyntaxKind[node.kind] + }]` + ); } -export function serializeObject(node: ts.Node) { +export function serializeObject(node: ts.Node, program: ts.Program) { if (!ts.isObjectLiteralExpression(node)) { throw new Error(`Expecting Object literal Expression got ${node.getText()}`); } - const value: Record = {}; + let value: Record = {}; for (const property of node.properties) { const propertyName = property.name?.getText(); + const val = ts.isPropertyAssignment(property) + ? getVariableValue(property.initializer, program) + : getVariableValue(property, program); + if (typeof propertyName === 'undefined') { - throw new Error(`Unable to get property name ${property.getText()}`); - } - const cleanPropertyName = propertyName.replace(/["']/g, ''); - if (ts.isPropertyAssignment(property)) { - value[cleanPropertyName] = getVariableValue(property.initializer); + if (typeof val === 'object') { + value = { ...value, ...val }; + } else { + throw new Error(`Unable to get property name ${property.getText()}`); + } } else { - value[cleanPropertyName] = getVariableValue(property); + const cleanPropertyName = propertyName.replace(/["']/g, ''); + value[cleanPropertyName] = val; } } @@ -155,45 +170,53 @@ export function getResolvedModuleSourceFile( return resolvedModuleSourceFile; } -export function getPropertyValue( +export function getIdentifierValue( node: ts.Node, + initializer: ts.Identifier, program: ts.Program, config: Optional<{ chaseImport: boolean }> = {} ) { const { chaseImport = false } = config; + const identifierName = initializer.getText(); + const declaration = getIdentifierDeclaration(initializer); + if (ts.isImportSpecifier(declaration)) { + if (!chaseImport) { + throw new Error( + `Value of node ${identifierName} is imported from another file. Chasing imports is not allowed.` + ); + } - if (ts.isPropertyAssignment(node)) { - const { initializer } = node; + const importedModuleName = getModuleSpecifier(declaration); - if (ts.isIdentifier(initializer)) { - const identifierName = initializer.getText(); - const declaration = getIdentifierDeclaration(initializer); - if (ts.isImportSpecifier(declaration)) { - if (!chaseImport) { - throw new Error( - `Value of node ${identifierName} is imported from another file. Chasing imports is not allowed.` - ); - } + const source = node.getSourceFile(); + const declarationSource = getResolvedModuleSourceFile(source, program, importedModuleName); + const declarationNode = getIdentifierDeclarationFromSource(initializer, declarationSource); + if (!ts.isVariableDeclaration(declarationNode)) { + throw new Error(`Expected ${identifierName} to be variable declaration.`); + } + if (!declarationNode.initializer) { + throw new Error(`Expected ${identifierName} to be initialized.`); + } + const serializedObject = serializeObject(declarationNode.initializer, program); + return serializedObject; + } - const importedModuleName = getModuleSpecifier(declaration); + return getVariableValue(declaration, program); +} - const source = node.getSourceFile(); - const declarationSource = getResolvedModuleSourceFile(source, program, importedModuleName); - const declarationNode = getIdentifierDeclarationFromSource(initializer, declarationSource); - if (!ts.isVariableDeclaration(declarationNode)) { - throw new Error(`Expected ${identifierName} to be variable declaration.`); - } - if (!declarationNode.initializer) { - throw new Error(`Expected ${identifierName} to be initialized.`); - } - const serializedObject = serializeObject(declarationNode.initializer); - return serializedObject; - } +export function getPropertyValue( + node: ts.Node, + program: ts.Program, + config: Optional<{ chaseImport: boolean }> = {} +) { + if (ts.isPropertyAssignment(node)) { + const { initializer } = node; - return getVariableValue(declaration); + if (ts.isIdentifier(initializer)) { + return getIdentifierValue(node, initializer, program, config); } - return getVariableValue(initializer); + return getVariableValue(initializer, program); } } diff --git a/packages/kbn-test/package.json b/packages/kbn-test/package.json index 8a4ff55dcf68f..c616c836d5ff4 100644 --- a/packages/kbn-test/package.json +++ b/packages/kbn-test/package.json @@ -26,15 +26,14 @@ "dedent": "^0.7.0", "del": "^5.1.0", "exit-hook": "^2.2.0", - "getopts": "^2.2.4", + "getopts": "^2.2.5", "glob": "^7.1.2", "joi": "^13.5.2", - "lodash": "^4.17.15", + "lodash": "^4.17.20", "parse-link-header": "^1.0.1", "rxjs": "^6.5.5", "strip-ansi": "^5.2.0", "tar-fs": "^2.1.0", - "tmp": "^0.1.0", "xml2js": "^0.4.22", "zlib": "^1.0.5" } diff --git a/packages/kbn-ui-framework/package.json b/packages/kbn-ui-framework/package.json index 363f97522a901..be18b7cfc0d01 100644 --- a/packages/kbn-ui-framework/package.json +++ b/packages/kbn-ui-framework/package.json @@ -17,7 +17,7 @@ "dependencies": { "classnames": "2.2.6", "focus-trap-react": "^3.1.1", - "lodash": "^4.17.15", + "lodash": "^4.17.20", "prop-types": "^15.7.2", "react": "^16.12.0", "react-ace": "^5.9.0", @@ -31,13 +31,13 @@ }, "devDependencies": { "@babel/core": "^7.11.1", - "@elastic/eui": "0.0.55", + "@elastic/eui": "29.0.0", "@kbn/babel-preset": "1.0.0", "@kbn/optimizer": "1.0.0", "babel-loader": "^8.0.6", "brace": "0.11.1", "chalk": "^4.1.0", - "chokidar": "3.2.1", + "chokidar": "^3.4.2", "core-js": "^3.6.4", "css-loader": "^3.4.2", "expose-loader": "^0.7.5", @@ -62,7 +62,7 @@ "react-router": "^3.2.0", "react-router-redux": "^4.0.8", "redux": "3.7.2", - "redux-thunk": "2.2.0", + "redux-thunk": "^2.3.0", "regenerator-runtime": "^0.13.3", "sass-loader": "^8.0.2", "sinon": "^7.4.2", diff --git a/packages/kbn-ui-shared-deps/scripts/build.js b/packages/kbn-ui-shared-deps/scripts/build.js index af4e3481e624d..86251536b8876 100644 --- a/packages/kbn-ui-shared-deps/scripts/build.js +++ b/packages/kbn-ui-shared-deps/scripts/build.js @@ -18,18 +18,21 @@ */ const Path = require('path'); +const Fs = require('fs'); -const { run, createFailError } = require('@kbn/dev-utils'); +const { run, createFailError, CiStatsReporter } = require('@kbn/dev-utils'); const webpack = require('webpack'); const Stats = require('webpack/lib/Stats'); const del = require('del'); const { getWebpackConfig } = require('../webpack.config'); +const DIST_DIR = Path.resolve(__dirname, '../target'); + run( async ({ log, flags }) => { log.info('cleaning previous build output'); - await del(Path.resolve(__dirname, '../target')); + await del(DIST_DIR); const compiler = webpack( getWebpackConfig({ @@ -38,10 +41,38 @@ run( ); /** @param {webpack.Stats} stats */ - const onCompilationComplete = (stats) => { + const onCompilationComplete = async (stats) => { const took = Math.round((stats.endTime - stats.startTime) / 1000); if (!stats.hasErrors() && !stats.hasWarnings()) { + if (!flags.dev) { + const reporter = CiStatsReporter.fromEnv(log); + + const metrics = [ + { + group: '@kbn/ui-shared-deps asset size', + id: 'kbn-ui-shared-deps.js', + value: Fs.statSync(Path.resolve(DIST_DIR, 'kbn-ui-shared-deps.js')).size, + }, + { + group: '@kbn/ui-shared-deps asset size', + id: 'kbn-ui-shared-deps.@elastic.js', + value: Fs.statSync(Path.resolve(DIST_DIR, 'kbn-ui-shared-deps.@elastic.js')).size, + }, + { + group: '@kbn/ui-shared-deps asset size', + id: 'css', + value: + Fs.statSync(Path.resolve(DIST_DIR, 'kbn-ui-shared-deps.css')).size + + Fs.statSync(Path.resolve(DIST_DIR, 'kbn-ui-shared-deps.v7.light.css')).size, + }, + ]; + + log.debug('metrics:', metrics); + + await reporter.metrics(metrics); + } + log.success(`webpack completed in about ${took} seconds`); return; } @@ -56,11 +87,9 @@ run( if (flags.watch) { compiler.hooks.done.tap('report on stats', (stats) => { - try { - onCompilationComplete(stats); - } catch (error) { + onCompilationComplete(stats).catch((error) => { log.error(error.message); - } + }); }); compiler.hooks.watchRun.tap('report on start', () => { @@ -83,7 +112,7 @@ run( return; } - onCompilationComplete( + await onCompilationComplete( await new Promise((resolve, reject) => { compiler.run((error, stats) => { if (error) { diff --git a/plugins/.empty b/plugins/.empty new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/rfcs/text/0013_saved_object_migrations.md b/rfcs/text/0013_saved_object_migrations.md new file mode 100644 index 0000000000000..c5069625cb8a6 --- /dev/null +++ b/rfcs/text/0013_saved_object_migrations.md @@ -0,0 +1,745 @@ +- Start Date: 2020-05-11 +- RFC PR: (leave this empty) +- Kibana Issue: (leave this empty) + +--- +- [1. Summary](#1-summary) +- [2. Motivation](#2-motivation) +- [3. Saved Object Migration Errors](#3-saved-object-migration-errors) +- [4. Design](#4-design) + - [4.0 Assumptions and tradeoffs](#40-assumptions-and-tradeoffs) + - [4.1 Discover and remedy potential failures before any downtime](#41-discover-and-remedy-potential-failures-before-any-downtime) + - [4.2 Automatically retry failed migrations until they succeed](#42-automatically-retry-failed-migrations-until-they-succeed) + - [4.2.1 Idempotent migrations performed without coordination](#421-idempotent-migrations-performed-without-coordination) + - [4.2.1.1 Restrictions](#4211-restrictions) + - [4.2.1.2 Migration algorithm: Cloned index per version](#4212-migration-algorithm-cloned-index-per-version) + - [4.2.1.3 Upgrade and rollback procedure](#4213-upgrade-and-rollback-procedure) + - [4.2.1.4 Handling documents that belong to a disabled plugin](#4214-handling-documents-that-belong-to-a-disabled-plugin) +- [5. Alternatives](#5-alternatives) + - [5.1 Rolling upgrades](#51-rolling-upgrades) + - [5.2 Single node migrations coordinated through a lease/lock](#52-single-node-migrations-coordinated-through-a-leaselock) + - [5.2.1 Migration algorithm](#521-migration-algorithm) + - [5.2.2 Document lock algorithm](#522-document-lock-algorithm) + - [5.2.3 Checking for "weak lease" expiry](#523-checking-for-weak-lease-expiry) + - [5.3 Minimize data loss with mixed Kibana versions during 7.x](#53-minimize-data-loss-with-mixed-kibana-versions-during-7x) + - [5.4 In-place migrations that re-use the same index (8.0)](#54-in-place-migrations-that-re-use-the-same-index-80) + - [5.4.1 Migration algorithm (8.0):](#541-migration-algorithm-80) + - [5.4.2 Minimizing data loss with unsupported upgrade configurations (8.0)](#542-minimizing-data-loss-with-unsupported-upgrade-configurations-80) + - [5.5 Tag objects as “invalid” if their transformation fails](#55-tag-objects-as-invalid-if-their-transformation-fails) +- [6. How we teach this](#6-how-we-teach-this) +- [7. Unresolved questions](#7-unresolved-questions) + +# 1. Summary + +Improve the Saved Object migration algorithm to ensure a smooth Kibana upgrade +procedure. + +# 2. Motivation + +Kibana version upgrades should have a minimal operational impact. To achieve +this, users should be able to rely on: + +1. A predictable downtime window. +2. A small downtime window. + 1. (future) provide a small downtime window on indices with 10k or even + a 100k documents. +3. The ability to discover and remedy potential failures before initiating the + downtime window. +4. Quick roll-back in case of failure. +5. Detailed documentation about the impact of downtime on the features they + are using (e.g. actions, task manager, fleet, reporting). +6. Mixed Kibana versions shouldn’t cause data loss. +7. (stretch goal) Maintain read-only functionality during the downtime window. + +The biggest hurdle to achieving the above is Kibana’s Saved Object migrations. +Migrations aren’t resilient and require manual intervention anytime an error +occurs (see [3. Saved Object Migration +Errors](#3-saved-object-migration-errors)). + +It is impossible to discover these failures before initiating downtime. Errors +often force users to roll-back to a previous version of Kibana or cause hours +of downtime. To retry the migration, users are asked to manually delete a +`.kibana_x` index. If done incorrectly this can lead to data loss, making it a +terrifying experience (restoring from a pre-upgrade snapshot is a safer +alternative but not mentioned in the docs or logs). + +Cloud users don’t have access to Kibana logs to be able to identify and remedy +the cause of the migration failure. Apart from blindly retrying migrations by +restoring a previous snapshot, cloud users are unable to remedy a failed +migration and have to escalate to support which can further delay resolution. + +Taken together, version upgrades are a major operational risk and discourage +users from adopting the latest features. + +# 3. Saved Object Migration Errors + +Any of the following classes of errors could result in a Saved Object +migration failure which requires manual intervention to resolve: + +1. A bug in a plugin’s registered document transformation function causes it + to throw an exception on _valid_ data. +2. _Invalid_ data stored in Elasticsearch causes a plugin’s registered + document transformation function to throw an exception . +3. Failures resulting from an unhealthy Elasticsearch cluster: + 1. Maximum shards open + 2. Too many scroll contexts + 3. `circuit_breaking_exception` (insufficient heap memory) + 4. `process_cluster_event_timeout_exception` for index-aliases, create-index, put-mappings + 5. Read-only indices due to low disk space (hitting the flood_stage watermark) + 6. Re-index failed: search rejected due to missing shards + 7. `TooManyRequests` while doing a `count` of documents requiring a migration + 8. Bulk write failed: primary shard is not active +4. The Kibana process is killed while migrations are in progress. + +# 4. Design +## 4.0 Assumptions and tradeoffs +The proposed design makes several important assumptions and tradeoffs. + +**Background:** + +The 7.x upgrade documentation lists taking an Elasticsearch snapshot as a +required step, but we instruct users to retry migrations and perform rollbacks +by deleting the failed `.kibana_n` index and pointing the `.kibana` alias to +`.kibana_n-1`: + - [Handling errors during saved object +migrations.](https://github.com/elastic/kibana/blob/75444a9f1879c5702f9f2b8ad4a70a3a0e75871d/docs/setup/upgrade/upgrade-migrations.asciidoc#handling-errors-during-saved-object-migrations) + - [Rolling back to a previous version of Kibana.](https://github.com/elastic/kibana/blob/75444a9f1879c5702f9f2b8ad4a70a3a0e75871d/docs/setup/upgrade/upgrade-migrations.asciidoc#rolling-back-to-a-previous-version-of-kib) + - Server logs from failed migrations. + +**Assumptions and tradeoffs:** +1. It is critical to maintain a backup index during 7.x to ensure that anyone + following the existing upgrade / rollback procedures don't end up in a + position where they no longer can recover their data. + 1. This excludes us from introducing in-place migrations to support huge + indices during 7.x. +2. The simplicity of idempotent, coordination-free migrations outweighs the + restrictions this will impose on the kinds of migrations we're able to + support in the future. See (4.2.1) +3. A saved object type (and it's associated migrations) will only ever be + owned by one plugin. If pluginA registers saved object type `plugin_a_type` + then pluginB must never register that same type, even if pluginA is + disabled. Although we cannot enforce it on third-party plugins, breaking + this assumption may lead to data loss. + +## 4.1 Discover and remedy potential failures before any downtime + +> Achieves goals: (2.3) +> Mitigates errors: (3.1), (3.2) + +1. Introduce a CLI option to perform a dry run migration to allow + administrators to locate and fix potential migration failures without + taking their existing Kibana node(s) offline. +2. To have the highest chance of surfacing potential failures such as low disk + space, dry run migrations should not be mere simulations. A dry run should + perform a real migration in a way that doesn’t impact the existing Kibana + cluster. +3. The CLI should generate a migration report to make it easy to create a + support request from a failed migration dry run. + 1. The report would be an NDJSON export of all failed objects. + 2. If support receives such a report, we could modify all the objects to + ensure the migration would pass and send this back to the client. + 3. The client can then import the updated objects using the standard Saved + Objects NDJSON import and run another dry run to verify all problems + have been fixed. +4. Make running dry run migrations a required step in the upgrade procedure + documentation. +5. (Optional) Add dry run migrations to the standard cloud upgrade procedure? + +## 4.2 Automatically retry failed migrations until they succeed + +> Achieves goals: (2.2), (2.6) +> Mitigates errors (3.3) and (3.4) + +External conditions such as failures from an unhealthy Elasticsearch cluster +(3.3) can cause the migration to fail. The Kibana cluster should be able to +recover automatically once these external conditions are resolved. There are +two broad approaches to solving this problem based on whether or not +migrations are idempotent: + +| Idempotent migrations |Description | +| --------------------- | --------------------------------------------------------- | +| Yes | Idempotent migrations performed without coordination | +| No | Single node migrations coordinated through a lease / lock | + +Idempotent migrations don't require coordination making the algorithm +significantly less complex and will never require manual intervention to +retry. We, therefore, prefer this solution, even though it introduces +restrictions on migrations (4.2.1.1). For other alternatives that were +considered see section [(5)](#5-alternatives). + +## 4.2.1 Idempotent migrations performed without coordination + +The migration system can be said to be idempotent if the same results are +produced whether the migration was run once or multiple times. This property +should hold even if new (up to date) writes occur in between migration runs +which introduces the following restrictions: + +### 4.2.1.1 Restrictions + +1. All document transforms need to be deterministic, that is a document + transform will always return the same result for the same set of inputs. +2. It should always be possible to construct the exact set of inputs required + for (1) at any point during the migration process (before, during, after). + +Although these restrictions require significant changes, it does not prevent +known upcoming migrations such as [sharing saved-objects in multiple spaces](https://github.com/elastic/kibana/issues/27004) or [splitting a saved +object into multiple child +documents](https://github.com/elastic/kibana/issues/26602). To ensure that +these migrations are idempotent, they will have to generate new saved object +id's deterministically with e.g. UUIDv5. + + +### 4.2.1.2 Migration algorithm: Cloned index per version +Note: +- The description below assumes the migration algorithm is released in 7.10.0. + So < 7.10.0 will use `.kibana` and >= 7.10.0 will use `.kibana_current`. +- We refer to the alias and index that outdated nodes use as the source alias + and source index. +- Every version performs a migration even if mappings or documents aren't outdated. + +1. Locate the source index by fetching aliases (including `.kibana` for + versions prior to v7.10.0) + + ``` + GET '/_alias/.kibana_current,.kibana_7.10.0,.kibana' + ``` + + The source index is: + 1. the index the `.kibana_current` alias points to, or if it doesn’t exist, + 2. the index the `.kibana` alias points to, or if it doesn't exist, + 3. the v6.x `.kibana` index + + If none of the aliases exists, this is a new Elasticsearch cluster and no + migrations are necessary. Create the `.kibana_7.10.0_001` index with the + following aliases: `.kibana_current` and `.kibana_7.10.0`. +2. If `.kibana_current` and `.kibana_7.10.0` both exists and are pointing to the same index this version's migration has already been completed. + 1. Because the same version can have plugins enabled at any point in time, + perform the mappings update in step (6) and migrate outdated documents + with step (7). + 2. Skip to step (9) to start serving traffic. +3. Fail the migration if: + 1. `.kibana_current` is pointing to an index that belongs to a later version of Kibana .e.g. `.kibana_7.12.0_001` + 2. (Only in 8.x) The source index contains documents that belong to an unknown Saved Object type (from a disabled plugin). Log an error explaining that the plugin that created these documents needs to be enabled again or that these objects should be deleted. See section (4.2.1.4). +4. Mark the source index as read-only and wait for all in-flight operations to drain (requires https://github.com/elastic/elasticsearch/pull/58094). This prevents any further writes from outdated nodes. Assuming this API is similar to the existing `//_close` API, we expect to receive `"acknowledged" : true` and `"shards_acknowledged" : true`. If all shards don’t acknowledge within the timeout, retry the operation until it succeeds. +5. Clone the source index into a new target index which has writes enabled. All nodes on the same version will use the same fixed index name e.g. `.kibana_7.10.0_001`. The `001` postfix isn't used by Kibana, but allows for re-indexing an index should this be required by an Elasticsearch upgrade. E.g. re-index `.kibana_7.10.0_001` into `.kibana_7.10.0_002` and point the `.kibana_7.10.0` alias to `.kibana_7.10.0_002`. + 1. `POST /.kibana_n/_clone/.kibana_7.10.0_001?wait_for_active_shards=all {"settings": {"index.blocks.write": false}}`. Ignore errors if the clone already exists. + 2. Wait for the cloning to complete `GET /_cluster/health/.kibana_7.10.0_001?wait_for_status=green&timeout=60s` If cloning doesn’t complete within the 60s timeout, log a warning for visibility and poll again. +6. Update the mappings of the target index + 1. Retrieve the existing mappings including the `migrationMappingPropertyHashes` metadata. + 2. Update the mappings with `PUT /.kibana_7.10.0_001/_mapping`. The API deeply merges any updates so this won't remove the mappings of any plugins that were enabled in a previous version but are now disabled. + 3. Ensure that fields are correctly indexed using the target index's latest mappings `POST /.kibana_7.10.0_001/_update_by_query?conflicts=proceed`. In the future we could optimize this query by only targeting documents: + 1. That belong to a known saved object type. + 2. Which don't have outdated migrationVersion numbers since these will be transformed anyway. + 3. That belong to a type whose mappings were changed by comparing the `migrationMappingPropertyHashes`. (Metadata, unlike the mappings isn't commutative, so there is a small chance that the metadata hashes do not accurately reflect the latest mappings, however, this will just result in an less efficient query). +7. Transform documents by reading batches of outdated documents from the target index then transforming and updating them with optimistic concurrency control. + 1. Ignore any version conflict errors. + 2. If a document transform throws an exception, add the document to a failure list and continue trying to transform all other documents. If any failures occured, log the complete list of documents that failed to transform. Fail the migration. +8. Mark the migration as complete by doing a single atomic operation (requires https://github.com/elastic/elasticsearch/pull/58100) that: + 1. Checks that `.kibana-current` alias is still pointing to the source index + 2. Points the `.kibana-7.10.0` and `.kibana_current` aliases to the target index. + 3. If this fails with a "required alias [.kibana_current] does not exist" error fetch `.kibana_current` again: + 1. If `.kibana_current` is _not_ pointing to our target index fail the migration. + 2. If `.kibana_current` is pointing to our target index the migration has succeeded and we can proceed to step (9). +9. Start serving traffic. + +Together with the limitations, this algorithm ensures that migrations are +idempotent. If two nodes are started simultaneously, both of them will start +transforming documents in that version's target index, but because migrations are idempotent, it doesn’t matter which node’s writes win. + +
+ In the future, this algorithm could enable (2.6) "read-only functionality during the downtime window" but this is outside of the scope of this RFC. + + Although the migration algorithm guarantees there's no data loss while providing read-only access to outdated nodes, this could cause plugins to behave in unexpected ways. If we wish to persue it in the future, enabling read-only functionality during the downtime window will be it's own project and must include an audit of all plugins' behaviours. +
+ +### 4.2.1.3 Upgrade and rollback procedure +When a newer Kibana starts an upgrade, it blocks all writes to the outdated index to prevent data loss. Since Kibana is not designed to gracefully handle a read-only index this could have unintended consequences such as a task executing multiple times but never being able to write that the task was completed successfully. To prevent unintended consequences, the following procedure should be followed when upgrading Kibana: + +1. Gracefully shutdown outdated nodes by sending a `SIGTERM` signal + 1. Node starts returning `503` from it's healthcheck endpoint to signal to + the load balancer that it's no longer accepting new traffic (requires https://github.com/elastic/kibana/issues/46984). + 2. Allows ungoing HTTP requests to complete with a configurable timeout + before forcefully terminating any open connections. + 3. Closes any keep-alive sockets by sending a `connection: close` header. + 4. Shutdown all plugins and Core services. +2. (recommended) Take a snapshot of all Kibana's Saved Objects indices. This simplifies doing a rollback to a simple snapshot restore, but is not required in order to do a rollback if a migration fails. +3. Start the upgraded Kibana nodes. All running Kibana nodes should be on the same version, have the same plugins enabled and use the same configuration. + +To rollback to a previous version of Kibana with a snapshot +1. Shutdown all Kibana nodes. +2. Restore the Saved Object indices and aliases from the snapshot +3. Start the rollback Kibana nodes. All running Kibana nodes should be on the same rollback version, have the same plugins enabled and use the same configuration. + +To rollback to a previous version of Kibana without a snapshot: +(Assumes the migration to 7.11.0 failed) +1. Shutdown all Kibana nodes. +2. Remove the index created by the failed Kibana migration by using the version-specific alias e.g. `DELETE /.kibana_7.11.0` +3. Identify the rollback index: + 1. If rolling back to a Kibana version < 7.10.0 use `.kibana` + 2. If rolling back to a Kibana version >= 7.10.0 use the version alias of the Kibana version you wish to rollback to e.g. `.kibana_7.10.0` +4. Point the `.kibana_current` alias to the rollback index. +5. Remove the write block from the rollback index. +6. Start the rollback Kibana nodes. All running Kibana nodes should be on the same rollback version, have the same plugins enabled and use the same configuration. + +### 4.2.1.4 Handling documents that belong to a disabled plugin +It is possible for a plugin to create documents in one version of Kibana, but then when upgrading Kibana to a newer version, that plugin is disabled. Because the plugin is disabled it cannot register it's Saved Objects type including the mappings or any migration transformation functions. These "orphan" documents could cause future problems: + - A major version introduces breaking mapping changes that cannot be applied to the data in these documents. + - Two majors later migrations will no longer be able to migrate this old schema and could fail unexpectadly when the plugin is suddenly enabled. + +As a concrete example of the above, consider a user taking the following steps: +1. Installs Kibana 7.6.0 with spaces=enabled. The spaces plugin creates a default space saved object. +2. User upgrades to 7.10.0 but uses the OSS download which has spaces=disabled. Although the 7.10.0 spaces plugin includes a migration for space documents, the OSS release cannot migrate the documents or update it's mappings. +3. User realizes they made a mistake and use Kibana 7.10.0 with x-pack and the spaces plugin enabled. At this point we have a completed migration for 7.10.0 but there's outdated spaces documents with migrationVersion=7.6.0 instead of 7.10.0. + +There are several approaches we could take to dealing with these orphan documents: + +1. Start up but refuse to query on types with outdated documents until a user manually triggers a re-migration + + Advantages: + - The impact is limited to a single plugin + + Disadvantages: + - It might be less obvious that a plugin is in a degraded state unless you read the logs (not possible on Cloud) or view the `/status` endpoint. + - If a user doesn't care that the plugin is degraded, orphan documents are carried forward indefinitely. + - Since Kibana has started receiving traffic, users can no longer + downgrade without losing data. They have to re-migrate, but if that + fails they're stuck. + - Introduces a breaking change in the upgrade behaviour + + To perform a re-migration: + - Remove the `.kibana_7.10.0` alias + - Take a snapshot OR set the configuration option `migrations.target_index_postfix: '002'` to create a new target index `.kibana_7.10.0_002` and keep the `.kibana_7.10.0_001` index to be able to perform a rollback. + - Start up Kibana + +2. Refuse to start Kibana until the plugin is enabled or it's data deleted + + Advantages: + - Admin’s are forced to deal with the problem as soon as they disable a plugin + + Disadvantages: + - Cannot temporarily disable a plugin to aid in debugging or to reduce the load a Kibana plugin places on an ES cluster. + - Introduces a breaking change + +3. Refuse to start a migration until the plugin is enabled or it's data deleted + + Advantages: + - We force users to enable a plugin or delete the documents which prevents these documents from creating future problems like a mapping update not being compatible because there are fields which are assumed to have been migrated. + - We keep the index “clean”. + + Disadvantages: + - Since users have to take down outdated nodes before they can start the upgrade, they have to enter the downtime window before they know about this problem. This prolongs the downtime window and in many cases might cause an operations team to have to reschedule their downtime window to give them time to investigate the documents that need to be deleted. Logging an error on every startup could warn users ahead of time to mitigate this. + - We don’t expose Kibana logs on Cloud so this will have to be escalated to support and could take 48hrs to resolve (users can safely rollback, but without visibility into the logs they might not know this). Exposing Kibana logs is on the cloud team’s roadmap. + - It might not be obvious just from the saved object type, which plugin created these objects. + - Introduces a breaking change in the upgrade behaviour + +4. Use a hash of enabled plugins as part of the target index name + Using a migration target index name like + `.kibana_7.10.0_${hash(enabled_plugins)}_001` we can migrate all documents + every time a plugin is enabled / disabled. + + Advantages: + - Outdated documents belonging to disabled plugins will be upgraded as soon + as the plugin is enabled again. + + Disadvantages: + - Disabling / enabling a plugin will cause downtime (breaking change). + - When a plugin is enabled, disabled and enabled again our target index + will be an existing outdated index which needs to be deleted and + re-cloned. Without a way to check if the index is outdated, we cannot + deterministically perform the delete and re-clone operation without + coordination. + +5. Transform outdated documents (step 7) on every startup + Advantages: + - Outdated documents belonging to disabled plugins will be upgraded as soon + as the plugin is enabled again. + + Disadvantages: + - Orphan documents are retained indefinitely so there's still a potential + for future problems. + - Slightly slower startup time since we have to query for outdated + documents every time. + +We prefer option (3) since it provides flexibility for disabling plugins in +the same version while also protecting users' data in all cases during an +upgrade migration. However, because this is a breaking change we will +implement (5) during 7.x and only implement (3) during 8.x. + +# 5. Alternatives +## 5.1 Rolling upgrades +We considered implementing rolling upgrades to provide zero downtime +migrations. However, this would introduce significant complexity for plugins: +they will need to maintain up and down migration transformations and ensure +that queries match both current and outdated documents across all +versions. Although we can afford the once-off complexity of implementing +rolling upgrades, the complexity burden of maintaining plugins that support +rolling-upgrades will slow down all development in Kibana. Since a predictable +downtime window is sufficient for our users, we decided against trying to +achieve zero downtime with rolling upgrades. See "Rolling upgrades" in +https://github.com/elastic/kibana/issues/52202 for more information. + +## 5.2 Single node migrations coordinated through a lease/lock +This alternative is a proposed algorithm for coordinating migrations so that +these only happen on a single node and therefore don't have the restrictions +found in [(4.2.1.1)](#4311-restrictions). We decided against this algorithm +primarily because it is a lot more complex, but also because it could still +require manual intervention to retry from certain unlikely edge cases. + +
+ It's impossible to guarantee that a single node performs the + migration and automatically retry failed migrations. + +Coordination should ensure that only one Kibana node performs the migration at +a given time which can be achived with a distributed lock built on top of +Elasticsearch. For the Kibana cluster to be able to retry a failed migration, +requires a specialized lock which expires after a given amount of inactivity. +We will refer to such expiring locks as a "lease". + +If a Kibana process stalls, it is possible that the process' lease has expired +but the process doesn't yet recognize this and continues the migration. To +prevent this from causing data loss each lease should be accompanied by a +"guard" that prevents all writes after the lease has expired. See +[how to do distributed +locking](https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html) +for an in-depth discussion. + +Elasticsearch doesn't provide any building blocks for constructing such a guard. +
+ +However, we can implement a lock (that never expires) with strong +data-consistency guarantees. Because there’s no expiration, a failure between +obtaining the lock and releasing it will require manual intervention. Instead +of trying to accomplish the entire migration after obtaining a lock, we can +only perform the last step of the migration process, moving the aliases, with +a lock. A permanent failure in only this last step is not impossible, but very +unlikely. + +### 5.2.1 Migration algorithm +1. Obtain a document lock (see [5.2.2 Document lock + algorithm](#522-document-lock-algorithm)). Convert the lock into a "weak + lease" by expiring locks for nodes which aren't active (see [4.2.2.4 + Checking for lease expiry](#4324-checking-for-lease-expiry)). This "weak + lease" doesn't require strict guarantees since it's only used to prevent + multiple Kibana nodes from performing a migration in parallel to reduce the + load on Elasticsearch. +2. Migrate data into a new process specific index (we could use the process + UUID that’s used in the lease document like + `.kibana_3ef25ff1-090a-4335-83a0-307a47712b4e`). +3. Obtain a document lock (see [5.2.2 Document lock + algorithm](#522-document-lock-algorithm)). +4. Finish the migration by pointing `.kibana` → + `.kibana_3ef25ff1-090a-4335-83a0-307a47712b4e`. This automatically releases + the document lock (and any leases) because the new index will contain an + empty `kibana_cluster_state`. + +If a process crashes or is stopped after (3) but before (4) the lock will have +to be manually removed by deleting the `kibana_cluster_state` document from +`.kibana` or restoring from a snapshot. + +### 5.2.2 Document lock algorithm +To improve on the existing Saved Objects migrations lock, a locking algorithm +needs to satisfy the following requirements: +- Must guarantee that only a single node can obtain the lock. Since we can + only provide strong data-consistency guarantees on the document level in + Elasticsearch our locking mechanism needs to be based on a document. +- Manually removing the lock + - shouldn't have any risk of accidentally causing data loss. + - can be done with a single command that's always the same (shouldn’t + require trying to find `n` for removing the correct `.kibana_n` index). +- Must be easy to retrieve the lock/cluster state to aid in debugging or to + provide visibility. + +Algorithm: +1. Node reads `kibana_cluster_state` lease document from `.kibana` +2. It sends a heartbeat every `heartbeat_interval` seconds by sending an + update operation that adds it’s UUID to the `nodes` array and sets the + `lastSeen` value to the current local node time. If the update fails due to + a version conflict the update operation is retried after a random delay by + fetching the document again and attempting the update operation once more. +3. To obtain a lease, a node: + 1. Fetches the `kibana_cluster_state` document + 2. If all the nodes’ `hasLock === false` it sets it’s own `hasLock` to + true and attempts to write the document. If the update fails + (presumably because of another node’s heartbeat update) it restarts the + process to obtain a lease from step (3). + 3. If another nodes’ `hasLock === true` the node failed to acquire a + lock and waits until the active lock has expired before attempting to + obtain a lock again. +4. Once a node is done with its lock, it releases it by fetching and then + updating `hasLock = false`. The fetch + update operations are retried until + this node’s `hasLock === false`. + +Each machine writes a `UUID` to a file, so a single machine may have multiple +processes with the same Kibana `UUID`, so we should rather generate a new UUID +just for the lifetime of this process. + +`KibanaClusterState` document format: +```js + nodes: { + "852bd94e-5121-47f3-a321-e09d9db8d16e": { + version: "7.6.0", + lastSeen: [ 1114793, 555149266 ], // hrtime() big int timestamp + hasLease: true, + hasLock: false, + }, + "8d975c5b-cbf6-4418-9afb-7aa3ea34ac90": { + version: "7.6.0", + lastSeen: [ 1114862, 841295591 ], + hasLease: false, + hasLock: false, + }, + "3ef25ff1-090a-4335-83a0-307a47712b4e": { + version: "7.6.0", + lastSeen: [ 1114877, 611368546 ], + hasLease: false, + hasLock: false, + }, + }, + oplog: [ + {op: 'ACQUIRE_LOCK', node: '852bd94e...', timestamp: '2020-04-20T11:58:56.176Z'} + ] +} +``` + +### 5.2.3 Checking for "weak lease" expiry +The simplest way to check for lease expiry is to inspect the `lastSeen` value. +If `lastSeen + expiry_timeout > now` the lock is considered expired. If there +are clock drift or daylight savings time adjustments, there’s a risk that a +node loses it’s lease before `expiry_timeout` has occurred. Since losing a +lock prematurely will not lead to data loss it’s not critical that the +expiry time is observed under all conditions. + +A slightly safer approach is to use a monotonically increasing clock +(`process.hrtime()`) and relative time to determine expiry. Using a +monotonically increasing clock guarantees that the clock will always increase +even if the system time changes due to daylight savings time, NTP clock syncs, +or manually setting the time. To check for expiry, other nodes poll the +cluster state document. Once they see that the `lastSeen` value has increased, +they capture the current hr time `current_hr_time` and starts waiting until +`process.hrtime() - current_hr_time > expiry_timeout` if at that point +`lastSeen` hasn’t been updated the lease is considered to have expired. This +means other nodes can take up to `2*expiry_timeout` to recognize an expired +lease, but a lease will never expire prematurely. + +Any node that detects an expired lease can release that lease by setting the +expired node’s `hasLease = false`. It can then attempt to acquire its lease. + +## 5.3 Minimize data loss with mixed Kibana versions during 7.x +When multiple versions of Kibana are running at the same time, writes from the +outdated node can end up either in the outdated Kibana index, the newly +migrated index, or both. New documents added (and some updates) into the old +index while a migration is in-progress will be lost. Writes that end up in the +new index will be in an outdated format. This could cause queries on the data +to only return a subset of the results which leads to incorrect results or +silent data loss. + +Minimizing data loss from mixed 7.x versions, introduces two additional steps +to rollback to a previous version without a snapshot: +1. (existing) Point the `.kibana` alias to the previous Kibana index `.kibana_n-1` +2. (existing) Delete `.kibana_n` +3. (new) Enable writes on `.kibana_n-1` +4. (new) Delete the dummy "version lock" document from `.kibana_n-1` + +Since our documentation and server logs have implicitly encouraged users to +rollback without using snapshots, many users might have to rely on these +additional migration steps to perform a rollback. Since even the existing +steps are error prone, introducing more steps will likely introduce more +problems than what it solves. + +1. All future versions of Kibana 7.x will use the `.kibana_saved_objects` + alias to locate the current index. If `.kibana_saved_objects` doesn't + exist, newer versions will fallback to reading `.kibana`. +2. All future versions of Kibana will locate the index that + `.kibana_saved_objects` points to and then read and write directly from + the _index_ instead of the alias. +3. Before starting a migration: + 1. Write a new dummy "version lock" document to the `.kibana` index with a + `migrationVersion` set to the current version of Kibana. If an outdated + node is started up after a migration was started it will detect that + newer documents are present in the index and refuse to start up. + 2. Set the outdated index to read-only. Since `.kibana` is never advanced, + it will be pointing to a read-only index which prevent writes from + 6.8+ releases which are already online. + +## 5.4 In-place migrations that re-use the same index (8.0) +> We considered an algorithm that re-uses the same index for migrations and an approach to minimize data-loss if our upgrade procedures aren't followed. This is no longer our preferred approach because of several downsides: +> - It requires taking snapshots to prevent data loss so we can only release this in 8.x +> - Minimizing data loss with unsupported upgrade configurations adds significant complexity and still doesn't guarantee that data isn't lost. + +### 5.4.1 Migration algorithm (8.0): +1. Exit Kibana with a fatal error if a newer node has started a migration by + checking for: + 1. Documents with a newer `migrationVersion` numbers. +2. If the mappings are out of date, update the mappings to the combination of + the index's current mappings and the expected mappings. +3. If there are outdated documents, migrate these in batches: + 1. Read a batch of outdated documents from the index. + 2. Transform documents by applying the migration transformation functions. + 3. Update the document batch in the same index using optimistic concurrency + control. If a batch fails due to an update version mismatch continue + migrating the other batches. + 4. If a batch fails due other reasons repeat the entire migration process. +4. If any of the batches in step (3.3) failed, repeat the entire migration + process. This ensures that in-progress bulk update operations from an + outdated node won't lead to unmigrated documents still being present after + the migration. +5. Once all documents are up to date, the migration is complete and Kibana can + start serving traffic. + +Advantages: +- Not duplicating all documents into a new index will speed up migrations and + reduce the downtime window. This will be especially important for the future + requirement to support > 10k or > 100k documents. +- We can check the health of an existing index before starting the migration, + but we cannot detect what kind of failures might occur while creating a new + index. Whereas retrying migrations will eventually recover from the errors + in (3.3), re-using an index allows us to detect these problems before trying + and avoid errors like (3.3.1) altogether. +- Single index to backup instead of “index pattern” that matches any + `.kibana_n`. +- Simplifies Kibana system index Elasticsearch plugin since it needs to work + on one index per "tenant". +- By leveraging optimistic concurrency control we can further minimize data + loss for unsupported upgrade configurations in the future. + +Drawbacks: +- Cannot make breaking mapping changes (even though it was possible, we have not + introduced a breaking mapping change during 7.x). +- Rollback is only possible by restoring a snapshot which requires educating + users to ensure that they don't rely on `.kibana_n` indices as backups. + (Apart from the need to educate users, snapshot restores provide many + benefits). +- It narrows the second restriction under (4.2.1) even further: migrations + cannot rely on any state that could change as part of a migration because we + can no longer use the previous index as a snapshot of unmigrated state. +- We can’t automatically perform a rollback from a half-way done migration. +- It’s impossible to provide read-only functionality for outdated nodes which + means we can't achieve goal (2.7). + +### 5.4.2 Minimizing data loss with unsupported upgrade configurations (8.0) +> This alternative can reduce some data loss when our upgrade procedure isn't +> followed with the algorithm in (5.4.1). + +Even if (4.5.2) is the only supported upgrade procedure, we should try to +prevent data loss when these instructions aren't followed. + +To prevent data loss we need to prevent any writes from older nodes. We use +a version-specific alias for this purpose. Each time a migration is started, +all other aliases are removed. However, aliases are stored inside +Elasticsearch's ClusterState and this state could remain inconsistent between +nodes for an unbounded amount of time. In addition, bulk operations that were +accepted before the alias was removed will continue to run even after removing +the alias. + +As a result, Kibana cannot guarantee that there would be no data loss but +instead, aims to minimize it as much as possible by adding the bold sections +to the migration algorithm from (5.4.1) + +1. **Disable `action.auto_create_index` for the Kibana system indices.** +2. Exit Kibana with a fatal error if a newer node has started a migration by + checking for: + 1. **Version-specific aliases on the `.kibana` index with a newer version.** + 2. Documents with newer `migrationVersion` numbers. +3. **Remove all other aliases and create a new version-specific alias for + reading and writing to the `.kibana` index .e.g `.kibana_8.0.1`. During and + after the migration, all saved object reads and writes use this alias + instead of reading or writing directly to the index. By using the atomic + `POST /_aliases` API we minimize the chance that an outdated node creating + new outdated documents can cause data loss.** +4. **Wait for the default bulk operation timeout of 30s. This ensures that any + bulk operations accepted before the removal of the alias have either + completed or returned a timeout error to it's initiator.** +5. If the mappings are out of date, update the mappings **through the alias** + to the combination of the index's current mappings and the expected + mappings. **If this operation fails due to an index missing exception (most + likely because another node removed our version-specific alias) repeat the + entire migration process.** +6. If there are outdated documents, migrate these in batches: + 1. Read a batch of outdated documents from `.kibana_n`. + 2. Transform documents by applying the migration functions. + 3. Update the document batch in the same index using optimistic concurrency + control. If a batch fails due to an update version mismatch continue + migrating the other batches. + 4. If a batch fails due other reasons repeat the entire migration process. +7. If any of the batches in step (6.3) failed, repeat the entire migration + process. This ensures that in-progress bulk update operations from an + outdated node won't lead to unmigrated documents still being present after + the migration. +8. Once all documents are up to date, the migration is complete and Kibana can + start serving traffic. + +Steps (2) and (3) from the migration algorithm in minimize the chances of the +following scenarios occuring but cannot guarantee it. It is therefore useful +to enumarate some scenarios and their worst case impact: +1. An outdated node issued a bulk create to it's version-specific alias. + Because a user doesn't wait for all traffic to drain a newer node starts + it's migration before the bulk create was complete. Since this bulk create + was accepted before the newer node deleted the previous version-specific + aliases, it is possible that the index now contains some outdated documents + that the new node is unaware of and doesn't migrate. Although these outdated + documents can lead to inconsistent query results and data loss, step (4) + ensures that an error will be returned to the node that created these + objects. +2. A 8.1.0 node and a 8.2.0 node starts migrating a 8.0.0 index in parallel. + Even though the 8.2.0 node will remove the 8.1.0 version-specific aliases, + the 8.1.0 node could have sent an bulk update operation that got accepted + before its alias was removed. When the 8.2.0 node tries to migrate these + 8.1.0 documents it gets a version conflict but cannot be sure if this was + because another node of the same version migrated this document (which can + safely be ignored) or interference from a different Kibana version. The + 8.1.0 node will hit the error in step (6.3) and restart the migration but + then ultimately fail at step (2). The 8.2.0 node will repeat the entire + migration process from step (7) thus ensuring that all documents are up to + date. +3. A race condition with another Kibana node on the same version, but with + different enabled plugins caused this node's required mappings to be + overwritten. If this causes a mapper parsing exception in step (6.3) we can + restart the migration. Because updating the mappings is additive and saved + object types are unique to a plugin, restarting the migration will allow + the node to update the mappings to be compatible with node's plugins. Both + nodes will be able to successfully complete the migration of their plugins' + registered saved object types. However, if the migration doesn't trigger a + mapper parsing exception the incompatible mappings would go undetected + which can cause future problems like write failures or inconsistent query + results. + +## 5.5 Tag objects as “invalid” if their transformation fails +> This alternative prevents a failed migration when there's a migration transform function bug or a document with invalid data. Although it seems preferable to not fail the entire migration because of a single saved object type's migration transform bug or a single invalid document this has several pitfalls: +> 1. When an object fails to migrate the data for that saved object type becomes inconsistent. This could load to a critical feature being unavailable to a user leaving them with no choice but to downgrade. +> 2. Because Kibana starts accepting traffic after encountering invalid objects a rollback will lead to data loss leaving users with no clean way to recover. +> As a result we prefer to let an upgrade fail and making it easy for users to rollback until they can resolve the root cause. + +> Achieves goals: (2.2) +> Mitigates Errors (3.1), (3.2) + +1. Tag objects as “invalid” if they cause an exception when being transformed, + but don’t fail the entire migration. +2. Log an error message informing administrators that there are invalid + objects which require inspection. For each invalid object, provide an error + stack trace to aid in debugging. +3. Administrators should be able to generate a migration report (similar to + the one dry run migrations create) which is an NDJSON export of all objects + tagged as “invalid”. + 1. Expose this as an HTTP API first + 2. (later) Notify administrators and allow them to export invalid objects + from the Kibana UI. +4. When an invalid object is read, the Saved Objects repository will throw an + invalid object exception which should include a link to the documentation + to help administrators resolve migration bugs. +5. Educate Kibana developers to no longer simply write back an unmigrated + document if an exception occurred. A migration function should either + successfully transform the object or throw. + +# 6. How we teach this +1. Update documentation and server logs to start educating users to depend on + snapshots for Kibana rollbacks. +2. Update developer documentation and educate developers with best practices + for writing migration functions. + +# 7. Unresolved questions +1. When cloning an index we can only ever add new fields to the mappings. When + a saved object type or specific field is removed, the mappings will remain + until we re-index. Is it sufficient to only re-index every major? How do we + track the field count as it grows over every upgrade? +2. More generally, how do we deal with the growing field count approaching the + default limit of 1000? diff --git a/src/cli/cluster/cluster_manager.ts b/src/cli/cluster/cluster_manager.ts index 78472bb3f517d..3d81185e8a313 100644 --- a/src/cli/cluster/cluster_manager.ts +++ b/src/cli/cluster/cluster_manager.ts @@ -19,6 +19,7 @@ import { resolve } from 'path'; import { format as formatUrl } from 'url'; +import Fs from 'fs'; import opn from 'opn'; import { REPO_ROOT } from '@kbn/utils'; @@ -227,22 +228,26 @@ export class ClusterManager { fromRoot('src/legacy/server'), fromRoot('src/legacy/ui'), fromRoot('src/legacy/utils'), - fromRoot('x-pack/legacy/common'), - fromRoot('x-pack/legacy/plugins'), - fromRoot('x-pack/legacy/server'), fromRoot('config'), ...extraPaths, ].map((path) => resolve(path)) ) ); + for (const watchPath of watchPaths) { + if (!Fs.existsSync(fromRoot(watchPath))) { + throw new Error( + `A watch directory [${watchPath}] does not exist, which will cause chokidar to fail. Either make sure the directory exists or remove it as a watch source in the ClusterManger` + ); + } + } + const ignorePaths = [ /[\\\/](\..*|node_modules|bower_components|target|public|__[a-z0-9_]+__|coverage)([\\\/]|$)/, /\.test\.(js|tsx?)$/, /\.md$/, /debug\.log$/, ...pluginInternalDirsIgnore, - fromRoot('src/legacy/server/sass/__tmp__'), fromRoot('x-pack/plugins/reporting/chromium'), fromRoot('x-pack/plugins/security_solution/cypress'), fromRoot('x-pack/plugins/apm/e2e'), @@ -253,7 +258,6 @@ export class ClusterManager { fromRoot('x-pack/plugins/lists/server/scripts'), fromRoot('x-pack/plugins/security_solution/scripts'), fromRoot('x-pack/plugins/security_solution/server/lib/detection_engine/scripts'), - 'plugins/java_languageserver', ]; this.watcher = chokidar.watch(watchPaths, { diff --git a/src/core/public/apm_system.ts b/src/core/public/apm_system.ts new file mode 100644 index 0000000000000..0a18f02c97293 --- /dev/null +++ b/src/core/public/apm_system.ts @@ -0,0 +1,75 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * This is the entry point used to boot the frontend when serving a application + * that lives in the Kibana Platform. + * + * Any changes to this file should be kept in sync with + * src/legacy/ui/ui_bundles/app_entry_template.js + */ +import type { InternalApplicationStart } from './application'; + +interface ApmConfig { + // AgentConfigOptions is not exported from @elastic/apm-rum + globalLabels?: Record; +} + +interface StartDeps { + application: InternalApplicationStart; +} + +export class ApmSystem { + private readonly enabled: boolean; + /** + * `apmConfig` would be populated with relevant APM RUM agent + * configuration if server is started with `ELASTIC_APM_ACTIVE=true` + */ + constructor(private readonly apmConfig?: ApmConfig) { + this.enabled = process.env.IS_KIBANA_DISTRIBUTABLE !== 'true' && apmConfig != null; + } + + async setup() { + if (!this.enabled) return; + const { init, apm } = await import('@elastic/apm-rum'); + const { globalLabels, ...apmConfig } = this.apmConfig!; + if (globalLabels) { + apm.addLabels(globalLabels); + } + + init(apmConfig); + } + + async start(start?: StartDeps) { + if (!this.enabled || !start) return; + /** + * Register listeners for navigation changes and capture them as + * route-change transactions after Kibana app is bootstrapped + */ + start.application.currentAppId$.subscribe((appId) => { + const apmInstance = (window as any).elasticApm; + if (appId && apmInstance && typeof apmInstance.startTransaction === 'function') { + apmInstance.startTransaction(`/app/${appId}`, 'route-change', { + managed: true, + canReuse: true, + }); + } + }); + } +} diff --git a/src/core/public/chrome/ui/header/__snapshots__/header.test.tsx.snap b/src/core/public/chrome/ui/header/__snapshots__/header.test.tsx.snap index 8937ecb4d9b4e..2db3eede16e25 100644 --- a/src/core/public/chrome/ui/header/__snapshots__/header.test.tsx.snap +++ b/src/core/public/chrome/ui/header/__snapshots__/header.test.tsx.snap @@ -1907,62 +1907,133 @@ exports[`Header renders 1`] = ` Object { "borders": "none", "items": Array [ - + , + /> + , ], }, Object { "borders": "none", "items": Array [ + + + , - + + /> + @@ -3117,6 +3198,24 @@ exports[`Header renders 1`] = ` +
+ +
+
+
- -
- ], + items: [ + + + , + ], }), borders: 'none', }, { items: [ + + + , - - diff --git a/src/core/public/kbn_bootstrap.test.mocks.ts b/src/core/public/kbn_bootstrap.test.mocks.ts new file mode 100644 index 0000000000000..30f292280a135 --- /dev/null +++ b/src/core/public/kbn_bootstrap.test.mocks.ts @@ -0,0 +1,50 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { applicationServiceMock } from './application/application_service.mock'; +import { fatalErrorsServiceMock } from './fatal_errors/fatal_errors_service.mock'; +export const fatalErrorMock = fatalErrorsServiceMock.createSetupContract(); +export const coreSystemMock = { + setup: jest.fn().mockResolvedValue({ + fatalErrors: fatalErrorMock, + }), + start: jest.fn().mockResolvedValue({ + application: applicationServiceMock.createInternalStartContract(), + }), +}; +jest.doMock('./core_system', () => ({ + CoreSystem: jest.fn().mockImplementation(() => coreSystemMock), +})); + +export const apmSystem = { + setup: jest.fn().mockResolvedValue(undefined), + start: jest.fn().mockResolvedValue(undefined), +}; +export const ApmSystemConstructor = jest.fn().mockImplementation(() => apmSystem); +jest.doMock('./apm_system', () => ({ + ApmSystem: ApmSystemConstructor, +})); + +export const i18nLoad = jest.fn().mockResolvedValue(undefined); +jest.doMock('@kbn/i18n', () => ({ + i18n: { + ...jest.requireActual('@kbn/i18n').i18n, + load: i18nLoad, + }, +})); diff --git a/src/core/public/kbn_bootstrap.test.ts b/src/core/public/kbn_bootstrap.test.ts new file mode 100644 index 0000000000000..9cd16dd6ab9df --- /dev/null +++ b/src/core/public/kbn_bootstrap.test.ts @@ -0,0 +1,54 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { apmSystem, fatalErrorMock, i18nLoad } from './kbn_bootstrap.test.mocks'; +import { __kbnBootstrap__ } from './'; + +describe('kbn_bootstrap', () => { + beforeAll(() => { + const metadata = { + i18n: { translationsUrl: 'http://localhost' }, + vars: { apmConfig: null }, + }; + // eslint-disable-next-line no-unsanitized/property + document.body.innerHTML = ` +`; + }); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('does not report a fatal error if apm load fails', async () => { + apmSystem.setup.mockRejectedValueOnce(new Error('reason')); + const consoleSpy = jest.spyOn(console, 'warn').mockImplementationOnce(() => undefined); + + await __kbnBootstrap__(); + + expect(fatalErrorMock.add).toHaveBeenCalledTimes(0); + expect(consoleSpy).toHaveBeenCalledTimes(1); + }); + + it('reports a fatal error if i18n load fails', async () => { + i18nLoad.mockRejectedValueOnce(new Error('reason')); + + await __kbnBootstrap__(); + + expect(fatalErrorMock.add).toHaveBeenCalledTimes(1); + }); +}); diff --git a/src/core/public/kbn_bootstrap.ts b/src/core/public/kbn_bootstrap.ts index a108b5aaa47ec..a083196004cf4 100644 --- a/src/core/public/kbn_bootstrap.ts +++ b/src/core/public/kbn_bootstrap.ts @@ -17,70 +17,38 @@ * under the License. */ -/** - * This is the entry point used to boot the frontend when serving a application - * that lives in the Kibana Platform. - * - * Any changes to this file should be kept in sync with - * src/legacy/ui/ui_bundles/app_entry_template.js - */ - import { i18n } from '@kbn/i18n'; import { CoreSystem } from './core_system'; +import { ApmSystem } from './apm_system'; /** @internal */ -export function __kbnBootstrap__() { +export async function __kbnBootstrap__() { const injectedMetadata = JSON.parse( document.querySelector('kbn-injected-metadata')!.getAttribute('data')! ); - /** - * `apmConfig` would be populated with relavant APM RUM agent - * configuration if server is started with `ELASTIC_APM_ACTIVE=true` - */ - const apmConfig = injectedMetadata.vars.apmConfig; - const APM_ENABLED = process.env.IS_KIBANA_DISTRIBUTABLE !== 'true' && apmConfig != null; - - if (APM_ENABLED) { - // eslint-disable-next-line @typescript-eslint/no-var-requires - const { init, apm } = require('@elastic/apm-rum'); - if (apmConfig.globalLabels) { - apm.addLabels(apmConfig.globalLabels); - } - init(apmConfig); + let i18nError: Error | undefined; + const apmSystem = new ApmSystem(injectedMetadata.vars.apmConfig); + + await Promise.all([ + // eslint-disable-next-line no-console + apmSystem.setup().catch(console.warn), + i18n.load(injectedMetadata.i18n.translationsUrl).catch((error) => { + i18nError = error; + }), + ]); + + const coreSystem = new CoreSystem({ + injectedMetadata, + rootDomElement: document.body, + browserSupportsCsp: !(window as any).__kbnCspNotEnforced__, + }); + + const setup = await coreSystem.setup(); + if (i18nError && setup) { + setup.fatalErrors.add(i18nError); } - i18n - .load(injectedMetadata.i18n.translationsUrl) - .catch((e) => e) - .then(async (i18nError) => { - const coreSystem = new CoreSystem({ - injectedMetadata, - rootDomElement: document.body, - browserSupportsCsp: !(window as any).__kbnCspNotEnforced__, - }); - - const setup = await coreSystem.setup(); - if (i18nError && setup) { - setup.fatalErrors.add(i18nError); - } - - const start = await coreSystem.start(); - - if (APM_ENABLED && start) { - /** - * Register listeners for navigation changes and capture them as - * route-change transactions after Kibana app is bootstrapped - */ - start.application.currentAppId$.subscribe((appId) => { - const apmInstance = (window as any).elasticApm; - if (appId && apmInstance && typeof apmInstance.startTransaction === 'function') { - apmInstance.startTransaction(`/app/${appId}`, 'route-change', { - managed: true, - canReuse: true, - }); - } - }); - } - }); + const start = await coreSystem.start(); + await apmSystem.start(start); } diff --git a/src/core/public/notifications/toasts/__snapshots__/global_toast_list.test.tsx.snap b/src/core/public/notifications/toasts/__snapshots__/global_toast_list.test.tsx.snap index 2b3bdb65708a3..0ed32a1dbccb2 100644 --- a/src/core/public/notifications/toasts/__snapshots__/global_toast_list.test.tsx.snap +++ b/src/core/public/notifications/toasts/__snapshots__/global_toast_list.test.tsx.snap @@ -2,6 +2,7 @@ exports[`renders matching snapshot 1`] = ` { public render() { return ( this.props.dismissToast(id)} diff --git a/src/core/public/public.api.md b/src/core/public/public.api.md index 7179c6cf8b133..5970c9a8571c4 100644 --- a/src/core/public/public.api.md +++ b/src/core/public/public.api.md @@ -42,7 +42,7 @@ import { UnregisterCallback } from 'history'; import { UserProvidedValues as UserProvidedValues_2 } from 'src/core/server/types'; // @internal (undocumented) -export function __kbnBootstrap__(): void; +export function __kbnBootstrap__(): Promise; // @public (undocumented) export interface App { diff --git a/src/core/server/config/deprecation/core_deprecations.ts b/src/core/server/config/deprecation/core_deprecations.ts index 2701edcf44e03..6c85cfbed8e82 100644 --- a/src/core/server/config/deprecation/core_deprecations.ts +++ b/src/core/server/config/deprecation/core_deprecations.ts @@ -136,6 +136,8 @@ export const coreDeprecationProvider: ConfigDeprecationProvider = ({ rename, unu unusedFromRoot('optimize.workers'), unusedFromRoot('optimize.profile'), unusedFromRoot('optimize.validateSyntaxOfNodeModules'), + unusedFromRoot('elasticsearch.preserveHost'), + unusedFromRoot('elasticsearch.startupTimeout'), rename('cpu.cgroup.path.override', 'ops.cGroupOverrides.cpuPath'), rename('cpuacct.cgroup.path.override', 'ops.cGroupOverrides.cpuAcctPath'), configPathDeprecation, diff --git a/src/core/server/elasticsearch/elasticsearch_config.ts b/src/core/server/elasticsearch/elasticsearch_config.ts index cac8c75a04486..cfc1edfbd318e 100644 --- a/src/core/server/elasticsearch/elasticsearch_config.ts +++ b/src/core/server/elasticsearch/elasticsearch_config.ts @@ -45,7 +45,6 @@ export const configSchema = schema.object({ hosts: schema.oneOf([hostURISchema, schema.arrayOf(hostURISchema, { minSize: 1 })], { defaultValue: 'http://localhost:9200', }), - preserveHost: schema.boolean({ defaultValue: true }), username: schema.maybe( schema.conditional( schema.contextRef('dist'), @@ -71,7 +70,6 @@ export const configSchema = schema.object({ shardTimeout: schema.duration({ defaultValue: '30s' }), requestTimeout: schema.duration({ defaultValue: '30s' }), pingTimeout: schema.duration({ defaultValue: schema.siblingRef('requestTimeout') }), - startupTimeout: schema.duration({ defaultValue: '5s' }), logQueries: schema.boolean({ defaultValue: false }), ssl: schema.object( { diff --git a/src/core/server/mocks.ts b/src/core/server/mocks.ts index e9b345317e999..3030cd9f4e0cb 100644 --- a/src/core/server/mocks.ts +++ b/src/core/server/mocks.ts @@ -67,7 +67,6 @@ export function pluginInitializerContextConfigMock(config: T) { shardTimeout: duration('30s'), requestTimeout: duration('30s'), pingTimeout: duration('30s'), - startupTimeout: duration('30s'), }, path: { data: '/tmp' }, savedObjects: { diff --git a/src/core/server/plugins/plugin_context.test.ts b/src/core/server/plugins/plugin_context.test.ts index cb4e8f20be982..7b2a5cd3b35f8 100644 --- a/src/core/server/plugins/plugin_context.test.ts +++ b/src/core/server/plugins/plugin_context.test.ts @@ -91,7 +91,6 @@ describe('createPluginInitializerContext', () => { shardTimeout: duration(30, 's'), requestTimeout: duration(30, 's'), pingTimeout: duration(30, 's'), - startupTimeout: duration(5, 's'), }, path: { data: fromRoot('data') }, savedObjects: { maxImportPayloadBytes: new ByteSizeValue(10485760) }, diff --git a/src/core/server/plugins/types.ts b/src/core/server/plugins/types.ts index 9de181124a349..0dd481687eb59 100644 --- a/src/core/server/plugins/types.ts +++ b/src/core/server/plugins/types.ts @@ -262,7 +262,7 @@ export interface Plugin< export const SharedGlobalConfigKeys = { // We can add more if really needed kibana: ['index', 'autocompleteTerminateAfter', 'autocompleteTimeout'] as const, - elasticsearch: ['shardTimeout', 'requestTimeout', 'pingTimeout', 'startupTimeout'] as const, + elasticsearch: ['shardTimeout', 'requestTimeout', 'pingTimeout'] as const, path: ['data'] as const, savedObjects: ['maxImportPayloadBytes'] as const, }; diff --git a/src/core/server/server.api.md b/src/core/server/server.api.md index cc51d27589ce7..450be3b0e9a6c 100644 --- a/src/core/server/server.api.md +++ b/src/core/server/server.api.md @@ -348,7 +348,6 @@ export const config: { sniffInterval: Type; sniffOnConnectionFault: Type; hosts: Type; - preserveHost: Type; username: Type; password: Type; requestHeadersWhitelist: Type; @@ -356,7 +355,6 @@ export const config: { shardTimeout: Type; requestTimeout: Type; pingTimeout: Type; - startupTimeout: Type; logQueries: Type; ssl: import("@kbn/config-schema").ObjectType<{ verificationMode: Type<"none" | "certificate" | "full">; diff --git a/src/dev/build/tasks/os_packages/docker_generator/resources/bin/kibana-docker b/src/dev/build/tasks/os_packages/docker_generator/resources/bin/kibana-docker index 884e7e38494cc..2770f288b6af8 100755 --- a/src/dev/build/tasks/os_packages/docker_generator/resources/bin/kibana-docker +++ b/src/dev/build/tasks/os_packages/docker_generator/resources/bin/kibana-docker @@ -8,11 +8,11 @@ # # eg. Setting the environment variable: # -# ELASTICSEARCH_STARTUPTIMEOUT=60 +# ELASTICSEARCH_LOGQUERIES=true # # will cause Kibana to be invoked with: # -# --elasticsearch.startupTimeout=60 +# --elasticsearch.logQueries=true kibana_vars=( console.enabled @@ -30,7 +30,6 @@ kibana_vars=( elasticsearch.logQueries elasticsearch.password elasticsearch.pingTimeout - elasticsearch.preserveHost elasticsearch.requestHeadersWhitelist elasticsearch.requestTimeout elasticsearch.shardTimeout @@ -47,7 +46,6 @@ kibana_vars=( elasticsearch.ssl.truststore.path elasticsearch.ssl.truststore.password elasticsearch.ssl.verificationMode - elasticsearch.startupTimeout elasticsearch.username i18n.locale interpreter.enableInVisualize diff --git a/src/dev/precommit_hook/casing_check_config.js b/src/dev/precommit_hook/casing_check_config.js index ba58dcdfa4d58..9cd6ca6801bc3 100644 --- a/src/dev/precommit_hook/casing_check_config.js +++ b/src/dev/precommit_hook/casing_check_config.js @@ -50,14 +50,12 @@ export const IGNORE_FILE_GLOBS = [ 'vars/*', '.ci/pipeline-library/**/*', - // Files in this directory must match a pre-determined name in some cases. - 'x-pack/plugins/canvas/storybook/*', - // filename must match language code which requires capital letters '**/translations/*.json', - // filename is required by storybook - 'packages/kbn-storybook/storybook_config/preview-head.html', + // Storybook has predetermined filesnames + '**/preview-body.html', + '**/preview-head.html', // filename required by api-extractor 'api-documenter.json', diff --git a/src/dev/run_check_published_api_changes.ts b/src/dev/run_check_published_api_changes.ts index 28e8570812915..984e013114c9e 100644 --- a/src/dev/run_check_published_api_changes.ts +++ b/src/dev/run_check_published_api_changes.ts @@ -230,6 +230,11 @@ async function run(folder: string, { opts }: { opts: Options }): Promise`, diff --git a/src/dev/typescript/build_refs.ts b/src/dev/typescript/build_refs.ts index cbb596c185f8b..de006bd674e87 100644 --- a/src/dev/typescript/build_refs.ts +++ b/src/dev/typescript/build_refs.ts @@ -18,12 +18,18 @@ */ import execa from 'execa'; +import Path from 'path'; import { run, ToolingLog } from '@kbn/dev-utils'; -export async function buildRefs(log: ToolingLog) { +export async function buildAllRefs(log: ToolingLog) { + await buildRefs(log, 'tsconfig.refs.json'); + await buildRefs(log, Path.join('x-pack', 'tsconfig.refs.json')); +} + +async function buildRefs(log: ToolingLog, projectPath: string) { try { - log.info('Building TypeScript projects refs...'); - await execa(require.resolve('typescript/bin/tsc'), ['-b', 'tsconfig.refs.json']); + log.debug(`Building TypeScript projects refs for ${projectPath}...`); + await execa(require.resolve('typescript/bin/tsc'), ['-b', projectPath]); } catch (e) { log.error(e); process.exit(1); @@ -31,7 +37,18 @@ export async function buildRefs(log: ToolingLog) { } export async function runBuildRefs() { - run(async ({ log }) => { - await buildRefs(log); - }); + run( + async ({ log, flags }) => { + await buildRefs(log, flags.project as string); + }, + { + description: 'Build TypeScript projects', + flags: { + string: ['project'], + help: ` +--project Required, path to the tsconfig.refs.file + `, + }, + } + ); } diff --git a/src/dev/typescript/projects.ts b/src/dev/typescript/projects.ts index 4d1e549e192b6..9891e9fa02c82 100644 --- a/src/dev/typescript/projects.ts +++ b/src/dev/typescript/projects.ts @@ -24,11 +24,11 @@ import { Project } from './project'; export const PROJECTS = [ new Project(resolve(REPO_ROOT, 'tsconfig.json')), - new Project(resolve(REPO_ROOT, 'src/test_utils/tsconfig.json')), - new Project(resolve(REPO_ROOT, 'src/core/tsconfig.json')), new Project(resolve(REPO_ROOT, 'test/tsconfig.json'), { name: 'kibana/test' }), new Project(resolve(REPO_ROOT, 'x-pack/tsconfig.json')), new Project(resolve(REPO_ROOT, 'x-pack/test/tsconfig.json'), { name: 'x-pack/test' }), + new Project(resolve(REPO_ROOT, 'src/test_utils/tsconfig.json')), + new Project(resolve(REPO_ROOT, 'src/core/tsconfig.json')), new Project(resolve(REPO_ROOT, 'x-pack/plugins/security_solution/cypress/tsconfig.json'), { name: 'security_solution/cypress', }), @@ -47,6 +47,12 @@ export const PROJECTS = [ ...glob .sync('packages/*/tsconfig.json', { cwd: REPO_ROOT }) .map((path) => new Project(resolve(REPO_ROOT, path))), + ...glob + .sync('src/plugins/*/tsconfig.json', { cwd: REPO_ROOT }) + .map((path) => new Project(resolve(REPO_ROOT, path))), + ...glob + .sync('x-pack/plugins/*/tsconfig.json', { cwd: REPO_ROOT }) + .map((path) => new Project(resolve(REPO_ROOT, path))), ...glob .sync('examples/*/tsconfig.json', { cwd: REPO_ROOT }) .map((path) => new Project(resolve(REPO_ROOT, path))), diff --git a/src/dev/typescript/run_type_check_cli.ts b/src/dev/typescript/run_type_check_cli.ts index 00968b7259a30..c52b9454c28be 100644 --- a/src/dev/typescript/run_type_check_cli.ts +++ b/src/dev/typescript/run_type_check_cli.ts @@ -24,7 +24,7 @@ import getopts from 'getopts'; import { execInProjects } from './exec_in_projects'; import { filterProjectsByFlag } from './projects'; -import { buildRefs } from './build_refs'; +import { buildAllRefs } from './build_refs'; export async function runTypeCheckCli() { const extraFlags: string[] = []; @@ -80,7 +80,7 @@ export async function runTypeCheckCli() { process.exit(); } - await buildRefs(log); + await buildAllRefs(log); const tscArgs = [ // composite project cannot be used with --noEmit diff --git a/src/fixtures/telemetry_collectors/constants.ts b/src/fixtures/telemetry_collectors/constants.ts index d4c9a1f85c4d7..60df05bac2aeb 100644 --- a/src/fixtures/telemetry_collectors/constants.ts +++ b/src/fixtures/telemetry_collectors/constants.ts @@ -55,3 +55,14 @@ export const externallyDefinedSchema: MakeSchemaFrom<{ locale: string }> = { export type TypeAliasWithUnion = Usage & WithUnion; export type TypeAliasWithRecord = Usage & Record; + +export type MappedTypeProps = 'prop1' | 'prop2'; + +export interface MappedTypes { + mappedTypeWithExternallyDefinedProps: { + [key in MappedTypeProps]: number; + }; + mappedTypeWithOneInlineProp: { + [key in 'prop3']: number; + }; +} diff --git a/src/fixtures/telemetry_collectors/indexed_interface_with_not_matching_schema.ts b/src/fixtures/telemetry_collectors/indexed_interface_with_not_matching_schema.ts index 0ec8d2e15c34a..b925696c96563 100644 --- a/src/fixtures/telemetry_collectors/indexed_interface_with_not_matching_schema.ts +++ b/src/fixtures/telemetry_collectors/indexed_interface_with_not_matching_schema.ts @@ -41,8 +41,9 @@ export const myCollector = makeUsageCollector({ return { something: { count_2: 2 } }; }, schema: { + // @ts-expect-error Intentionally missing count_2 something: { - count_1: { type: 'long' }, // Intentionally missing count_2 + count_1: { type: 'long' }, }, }, }); diff --git a/src/fixtures/telemetry_collectors/schema_defined_with_spreads_collector.ts b/src/fixtures/telemetry_collectors/schema_defined_with_spreads_collector.ts new file mode 100644 index 0000000000000..af9fef0bbd297 --- /dev/null +++ b/src/fixtures/telemetry_collectors/schema_defined_with_spreads_collector.ts @@ -0,0 +1,77 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { CollectorSet, MakeSchemaFrom } from '../../plugins/usage_collection/server/collector'; +import { loggerMock } from '../../core/server/logging/logger.mock'; + +const { makeUsageCollector } = new CollectorSet({ + logger: loggerMock.create(), + maximumWaitTimeForAllCollectorsInS: 0, +}); + +interface MyObject { + total: number; + type: boolean; +} + +interface Usage { + flat?: string; + my_str?: string; + my_objects: MyObject; +} + +const SOME_NUMBER: number = 123; + +const someSchema: MakeSchemaFrom> = { + flat: { + type: 'keyword', + }, + my_str: { + type: 'text', + }, +}; + +const someOtherSchema: MakeSchemaFrom> = { + my_objects: { + total: { + type: 'number', + }, + type: { type: 'boolean' }, + }, +}; + +export const myCollector = makeUsageCollector({ + type: 'schema_defined_with_spreads', + isReady: () => true, + fetch() { + const testString = '123'; + + return { + flat: 'hello', + my_str: testString, + my_objects: { + total: SOME_NUMBER, + type: true, + }, + }; + }, + schema: { + ...someSchema, + ...someOtherSchema, + }, +}); diff --git a/src/plugins/advanced_settings/public/index.ts b/src/plugins/advanced_settings/public/index.ts index db478fa1579e6..0e621e7cd7d1a 100644 --- a/src/plugins/advanced_settings/public/index.ts +++ b/src/plugins/advanced_settings/public/index.ts @@ -17,11 +17,19 @@ * under the License. */ +import React from 'react'; import { PluginInitializerContext } from 'kibana/public'; import { AdvancedSettingsPlugin } from './plugin'; export { AdvancedSettingsSetup, AdvancedSettingsStart } from './types'; export { ComponentRegistry } from './component_registry'; -export { Field } from './management_app/components/field'; + +/** + * Exports the field component as a React.lazy component. We're explicitly naming it lazy here + * so any plugin that would import that can clearly see it's lazy loaded and can only be used + * inside a suspense context. + */ +const LazyField = React.lazy(() => import('./management_app/components/field')); +export { LazyField }; export function plugin(initializerContext: PluginInitializerContext) { return new AdvancedSettingsPlugin(); diff --git a/src/plugins/advanced_settings/public/management_app/_advanced_settings.scss b/src/plugins/advanced_settings/public/management_app/_advanced_settings.scss index 66ae9cca3f83b..fd26677e93894 100644 --- a/src/plugins/advanced_settings/public/management_app/_advanced_settings.scss +++ b/src/plugins/advanced_settings/public/management_app/_advanced_settings.scss @@ -64,3 +64,7 @@ .mgtAdvancedSettingsForm__button { width: 100%; } + +.kbnBody--mgtAdvancedSettingsHasBottomBar .mgtPage__body { + padding-bottom: $euiSizeXL * 2; +} diff --git a/src/plugins/advanced_settings/public/management_app/components/advanced_settings_voice_announcement/__snapshots__/advanced_settings_voice_announcement.test.tsx.snap b/src/plugins/advanced_settings/public/management_app/components/advanced_settings_voice_announcement/__snapshots__/advanced_settings_voice_announcement.test.tsx.snap index 490e105c18a7d..82c8dcd7f7ea1 100644 --- a/src/plugins/advanced_settings/public/management_app/components/advanced_settings_voice_announcement/__snapshots__/advanced_settings_voice_announcement.test.tsx.snap +++ b/src/plugins/advanced_settings/public/management_app/components/advanced_settings_voice_announcement/__snapshots__/advanced_settings_voice_announcement.test.tsx.snap @@ -3,6 +3,7 @@ exports[`Advanced Settings: Voice Announcement should render announcement 1`] = `
@@ -28,6 +29,7 @@ exports[`Advanced Settings: Voice Announcement should render announcement 1`] = exports[`Advanced Settings: Voice Announcement should render nothing 1`] = `
@@ -35,12 +37,11 @@ exports[`Advanced Settings: Voice Announcement should render nothing 1`] = ` delay={500} > { const filteredOptions = [...filteredSections]; return ( -
+
- + {this.props.queryText ? ( + + ) : ( + + )}
diff --git a/src/plugins/advanced_settings/public/management_app/components/field/__snapshots__/field.test.tsx.snap b/src/plugins/advanced_settings/public/management_app/components/field/__snapshots__/field.test.tsx.snap index 2aabacb061667..19bf9e6d73757 100644 --- a/src/plugins/advanced_settings/public/management_app/components/field/__snapshots__/field.test.tsx.snap +++ b/src/plugins/advanced_settings/public/management_app/components/field/__snapshots__/field.test.tsx.snap @@ -15,7 +15,7 @@ exports[`Field for array setting should render as read only if saving is disable } fullWidth={true} - id="array:test:setting" + id="array:test:setting-group" title={

} fullWidth={true} - id="array:test:setting" + id="array:test:setting-group" title={

} fullWidth={true} - id="array:test:setting" + id="array:test:setting-group" title={

} fullWidth={true} - id="array:test:setting" + id="array:test:setting-group" title={

} fullWidth={true} - id="array:test:setting" + id="array:test:setting-group" title={

Setting is currently not saved.

@@ -364,7 +364,7 @@ exports[`Field for array setting should render user value if there is user value } fullWidth={true} - id="array:test:setting" + id="array:test:setting-group" title={

} fullWidth={true} - id="boolean:test:setting" + id="boolean:test:setting-group" title={

} fullWidth={true} - id="boolean:test:setting" + id="boolean:test:setting-group" title={

} fullWidth={true} - id="boolean:test:setting" + id="boolean:test:setting-group" title={

} fullWidth={true} - id="boolean:test:setting" + id="boolean:test:setting-group" title={

} fullWidth={true} - id="boolean:test:setting" + id="boolean:test:setting-group" title={

Setting is currently not saved.

@@ -807,7 +807,7 @@ exports[`Field for boolean setting should render user value if there is user val } fullWidth={true} - id="boolean:test:setting" + id="boolean:test:setting-group" title={

} fullWidth={true} - id="image:test:setting" + id="image:test:setting-group" title={

} fullWidth={true} - id="image:test:setting" + id="image:test:setting-group" title={

} fullWidth={true} - id="image:test:setting" + id="image:test:setting-group" title={

} fullWidth={true} - id="image:test:setting" + id="image:test:setting-group" title={

} fullWidth={true} - id="image:test:setting" + id="image:test:setting-group" title={

Setting is currently not saved.

@@ -1231,7 +1235,7 @@ exports[`Field for image setting should render user value if there is user value } fullWidth={true} - id="image:test:setting" + id="image:test:setting-group" title={

} fullWidth={true} - id="json:test:setting" + id="json:test:setting-group" title={

} fullWidth={true} - id="json:test:setting" + id="json:test:setting-group" title={

} fullWidth={true} - id="json:test:setting" + id="json:test:setting-group" title={

} fullWidth={true} - id="json:test:setting" + id="json:test:setting-group" title={

} fullWidth={true} - id="json:test:setting" + id="json:test:setting-group" title={

Setting is currently not saved.

@@ -1832,7 +1836,7 @@ exports[`Field for json setting should render user value if there is user value } fullWidth={true} - id="json:test:setting" + id="json:test:setting-group" title={

} fullWidth={true} - id="markdown:test:setting" + id="markdown:test:setting-group" title={

} fullWidth={true} - id="markdown:test:setting" + id="markdown:test:setting-group" title={

} fullWidth={true} - id="markdown:test:setting" + id="markdown:test:setting-group" title={

} fullWidth={true} - id="markdown:test:setting" + id="markdown:test:setting-group" title={

} fullWidth={true} - id="markdown:test:setting" + id="markdown:test:setting-group" title={

Setting is currently not saved.

@@ -2365,7 +2369,7 @@ exports[`Field for markdown setting should render user value if there is user va } fullWidth={true} - id="markdown:test:setting" + id="markdown:test:setting-group" title={

} fullWidth={true} - id="number:test:setting" + id="number:test:setting-group" title={

} fullWidth={true} - id="number:test:setting" + id="number:test:setting-group" title={

} fullWidth={true} - id="number:test:setting" + id="number:test:setting-group" title={

} fullWidth={true} - id="number:test:setting" + id="number:test:setting-group" title={

} fullWidth={true} - id="number:test:setting" + id="number:test:setting-group" title={

Setting is currently not saved.

@@ -2798,7 +2802,7 @@ exports[`Field for number setting should render user value if there is user valu } fullWidth={true} - id="number:test:setting" + id="number:test:setting-group" title={

} fullWidth={true} - id="select:test:setting" + id="select:test:setting-group" title={

} fullWidth={true} - id="select:test:setting" + id="select:test:setting-group" title={

} fullWidth={true} - id="select:test:setting" + id="select:test:setting-group" title={

} fullWidth={true} - id="select:test:setting" + id="select:test:setting-group" title={

} fullWidth={true} - id="select:test:setting" + id="select:test:setting-group" title={

Setting is currently not saved.

@@ -3291,7 +3295,7 @@ exports[`Field for select setting should render user value if there is user valu } fullWidth={true} - id="select:test:setting" + id="select:test:setting-group" title={

} fullWidth={true} - id="string:test:setting" + id="string:test:setting-group" title={

} fullWidth={true} - id="string:test:setting" + id="string:test:setting-group" title={

} fullWidth={true} - id="string:test:setting" + id="string:test:setting-group" title={

} fullWidth={true} - id="string:test:setting" + id="string:test:setting-group" title={

} fullWidth={true} - id="string:test:setting" + id="string:test:setting-group" title={

Setting is currently not saved.

@@ -3720,7 +3724,7 @@ exports[`Field for string setting should render user value if there is user valu } fullWidth={true} - id="string:test:setting" + id="string:test:setting-group" title={

} fullWidth={true} - id="string:test-validation:setting" + id="string:test-validation:setting-group" title={

} fullWidth={true} - id="string:test-validation:setting" + id="string:test-validation:setting-group" title={

} fullWidth={true} - id="string:test-validation:setting" + id="string:test-validation:setting-group" title={

} fullWidth={true} - id="string:test-validation:setting" + id="string:test-validation:setting-group" title={

} fullWidth={true} - id="string:test-validation:setting" + id="string:test-validation:setting-group" title={

Setting is currently not saved.

@@ -4133,7 +4137,7 @@ exports[`Field for stringWithValidation setting should render user value if ther } fullWidth={true} - id="string:test-validation:setting" + id="string:test-validation:setting-group" title={

{ } }; - renderField(id: string, setting: FieldSetting) { + renderField(setting: FieldSetting, ariaDescribedBy?: string) { const { enableSaving, unsavedChanges, loading } = this.props; const { name, @@ -301,10 +299,10 @@ export class Field extends PureComponent { defVal, ariaName, } = setting; - const a11yProps: { [key: string]: string } = unsavedChanges + const a11yProps: { [key: string]: string } = ariaDescribedBy ? { 'aria-label': ariaName, - 'aria-describedby': id, + 'aria-describedby': ariaDescribedBy, } : { 'aria-label': ariaName, @@ -370,6 +368,7 @@ export class Field extends PureComponent { ref={this.changeImageForm} fullWidth data-test-subj={`advancedSetting-editField-${name}`} + aria-label={name} /> ); } @@ -669,11 +668,12 @@ export class Field extends PureComponent { // eslint-disable-next-line @typescript-eslint/naming-convention 'mgtAdvancedSettings__field--invalid': isInvalid, }); - const id = setting.name; + const groupId = `${setting.name}-group`; + const unsavedId = `${setting.name}-unsaved`; return ( { fullWidth > <> - {this.renderField(id, setting)} + {this.renderField(setting, unsavedChanges ? `${groupId} ${unsavedId}` : undefined)} {unsavedChanges && ( -

+

{unsavedChanges.error ? unsavedChanges.error : i18n.translate('advancedSettings.field.settingIsUnsaved', { diff --git a/src/plugins/advanced_settings/public/management_app/components/field/index.ts b/src/plugins/advanced_settings/public/management_app/components/field/index.ts index d1b9b34515532..c486dc96bfc33 100644 --- a/src/plugins/advanced_settings/public/management_app/components/field/index.ts +++ b/src/plugins/advanced_settings/public/management_app/components/field/index.ts @@ -18,3 +18,6 @@ */ export { Field, getEditableValue } from './field'; + +// eslint-disable-next-line import/no-default-export +export { Field as default } from './field'; diff --git a/src/plugins/advanced_settings/public/management_app/components/form/__snapshots__/form.test.tsx.snap b/src/plugins/advanced_settings/public/management_app/components/form/__snapshots__/form.test.tsx.snap index e38ccb6866ab6..ebebf49c5213f 100644 --- a/src/plugins/advanced_settings/public/management_app/components/form/__snapshots__/form.test.tsx.snap +++ b/src/plugins/advanced_settings/public/management_app/components/form/__snapshots__/form.test.tsx.snap @@ -18,6 +18,32 @@ exports[`Form should not render no settings message when instructed not to 1`] = General

+ + + + + + + , + "settingsCount": -1, + } + } + /> + + + + + + + + + + , + "settingsCount": -1, + } + } + /> + + + + + + + + + + , + "settingsCount": -1, + } + } + /> + + + + + + + + + + , + "settingsCount": -1, + } + } + /> + + + { }) ); }); + + it('should save an array typed field when user provides an empty string correctly', async () => { + const wrapper = mountWithI18nProvider( +
+ ); + + (wrapper.instance() as Form).setState({ + unsavedChanges: { + 'general:test:array': { + value: '', + }, + }, + }); + + findTestSubject(wrapper.update(), `advancedSetting-saveButton`).simulate('click'); + expect(save).toHaveBeenCalledWith({ 'general:test:array': [] }); + }); + + it('should save an array typed field when user provides a comma separated string correctly', async () => { + const wrapper = mountWithI18nProvider( + + ); + + (wrapper.instance() as Form).setState({ + unsavedChanges: { + 'general:test:array': { + value: 'test1, test2', + }, + }, + }); + + findTestSubject(wrapper.update(), `advancedSetting-saveButton`).simulate('click'); + expect(save).toHaveBeenCalledWith({ 'general:test:array': ['test1', 'test2'] }); + }); }); diff --git a/src/plugins/advanced_settings/public/management_app/components/form/form.tsx b/src/plugins/advanced_settings/public/management_app/components/form/form.tsx index 0378d816fd2c3..d243d85e12a66 100644 --- a/src/plugins/advanced_settings/public/management_app/components/form/form.tsx +++ b/src/plugins/advanced_settings/public/management_app/components/form/form.tsx @@ -154,7 +154,9 @@ export class Form extends PureComponent { let equalsToDefault = false; switch (type) { case 'array': - valueToSave = valueToSave.split(',').map((val: string) => val.trim()); + valueToSave = valueToSave.trim(); + valueToSave = + valueToSave === '' ? [] : valueToSave.split(',').map((val: string) => val.trim()); equalsToDefault = valueToSave.join(',') === (defVal as string[]).join(','); break; case 'json': @@ -386,6 +388,13 @@ export class Form extends PureComponent { const { unsavedChanges } = this.state; const { visibleSettings, categories, categoryCounts, clearQuery } = this.props; const currentCategories: Category[] = []; + const hasUnsavedChanges = !isEmpty(unsavedChanges); + + if (hasUnsavedChanges) { + document.body.classList.add('kbnBody--mgtAdvancedSettingsHasBottomBar'); + } else { + document.body.classList.remove('kbnBody--mgtAdvancedSettingsHasBottomBar'); + } categories.forEach((category) => { if (visibleSettings[category] && visibleSettings[category].length) { @@ -406,7 +415,7 @@ export class Form extends PureComponent { }) : this.maybeRenderNoSettings(clearQuery)}

- {!isEmpty(unsavedChanges) && this.renderBottomBar()} + {hasUnsavedChanges && this.renderBottomBar()} ); } diff --git a/src/plugins/apm_oss/server/tutorial/index_pattern.json b/src/plugins/apm_oss/server/tutorial/index_pattern.json index bb42b223c85ed..dbceaacfb4a27 100644 --- a/src/plugins/apm_oss/server/tutorial/index_pattern.json +++ b/src/plugins/apm_oss/server/tutorial/index_pattern.json @@ -1,11 +1,11 @@ { "attributes": { - "fieldFormatMap": "{\"client.bytes\":{\"id\":\"bytes\"},\"client.nat.port\":{\"id\":\"string\"},\"client.port\":{\"id\":\"string\"},\"destination.bytes\":{\"id\":\"bytes\"},\"destination.nat.port\":{\"id\":\"string\"},\"destination.port\":{\"id\":\"string\"},\"event.duration\":{\"id\":\"duration\",\"params\":{\"inputFormat\":\"nanoseconds\",\"outputFormat\":\"asMilliseconds\",\"outputPrecision\":1}},\"event.sequence\":{\"id\":\"string\"},\"event.severity\":{\"id\":\"string\"},\"http.request.body.bytes\":{\"id\":\"bytes\"},\"http.request.bytes\":{\"id\":\"bytes\"},\"http.response.body.bytes\":{\"id\":\"bytes\"},\"http.response.bytes\":{\"id\":\"bytes\"},\"http.response.status_code\":{\"id\":\"string\"},\"log.syslog.facility.code\":{\"id\":\"string\"},\"log.syslog.priority\":{\"id\":\"string\"},\"network.bytes\":{\"id\":\"bytes\"},\"package.size\":{\"id\":\"string\"},\"process.parent.pgid\":{\"id\":\"string\"},\"process.parent.pid\":{\"id\":\"string\"},\"process.parent.ppid\":{\"id\":\"string\"},\"process.parent.thread.id\":{\"id\":\"string\"},\"process.pgid\":{\"id\":\"string\"},\"process.pid\":{\"id\":\"string\"},\"process.ppid\":{\"id\":\"string\"},\"process.thread.id\":{\"id\":\"string\"},\"server.bytes\":{\"id\":\"bytes\"},\"server.nat.port\":{\"id\":\"string\"},\"server.port\":{\"id\":\"string\"},\"source.bytes\":{\"id\":\"bytes\"},\"source.nat.port\":{\"id\":\"string\"},\"source.port\":{\"id\":\"string\"},\"system.cpu.total.norm.pct\":{\"id\":\"percent\"},\"system.memory.actual.free\":{\"id\":\"bytes\"},\"system.memory.total\":{\"id\":\"bytes\"},\"system.process.cgroup.memory.mem.limit.bytes\":{\"id\":\"bytes\"},\"system.process.cgroup.memory.mem.usage.bytes\":{\"id\":\"bytes\"},\"system.process.cgroup.memory.stats.inactive_file.bytes\":{\"id\":\"bytes\"},\"system.process.cpu.total.norm.pct\":{\"id\":\"percent\"},\"system.process.memory.rss.bytes\":{\"id\":\"bytes\"},\"system.process.memory.size\":{\"id\":\"bytes\"},\"url.port\":{\"id\":\"string\"},\"view spans\":{\"id\":\"url\",\"params\":{\"labelTemplate\":\"View Spans\"}}}", - "fields": "[{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"@timestamp\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"labels\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"message\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tags\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"agent.ephemeral_id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"agent.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"agent.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"agent.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"agent.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"as.number\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"as.organization.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"as.organization.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.address\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.as.number\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.as.organization.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.as.organization.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.geo.city_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.geo.continent_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.geo.country_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.geo.country_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.geo.location\",\"scripted\":false,\"searchable\":true,\"type\":\"geo_point\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.geo.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.geo.region_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.geo.region_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.mac\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.nat.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.nat.port\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.packets\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.port\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.registered_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.top_level_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.email\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.full_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.full_name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.group.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.group.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.group.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.hash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.account.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.availability_zone\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.instance.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.instance.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.machine.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.provider\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.region\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"code_signature.exists\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"code_signature.status\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"code_signature.subject_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"code_signature.trusted\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"code_signature.valid\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"container.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"container.image.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"container.image.tag\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"container.labels\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"container.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"container.runtime\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.address\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.as.number\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.as.organization.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.as.organization.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.geo.city_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.geo.continent_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.geo.country_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.geo.country_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.geo.location\",\"scripted\":false,\"searchable\":true,\"type\":\"geo_point\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.geo.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.geo.region_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.geo.region_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.mac\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.nat.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.nat.port\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.packets\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.port\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.registered_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.top_level_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.email\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.full_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.full_name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.group.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.group.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.group.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.hash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.code_signature.exists\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.code_signature.status\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.code_signature.subject_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.code_signature.trusted\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.code_signature.valid\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.hash.md5\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.hash.sha1\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.hash.sha256\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.hash.sha512\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.path\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.pe.company\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.pe.description\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.pe.file_version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.pe.original_file_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.pe.product\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.answers\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.answers.class\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.answers.data\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.answers.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.answers.ttl\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.answers.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.header_flags\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.op_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.question.class\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.question.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.question.registered_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.question.subdomain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.question.top_level_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.question.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.resolved_ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.response_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"ecs.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":4,\"doc_values\":true,\"indexed\":true,\"name\":\"error.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.message\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.stack_trace\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.stack_trace.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.action\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.category\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.created\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.dataset\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.duration\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.end\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.hash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.ingested\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.kind\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.module\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.original\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.outcome\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.provider\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.reference\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.risk_score\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.risk_score_norm\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.sequence\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.severity\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.start\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.timezone\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.url\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.accessed\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.attributes\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.code_signature.exists\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.code_signature.status\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.code_signature.subject_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.code_signature.trusted\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.code_signature.valid\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.created\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.ctime\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.device\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.directory\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.drive_letter\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.extension\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.gid\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.group\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.hash.md5\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.hash.sha1\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.hash.sha256\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.hash.sha512\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.inode\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.mime_type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.mode\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.mtime\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.owner\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.path\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.path.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.pe.company\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.pe.description\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.pe.file_version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.pe.original_file_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.pe.product\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.size\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.target_path\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.target_path.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.uid\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"geo.city_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"geo.continent_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"geo.country_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"geo.country_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"geo.location\",\"scripted\":false,\"searchable\":true,\"type\":\"geo_point\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"geo.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"geo.region_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"geo.region_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"group.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"group.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"group.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"hash.md5\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"hash.sha1\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"hash.sha256\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"hash.sha512\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.architecture\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.geo.city_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.geo.continent_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.geo.country_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.geo.country_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.geo.location\",\"scripted\":false,\"searchable\":true,\"type\":\"geo_point\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.geo.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.geo.region_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.geo.region_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.hostname\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.mac\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.family\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.full\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.full.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.kernel\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.platform\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.uptime\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.email\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.full_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.full_name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.group.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.group.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.group.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.hash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.request.body.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.request.body.content\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.request.body.content.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.request.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.request.method\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.request.referrer\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.response.body.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.response.body.content\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.response.body.content.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.response.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.response.status_code\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"interface.alias\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"interface.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"interface.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.level\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.logger\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.origin.file.line\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.origin.file.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.origin.function\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.original\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.syslog\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.syslog.facility.code\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.syslog.facility.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.syslog.priority\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.syslog.severity.code\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.syslog.severity.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.application\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.community_id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.direction\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.forwarded_ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.iana_number\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.inner\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.inner.vlan.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.inner.vlan.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.packets\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.protocol\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.transport\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.vlan.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.vlan.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.egress\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.egress.interface.alias\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.egress.interface.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.egress.interface.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.egress.vlan.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.egress.vlan.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.egress.zone\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.geo.city_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.geo.continent_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.geo.country_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.geo.country_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.geo.location\",\"scripted\":false,\"searchable\":true,\"type\":\"geo_point\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.geo.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.geo.region_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.geo.region_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.hostname\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.ingress\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.ingress.interface.alias\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.ingress.interface.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.ingress.interface.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.ingress.vlan.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.ingress.vlan.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.ingress.zone\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.mac\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.os.family\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.os.full\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.os.full.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.os.kernel\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.os.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.os.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.os.platform\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.os.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.product\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.serial_number\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.vendor\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"organization.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"organization.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"organization.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"os.family\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"os.full\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"os.full.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"os.kernel\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"os.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"os.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"os.platform\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"os.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.architecture\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.build_version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.checksum\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.description\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.install_scope\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.installed\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.license\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.path\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.reference\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.size\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"pe.company\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"pe.description\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"pe.file_version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"pe.original_file_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"pe.product\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.args\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.args_count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.code_signature.exists\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.code_signature.status\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.code_signature.subject_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.code_signature.trusted\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.code_signature.valid\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.command_line\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.command_line.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.entity_id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.executable\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.executable.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.exit_code\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.hash.md5\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.hash.sha1\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.hash.sha256\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.hash.sha512\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.args\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.args_count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.code_signature.exists\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.code_signature.status\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.code_signature.subject_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.code_signature.trusted\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.code_signature.valid\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.command_line\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.command_line.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.entity_id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.executable\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.executable.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.exit_code\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.hash.md5\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.hash.sha1\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.hash.sha256\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.hash.sha512\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.pgid\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.pid\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.ppid\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.start\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.thread.id\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.thread.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.title\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.title.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.uptime\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.working_directory\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.working_directory.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.pe.company\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.pe.description\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.pe.file_version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.pe.original_file_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.pe.product\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.pgid\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.pid\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.ppid\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.start\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.thread.id\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.thread.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.title\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.title.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.uptime\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.working_directory\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.working_directory.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"registry.data.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"registry.data.strings\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"registry.data.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"registry.hive\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"registry.key\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"registry.path\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"registry.value\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"related.hash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"related.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"related.user\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"rule.author\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"rule.category\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"rule.description\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"rule.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"rule.license\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"rule.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"rule.reference\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"rule.ruleset\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"rule.uuid\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"rule.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.address\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.as.number\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.as.organization.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.as.organization.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.geo.city_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.geo.continent_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.geo.country_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.geo.country_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.geo.location\",\"scripted\":false,\"searchable\":true,\"type\":\"geo_point\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.geo.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.geo.region_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.geo.region_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.mac\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.nat.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.nat.port\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.packets\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.port\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.registered_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.top_level_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.email\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.full_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.full_name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.group.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.group.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.group.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.hash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.ephemeral_id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.node.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.state\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.address\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.as.number\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.as.organization.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.as.organization.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.geo.city_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.geo.continent_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.geo.country_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.geo.country_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.geo.location\",\"scripted\":false,\"searchable\":true,\"type\":\"geo_point\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.geo.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.geo.region_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.geo.region_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.mac\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.nat.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.nat.port\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.packets\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.port\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.registered_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.top_level_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.email\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.full_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.full_name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.group.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.group.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.group.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.hash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"threat.framework\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"threat.tactic.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"threat.tactic.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"threat.tactic.reference\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"threat.technique.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"threat.technique.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"threat.technique.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"threat.technique.reference\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.cipher\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.certificate\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.certificate_chain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.hash.md5\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.hash.sha1\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.hash.sha256\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.issuer\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.ja3\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.not_after\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.not_before\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.server_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.subject\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.supported_ciphers\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.curve\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.established\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.next_protocol\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.resumed\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.certificate\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.certificate_chain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.hash.md5\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.hash.sha1\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.hash.sha256\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.issuer\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.ja3s\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.not_after\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.not_before\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.subject\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.version_protocol\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tracing.trace.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tracing.transaction.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.extension\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.fragment\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.full\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.full.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.original\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.original.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.password\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.path\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.port\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.query\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.registered_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.scheme\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.top_level_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.username\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.email\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.full_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.full_name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.group.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.group.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.group.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.hash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.device.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.original\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.original.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.os.family\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.os.full\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.os.full.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.os.kernel\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.os.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.os.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.os.platform\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.os.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vlan.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vlan.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.category\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.classification\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.description\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.description.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.enumeration\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.reference\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.report_id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.scanner.vendor\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.score.base\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.score.environmental\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.score.temporal\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.score.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.severity\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"agent.hostname\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"fields\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"timeseries.instance\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.project.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.image.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"docker.container.labels\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.containerized\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.build\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.codename\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.pod.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.pod.uid\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.namespace\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.node.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.labels.*\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.annotations.*\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.replicaset.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.deployment.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.statefulset.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.container.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.container.image\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"processor.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"processor.event\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"timestamp.us\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":false,\"enabled\":false,\"indexed\":false,\"name\":\"http.request.headers\",\"scripted\":false,\"searchable\":false},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.response.finished\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":false,\"enabled\":false,\"indexed\":false,\"name\":\"http.response.headers\",\"scripted\":false,\"searchable\":false},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.environment\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.language.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.language.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.runtime.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.runtime.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.framework.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.framework.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.sampled\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.duration.count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.duration.sum.us\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.self_time.count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.self_time.sum.us\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.breakdown.count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"span.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"span.subtype\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.self_time.count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.self_time.sum.us\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"trace.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"parent.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.listening\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.version_major\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"experimental\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.account.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.project.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":2,\"doc_values\":true,\"indexed\":true,\"name\":\"error.culprit\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.grouping_key\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.exception.code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":2,\"doc_values\":true,\"indexed\":true,\"name\":\"error.exception.message\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.exception.module\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":4,\"doc_values\":true,\"indexed\":true,\"name\":\"error.exception.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":2,\"doc_values\":true,\"indexed\":true,\"name\":\"error.exception.handled\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.log.level\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.log.logger_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":2,\"doc_values\":true,\"indexed\":true,\"name\":\"error.log.message\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.log.param_message\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"system.cpu.total.norm.pct\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"system.memory.total\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"system.memory.actual.free\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"system.process.cpu.total.norm.pct\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"system.process.memory.size\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"system.process.memory.rss.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"system.process.cgroup.memory.mem.limit.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"system.process.cgroup.memory.mem.usage.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"system.process.cgroup.memory.stats.inactive_file.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.root\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.duration\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.cpu.ns\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.samples.count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.alloc_objects.count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.alloc_space.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.inuse_objects.count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.inuse_space.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.top.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.top.function\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.top.filename\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.top.line\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.stack.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.stack.function\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.stack.filename\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.stack.line\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"sourcemap.service.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"sourcemap.service.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"sourcemap.bundle_filepath\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"view spans\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"child.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"span.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"span.action\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"span.start.us\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"span.duration.us\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.sync\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.db.link\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.db.rows_affected\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.destination.service.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.destination.service.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.destination.service.resource\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.message.queue.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.message.age.ms\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.duration.us\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.result\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.marks\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.marks.*.*\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.experience.cls\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.experience.fid\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.experience.tbt\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.span_count.dropped\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.message.queue.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.message.age.ms\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.duration.histogram\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"metricset.period\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.destination.service.response_time.count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.destination.service.response_time.sum.us\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":false,\"indexed\":false,\"name\":\"_id\",\"scripted\":false,\"searchable\":false,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":false,\"indexed\":false,\"name\":\"_type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":false,\"indexed\":false,\"name\":\"_index\",\"scripted\":false,\"searchable\":false,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":false,\"indexed\":false,\"name\":\"_score\",\"scripted\":false,\"searchable\":false,\"type\":\"number\"}]", + "fieldFormatMap": "{\"client.bytes\":{\"id\":\"bytes\"},\"client.nat.port\":{\"id\":\"string\"},\"client.port\":{\"id\":\"string\"},\"destination.bytes\":{\"id\":\"bytes\"},\"destination.nat.port\":{\"id\":\"string\"},\"destination.port\":{\"id\":\"string\"},\"event.duration\":{\"id\":\"duration\",\"params\":{\"inputFormat\":\"nanoseconds\",\"outputFormat\":\"asMilliseconds\",\"outputPrecision\":1}},\"event.sequence\":{\"id\":\"string\"},\"event.severity\":{\"id\":\"string\"},\"http.request.body.bytes\":{\"id\":\"bytes\"},\"http.request.bytes\":{\"id\":\"bytes\"},\"http.response.body.bytes\":{\"id\":\"bytes\"},\"http.response.bytes\":{\"id\":\"bytes\"},\"http.response.status_code\":{\"id\":\"string\"},\"log.syslog.facility.code\":{\"id\":\"string\"},\"log.syslog.priority\":{\"id\":\"string\"},\"network.bytes\":{\"id\":\"bytes\"},\"package.size\":{\"id\":\"string\"},\"process.parent.pgid\":{\"id\":\"string\"},\"process.parent.pid\":{\"id\":\"string\"},\"process.parent.ppid\":{\"id\":\"string\"},\"process.parent.thread.id\":{\"id\":\"string\"},\"process.pgid\":{\"id\":\"string\"},\"process.pid\":{\"id\":\"string\"},\"process.ppid\":{\"id\":\"string\"},\"process.thread.id\":{\"id\":\"string\"},\"server.bytes\":{\"id\":\"bytes\"},\"server.nat.port\":{\"id\":\"string\"},\"server.port\":{\"id\":\"string\"},\"source.bytes\":{\"id\":\"bytes\"},\"source.nat.port\":{\"id\":\"string\"},\"source.port\":{\"id\":\"string\"},\"system.cpu.total.norm.pct\":{\"id\":\"percent\"},\"system.memory.actual.free\":{\"id\":\"bytes\"},\"system.memory.total\":{\"id\":\"bytes\"},\"system.process.cgroup.memory.mem.limit.bytes\":{\"id\":\"bytes\"},\"system.process.cgroup.memory.mem.usage.bytes\":{\"id\":\"bytes\"},\"system.process.cpu.total.norm.pct\":{\"id\":\"percent\"},\"system.process.memory.rss.bytes\":{\"id\":\"bytes\"},\"system.process.memory.size\":{\"id\":\"bytes\"},\"url.port\":{\"id\":\"string\"},\"view spans\":{\"id\":\"url\",\"params\":{\"labelTemplate\":\"View Spans\"}}}", + "fields": "[{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"@timestamp\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"labels\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"message\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tags\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"agent.build.original\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"agent.ephemeral_id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"agent.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"agent.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"agent.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"agent.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"as.number\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"as.organization.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"as.organization.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.address\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.as.number\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.as.organization.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.as.organization.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.geo.city_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.geo.continent_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.geo.country_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.geo.country_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.geo.location\",\"scripted\":false,\"searchable\":true,\"type\":\"geo_point\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.geo.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.geo.region_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.geo.region_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.mac\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.nat.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.nat.port\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.packets\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.port\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.registered_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.top_level_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.email\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.full_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.full_name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.group.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.group.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.group.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.hash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"client.user.roles\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.account.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.account.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.availability_zone\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.instance.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.instance.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.machine.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.project.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.project.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.provider\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.region\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"code_signature.exists\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"code_signature.status\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"code_signature.subject_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"code_signature.trusted\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"code_signature.valid\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"container.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"container.image.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"container.image.tag\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"container.labels\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"container.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"container.runtime\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.address\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.as.number\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.as.organization.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.as.organization.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.geo.city_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.geo.continent_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.geo.country_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.geo.country_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.geo.location\",\"scripted\":false,\"searchable\":true,\"type\":\"geo_point\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.geo.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.geo.region_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.geo.region_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.mac\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.nat.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.nat.port\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.packets\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.port\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.registered_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.top_level_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.email\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.full_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.full_name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.group.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.group.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.group.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.hash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"destination.user.roles\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.code_signature.exists\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.code_signature.status\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.code_signature.subject_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.code_signature.trusted\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.code_signature.valid\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.hash.md5\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.hash.sha1\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.hash.sha256\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.hash.sha512\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.path\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.pe.architecture\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.pe.company\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.pe.description\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.pe.file_version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.pe.imphash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.pe.original_file_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dll.pe.product\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.answers\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.answers.class\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.answers.data\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.answers.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.answers.ttl\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.answers.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.header_flags\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.op_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.question.class\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.question.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.question.registered_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.question.subdomain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.question.top_level_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.question.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.resolved_ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.response_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"dns.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"ecs.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":4,\"doc_values\":true,\"indexed\":true,\"name\":\"error.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.message\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":false,\"name\":\"error.stack_trace\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":false,\"name\":\"error.stack_trace.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.action\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.category\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.created\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.dataset\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.duration\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.end\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.hash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.ingested\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.kind\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.module\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":false,\"name\":\"event.original\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.outcome\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.provider\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.reason\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.reference\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.risk_score\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.risk_score_norm\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.sequence\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.severity\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.start\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.timezone\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"event.url\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.accessed\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.attributes\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.code_signature.exists\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.code_signature.status\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.code_signature.subject_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.code_signature.trusted\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.code_signature.valid\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.created\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.ctime\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.device\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.directory\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.drive_letter\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.extension\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.gid\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.group\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.hash.md5\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.hash.sha1\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.hash.sha256\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.hash.sha512\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.inode\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.mime_type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.mode\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.mtime\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.owner\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.path\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.path.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.pe.architecture\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.pe.company\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.pe.description\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.pe.file_version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.pe.imphash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.pe.original_file_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.pe.product\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.size\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.target_path\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.target_path.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.uid\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.alternative_names\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.issuer.common_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.issuer.country\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.issuer.distinguished_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.issuer.locality\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.issuer.organization\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.issuer.organizational_unit\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.issuer.state_or_province\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.not_after\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.not_before\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.public_key_algorithm\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.public_key_curve\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":false,\"name\":\"file.x509.public_key_exponent\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.public_key_size\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.serial_number\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.signature_algorithm\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.subject.common_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.subject.country\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.subject.distinguished_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.subject.locality\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.subject.organization\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.subject.organizational_unit\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.subject.state_or_province\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"file.x509.version_number\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"geo.city_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"geo.continent_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"geo.country_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"geo.country_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"geo.location\",\"scripted\":false,\"searchable\":true,\"type\":\"geo_point\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"geo.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"geo.region_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"geo.region_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"group.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"group.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"group.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"hash.md5\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"hash.sha1\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"hash.sha256\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"hash.sha512\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.architecture\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.geo.city_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.geo.continent_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.geo.country_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.geo.country_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.geo.location\",\"scripted\":false,\"searchable\":true,\"type\":\"geo_point\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.geo.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.geo.region_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.geo.region_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.hostname\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.mac\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.family\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.full\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.full.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.kernel\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.platform\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.uptime\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.email\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.full_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.full_name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.group.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.group.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.group.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.hash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.user.roles\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.request.body.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.request.body.content\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.request.body.content.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.request.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.request.method\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.request.referrer\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.response.body.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.response.body.content\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.response.body.content.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.response.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.response.status_code\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"interface.alias\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"interface.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"interface.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.file.path\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.level\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.logger\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.origin.file.line\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.origin.file.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.origin.function\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":false,\"name\":\"log.original\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.syslog\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.syslog.facility.code\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.syslog.facility.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.syslog.priority\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.syslog.severity.code\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"log.syslog.severity.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.application\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.community_id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.direction\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.forwarded_ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.iana_number\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.inner\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.inner.vlan.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.inner.vlan.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.packets\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.protocol\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.transport\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.vlan.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"network.vlan.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.egress\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.egress.interface.alias\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.egress.interface.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.egress.interface.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.egress.vlan.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.egress.vlan.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.egress.zone\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.geo.city_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.geo.continent_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.geo.country_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.geo.country_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.geo.location\",\"scripted\":false,\"searchable\":true,\"type\":\"geo_point\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.geo.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.geo.region_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.geo.region_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.hostname\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.ingress\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.ingress.interface.alias\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.ingress.interface.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.ingress.interface.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.ingress.vlan.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.ingress.vlan.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.ingress.zone\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.mac\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.os.family\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.os.full\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.os.full.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.os.kernel\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.os.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.os.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.os.platform\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.os.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.product\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.serial_number\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.vendor\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"organization.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"organization.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"organization.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"os.family\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"os.full\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"os.full.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"os.kernel\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"os.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"os.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"os.platform\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"os.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.architecture\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.build_version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.checksum\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.description\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.install_scope\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.installed\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.license\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.path\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.reference\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.size\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"package.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"pe.architecture\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"pe.company\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"pe.description\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"pe.file_version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"pe.imphash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"pe.original_file_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"pe.product\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.args\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.args_count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.code_signature.exists\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.code_signature.status\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.code_signature.subject_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.code_signature.trusted\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.code_signature.valid\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.command_line\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.command_line.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.entity_id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.executable\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.executable.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.exit_code\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.hash.md5\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.hash.sha1\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.hash.sha256\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.hash.sha512\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.args\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.args_count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.code_signature.exists\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.code_signature.status\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.code_signature.subject_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.code_signature.trusted\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.code_signature.valid\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.command_line\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.command_line.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.entity_id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.executable\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.executable.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.exit_code\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.hash.md5\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.hash.sha1\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.hash.sha256\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.hash.sha512\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.pe.architecture\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.pe.company\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.pe.description\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.pe.file_version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.pe.imphash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.pe.original_file_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.pe.product\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.pgid\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.pid\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.ppid\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.start\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.thread.id\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.thread.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.title\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.title.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.uptime\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.working_directory\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.parent.working_directory.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.pe.architecture\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.pe.company\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.pe.description\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.pe.file_version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.pe.imphash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.pe.original_file_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.pe.product\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.pgid\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.pid\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.ppid\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.start\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.thread.id\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.thread.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.title\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.title.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.uptime\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.working_directory\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"process.working_directory.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"registry.data.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"registry.data.strings\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"registry.data.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"registry.hive\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"registry.key\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"registry.path\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"registry.value\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"related.hash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"related.hosts\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"related.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"related.user\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"rule.author\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"rule.category\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"rule.description\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"rule.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"rule.license\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"rule.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"rule.reference\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"rule.ruleset\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"rule.uuid\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"rule.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.address\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.as.number\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.as.organization.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.as.organization.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.geo.city_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.geo.continent_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.geo.country_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.geo.country_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.geo.location\",\"scripted\":false,\"searchable\":true,\"type\":\"geo_point\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.geo.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.geo.region_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.geo.region_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.mac\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.nat.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.nat.port\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.packets\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.port\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.registered_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.top_level_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.email\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.full_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.full_name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.group.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.group.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.group.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.hash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"server.user.roles\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.ephemeral_id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.node.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.state\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.address\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.as.number\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.as.organization.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.as.organization.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.geo.city_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.geo.continent_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.geo.country_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.geo.country_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.geo.location\",\"scripted\":false,\"searchable\":true,\"type\":\"geo_point\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.geo.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.geo.region_iso_code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.geo.region_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.mac\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.nat.ip\",\"scripted\":false,\"searchable\":true,\"type\":\"ip\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.nat.port\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.packets\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.port\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.registered_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.top_level_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.email\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.full_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.full_name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.group.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.group.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.group.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.hash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"source.user.roles\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"threat.framework\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"threat.tactic.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"threat.tactic.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"threat.tactic.reference\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"threat.technique.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"threat.technique.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"threat.technique.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"threat.technique.reference\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.cipher\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.certificate\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.certificate_chain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.hash.md5\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.hash.sha1\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.hash.sha256\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.issuer\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.ja3\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.not_after\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.not_before\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.server_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.subject\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.supported_ciphers\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.alternative_names\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.issuer.common_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.issuer.country\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.issuer.distinguished_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.issuer.locality\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.issuer.organization\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.issuer.organizational_unit\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.issuer.state_or_province\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.not_after\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.not_before\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.public_key_algorithm\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.public_key_curve\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":false,\"name\":\"tls.client.x509.public_key_exponent\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.public_key_size\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.serial_number\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.signature_algorithm\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.subject.common_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.subject.country\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.subject.distinguished_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.subject.locality\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.subject.organization\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.subject.organizational_unit\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.subject.state_or_province\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.client.x509.version_number\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.curve\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.established\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.next_protocol\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.resumed\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.certificate\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.certificate_chain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.hash.md5\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.hash.sha1\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.hash.sha256\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.issuer\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.ja3s\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.not_after\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.not_before\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.subject\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.alternative_names\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.issuer.common_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.issuer.country\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.issuer.distinguished_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.issuer.locality\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.issuer.organization\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.issuer.organizational_unit\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.issuer.state_or_province\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.not_after\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.not_before\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.public_key_algorithm\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.public_key_curve\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":false,\"name\":\"tls.server.x509.public_key_exponent\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.public_key_size\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.serial_number\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.signature_algorithm\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.subject.common_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.subject.country\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.subject.distinguished_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.subject.locality\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.subject.organization\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.subject.organizational_unit\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.subject.state_or_province\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.server.x509.version_number\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tls.version_protocol\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tracing.span.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tracing.trace.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"tracing.transaction.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.extension\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.fragment\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.full\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.full.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.original\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.original.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.password\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.path\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.port\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.query\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.registered_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.scheme\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.top_level_domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"url.username\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.email\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.full_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.full_name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.group.domain\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.group.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.group.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.hash\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user.roles\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.device.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.original\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.original.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.os.family\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.os.full\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.os.full.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.os.kernel\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.os.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.os.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.os.platform\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.os.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"user_agent.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vlan.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vlan.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.category\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.classification\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.description\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.description.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.enumeration\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.reference\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.report_id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.scanner.vendor\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.score.base\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.score.environmental\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.score.temporal\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.score.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"vulnerability.severity\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.alternative_names\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.issuer.common_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.issuer.country\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.issuer.distinguished_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.issuer.locality\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.issuer.organization\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.issuer.organizational_unit\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.issuer.state_or_province\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.not_after\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.not_before\",\"scripted\":false,\"searchable\":true,\"type\":\"date\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.public_key_algorithm\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.public_key_curve\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":false,\"name\":\"x509.public_key_exponent\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.public_key_size\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.serial_number\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.signature_algorithm\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.subject.common_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.subject.country\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.subject.distinguished_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.subject.locality\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.subject.organization\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.subject.organizational_unit\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.subject.state_or_province\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"x509.version_number\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"agent.hostname\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"fields\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"timeseries.instance\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"cloud.image.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"docker.container.labels\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.containerized\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.build\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"host.os.codename\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.pod.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.pod.uid\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.namespace\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.node.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.labels.*\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.annotations.*\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.replicaset.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.deployment.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.statefulset.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.container.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"kubernetes.container.image\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"processor.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"processor.event\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"timestamp.us\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":false,\"enabled\":false,\"indexed\":false,\"name\":\"http.request.headers\",\"scripted\":false,\"searchable\":false},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"http.response.finished\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":false,\"enabled\":false,\"indexed\":false,\"name\":\"http.response.headers\",\"scripted\":false,\"searchable\":false},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.environment\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.language.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.language.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.runtime.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.runtime.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.framework.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"service.framework.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.sampled\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.name.text\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.duration.count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.duration.sum.us\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.self_time.count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.self_time.sum.us\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.breakdown.count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"span.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"span.subtype\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.self_time.count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.self_time.sum.us\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"trace.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"parent.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.listening\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"observer.version_major\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"experimental\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":2,\"doc_values\":true,\"indexed\":true,\"name\":\"error.culprit\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.grouping_key\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.exception.code\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":2,\"doc_values\":true,\"indexed\":true,\"name\":\"error.exception.message\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.exception.module\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":4,\"doc_values\":true,\"indexed\":true,\"name\":\"error.exception.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":2,\"doc_values\":true,\"indexed\":true,\"name\":\"error.exception.handled\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.log.level\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.log.logger_name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":2,\"doc_values\":true,\"indexed\":true,\"name\":\"error.log.message\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"error.log.param_message\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"system.cpu.total.norm.pct\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"system.memory.total\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"system.memory.actual.free\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"system.process.cpu.total.norm.pct\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"system.process.memory.size\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"system.process.memory.rss.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"system.process.cgroup.memory.mem.limit.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"system.process.cgroup.memory.mem.usage.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.root\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.duration\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.cpu.ns\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.samples.count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.alloc_objects.count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.alloc_space.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.inuse_objects.count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.inuse_space.bytes\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.top.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.top.function\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.top.filename\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.top.line\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.stack.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.stack.function\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.stack.filename\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"profile.stack.line\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"sourcemap.service.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"sourcemap.service.version\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"sourcemap.bundle_filepath\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"view spans\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"child.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.id\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"span.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"span.action\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"span.start.us\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":1,\"doc_values\":true,\"indexed\":true,\"name\":\"span.duration.us\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.sync\",\"scripted\":false,\"searchable\":true,\"type\":\"boolean\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.db.link\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.db.rows_affected\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.destination.service.type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.destination.service.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.destination.service.resource\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.message.queue.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.message.age.ms\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.duration.us\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.result\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.marks\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.marks.*.*\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.experience.cls\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.experience.fid\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.experience.tbt\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.experience.longtask.count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.experience.longtask.sum\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.experience.longtask.max\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.span_count.dropped\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.message.queue.name\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.message.age.ms\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"transaction.duration.histogram\",\"scripted\":false,\"searchable\":true},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"metricset.period\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.destination.service.response_time.count\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":true,\"indexed\":true,\"name\":\"span.destination.service.response_time.sum.us\",\"scripted\":false,\"searchable\":true,\"type\":\"number\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":false,\"indexed\":false,\"name\":\"_id\",\"scripted\":false,\"searchable\":false,\"type\":\"string\"},{\"aggregatable\":true,\"analyzed\":false,\"count\":0,\"doc_values\":false,\"indexed\":false,\"name\":\"_type\",\"scripted\":false,\"searchable\":true,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":false,\"indexed\":false,\"name\":\"_index\",\"scripted\":false,\"searchable\":false,\"type\":\"string\"},{\"aggregatable\":false,\"analyzed\":false,\"count\":0,\"doc_values\":false,\"indexed\":false,\"name\":\"_score\",\"scripted\":false,\"searchable\":false,\"type\":\"number\"}]", "sourceFilters": "[{\"value\":\"sourcemap.sourcemap\"}]", "timeFieldName": "@timestamp" }, "id": "apm-*", "type": "index-pattern", "version": "1" -} +} \ No newline at end of file diff --git a/src/plugins/charts/public/services/colors/color_palette.ts b/src/plugins/charts/public/services/colors/color_palette.ts index 464e9e3a66101..e1c32fe68da12 100644 --- a/src/plugins/charts/public/services/colors/color_palette.ts +++ b/src/plugins/charts/public/services/colors/color_palette.ts @@ -17,8 +17,8 @@ * under the License. */ -import d3 from 'd3'; import _ from 'lodash'; +import { hsl } from 'color'; import { seedColors } from './seed_colors'; @@ -49,7 +49,7 @@ const fraction = function (goal: number) { * If the number is greater than the length of seed colors available, * new colors are generated up to the value of the input number. */ -export function createColorPalette(num?: any): string[] { +export function createColorPalette(num: number): string[] { if (!_.isNumber(num)) { throw new TypeError('ColorPaletteUtilService expects a number'); } @@ -58,7 +58,7 @@ export function createColorPalette(num?: any): string[] { const seedLength = seedColors.length; _.times(num - seedLength, function (i) { - colors.push(d3.hsl((fraction(i + seedLength + 1) * 360 + offset) % 360, 0.5, 0.5).toString()); + colors.push(hsl((fraction(i + seedLength + 1) * 360 + offset) % 360, 0.5, 0.5).hex()); }); return colors; diff --git a/src/plugins/charts/public/services/colors/colors_palette.test.ts b/src/plugins/charts/public/services/colors/colors_palette.test.ts index 6612447cefe9e..02ff5a6056d54 100644 --- a/src/plugins/charts/public/services/colors/colors_palette.test.ts +++ b/src/plugins/charts/public/services/colors/colors_palette.test.ts @@ -37,26 +37,32 @@ describe('Color Palette', () => { it('should throw an error if input is not a number', () => { expect(() => { + // @ts-expect-error createColorPalette(string); }).toThrowError(); expect(() => { + // @ts-expect-error createColorPalette(bool); }).toThrowError(); expect(() => { + // @ts-expect-error createColorPalette(nullValue); }).toThrowError(); expect(() => { + // @ts-expect-error createColorPalette(emptyArr); }).toThrowError(); expect(() => { + // @ts-expect-error createColorPalette(emptyObject); }).toThrowError(); expect(() => { + // @ts-expect-error createColorPalette(); }).toThrowError(); }); diff --git a/src/plugins/charts/public/services/colors/mapped_colors.test.ts b/src/plugins/charts/public/services/colors/mapped_colors.test.ts index e97ca8ac257b4..9d00bf098de4c 100644 --- a/src/plugins/charts/public/services/colors/mapped_colors.test.ts +++ b/src/plugins/charts/public/services/colors/mapped_colors.test.ts @@ -18,7 +18,7 @@ */ import _ from 'lodash'; -import d3 from 'd3'; +import Color from 'color'; import { coreMock } from '../../../../../core/public/mocks'; import { COLOR_MAPPING_SETTING } from '../../../common'; @@ -61,7 +61,7 @@ describe('Mapped Colors', () => { mappedColors.mapKeys(arr); const colorValues = _(mappedColors.mapping).values(); - expect(colorValues.includes(seedColors[0])).toBe(false); + expect(colorValues).not.toContain(seedColors[0]); expect(colorValues.uniq().size()).toBe(arr.length); }); @@ -78,8 +78,8 @@ describe('Mapped Colors', () => { }); it('should treat different formats of colors as equal', () => { - const color = d3.rgb(seedColors[0]); - const rgb = `rgb(${color.r}, ${color.g}, ${color.b})`; + const color = new Color(seedColors[0]); + const rgb = `rgb(${color.red()}, ${color.green()}, ${color.blue()})`; const newConfig = { bar: rgb }; config.set(COLOR_MAPPING_SETTING, newConfig); diff --git a/src/plugins/charts/public/services/colors/mapped_colors.ts b/src/plugins/charts/public/services/colors/mapped_colors.ts index 3b9e1501d638d..15f9be32b829c 100644 --- a/src/plugins/charts/public/services/colors/mapped_colors.ts +++ b/src/plugins/charts/public/services/colors/mapped_colors.ts @@ -18,14 +18,14 @@ */ import _ from 'lodash'; -import d3 from 'd3'; +import Color from 'color'; import { CoreSetup } from 'kibana/public'; import { COLOR_MAPPING_SETTING } from '../../../common'; import { createColorPalette } from './color_palette'; -const standardizeColor = (color: string) => d3.rgb(color).toString(); +const standardizeColor = (color: string) => new Color(color).hex().toLowerCase(); /** * Maintains a lookup table that associates the value (key) with a hex color (value) diff --git a/src/plugins/dashboard/public/application/actions/expand_panel_action.tsx b/src/plugins/dashboard/public/application/actions/expand_panel_action.tsx index d0442fbc26073..933d2766d13f4 100644 --- a/src/plugins/dashboard/public/application/actions/expand_panel_action.tsx +++ b/src/plugins/dashboard/public/application/actions/expand_panel_action.tsx @@ -57,7 +57,7 @@ export class ExpandPanelAction implements ActionByType) { + const { doStart } = embeddablePluginMock.createInstance(); + const defaultInput: DashboardContainerInput = { + id: '123', + viewMode: ViewMode.EDIT, + filters: [] as DashboardContainerInput['filters'], + query: {} as DashboardContainerInput['query'], + timeRange: {} as DashboardContainerInput['timeRange'], + useMargins: true, + title: 'ultra awesome test dashboard', + isFullScreenMode: false, + panels: {} as DashboardContainerInput['panels'], + }; + const input = { ...defaultInput, ...(initialInput ?? {}) }; + return new DashboardContainer(input, { embeddable: doStart() } as DashboardContainerOptions); + } + describe('syncTimefilterWithDashboard', function () { test('syncs quick time', function () { savedDashboard.timeRestore = true; @@ -95,6 +115,43 @@ describe('DashboardState', function () { }); }); + describe('Dashboard Container Changes', () => { + beforeEach(() => { + initDashboardState(); + }); + + test('expanedPanelId in container input casues state update', () => { + dashboardState.setExpandedPanelId = jest.fn(); + + const dashboardContainer = initDashboardContainer({ + expandedPanelId: 'theCoolestPanelOnThisDashboard', + }); + + dashboardState.handleDashboardContainerChanges(dashboardContainer); + expect(dashboardState.setExpandedPanelId).toHaveBeenCalledWith( + 'theCoolestPanelOnThisDashboard' + ); + }); + + test('expanedPanelId is not updated when it is the same', () => { + dashboardState.setExpandedPanelId = jest + .fn() + .mockImplementation(dashboardState.setExpandedPanelId); + + const dashboardContainer = initDashboardContainer({ + expandedPanelId: 'theCoolestPanelOnThisDashboard', + }); + + dashboardState.handleDashboardContainerChanges(dashboardContainer); + dashboardState.handleDashboardContainerChanges(dashboardContainer); + expect(dashboardState.setExpandedPanelId).toHaveBeenCalledTimes(1); + + dashboardContainer.updateInput({ expandedPanelId: 'woah it changed' }); + dashboardState.handleDashboardContainerChanges(dashboardContainer); + expect(dashboardState.setExpandedPanelId).toHaveBeenCalledTimes(2); + }); + }); + describe('isDirty', function () { beforeAll(() => { initDashboardState(); diff --git a/src/plugins/dashboard/public/application/dashboard_state_manager.ts b/src/plugins/dashboard/public/application/dashboard_state_manager.ts index 910a2b470b2eb..93a63b0535259 100644 --- a/src/plugins/dashboard/public/application/dashboard_state_manager.ts +++ b/src/plugins/dashboard/public/application/dashboard_state_manager.ts @@ -267,6 +267,10 @@ export class DashboardStateManager { this.setFullScreenMode(input.isFullScreenMode); } + if (input.expandedPanelId !== this.getExpandedPanelId()) { + this.setExpandedPanelId(input.expandedPanelId); + } + if (!_.isEqual(input.query, this.getQuery())) { this.setQuery(input.query); } @@ -282,6 +286,14 @@ export class DashboardStateManager { this.stateContainer.transitions.set('fullScreenMode', fullScreenMode); } + public getExpandedPanelId() { + return this.appState.expandedPanelId; + } + + public setExpandedPanelId(expandedPanelId?: string) { + this.stateContainer.transitions.set('expandedPanelId', expandedPanelId); + } + public setFilters(filters: Filter[]) { this.stateContainer.transitions.set('filters', filters); } diff --git a/src/plugins/dashboard/public/types.ts b/src/plugins/dashboard/public/types.ts index 21c6bbc1bfc51..2764f4b075579 100644 --- a/src/plugins/dashboard/public/types.ts +++ b/src/plugins/dashboard/public/types.ts @@ -89,6 +89,7 @@ export interface DashboardAppState { query: Query | string; filters: Filter[]; viewMode: ViewMode; + expandedPanelId?: string; savedQuery?: string; } diff --git a/src/plugins/dashboard/server/saved_objects/dashboard_migrations.ts b/src/plugins/dashboard/server/saved_objects/dashboard_migrations.ts index 1e8356a1ef100..ac91c5a92048a 100644 --- a/src/plugins/dashboard/server/saved_objects/dashboard_migrations.ts +++ b/src/plugins/dashboard/server/saved_objects/dashboard_migrations.ts @@ -114,4 +114,5 @@ export const dashboardSavedObjectTypeMigrations = { '6.7.2': flow(migrateMatchAllQuery), '7.0.0': flow(migrations700), '7.3.0': flow(migrations730), + '7.9.3': flow(migrateMatchAllQuery), }; diff --git a/src/plugins/dashboard/server/saved_objects/migrate_match_all_query.test.ts b/src/plugins/dashboard/server/saved_objects/migrate_match_all_query.test.ts index 8a91c422eed3d..ce7a5ffcd9fe1 100644 --- a/src/plugins/dashboard/server/saved_objects/migrate_match_all_query.test.ts +++ b/src/plugins/dashboard/server/saved_objects/migrate_match_all_query.test.ts @@ -49,4 +49,21 @@ describe('migrate match_all query', () => { }, }); }); + + it('should return original doc if searchSourceJSON cannot be parsed', () => { + const migratedDoc = migrateMatchAllQuery( + { + attributes: { + kibanaSavedObjectMeta: 'kibanaSavedObjectMeta', + }, + } as Parameters[0], + savedObjectMigrationContext + ); + + expect(migratedDoc).toEqual({ + attributes: { + kibanaSavedObjectMeta: 'kibanaSavedObjectMeta', + }, + }); + }); }); diff --git a/src/plugins/dashboard/server/saved_objects/migrate_match_all_query.ts b/src/plugins/dashboard/server/saved_objects/migrate_match_all_query.ts index 452d68aa92394..3d7aadab5602c 100644 --- a/src/plugins/dashboard/server/saved_objects/migrate_match_all_query.ts +++ b/src/plugins/dashboard/server/saved_objects/migrate_match_all_query.ts @@ -21,6 +21,12 @@ import { SavedObjectMigrationFn } from 'kibana/server'; import { get } from 'lodash'; import { DEFAULT_QUERY_LANGUAGE } from '../../../data/common'; +/** + * This migration script is related to: + * @link https://github.com/elastic/kibana/pull/62194 + * @link https://github.com/elastic/kibana/pull/14644 + * This is only a problem when you import an object from 5.x into 6.x but to be sure that all saved objects migrated we should execute it twice in 6.7.2 and 7.9.3 + */ export const migrateMatchAllQuery: SavedObjectMigrationFn = (doc) => { const searchSourceJSON = get(doc, 'attributes.kibanaSavedObjectMeta.searchSourceJSON'); @@ -31,6 +37,7 @@ export const migrateMatchAllQuery: SavedObjectMigrationFn = (doc) => { searchSource = JSON.parse(searchSourceJSON); } catch (e) { // Let it go, the data is invalid and we'll leave it as is + return doc; } if (searchSource.query?.match_all) { diff --git a/src/plugins/data/common/index_patterns/index_patterns/index_pattern.test.ts b/src/plugins/data/common/index_patterns/index_patterns/index_pattern.test.ts index bfb5fd9da56e6..a8d53223c06d1 100644 --- a/src/plugins/data/common/index_patterns/index_patterns/index_pattern.test.ts +++ b/src/plugins/data/common/index_patterns/index_patterns/index_pattern.test.ts @@ -89,7 +89,6 @@ describe('IndexPattern', () => { describe('api', () => { test('should have expected properties', () => { - expect(indexPattern).toHaveProperty('popularizeField'); expect(indexPattern).toHaveProperty('getScriptedFields'); expect(indexPattern).toHaveProperty('getNonScriptedFields'); expect(indexPattern).toHaveProperty('addScriptedField'); @@ -241,50 +240,4 @@ describe('IndexPattern', () => { expect(restoredPattern.fieldFormatMap.bytes instanceof MockFieldFormatter).toEqual(true); }); }); - - describe('popularizeField', () => { - test('should increment the popularity count by default', () => { - indexPattern.fields.forEach(async (field) => { - const oldCount = field.count || 0; - - await indexPattern.popularizeField(field.name); - - expect(field.count).toEqual(oldCount + 1); - }); - }); - - test('should increment the popularity count', () => { - indexPattern.fields.forEach(async (field) => { - const oldCount = field.count || 0; - const incrementAmount = 4; - - await indexPattern.popularizeField(field.name, incrementAmount); - - expect(field.count).toEqual(oldCount + incrementAmount); - }); - }); - - test('should decrement the popularity count', () => { - indexPattern.fields.forEach(async (field) => { - const oldCount = field.count || 0; - const incrementAmount = 4; - const decrementAmount = -2; - - await indexPattern.popularizeField(field.name, incrementAmount); - await indexPattern.popularizeField(field.name, decrementAmount); - - expect(field.count).toEqual(oldCount + incrementAmount + decrementAmount); - }); - }); - - test('should not go below 0', () => { - indexPattern.fields.forEach(async (field) => { - const decrementAmount = -Number.MAX_VALUE; - - await indexPattern.popularizeField(field.name, decrementAmount); - - expect(field.count).toEqual(0); - }); - }); - }); }); diff --git a/src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts b/src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts index e880c3a9ff825..5fc6344c935d5 100644 --- a/src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts +++ b/src/plugins/data/common/index_patterns/index_patterns/index_pattern.ts @@ -74,7 +74,6 @@ export class IndexPattern implements IIndexPattern { public metaFields: string[]; // savedObject version public version: string | undefined; - private savedObjectsClient: SavedObjectsClientCommon; public sourceFilters?: SourceFilter[]; private originalSavedObjectBody: SavedObjectBody = {}; private shortDotsEnable: boolean = false; @@ -82,13 +81,11 @@ export class IndexPattern implements IIndexPattern { constructor({ spec = {}, - savedObjectsClient, fieldFormats, shortDotsEnable = false, metaFields = [], }: IndexPatternDeps) { // set dependencies - this.savedObjectsClient = savedObjectsClient; this.fieldFormats = fieldFormats; // set config this.shortDotsEnable = shortDotsEnable; @@ -267,39 +264,6 @@ export class IndexPattern implements IIndexPattern { } } - async popularizeField(fieldName: string, unit = 1) { - /** - * This function is just used by Discover and it's high likely to be removed in the near future - * It doesn't use the save function to skip the error message that's displayed when - * a user adds several columns in a higher frequency that the changes can be persisted to ES - * resulting in 409 errors - */ - if (!this.id) return; - const field = this.fields.getByName(fieldName); - if (!field) { - return; - } - const count = Math.max((field.count || 0) + unit, 0); - if (field.count === count) { - return; - } - field.count = count; - - try { - const res = await this.savedObjectsClient.update( - 'index-pattern', - this.id, - this.getAsSavedObjectBody(), - { - version: this.version, - } - ); - this.version = res.version; - } catch (e) { - // no need for an error message here - } - } - getNonScriptedFields() { return [...this.fields.getAll().filter((field) => !field.scripted)]; } diff --git a/src/plugins/data/common/index_patterns/index_patterns/index_patterns.ts b/src/plugins/data/common/index_patterns/index_patterns/index_patterns.ts index eef8ef10ea754..9a86541376cd8 100644 --- a/src/plugins/data/common/index_patterns/index_patterns/index_patterns.ts +++ b/src/plugins/data/common/index_patterns/index_patterns/index_patterns.ts @@ -516,7 +516,8 @@ export class IndexPatternsService { async updateSavedObject( indexPattern: IndexPattern, - saveAttempts: number = 0 + saveAttempts: number = 0, + ignoreErrors: boolean = false ): Promise { if (!indexPattern.id) return; @@ -567,6 +568,9 @@ export class IndexPatternsService { } if (unresolvedCollision) { + if (ignoreErrors) { + return; + } const title = i18n.translate('data.indexPatterns.unableWriteLabel', { defaultMessage: 'Unable to write index pattern! Refresh the page to get the most up to date changes for this index pattern.', @@ -586,7 +590,7 @@ export class IndexPatternsService { indexPatternCache.clear(indexPattern.id!); // Try the save again - return this.updateSavedObject(indexPattern, saveAttempts); + return this.updateSavedObject(indexPattern, saveAttempts, ignoreErrors); } throw err; }); diff --git a/src/plugins/data/common/search/aggs/buckets/shard_delay.test.ts b/src/plugins/data/common/search/aggs/buckets/shard_delay.test.ts new file mode 100644 index 0000000000000..15399ffc43791 --- /dev/null +++ b/src/plugins/data/common/search/aggs/buckets/shard_delay.test.ts @@ -0,0 +1,76 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { AggConfigs } from '../agg_configs'; +import { FieldFormatsGetConfigFn, NumberFormat } from '../../../../common/field_formats'; +import { getShardDelayBucketAgg, SHARD_DELAY_AGG_NAME } from './shard_delay'; + +describe('Shard Delay Agg', () => { + const getConfig = (() => {}) as FieldFormatsGetConfigFn; + const getAggConfigs = () => { + const field = { name: 'bytes' }; + + const indexPattern = { + id: '1234', + title: 'logstash-*', + fields: { + getByName: () => field, + filter: () => [field], + }, + getFormatterForField: () => + new NumberFormat( + { + pattern: '0,0.[000] b', + }, + getConfig + ), + } as any; + + return new AggConfigs( + indexPattern, + [ + { + type: SHARD_DELAY_AGG_NAME, + params: { + duration: 1000, + }, + }, + ], + { + typesRegistry: { + get: getShardDelayBucketAgg, + } as any, + } + ); + }; + + describe('write', () => { + test('writes the delay as the value parameter', () => { + const aggConfigs = getAggConfigs(); + const agg = aggConfigs.aggs[0]; + expect(agg.write(aggConfigs)).toMatchInlineSnapshot(` + Object { + "params": Object { + "value": "5s", + }, + } + `); + }); + }); +}); diff --git a/src/plugins/data/common/search/aggs/buckets/shard_delay.ts b/src/plugins/data/common/search/aggs/buckets/shard_delay.ts new file mode 100644 index 0000000000000..2decf5a74bc85 --- /dev/null +++ b/src/plugins/data/common/search/aggs/buckets/shard_delay.ts @@ -0,0 +1,50 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { BucketAggType } from './bucket_agg_type'; +import { BaseAggParams } from '../types'; +import { aggShardDelayFnName } from './shard_delay_fn'; + +export const SHARD_DELAY_AGG_NAME = 'shard_delay'; + +export interface AggParamsShardDelay extends BaseAggParams { + delay?: number; +} + +export const getShardDelayBucketAgg = () => + new BucketAggType({ + name: SHARD_DELAY_AGG_NAME, + title: 'Shard Delay', + expressionName: aggShardDelayFnName, + createFilter: () => ({ match_all: {} }), + customLabels: false, + params: [ + { + name: 'delay', + type: 'string', + default: '5s', + write(aggConfig, output) { + output.params = { + ...output.params, + value: aggConfig.params.delay, + }; + }, + }, + ], + }); diff --git a/src/plugins/data/common/search/aggs/buckets/shard_delay_fn.test.ts b/src/plugins/data/common/search/aggs/buckets/shard_delay_fn.test.ts new file mode 100644 index 0000000000000..b0ebfb005c218 --- /dev/null +++ b/src/plugins/data/common/search/aggs/buckets/shard_delay_fn.test.ts @@ -0,0 +1,65 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { functionWrapper } from '../test_helpers'; +import { aggShardDelay } from './shard_delay_fn'; + +describe('agg_expression_functions', () => { + describe('aggShardDelay', () => { + const fn = functionWrapper(aggShardDelay()); + + test('correctly serializes', () => { + const actual = fn({ + delay: 1000, + }); + expect(actual).toMatchInlineSnapshot(` + Object { + "type": "agg_type", + "value": Object { + "enabled": true, + "id": undefined, + "params": Object { + "customLabel": undefined, + "delay": 1000, + "json": undefined, + }, + "schema": undefined, + "type": "shard_delay", + }, + } + `); + }); + + test('correctly parses json string argument', () => { + const actual = fn({ + delay: 1000, + json: '{ "foo": true }', + }); + + expect(actual.value.params.json).toEqual({ foo: true }); + + expect(() => { + fn({ + delay: 1000, + json: '/// intentionally malformed json ///', + }); + }).toThrowErrorMatchingInlineSnapshot(`"Unable to parse json argument string"`); + }); + }); +}); diff --git a/src/plugins/data/common/search/aggs/buckets/shard_delay_fn.ts b/src/plugins/data/common/search/aggs/buckets/shard_delay_fn.ts new file mode 100644 index 0000000000000..86de428fa03d7 --- /dev/null +++ b/src/plugins/data/common/search/aggs/buckets/shard_delay_fn.ts @@ -0,0 +1,105 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { i18n } from '@kbn/i18n'; +import { Assign } from '@kbn/utility-types'; +import { ExpressionFunctionDefinition } from 'src/plugins/expressions/common'; +import { AggExpressionType, AggConfigSerialized } from '../'; +import { getParsedValue } from '../utils/get_parsed_value'; +import { AggParamsShardDelay, SHARD_DELAY_AGG_NAME } from './shard_delay'; + +export const aggShardDelayFnName = 'aggShardDelay'; + +type Input = any; +type AggArgs = AggParamsShardDelay & Pick; + +type Arguments = Assign; + +type Output = AggExpressionType; +type FunctionDefinition = ExpressionFunctionDefinition< + typeof aggShardDelayFnName, + Input, + Arguments, + Output +>; + +export const aggShardDelay = (): FunctionDefinition => ({ + name: aggShardDelayFnName, + help: i18n.translate('data.search.aggs.function.buckets.shardDelay.help', { + defaultMessage: 'Generates a serialized agg config for a Shard Delay agg', + }), + type: 'agg_type', + args: { + id: { + types: ['string'], + help: i18n.translate('data.search.aggs.buckets.shardDelay.id.help', { + defaultMessage: 'ID for this aggregation', + }), + }, + enabled: { + types: ['boolean'], + default: true, + help: i18n.translate('data.search.aggs.buckets.shardDelay.enabled.help', { + defaultMessage: 'Specifies whether this aggregation should be enabled', + }), + }, + schema: { + types: ['string'], + help: i18n.translate('data.search.aggs.buckets.shardDelay.schema.help', { + defaultMessage: 'Schema to use for this aggregation', + }), + }, + delay: { + types: ['number'], + help: i18n.translate('data.search.aggs.buckets.shardDelay.delay.help', { + defaultMessage: 'Delay in ms between shards to process.', + }), + }, + json: { + types: ['string'], + help: i18n.translate('data.search.aggs.buckets.shardDelay.json.help', { + defaultMessage: 'Advanced json to include when the agg is sent to Elasticsearch', + }), + }, + customLabel: { + types: ['string'], + help: i18n.translate('data.search.aggs.buckets.shardDelay.customLabel.help', { + defaultMessage: 'Represents a custom label for this aggregation', + }), + }, + }, + fn: (input, args) => { + const { id, enabled, schema, ...rest } = args; + + return { + type: 'agg_type', + value: { + id, + enabled, + schema, + type: SHARD_DELAY_AGG_NAME, + params: { + ...rest, + json: getParsedValue(args, 'json'), + delay: getParsedValue(args, 'delay'), + }, + }, + }; + }, +}); diff --git a/src/plugins/data/common/search/aggs/param_types/field.ts b/src/plugins/data/common/search/aggs/param_types/field.ts index 492294bdf4e5f..a0bc71ac8e156 100644 --- a/src/plugins/data/common/search/aggs/param_types/field.ts +++ b/src/plugins/data/common/search/aggs/param_types/field.ts @@ -90,9 +90,10 @@ export class FieldParamType extends BaseParamType { 'data.search.aggs.paramTypes.field.invalidSavedFieldParameterErrorMessage', { defaultMessage: - 'Saved {fieldParameter} parameter is now invalid. Please select a new field.', + 'Saved field "{fieldParameter}" is invalid for use with the "{aggType}" aggregation. Please select a new field.', values: { - fieldParameter: '"field"', + fieldParameter: fieldName, + aggType: aggConfig?.type?.title, }, } ) diff --git a/src/plugins/data/common/search/search_source/index.ts b/src/plugins/data/common/search/search_source/index.ts index 70c9cfcee2348..2ef1b4c3c5199 100644 --- a/src/plugins/data/common/search/search_source/index.ts +++ b/src/plugins/data/common/search/search_source/index.ts @@ -17,11 +17,12 @@ * under the License. */ -export { SearchSource, ISearchSource, SearchSourceDependencies } from './search_source'; export { createSearchSource } from './create_search_source'; -export { SortDirection, EsQuerySortValue, SearchSourceFields } from './types'; export { injectReferences } from './inject_references'; export { extractReferences } from './extract_references'; export { parseSearchSourceJSON } from './parse_json'; export * from './fetch'; export * from './legacy'; +export * from './search_source'; +export * from './search_source_service'; +export * from './types'; diff --git a/src/plugins/data/common/search/search_source/inject_references.test.ts b/src/plugins/data/common/search/search_source/inject_references.test.ts new file mode 100644 index 0000000000000..c607f16d24734 --- /dev/null +++ b/src/plugins/data/common/search/search_source/inject_references.test.ts @@ -0,0 +1,120 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { SavedObjectReference } from 'src/core/types'; +import { SearchSourceFields } from './types'; + +import { injectReferences } from './inject_references'; + +describe('injectSearchSourceReferences', () => { + let searchSourceJSON: SearchSourceFields & { indexRefName: string }; + let references: SavedObjectReference[]; + + beforeEach(() => { + searchSourceJSON = { + highlightAll: true, + version: true, + query: { + query: 'play_name:"Henry IV"', + language: 'kuery', + }, + indexRefName: 'kibanaSavedObjectMeta.searchSourceJSON.index', + }; + references = [ + { + name: 'kibanaSavedObjectMeta.searchSourceJSON.index', + type: 'index-pattern', + id: '033af690-fde7-11ea-91f3-fb9e73f9bbe9', + }, + ]; + }); + + test('injects references', () => { + const actual = injectReferences(searchSourceJSON, references); + expect(actual).toMatchInlineSnapshot(` + Object { + "highlightAll": true, + "index": "033af690-fde7-11ea-91f3-fb9e73f9bbe9", + "query": Object { + "language": "kuery", + "query": "play_name:\\"Henry IV\\"", + }, + "version": true, + } + `); + }); + + test('skips injecting references if none exists', () => { + // @ts-expect-error + delete searchSourceJSON.indexRefName; + references = []; + const actual = injectReferences(searchSourceJSON, references); + expect(actual).toMatchInlineSnapshot(` + Object { + "highlightAll": true, + "query": Object { + "language": "kuery", + "query": "play_name:\\"Henry IV\\"", + }, + "version": true, + } + `); + }); + + test('throws an error if there is a broken reference', () => { + searchSourceJSON.indexRefName = 'oops'; + expect(() => injectReferences(searchSourceJSON, references)).toThrowErrorMatchingInlineSnapshot( + `"Could not find reference for oops"` + ); + }); + + test('handles filters', () => { + searchSourceJSON.filter = [ + // @ts-expect-error + { meta: { indexRefName: 'kibanaSavedObjectMeta.searchSourceJSON.index' } }, + ]; + const actual = injectReferences(searchSourceJSON, references); + expect(actual).toMatchInlineSnapshot(` + Object { + "filter": Array [ + Object { + "meta": Object { + "index": "033af690-fde7-11ea-91f3-fb9e73f9bbe9", + }, + }, + ], + "highlightAll": true, + "index": "033af690-fde7-11ea-91f3-fb9e73f9bbe9", + "query": Object { + "language": "kuery", + "query": "play_name:\\"Henry IV\\"", + }, + "version": true, + } + `); + }); + + test('throws an error if there is a broken filter reference', () => { + // @ts-expect-error + searchSourceJSON.filter = [{ meta: { indexRefName: 'oops' } }]; + expect(() => injectReferences(searchSourceJSON, references)).toThrowErrorMatchingInlineSnapshot( + `"Could not find reference for oops"` + ); + }); +}); diff --git a/src/plugins/data/common/search/search_source/legacy/types.ts b/src/plugins/data/common/search/search_source/legacy/types.ts index 1a0a96a76a703..8ac713a658932 100644 --- a/src/plugins/data/common/search/search_source/legacy/types.ts +++ b/src/plugins/data/common/search/search_source/legacy/types.ts @@ -18,15 +18,36 @@ */ import { BehaviorSubject } from 'rxjs'; +import { ApiResponse } from '@elastic/elasticsearch'; import { SearchResponse } from 'elasticsearch'; import { FetchHandlers, SearchRequest } from '../fetch'; +interface MsearchHeaders { + index: string; + preference?: number | string; +} + +interface MsearchRequest { + header: MsearchHeaders; + body: any; +} + +// @internal +export interface MsearchRequestBody { + searches: MsearchRequest[]; +} + +// @internal +export interface MsearchResponse { + body: ApiResponse<{ responses: Array> }>; +} + // @internal export interface LegacyFetchHandlers { callMsearch: (params: { - body: SearchRequest; + body: MsearchRequestBody; signal: AbortSignal; - }) => Promise>>; + }) => Promise; loadingCount$: BehaviorSubject; } diff --git a/src/plugins/data/common/search/search_source/mocks.ts b/src/plugins/data/common/search/search_source/mocks.ts index f582861e37c15..d4c0707f950bb 100644 --- a/src/plugins/data/common/search/search_source/mocks.ts +++ b/src/plugins/data/common/search/search_source/mocks.ts @@ -20,8 +20,8 @@ import { BehaviorSubject } from 'rxjs'; import { uiSettingsServiceMock } from '../../../../../core/public/mocks'; -import { ISearchSource, SearchSource } from './search_source'; -import { SearchSourceFields } from './types'; +import { SearchSource } from './search_source'; +import { ISearchStartSearchSource, ISearchSource, SearchSourceFields } from './types'; export const searchSourceInstanceMock: MockedKeys = { setPreferredSearchStrategyId: jest.fn(), @@ -45,7 +45,7 @@ export const searchSourceInstanceMock: MockedKeys = { serialize: jest.fn(), }; -export const searchSourceMock = { +export const searchSourceCommonMock: jest.Mocked = { create: jest.fn().mockReturnValue(searchSourceInstanceMock), createEmpty: jest.fn().mockReturnValue(searchSourceInstanceMock), }; diff --git a/src/plugins/data/common/search/search_source/search_source.test.ts b/src/plugins/data/common/search/search_source/search_source.test.ts index 74abd9238bc2b..00e06663e998e 100644 --- a/src/plugins/data/common/search/search_source/search_source.test.ts +++ b/src/plugins/data/common/search/search_source/search_source.test.ts @@ -17,7 +17,7 @@ * under the License. */ -import { Observable, BehaviorSubject } from 'rxjs'; +import { BehaviorSubject } from 'rxjs'; import { IndexPattern } from '../../index_patterns'; import { GetConfigFn } from '../../types'; import { fetchSoon } from './legacy'; @@ -53,16 +53,7 @@ describe('SearchSource', () => { let searchSourceDependencies: SearchSourceDependencies; beforeEach(() => { - mockSearchMethod = jest.fn(() => { - return new Observable((subscriber) => { - setTimeout(() => { - subscriber.next({ - rawResponse: '', - }); - subscriber.complete(); - }, 100); - }); - }); + mockSearchMethod = jest.fn().mockResolvedValue({ rawResponse: '' }); searchSourceDependencies = { getConfig: jest.fn(), diff --git a/src/plugins/data/common/search/search_source/search_source.ts b/src/plugins/data/common/search/search_source/search_source.ts index d8a036ce970dd..3eafea06f9f5b 100644 --- a/src/plugins/data/common/search/search_source/search_source.ts +++ b/src/plugins/data/common/search/search_source/search_source.ts @@ -71,22 +71,15 @@ import { setWith } from '@elastic/safer-lodash-set'; import { uniqueId, uniq, extend, pick, difference, omit, isObject, keys, isFunction } from 'lodash'; -import { map } from 'rxjs/operators'; import { normalizeSortRequest } from './normalize_sort_request'; import { filterDocvalueFields } from './filter_docvalue_fields'; import { fieldWildcardFilter } from '../../../../kibana_utils/common'; import { IIndexPattern } from '../../index_patterns'; -import { ISearchGeneric } from '../..'; -import { SearchSourceOptions, SearchSourceFields } from './types'; +import { IEsSearchRequest, IEsSearchResponse, ISearchOptions } from '../..'; +import { ISearchSource, SearchSourceOptions, SearchSourceFields } from './types'; import { FetchHandlers, RequestFailure, getSearchParamsFromRequest, SearchRequest } from './fetch'; -import { - getEsQueryConfig, - buildEsQuery, - Filter, - UI_SETTINGS, - ISearchOptions, -} from '../../../common'; +import { getEsQueryConfig, buildEsQuery, Filter, UI_SETTINGS } from '../../../common'; import { getHighlightRequest } from '../../../common/field_formats'; import { fetchSoon } from './legacy'; import { extractReferences } from './extract_references'; @@ -108,7 +101,7 @@ export const searchSourceRequiredUiSettings = [ ]; export interface SearchSourceDependencies extends FetchHandlers { - search: ISearchGeneric; + search: (request: IEsSearchRequest, options: ISearchOptions) => Promise; } /** @public **/ @@ -264,7 +257,7 @@ export class SearchSource { if (getConfig(UI_SETTINGS.COURIER_BATCH_SEARCHES)) { response = await this.legacyFetch(searchRequest, options); } else { - response = await this.fetch$(searchRequest, options).toPromise(); + response = await this.fetchSearch(searchRequest, options); } // TODO: Remove casting when https://github.com/elastic/elasticsearch-js/issues/1287 is resolved @@ -308,17 +301,17 @@ export class SearchSource { /** * Run a search using the search service - * @return {Observable>} + * @return {Promise>} */ - private fetch$(searchRequest: SearchRequest, options: ISearchOptions) { + private fetchSearch(searchRequest: SearchRequest, options: ISearchOptions) { const { search, getConfig, onResponse } = this.dependencies; const params = getSearchParamsFromRequest(searchRequest, { getConfig, }); - return search({ params, indexType: searchRequest.indexType }, options).pipe( - map(({ rawResponse }) => onResponse(searchRequest, rawResponse)) + return search({ params, indexType: searchRequest.indexType }, options).then(({ rawResponse }) => + onResponse(searchRequest, rawResponse) ); } @@ -558,9 +551,3 @@ export class SearchSource { return [filterField]; } } - -/** - * search source interface - * @public - */ -export type ISearchSource = Pick; diff --git a/src/plugins/data/common/search/search_source/search_source_service.test.ts b/src/plugins/data/common/search/search_source/search_source_service.test.ts new file mode 100644 index 0000000000000..bbbaac11bbe91 --- /dev/null +++ b/src/plugins/data/common/search/search_source/search_source_service.test.ts @@ -0,0 +1,50 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { BehaviorSubject } from 'rxjs'; +import { IndexPatternsContract } from '../../index_patterns/index_patterns'; +import { SearchSourceService, SearchSourceDependencies } from './'; + +describe('SearchSource service', () => { + let dependencies: jest.Mocked; + + beforeEach(() => { + jest.resetModules(); + dependencies = { + getConfig: jest.fn(), + search: jest.fn(), + onResponse: jest.fn(), + legacy: { + callMsearch: jest.fn(), + loadingCount$: new BehaviorSubject(0), + }, + }; + }); + + describe('start()', () => { + test('exposes proper contract', () => { + const start = new SearchSourceService().start( + (jest.fn() as unknown) as jest.Mocked, + dependencies + ); + + expect(Object.keys(start)).toEqual(['create', 'createEmpty']); + }); + }); +}); diff --git a/src/plugins/data/common/search/search_source/search_source_service.ts b/src/plugins/data/common/search/search_source/search_source_service.ts new file mode 100644 index 0000000000000..40981402419c7 --- /dev/null +++ b/src/plugins/data/common/search/search_source/search_source_service.ts @@ -0,0 +1,42 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { createSearchSource, SearchSource, SearchSourceDependencies } from './'; +import { IndexPatternsContract } from '../../index_patterns/index_patterns'; + +export class SearchSourceService { + public setup() {} + + public start(indexPatterns: IndexPatternsContract, dependencies: SearchSourceDependencies) { + return { + /** + * creates searchsource based on serialized search source fields + */ + create: createSearchSource(indexPatterns, dependencies), + /** + * creates an enpty search source + */ + createEmpty: () => { + return new SearchSource({}, dependencies); + }, + }; + } + + public stop() {} +} diff --git a/src/plugins/data/common/search/search_source/types.ts b/src/plugins/data/common/search/search_source/types.ts index 0882aa9a2ceec..bbfc308e0459d 100644 --- a/src/plugins/data/common/search/search_source/types.ts +++ b/src/plugins/data/common/search/search_source/types.ts @@ -16,9 +16,32 @@ * specific language governing permissions and limitations * under the License. */ + import { NameList } from 'elasticsearch'; -import { IndexPattern, Query } from '../..'; -import { Filter } from '../../../common'; +import { Filter, IndexPattern, Query } from '../..'; +import { SearchSource } from './search_source'; + +/** + * search source interface + * @public + */ +export type ISearchSource = Pick; + +/** + * high level search service + * @public + */ +export interface ISearchStartSearchSource { + /** + * creates {@link SearchSource} based on provided serialized {@link SearchSourceFields} + * @param fields + */ + create: (fields?: SearchSourceFields) => Promise; + /** + * creates empty {@link SearchSource} + */ + createEmpty: () => ISearchSource; +} export type EsQuerySearchAfter = [string | number, string | number]; @@ -75,8 +98,6 @@ export interface SearchSourceOptions { callParentStartHandlers?: boolean; } -export { ISearchSource } from './search_source'; - export interface SortOptions { mode?: 'min' | 'max' | 'sum' | 'avg' | 'median'; type?: 'double' | 'long' | 'date' | 'date_nanos'; diff --git a/src/plugins/data/config.ts b/src/plugins/data/config.ts index 09cb2cb2afeca..83a384a049a75 100644 --- a/src/plugins/data/config.ts +++ b/src/plugins/data/config.ts @@ -28,6 +28,16 @@ export const configSchema = schema.object({ enabled: schema.boolean({ defaultValue: true }), }), }), + search: schema.object({ + aggs: schema.object({ + shardDelay: schema.object({ + // Whether or not to register the shard_delay (which is only available in snapshot versions + // of Elasticsearch) agg type/expression function to make it available in the UI for either + // functional or manual testing + enabled: schema.boolean({ defaultValue: false }), + }), + }), + }), }); export type ConfigSchema = TypeOf; diff --git a/src/plugins/data/public/mocks.ts b/src/plugins/data/public/mocks.ts index 0eb0e3b658045..1b83eb569b1a1 100644 --- a/src/plugins/data/public/mocks.ts +++ b/src/plugins/data/public/mocks.ts @@ -78,7 +78,7 @@ const createStartContract = (): Start => { }; }; -export { createSearchSourceMock } from './search/mocks'; +export { createSearchSourceMock } from '../common/search/search_source/mocks'; export { getCalculateAutoTimeExpression } from '../common/search/aggs'; export const dataPluginMock = { diff --git a/src/plugins/data/public/plugin.ts b/src/plugins/data/public/plugin.ts index 3b18e0fbed537..5abf4d3648af7 100644 --- a/src/plugins/data/public/plugin.ts +++ b/src/plugins/data/public/plugin.ts @@ -96,7 +96,7 @@ export class DataPublicPlugin private readonly storage: IStorageWrapper; constructor(initializerContext: PluginInitializerContext) { - this.searchService = new SearchService(); + this.searchService = new SearchService(initializerContext); this.queryService = new QueryService(); this.fieldFormatsService = new FieldFormatsService(); this.autocomplete = new AutocompleteService(initializerContext); diff --git a/src/plugins/data/public/public.api.md b/src/plugins/data/public/public.api.md index 1ee453a0f1411..b8eb7a556ac44 100644 --- a/src/plugins/data/public/public.api.md +++ b/src/plugins/data/public/public.api.md @@ -7,7 +7,8 @@ import { $Values } from '@kbn/utility-types'; import _ from 'lodash'; import { Action } from 'history'; -import { ApiResponse } from '@elastic/elasticsearch/lib/Transport'; +import { ApiResponse } from '@elastic/elasticsearch'; +import { ApiResponse as ApiResponse_2 } from '@elastic/elasticsearch/lib/Transport'; import { ApplicationStart } from 'kibana/public'; import { Assign } from '@kbn/utility-types'; import { BehaviorSubject } from 'rxjs'; @@ -1085,7 +1086,7 @@ export type IMetricAggType = MetricAggType; // @public (undocumented) export class IndexPattern implements IIndexPattern { // Warning: (ae-forgotten-export) The symbol "IndexPatternDeps" needs to be exported by the entry point index.d.ts - constructor({ spec, savedObjectsClient, fieldFormats, shortDotsEnable, metaFields, }: IndexPatternDeps); + constructor({ spec, fieldFormats, shortDotsEnable, metaFields, }: IndexPatternDeps); addScriptedField(name: string, script: string, fieldType?: string): Promise; // (undocumented) fieldFormatMap: Record; @@ -1162,8 +1163,6 @@ export class IndexPattern implements IIndexPattern { isTimeNanosBased(): boolean; // (undocumented) metaFields: string[]; - // (undocumented) - popularizeField(fieldName: string, unit?: number): Promise; removeScriptedField(fieldName: string): void; resetOriginalSavedObjectBody: () => void; // Warning: (ae-forgotten-export) The symbol "SourceFilter" needs to be exported by the entry point index.d.ts @@ -1385,7 +1384,7 @@ export class IndexPatternsService { refreshFields: (indexPattern: IndexPattern) => Promise; savedObjectToSpec: (savedObject: SavedObject) => IndexPatternSpec; setDefault: (id: string, force?: boolean) => Promise; - updateSavedObject(indexPattern: IndexPattern, saveAttempts?: number): Promise; + updateSavedObject(indexPattern: IndexPattern, saveAttempts?: number, ignoreErrors?: boolean): Promise; } // Warning: (ae-missing-release-tag) "TypeMeta" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) diff --git a/src/plugins/data/public/search/mocks.ts b/src/plugins/data/public/search/mocks.ts index e931b39eae2a5..8bad4cd269b3f 100644 --- a/src/plugins/data/public/search/mocks.ts +++ b/src/plugins/data/public/search/mocks.ts @@ -18,10 +18,8 @@ */ import { searchAggsSetupMock, searchAggsStartMock } from './aggs/mocks'; +import { searchSourceMock } from './search_source/mocks'; import { ISearchSetup, ISearchStart } from './types'; -import { searchSourceMock, createSearchSourceMock } from '../../common/search/search_source/mocks'; - -export * from '../../common/search/search_source/mocks'; function createSetupContract(): jest.Mocked { return { @@ -35,7 +33,7 @@ function createStartContract(): jest.Mocked { aggs: searchAggsStartMock(), search: jest.fn(), showError: jest.fn(), - searchSource: searchSourceMock, + searchSource: searchSourceMock.createStartContract(), }; } @@ -43,5 +41,3 @@ export const searchServiceMock = { createSetupContract, createStartContract, }; - -export { createSearchSourceMock }; diff --git a/src/plugins/data/public/search/search_service.test.ts b/src/plugins/data/public/search/search_service.test.ts index 738f1e8ffbca0..b59fa6fa16bf6 100644 --- a/src/plugins/data/public/search/search_service.test.ts +++ b/src/plugins/data/public/search/search_service.test.ts @@ -26,11 +26,15 @@ describe('Search service', () => { let searchService: SearchService; let mockCoreSetup: MockedKeys; let mockCoreStart: MockedKeys; + const initializerContext = coreMock.createPluginInitializerContext(); + initializerContext.config.get = jest.fn().mockReturnValue({ + search: { aggs: { shardDelay: { enabled: false } } }, + }); beforeEach(() => { - searchService = new SearchService(); mockCoreSetup = coreMock.createSetup(); mockCoreStart = coreMock.createStart(); + searchService = new SearchService(initializerContext); }); describe('setup()', () => { @@ -48,6 +52,7 @@ describe('Search service', () => { describe('start()', () => { it('exposes proper contract', async () => { const start = searchService.start(mockCoreStart, { + fieldFormats: {}, indexPatterns: {}, } as any); expect(start).toHaveProperty('aggs'); diff --git a/src/plugins/data/public/search/search_service.ts b/src/plugins/data/public/search/search_service.ts index 173baba5cab6f..5014418d6b70b 100644 --- a/src/plugins/data/public/search/search_service.ts +++ b/src/plugins/data/public/search/search_service.ts @@ -17,15 +17,16 @@ * under the License. */ -import { Plugin, CoreSetup, CoreStart } from 'src/core/public'; +import { Plugin, CoreSetup, CoreStart, PluginInitializerContext } from 'src/core/public'; import { BehaviorSubject } from 'rxjs'; import { ISearchSetup, ISearchStart, SearchEnhancements } from './types'; import { handleResponse } from './fetch'; import { - createSearchSource, + IEsSearchRequest, ISearchGeneric, - SearchSource, + ISearchOptions, + SearchSourceService, SearchSourceDependencies, } from '../../common/search'; import { getCallMsearch } from './legacy'; @@ -36,6 +37,12 @@ import { SearchUsageCollector, createUsageCollector } from './collectors'; import { UsageCollectionSetup } from '../../../usage_collection/public'; import { esdsl, esRawResponse } from './expressions'; import { ExpressionsSetup } from '../../../expressions/public'; +import { ConfigSchema } from '../../config'; +import { + SHARD_DELAY_AGG_NAME, + getShardDelayBucketAgg, +} from '../../common/search/aggs/buckets/shard_delay'; +import { aggShardDelay } from '../../common/search/aggs/buckets/shard_delay_fn'; /** @internal */ export interface SearchServiceSetupDependencies { @@ -51,9 +58,12 @@ export interface SearchServiceStartDependencies { export class SearchService implements Plugin { private readonly aggsService = new AggsService(); + private readonly searchSourceService = new SearchSourceService(); private searchInterceptor!: ISearchInterceptor; private usageCollector?: SearchUsageCollector; + constructor(private initializerContext: PluginInitializerContext) {} + public setup( { http, getStartServices, notifications, uiSettings }: CoreSetup, { expressions, usageCollection }: SearchServiceSetupDependencies @@ -75,11 +85,18 @@ export class SearchService implements Plugin { expressions.registerFunction(esdsl); expressions.registerType(esRawResponse); + const aggs = this.aggsService.setup({ + registerFunction: expressions.registerFunction, + uiSettings, + }); + + if (this.initializerContext.config.get().search.aggs.shardDelay.enabled) { + aggs.types.registerBucket(SHARD_DELAY_AGG_NAME, getShardDelayBucketAgg); + expressions.registerFunction(aggShardDelay); + } + return { - aggs: this.aggsService.setup({ - registerFunction: expressions.registerFunction, - uiSettings, - }), + aggs, usageCollector: this.usageCollector!, __enhance: (enhancements: SearchEnhancements) => { this.searchInterceptor = enhancements.searchInterceptor; @@ -100,7 +117,9 @@ export class SearchService implements Plugin { const searchSourceDependencies: SearchSourceDependencies = { getConfig: uiSettings.get.bind(uiSettings), - search, + search: (request: IEsSearchRequest, options: ISearchOptions) => { + return search(request, options).toPromise(); + }, onResponse: handleResponse, legacy: { callMsearch: getCallMsearch({ http }), @@ -114,22 +133,12 @@ export class SearchService implements Plugin { showError: (e: Error) => { this.searchInterceptor.showError(e); }, - searchSource: { - /** - * creates searchsource based on serialized search source fields - */ - create: createSearchSource(indexPatterns, searchSourceDependencies), - /** - * creates an enpty search source - */ - createEmpty: () => { - return new SearchSource({}, searchSourceDependencies); - }, - }, + searchSource: this.searchSourceService.start(indexPatterns, searchSourceDependencies), }; } public stop() { this.aggsService.stop(); + this.searchSourceService.stop(); } } diff --git a/src/plugins/data/public/search/search_source/mocks.ts b/src/plugins/data/public/search/search_source/mocks.ts new file mode 100644 index 0000000000000..bc382f09947c5 --- /dev/null +++ b/src/plugins/data/public/search/search_source/mocks.ts @@ -0,0 +1,29 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { searchSourceCommonMock } from '../../../common/search/search_source/mocks'; +import { ISearchStart } from '../types'; + +function createStartContract(): jest.Mocked { + return searchSourceCommonMock; +} + +export const searchSourceMock = { + createStartContract, +}; diff --git a/src/plugins/data/public/search/types.ts b/src/plugins/data/public/search/types.ts index a133a8cd4be93..85ef7aa4d97cb 100644 --- a/src/plugins/data/public/search/types.ts +++ b/src/plugins/data/public/search/types.ts @@ -21,10 +21,12 @@ import { PackageInfo } from 'kibana/server'; import { ISearchInterceptor } from './search_interceptor'; import { SearchUsageCollector } from './collectors'; import { AggsSetup, AggsSetupDependencies, AggsStartDependencies, AggsStart } from './aggs'; -import { ISearchGeneric, ISearchSource, SearchSourceFields } from '../../common/search'; +import { ISearchGeneric, ISearchStartSearchSource } from '../../common/search'; import { IndexPatternsContract } from '../../common/index_patterns/index_patterns'; import { UsageCollectionSetup } from '../../../usage_collection/public'; +export { ISearchStartSearchSource }; + export interface SearchEnhancements { searchInterceptor: ISearchInterceptor; } @@ -42,21 +44,6 @@ export interface ISearchSetup { __enhance: (enhancements: SearchEnhancements) => void; } -/** - * high level search service - * @public - */ -export interface ISearchStartSearchSource { - /** - * creates {@link SearchSource} based on provided serialized {@link SearchSourceFields} - * @param fields - */ - create: (fields?: SearchSourceFields) => Promise; - /** - * creates empty {@link SearchSource} - */ - createEmpty: () => ISearchSource; -} /** * search service * @public diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/index.tsx b/src/plugins/data/public/ui/filter_bar/filter_editor/index.tsx index 0e2bcc7581950..7bd4facc9caa9 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_editor/index.tsx +++ b/src/plugins/data/public/ui/filter_bar/filter_editor/index.tsx @@ -106,7 +106,11 @@ class FilterEditorUI extends Component { - + {this.state.isCustomEditorOpen ? ( { - geo.coordinates in US - -`; - -exports[`negated alias 1`] = ` - - - NOT - - geo.coordinates in US - -`; diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_label.test.tsx b/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_label.test.tsx new file mode 100644 index 0000000000000..59afc1606adf9 --- /dev/null +++ b/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_label.test.tsx @@ -0,0 +1,156 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import { FilterLabel } from './filter_label'; +import { render, cleanup } from '@testing-library/react/pure'; +import { phraseFilter } from '../../../../stubs'; + +afterEach(cleanup); + +test('alias', () => { + const filter = { + ...phraseFilter, + meta: { + ...phraseFilter.meta, + alias: 'geo.coordinates in US', + }, + }; + const { container } = render(); + expect(container).toMatchInlineSnapshot(` +
+ + geo.coordinates in US +
+ `); +}); + +test('negated alias', () => { + const filter = { + ...phraseFilter, + meta: { + ...phraseFilter.meta, + alias: 'geo.coordinates in US', + negate: true, + }, + }; + const { container } = render(); + expect(container).toMatchInlineSnapshot(` +
+ + NOT + + geo.coordinates in US +
+ `); +}); + +test('alias with warning status', () => { + const filter = { + ...phraseFilter, + meta: { + ...phraseFilter.meta, + alias: 'geo.coordinates in US', + negate: true, + }, + }; + const { container } = render( + + ); + expect(container).toMatchInlineSnapshot(` +
+ + NOT + + geo.coordinates in US + : + + Warning + +
+ `); +}); + +test('alias with error status', () => { + const filter = { + ...phraseFilter, + meta: { + ...phraseFilter.meta, + alias: 'geo.coordinates in US', + negate: true, + }, + }; + const { container } = render( + + ); + expect(container).toMatchInlineSnapshot(` +
+ + NOT + + geo.coordinates in US + : + + Error + +
+ `); +}); + +test('warning', () => { + const { container } = render(); + expect(container).toMatchInlineSnapshot(` +
+ + machine.os + : + + Warning + +
+ `); +}); + +test('error', () => { + const { container } = render(); + expect(container).toMatchInlineSnapshot(` +
+ + machine.os + : + + Error + +
+ `); +}); diff --git a/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_label.tsx b/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_label.tsx index 070631354d8b8..3b85d0753b8c5 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_label.tsx +++ b/src/plugins/data/public/ui/filter_bar/filter_editor/lib/filter_label.tsx @@ -22,13 +22,15 @@ import { EuiTextColor } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { existsOperator, isOneOfOperator } from './filter_operators'; import { Filter, FILTERS } from '../../../../../common'; +import type { FilterLabelStatus } from '../../filter_item'; interface Props { filter: Filter; valueLabel?: string; + filterLabelStatus?: FilterLabelStatus; } -export function FilterLabel({ filter, valueLabel }: Props) { +export function FilterLabel({ filter, valueLabel, filterLabelStatus }: Props) { const prefixText = filter.meta.negate ? ` ${i18n.translate('data.filter.filterBar.negatedFilterPrefix', { defaultMessage: 'NOT ', @@ -50,6 +52,7 @@ export function FilterLabel({ filter, valueLabel }: Props) { {prefix} {filter.meta.alias} + {filterLabelStatus && <>: {getValue(valueLabel)}} ); } diff --git a/src/plugins/data/public/ui/filter_bar/filter_item.tsx b/src/plugins/data/public/ui/filter_bar/filter_item.tsx index 078fc8c9e1a8f..cbff20115f8ea 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_item.tsx +++ b/src/plugins/data/public/ui/filter_bar/filter_item.tsx @@ -49,7 +49,7 @@ interface Props { interface LabelOptions { title: string; - status: string; + status: FilterLabelStatus; message?: string; } @@ -57,6 +57,11 @@ const FILTER_ITEM_OK = ''; const FILTER_ITEM_WARNING = 'warn'; const FILTER_ITEM_ERROR = 'error'; +export type FilterLabelStatus = + | typeof FILTER_ITEM_OK + | typeof FILTER_ITEM_WARNING + | typeof FILTER_ITEM_ERROR; + export function FilterItem(props: Props) { const [isPopoverOpen, setIsPopoverOpen] = useState(false); const [indexPatternExists, setIndexPatternExists] = useState(undefined); @@ -260,7 +265,7 @@ export function FilterItem(props: Props) { } function getValueLabel(): LabelOptions { - const label = { + const label: LabelOptions = { title: '', message: '', status: FILTER_ITEM_OK, @@ -326,6 +331,7 @@ export function FilterItem(props: Props) { props.onRemove()} diff --git a/src/plugins/data/public/ui/filter_bar/filter_view/index.tsx b/src/plugins/data/public/ui/filter_bar/filter_view/index.tsx index f9328875cc910..3f9cbce06b315 100644 --- a/src/plugins/data/public/ui/filter_bar/filter_view/index.tsx +++ b/src/plugins/data/public/ui/filter_bar/filter_view/index.tsx @@ -22,10 +22,12 @@ import { i18n } from '@kbn/i18n'; import React, { FC } from 'react'; import { FilterLabel } from '../filter_editor/lib/filter_label'; import { Filter, isFilterPinned } from '../../../../common'; +import type { FilterLabelStatus } from '../filter_item'; interface Props { filter: Filter; valueLabel: string; + filterLabelStatus: FilterLabelStatus; errorMessage?: string; [propName: string]: any; } @@ -36,6 +38,7 @@ export const FilterView: FC = ({ onClick, valueLabel, errorMessage, + filterLabelStatus, ...rest }: Props) => { const [ref, innerText] = useInnerText(); @@ -65,7 +68,7 @@ export const FilterView: FC = ({ iconType="cross" iconSide="right" closeButtonProps={{ - // Removing tab focus on close button because the same option can be optained through the context menu + // Removing tab focus on close button because the same option can be obtained through the context menu // Also, we may want to add a `DEL` keyboard press functionality tabIndex: -1, }} @@ -80,7 +83,11 @@ export const FilterView: FC = ({ {...rest} > - + ); diff --git a/src/plugins/data/public/ui/query_string_input/no_data_popover.tsx b/src/plugins/data/public/ui/query_string_input/no_data_popover.tsx index 561c33519f96f..7d5282a0545bc 100644 --- a/src/plugins/data/public/ui/query_string_input/no_data_popover.tsx +++ b/src/plugins/data/public/ui/query_string_input/no_data_popover.tsx @@ -63,6 +63,7 @@ export function NoDataPopover({ } minWidth={300} anchorPosition="downCenter" + anchorClassName="eui-displayBlock" step={1} stepsTotal={1} isStepOpen={noDataPopoverVisible} diff --git a/src/plugins/data/public/ui/query_string_input/query_string_input.tsx b/src/plugins/data/public/ui/query_string_input/query_string_input.tsx index bbd998c0b74de..ec45b80927f6d 100644 --- a/src/plugins/data/public/ui/query_string_input/query_string_input.tsx +++ b/src/plugins/data/public/ui/query_string_input/query_string_input.tsx @@ -613,6 +613,7 @@ export class QueryStringInputUI extends Component { })} aria-haspopup="true" aria-expanded={this.state.isSuggestionsVisible} + data-skip-axe="aria-required-children" >
as promised, not helpful
@@ -56,6 +57,7 @@ exports[`SuggestionComponent Should make the element active if the selected prop
as promised, not helpful
diff --git a/src/plugins/data/public/ui/typeahead/suggestion_component.tsx b/src/plugins/data/public/ui/typeahead/suggestion_component.tsx index 724287b874bf7..20cb60ddab9e1 100644 --- a/src/plugins/data/public/ui/typeahead/suggestion_component.tsx +++ b/src/plugins/data/public/ui/typeahead/suggestion_component.tsx @@ -72,7 +72,9 @@ export function SuggestionComponent(props: Props) {
-
{props.suggestion.text}
+
+ {props.suggestion.text} +
{props.shouldDisplayDescription && (
{props.suggestion.description}
)} diff --git a/src/plugins/data/public/ui/typeahead/suggestions_component.tsx b/src/plugins/data/public/ui/typeahead/suggestions_component.tsx index 50ed9e9542d36..054c6318b9772 100644 --- a/src/plugins/data/public/ui/typeahead/suggestions_component.tsx +++ b/src/plugins/data/public/ui/typeahead/suggestions_component.tsx @@ -154,7 +154,7 @@ export class SuggestionsComponent extends Component { const StyledSuggestionsListDiv = styled.div` ${(props: { queryBarRect: DOMRect; verticalListPosition: string }) => ` position: absolute; - z-index: 4001; + z-index: 999; left: ${props.queryBarRect.left}px; width: ${props.queryBarRect.width}px; ${props.verticalListPosition}`} diff --git a/src/plugins/data/server/index.ts b/src/plugins/data/server/index.ts index 43080cc5a5989..aac1fe1fde212 100644 --- a/src/plugins/data/server/index.ts +++ b/src/plugins/data/server/index.ts @@ -287,6 +287,7 @@ export { export const config: PluginConfigDescriptor = { exposeToBrowser: { autocomplete: true, + search: true, }, schema: configSchema, }; diff --git a/src/plugins/data/server/plugin.ts b/src/plugins/data/server/plugin.ts index 588885391262e..88f24b7ca5a70 100644 --- a/src/plugins/data/server/plugin.ts +++ b/src/plugins/data/server/plugin.ts @@ -111,13 +111,15 @@ export class DataServerPlugin public start(core: CoreStart) { const fieldFormats = this.fieldFormats.start(); + const indexPatterns = this.indexPatterns.start(core, { + fieldFormats, + logger: this.logger.get('indexPatterns'), + }); + return { - search: this.searchService.start(core, { fieldFormats }), fieldFormats, - indexPatterns: this.indexPatterns.start(core, { - fieldFormats, - logger: this.logger.get('indexPatterns'), - }), + indexPatterns, + search: this.searchService.start(core, { fieldFormats, indexPatterns }), }; } diff --git a/src/plugins/data/server/search/mocks.ts b/src/plugins/data/server/search/mocks.ts index 0c74ecb4b2c9d..0d4ba0cba24a3 100644 --- a/src/plugins/data/server/search/mocks.ts +++ b/src/plugins/data/server/search/mocks.ts @@ -19,6 +19,7 @@ import { ISearchSetup, ISearchStart } from './types'; import { searchAggsSetupMock, searchAggsStartMock } from './aggs/mocks'; +import { searchSourceMock } from './search_source/mocks'; export function createSearchSetupMock(): jest.Mocked { return { @@ -33,5 +34,6 @@ export function createSearchStartMock(): jest.Mocked { aggs: searchAggsStartMock(), getSearchStrategy: jest.fn(), search: jest.fn(), + searchSource: searchSourceMock.createStartContract(), }; } diff --git a/src/plugins/data/server/search/routes/call_msearch.test.ts b/src/plugins/data/server/search/routes/call_msearch.test.ts new file mode 100644 index 0000000000000..3d409e22aaa88 --- /dev/null +++ b/src/plugins/data/server/search/routes/call_msearch.test.ts @@ -0,0 +1,101 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Observable } from 'rxjs'; +import { IUiSettingsClient, IScopedClusterClient, SharedGlobalConfig } from 'src/core/server'; + +import { + coreMock, + pluginInitializerContextConfigMock, +} from '../../../../../../src/core/server/mocks'; +import { convertRequestBody, getCallMsearch } from './call_msearch'; + +describe('callMsearch', () => { + let esClient: DeeplyMockedKeys; + let globalConfig$: Observable; + let uiSettings: IUiSettingsClient; + let callMsearch: ReturnType; + + beforeEach(() => { + const coreContext = coreMock.createRequestHandlerContext(); + esClient = coreContext.elasticsearch.client; + globalConfig$ = pluginInitializerContextConfigMock({}).legacy.globalConfig$; + uiSettings = coreContext.uiSettings.client; + + callMsearch = getCallMsearch({ esClient, globalConfig$, uiSettings }); + }); + + it('handler calls msearch with the given request', async () => { + const mockBody = { + searches: [{ header: { index: 'foo' }, body: { query: { match_all: {} } } }], + }; + + await callMsearch({ + body: mockBody, + signal: new AbortController().signal, + }); + + expect(esClient.asCurrentUser.msearch).toHaveBeenCalledTimes(1); + expect(esClient.asCurrentUser.msearch.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + Object { + "body": "{\\"ignore_unavailable\\":true,\\"index\\":\\"foo\\"} + {\\"query\\":{\\"match_all\\":{}}} + ", + }, + Object { + "querystring": Object { + "ignore_throttled": true, + "ignore_unavailable": true, + "max_concurrent_shard_requests": undefined, + }, + }, + ] + `); + }); + + describe('convertRequestBody', () => { + it('combines header & body into proper msearch request', () => { + const request = { + searches: [{ header: { index: 'foo', preference: 0 }, body: { test: true } }], + }; + expect(convertRequestBody(request, { timeout: '30000ms' })).toMatchInlineSnapshot(` + "{\\"ignore_unavailable\\":true,\\"index\\":\\"foo\\",\\"preference\\":0} + {\\"timeout\\":\\"30000ms\\",\\"test\\":true} + " + `); + }); + + it('handles multiple searches', () => { + const request = { + searches: [ + { header: { index: 'foo', preference: 0 }, body: { test: true } }, + { header: { index: 'bar', preference: 1 }, body: { hello: 'world' } }, + ], + }; + expect(convertRequestBody(request, { timeout: '30000ms' })).toMatchInlineSnapshot(` + "{\\"ignore_unavailable\\":true,\\"index\\":\\"foo\\",\\"preference\\":0} + {\\"timeout\\":\\"30000ms\\",\\"test\\":true} + {\\"ignore_unavailable\\":true,\\"index\\":\\"bar\\",\\"preference\\":1} + {\\"timeout\\":\\"30000ms\\",\\"hello\\":\\"world\\"} + " + `); + }); + }); +}); diff --git a/src/plugins/data/server/search/routes/call_msearch.ts b/src/plugins/data/server/search/routes/call_msearch.ts new file mode 100644 index 0000000000000..764dcd189f8db --- /dev/null +++ b/src/plugins/data/server/search/routes/call_msearch.ts @@ -0,0 +1,100 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Observable } from 'rxjs'; +import { first } from 'rxjs/operators'; +import { ApiResponse } from '@elastic/elasticsearch'; +import { SearchResponse } from 'elasticsearch'; +import { IUiSettingsClient, IScopedClusterClient, SharedGlobalConfig } from 'src/core/server'; + +import { MsearchRequestBody, MsearchResponse } from '../../../common/search/search_source'; +import { shimHitsTotal } from './shim_hits_total'; +import { getShardTimeout, getDefaultSearchParams, toSnakeCase } from '..'; + +/** @internal */ +export function convertRequestBody( + requestBody: MsearchRequestBody, + { timeout }: { timeout?: string } +): string { + return requestBody.searches.reduce((req, curr) => { + const header = JSON.stringify({ + ignore_unavailable: true, + ...curr.header, + }); + const body = JSON.stringify({ + timeout, + ...curr.body, + }); + return `${req}${header}\n${body}\n`; + }, ''); +} + +interface CallMsearchDependencies { + esClient: IScopedClusterClient; + globalConfig$: Observable; + uiSettings: IUiSettingsClient; +} + +/** + * Helper for the `/internal/_msearch` route, exported separately here + * so that it can be reused elsewhere in the data plugin on the server, + * e.g. SearchSource + * + * @internal + */ +export function getCallMsearch(dependencies: CallMsearchDependencies) { + return async (params: { + body: MsearchRequestBody; + signal?: AbortSignal; + }): Promise => { + const { esClient, globalConfig$, uiSettings } = dependencies; + + // get shardTimeout + const config = await globalConfig$.pipe(first()).toPromise(); + const timeout = getShardTimeout(config); + + // trackTotalHits is not supported by msearch + const { trackTotalHits, ...defaultParams } = await getDefaultSearchParams(uiSettings); + + const body = convertRequestBody(params.body, timeout); + + // Temporary workaround until https://github.com/elastic/elasticsearch-js/issues/1297 + const promise = esClient.asCurrentUser.msearch( + { + body, + }, + { + querystring: toSnakeCase(defaultParams), + } + ); + if (params.signal) { + params.signal.addEventListener('abort', () => promise.abort()); + } + const response = (await promise) as ApiResponse<{ responses: Array> }>; + + return { + body: { + ...response, + body: { + responses: response.body.responses?.map((r: SearchResponse) => shimHitsTotal(r)), + }, + }, + }; + }; +} diff --git a/src/plugins/data/server/search/routes/index.ts b/src/plugins/data/server/search/routes/index.ts index a290f08f9b843..f858653f26439 100644 --- a/src/plugins/data/server/search/routes/index.ts +++ b/src/plugins/data/server/search/routes/index.ts @@ -17,6 +17,7 @@ * under the License. */ +export * from './call_msearch'; export * from './msearch'; export * from './search'; export * from './shim_hits_total'; diff --git a/src/plugins/data/server/search/routes/msearch.test.ts b/src/plugins/data/server/search/routes/msearch.test.ts index 3a7d67c31b8be..2f414fe0b4920 100644 --- a/src/plugins/data/server/search/routes/msearch.test.ts +++ b/src/plugins/data/server/search/routes/msearch.test.ts @@ -30,7 +30,8 @@ import { httpServerMock, pluginInitializerContextConfigMock, } from '../../../../../../src/core/server/mocks'; -import { registerMsearchRoute, convertRequestBody } from './msearch'; +import { convertRequestBody } from './call_msearch'; +import { registerMsearchRoute } from './msearch'; import { DataPluginStart } from '../../plugin'; import { dataPluginMock } from '../../mocks'; @@ -49,7 +50,7 @@ describe('msearch route', () => { it('handler calls /_msearch with the given request', async () => { const response = { id: 'yay', body: { responses: [{ hits: { total: 5 } }] } }; - const mockClient = { transport: { request: jest.fn().mockResolvedValue(response) } }; + const mockClient = { msearch: jest.fn().mockResolvedValue(response) }; const mockContext = { core: { elasticsearch: { client: { asCurrentUser: mockClient } }, @@ -70,11 +71,16 @@ describe('msearch route', () => { const handler = mockRouter.post.mock.calls[0][1]; await handler((mockContext as unknown) as RequestHandlerContext, mockRequest, mockResponse); - expect(mockClient.transport.request.mock.calls[0][0].method).toBe('GET'); - expect(mockClient.transport.request.mock.calls[0][0].path).toBe('/_msearch'); - expect(mockClient.transport.request.mock.calls[0][0].body).toEqual( + expect(mockClient.msearch.mock.calls[0][0].body).toEqual( convertRequestBody(mockBody as any, {}) ); + expect(mockClient.msearch.mock.calls[0][1].querystring).toMatchInlineSnapshot(` + Object { + "ignore_throttled": true, + "ignore_unavailable": true, + "max_concurrent_shard_requests": undefined, + } + `); expect(mockResponse.ok).toBeCalled(); expect(mockResponse.ok.mock.calls[0][0]).toEqual({ body: response, @@ -89,7 +95,7 @@ describe('msearch route', () => { }, }; const mockClient = { - transport: { request: jest.fn().mockReturnValue(Promise.reject(response)) }, + msearch: jest.fn().mockReturnValue(Promise.reject(response)), }; const mockContext = { core: { @@ -111,40 +117,11 @@ describe('msearch route', () => { const handler = mockRouter.post.mock.calls[0][1]; await handler((mockContext as unknown) as RequestHandlerContext, mockRequest, mockResponse); - expect(mockClient.transport.request).toBeCalled(); + expect(mockClient.msearch).toBeCalled(); expect(mockResponse.customError).toBeCalled(); const error: any = mockResponse.customError.mock.calls[0][0]; expect(error.body.message).toBe('oh no'); expect(error.body.attributes.error).toBe('oops'); }); - - describe('convertRequestBody', () => { - it('combines header & body into proper msearch request', () => { - const request = { - searches: [{ header: { index: 'foo', preference: 0 }, body: { test: true } }], - }; - expect(convertRequestBody(request, { timeout: '30000ms' })).toMatchInlineSnapshot(` - "{\\"ignore_unavailable\\":true,\\"index\\":\\"foo\\",\\"preference\\":0} - {\\"timeout\\":\\"30000ms\\",\\"test\\":true} - " - `); - }); - - it('handles multiple searches', () => { - const request = { - searches: [ - { header: { index: 'foo', preference: 0 }, body: { test: true } }, - { header: { index: 'bar', preference: 1 }, body: { hello: 'world' } }, - ], - }; - expect(convertRequestBody(request, { timeout: '30000ms' })).toMatchInlineSnapshot(` - "{\\"ignore_unavailable\\":true,\\"index\\":\\"foo\\",\\"preference\\":0} - {\\"timeout\\":\\"30000ms\\",\\"test\\":true} - {\\"ignore_unavailable\\":true,\\"index\\":\\"bar\\",\\"preference\\":1} - {\\"timeout\\":\\"30000ms\\",\\"hello\\":\\"world\\"} - " - `); - }); - }); }); diff --git a/src/plugins/data/server/search/routes/msearch.ts b/src/plugins/data/server/search/routes/msearch.ts index e1ddb06e4fb6f..7b44aa18bf8fc 100644 --- a/src/plugins/data/server/search/routes/msearch.ts +++ b/src/plugins/data/server/search/routes/msearch.ts @@ -17,46 +17,12 @@ * under the License. */ -import { first } from 'rxjs/operators'; import { schema } from '@kbn/config-schema'; -import { SearchResponse } from 'elasticsearch'; import { IRouter } from 'src/core/server'; import { SearchRouteDependencies } from '../search_service'; -import { shimHitsTotal } from './shim_hits_total'; -import { getShardTimeout, getDefaultSearchParams, toSnakeCase } from '..'; -interface MsearchHeaders { - index: string; - preference?: number | string; -} - -interface MsearchRequest { - header: MsearchHeaders; - body: any; -} - -interface RequestBody { - searches: MsearchRequest[]; -} - -/** @internal */ -export function convertRequestBody( - requestBody: RequestBody, - { timeout }: { timeout?: string } -): string { - return requestBody.searches.reduce((req, curr) => { - const header = JSON.stringify({ - ignore_unavailable: true, - ...curr.header, - }); - const body = JSON.stringify({ - timeout, - ...curr.body, - }); - return `${req}${header}\n${body}\n`; - }, ''); -} +import { getCallMsearch } from './call_msearch'; /** * The msearch route takes in an array of searches, each consisting of header @@ -93,35 +59,15 @@ export function registerMsearchRoute(router: IRouter, deps: SearchRouteDependenc }, }, async (context, request, res) => { - const client = context.core.elasticsearch.client.asCurrentUser; - - // get shardTimeout - const config = await deps.globalConfig$.pipe(first()).toPromise(); - const timeout = getShardTimeout(config); - - const body = convertRequestBody(request.body, timeout); - - // trackTotalHits is not supported by msearch - const { trackTotalHits, ...defaultParams } = await getDefaultSearchParams( - context.core.uiSettings.client - ); + const callMsearch = getCallMsearch({ + esClient: context.core.elasticsearch.client, + globalConfig$: deps.globalConfig$, + uiSettings: context.core.uiSettings.client, + }); try { - const response = await client.transport.request({ - method: 'GET', - path: '/_msearch', - body, - querystring: toSnakeCase(defaultParams), - }); - - return res.ok({ - body: { - ...response, - body: { - responses: response.body.responses?.map((r: SearchResponse) => shimHitsTotal(r)), - }, - }, - }); + const response = await callMsearch({ body: request.body }); + return res.ok(response); } catch (err) { return res.customError({ statusCode: err.statusCode || 500, diff --git a/src/plugins/data/server/search/search_service.test.ts b/src/plugins/data/server/search/search_service.test.ts index 7057c9c7ca15c..a001d56b36514 100644 --- a/src/plugins/data/server/search/search_service.test.ts +++ b/src/plugins/data/server/search/search_service.test.ts @@ -22,6 +22,7 @@ import { coreMock } from '../../../../core/server/mocks'; import { DataPluginStart } from '../plugin'; import { createFieldFormatsStartMock } from '../field_formats/mocks'; +import { createIndexPatternsStartMock } from '../index_patterns/mocks'; import { SearchService, SearchServiceSetupDependencies } from './search_service'; @@ -54,6 +55,7 @@ describe('Search service', () => { it('exposes proper contract', async () => { const start = plugin.start(mockCoreStart, { fieldFormats: createFieldFormatsStartMock(), + indexPatterns: createIndexPatternsStartMock(), }); expect(start).toHaveProperty('aggs'); expect(start).toHaveProperty('getSearchStrategy'); diff --git a/src/plugins/data/server/search/search_service.ts b/src/plugins/data/server/search/search_service.ts index 90da8c5653ac1..1a9e7d83bc956 100644 --- a/src/plugins/data/server/search/search_service.ts +++ b/src/plugins/data/server/search/search_service.ts @@ -17,10 +17,12 @@ * under the License. */ -import { Observable } from 'rxjs'; +import { BehaviorSubject, Observable } from 'rxjs'; +import { pick } from 'lodash'; import { CoreSetup, CoreStart, + KibanaRequest, Logger, Plugin, PluginInitializerContext, @@ -28,12 +30,14 @@ import { SharedGlobalConfig, StartServicesAccessor, } from 'src/core/server'; +import { first } from 'rxjs/operators'; import { ISearchSetup, ISearchStart, ISearchStrategy, SearchEnhancements } from './types'; import { AggsService, AggsSetupDependencies } from './aggs'; import { FieldFormatsStart } from '../field_formats'; -import { registerMsearchRoute, registerSearchRoute } from './routes'; +import { IndexPatternsServiceStart } from '../index_patterns'; +import { getCallMsearch, registerMsearchRoute, registerSearchRoute } from './routes'; import { ES_SEARCH_STRATEGY, esSearchStrategyProvider } from './es_search'; import { DataPluginStart } from '../plugin'; import { UsageCollectionSetup } from '../../../usage_collection/server'; @@ -46,7 +50,16 @@ import { IEsSearchRequest, IEsSearchResponse, ISearchOptions, -} from '../../common'; + SearchSourceDependencies, + SearchSourceService, + searchSourceRequiredUiSettings, +} from '../../common/search'; +import { + getShardDelayBucketAgg, + SHARD_DELAY_AGG_NAME, +} from '../../common/search/aggs/buckets/shard_delay'; +import { aggShardDelay } from '../../common/search/aggs/buckets/shard_delay_fn'; +import { ConfigSchema } from '../../config'; type StrategyMap = Record>; @@ -59,6 +72,7 @@ export interface SearchServiceSetupDependencies { /** @internal */ export interface SearchServiceStartDependencies { fieldFormats: FieldFormatsStart; + indexPatterns: IndexPatternsServiceStart; } /** @internal */ @@ -69,11 +83,12 @@ export interface SearchRouteDependencies { export class SearchService implements Plugin { private readonly aggsService = new AggsService(); + private readonly searchSourceService = new SearchSourceService(); private defaultSearchStrategyName: string = ES_SEARCH_STRATEGY; private searchStrategies: StrategyMap = {}; constructor( - private initializerContext: PluginInitializerContext, + private initializerContext: PluginInitializerContext, private readonly logger: Logger ) {} @@ -105,20 +120,33 @@ export class SearchService implements Plugin { registerUsageCollector(usageCollection, this.initializerContext); } + const aggs = this.aggsService.setup({ registerFunction }); + + this.initializerContext.config + .create() + .pipe(first()) + .toPromise() + .then((value) => { + if (value.search.aggs.shardDelay.enabled) { + aggs.types.registerBucket(SHARD_DELAY_AGG_NAME, getShardDelayBucketAgg); + registerFunction(aggShardDelay); + } + }); + return { __enhance: (enhancements: SearchEnhancements) => { if (this.searchStrategies.hasOwnProperty(enhancements.defaultStrategy)) { this.defaultSearchStrategyName = enhancements.defaultStrategy; } }, - aggs: this.aggsService.setup({ registerFunction }), + aggs, registerSearchStrategy: this.registerSearchStrategy, usage, }; } public start( - { uiSettings }: CoreStart, - { fieldFormats }: SearchServiceStartDependencies + { elasticsearch, savedObjects, uiSettings }: CoreStart, + { fieldFormats, indexPatterns }: SearchServiceStartDependencies ): ISearchStart { return { aggs: this.aggsService.start({ fieldFormats, uiSettings }), @@ -130,6 +158,58 @@ export class SearchService implements Plugin { ) => { return this.search(context, searchRequest, options); }, + searchSource: { + asScoped: async (request: KibanaRequest) => { + const esClient = elasticsearch.client.asScoped(request); + const savedObjectsClient = savedObjects.getScopedClient(request); + const scopedIndexPatterns = await indexPatterns.indexPatternsServiceFactory(request); + const uiSettingsClient = uiSettings.asScopedToClient(savedObjectsClient); + + // cache ui settings, only including items which are explicitly needed by SearchSource + const uiSettingsCache = pick( + await uiSettingsClient.getAll(), + searchSourceRequiredUiSettings + ); + + const searchSourceDependencies: SearchSourceDependencies = { + getConfig: (key: string): T => uiSettingsCache[key], + search: (searchRequest, options) => { + /** + * Unless we want all SearchSource users to provide both a KibanaRequest + * (needed for index patterns) AND the RequestHandlerContext (needed for + * low-level search), we need to fake the context as it can be derived + * from the request object anyway. This will pose problems for folks who + * are registering custom search strategies as they are only getting a + * subset of the entire context. Ideally low-level search should be + * refactored to only require the needed dependencies: esClient & uiSettings. + */ + const fakeRequestHandlerContext = { + core: { + elasticsearch: { + client: esClient, + }, + uiSettings: { + client: uiSettingsClient, + }, + }, + } as RequestHandlerContext; + return this.search(fakeRequestHandlerContext, searchRequest, options); + }, + // onResponse isn't used on the server, so we just return the original value + onResponse: (req, res) => res, + legacy: { + callMsearch: getCallMsearch({ + esClient, + globalConfig$: this.initializerContext.config.legacy.globalConfig$, + uiSettings: uiSettingsClient, + }), + loadingCount$: new BehaviorSubject(0), + }, + }; + + return this.searchSourceService.start(scopedIndexPatterns, searchSourceDependencies); + }, + }, }; } diff --git a/packages/kbn-storybook/lib/constants.js b/src/plugins/data/server/search/search_source/mocks.ts similarity index 64% rename from packages/kbn-storybook/lib/constants.js rename to src/plugins/data/server/search/search_source/mocks.ts index 4d8ca0adbfe17..7e9cc8f2ff42c 100644 --- a/packages/kbn-storybook/lib/constants.js +++ b/src/plugins/data/server/search/search_source/mocks.ts @@ -17,11 +17,19 @@ * under the License. */ -const { resolve } = require('path'); -const { REPO_ROOT } = require('@kbn/utils'); +import { KibanaRequest } from 'src/core/server'; -exports.ASSET_DIR = resolve(REPO_ROOT, 'built_assets/storybook'); -exports.CURRENT_CONFIG = resolve(exports.ASSET_DIR, 'current.config.js'); -exports.STORY_ENTRY_PATH = resolve(exports.ASSET_DIR, 'stories.entry.js'); -exports.DLL_DIST_DIR = resolve(exports.ASSET_DIR, 'dll'); -exports.DLL_NAME = 'storybook_dll'; +import { searchSourceCommonMock } from '../../../common/search/search_source/mocks'; +import { ISearchStart } from '../types'; + +function createStartContract(): MockedKeys { + return { + asScoped: async (request: jest.Mocked) => { + return searchSourceCommonMock; + }, + }; +} + +export const searchSourceMock = { + createStartContract, +}; diff --git a/src/plugins/data/server/search/types.ts b/src/plugins/data/server/search/types.ts index 4764bd77278ac..0de4ef529e896 100644 --- a/src/plugins/data/server/search/types.ts +++ b/src/plugins/data/server/search/types.ts @@ -17,8 +17,13 @@ * under the License. */ -import { RequestHandlerContext } from '../../../../core/server'; -import { ISearchOptions, IKibanaSearchRequest, IKibanaSearchResponse } from '../../common/search'; +import { KibanaRequest, RequestHandlerContext } from 'src/core/server'; +import { + ISearchOptions, + ISearchStartSearchSource, + IKibanaSearchRequest, + IKibanaSearchResponse, +} from '../../common/search'; import { AggsSetup, AggsStart } from './aggs'; import { SearchUsage } from './collectors'; import { IEsSearchRequest, IEsSearchResponse } from './es_search'; @@ -69,6 +74,9 @@ export interface ISearchStart< request: SearchStrategyRequest, options: ISearchOptions ) => Promise; + searchSource: { + asScoped: (request: KibanaRequest) => Promise; + }; } /** diff --git a/src/plugins/data/server/server.api.md b/src/plugins/data/server/server.api.md index eefc373559afb..fed0c1a02297e 100644 --- a/src/plugins/data/server/server.api.md +++ b/src/plugins/data/server/server.api.md @@ -5,173 +5,52 @@ ```ts import { $Values } from '@kbn/utility-types'; -import { ApiResponse } from '@elastic/elasticsearch/lib/Transport'; +import { ApiResponse } from '@elastic/elasticsearch'; import { Assign } from '@kbn/utility-types'; -import Boom from 'boom'; -import { BulkIndexDocumentsParams } from 'elasticsearch'; -import { CatAliasesParams } from 'elasticsearch'; -import { CatAllocationParams } from 'elasticsearch'; -import { CatCommonParams } from 'elasticsearch'; -import { CatFielddataParams } from 'elasticsearch'; -import { CatHealthParams } from 'elasticsearch'; -import { CatHelpParams } from 'elasticsearch'; -import { CatIndicesParams } from 'elasticsearch'; -import { CatRecoveryParams } from 'elasticsearch'; -import { CatSegmentsParams } from 'elasticsearch'; -import { CatShardsParams } from 'elasticsearch'; -import { CatSnapshotsParams } from 'elasticsearch'; -import { CatTasksParams } from 'elasticsearch'; -import { CatThreadPoolParams } from 'elasticsearch'; -import { ClearScrollParams } from 'elasticsearch'; -import { Client } from 'elasticsearch'; -import { ClusterAllocationExplainParams } from 'elasticsearch'; -import { ClusterGetSettingsParams } from 'elasticsearch'; -import { ClusterHealthParams } from 'elasticsearch'; -import { ClusterPendingTasksParams } from 'elasticsearch'; -import { ClusterPutSettingsParams } from 'elasticsearch'; -import { ClusterRerouteParams } from 'elasticsearch'; -import { ClusterStateParams } from 'elasticsearch'; -import { ClusterStatsParams } from 'elasticsearch'; +import { BehaviorSubject } from 'rxjs'; import { ConfigDeprecationProvider } from '@kbn/config'; import { CoreSetup } from 'src/core/server'; import { CoreSetup as CoreSetup_2 } from 'kibana/server'; import { CoreStart } from 'src/core/server'; import { CoreStart as CoreStart_2 } from 'kibana/server'; -import { CountParams } from 'elasticsearch'; -import { CreateDocumentParams } from 'elasticsearch'; -import { DeleteDocumentByQueryParams } from 'elasticsearch'; -import { DeleteDocumentParams } from 'elasticsearch'; -import { DeleteScriptParams } from 'elasticsearch'; -import { DeleteTemplateParams } from 'elasticsearch'; import { Duration } from 'moment'; -import { ElasticsearchClient as ElasticsearchClient_2 } from 'kibana/server'; +import { ElasticsearchClient } from 'kibana/server'; import { Ensure } from '@kbn/utility-types'; import { EnvironmentMode } from '@kbn/config'; import { ErrorToastOptions } from 'src/core/public/notifications'; -import { ExistsParams } from 'elasticsearch'; -import { ExplainParams } from 'elasticsearch'; import { ExpressionAstFunction } from 'src/plugins/expressions/common'; import { ExpressionsServerSetup } from 'src/plugins/expressions/server'; -import { FieldStatsParams } from 'elasticsearch'; -import { GenericParams } from 'elasticsearch'; -import { GetParams } from 'elasticsearch'; -import { GetResponse } from 'elasticsearch'; -import { GetScriptParams } from 'elasticsearch'; -import { GetSourceParams } from 'elasticsearch'; -import { GetTemplateParams } from 'elasticsearch'; -import { IncomingHttpHeaders } from 'http'; -import { IndexDocumentParams } from 'elasticsearch'; -import { IndicesAnalyzeParams } from 'elasticsearch'; -import { IndicesClearCacheParams } from 'elasticsearch'; -import { IndicesCloseParams } from 'elasticsearch'; -import { IndicesCreateParams } from 'elasticsearch'; -import { IndicesDeleteAliasParams } from 'elasticsearch'; -import { IndicesDeleteParams } from 'elasticsearch'; -import { IndicesDeleteTemplateParams } from 'elasticsearch'; -import { IndicesExistsAliasParams } from 'elasticsearch'; -import { IndicesExistsParams } from 'elasticsearch'; -import { IndicesExistsTemplateParams } from 'elasticsearch'; -import { IndicesExistsTypeParams } from 'elasticsearch'; -import { IndicesFlushParams } from 'elasticsearch'; -import { IndicesFlushSyncedParams } from 'elasticsearch'; -import { IndicesForcemergeParams } from 'elasticsearch'; -import { IndicesGetAliasParams } from 'elasticsearch'; -import { IndicesGetFieldMappingParams } from 'elasticsearch'; -import { IndicesGetMappingParams } from 'elasticsearch'; -import { IndicesGetParams } from 'elasticsearch'; -import { IndicesGetSettingsParams } from 'elasticsearch'; -import { IndicesGetTemplateParams } from 'elasticsearch'; -import { IndicesGetUpgradeParams } from 'elasticsearch'; -import { IndicesOpenParams } from 'elasticsearch'; -import { IndicesPutAliasParams } from 'elasticsearch'; -import { IndicesPutMappingParams } from 'elasticsearch'; -import { IndicesPutSettingsParams } from 'elasticsearch'; -import { IndicesPutTemplateParams } from 'elasticsearch'; -import { IndicesRecoveryParams } from 'elasticsearch'; -import { IndicesRefreshParams } from 'elasticsearch'; -import { IndicesRolloverParams } from 'elasticsearch'; -import { IndicesSegmentsParams } from 'elasticsearch'; -import { IndicesShardStoresParams } from 'elasticsearch'; -import { IndicesShrinkParams } from 'elasticsearch'; -import { IndicesStatsParams } from 'elasticsearch'; -import { IndicesUpdateAliasesParams } from 'elasticsearch'; -import { IndicesUpgradeParams } from 'elasticsearch'; -import { IndicesValidateQueryParams } from 'elasticsearch'; -import { InfoParams } from 'elasticsearch'; -import { IngestDeletePipelineParams } from 'elasticsearch'; -import { IngestGetPipelineParams } from 'elasticsearch'; -import { IngestPutPipelineParams } from 'elasticsearch'; -import { IngestSimulateParams } from 'elasticsearch'; import { ISearchOptions as ISearchOptions_2 } from 'src/plugins/data/public'; import { ISearchSource } from 'src/plugins/data/public'; -import { KibanaClient } from '@elastic/elasticsearch/api/kibana'; -import { KibanaConfigType as KibanaConfigType_2 } from 'src/core/server/kibana_config'; -import { KibanaRequest } from 'kibana/server'; -import { LegacyAPICaller as LegacyAPICaller_2 } from 'kibana/server'; -import { Logger } from '@kbn/logging'; -import { Logger as Logger_2 } from 'kibana/server'; +import { KibanaRequest } from 'src/core/server'; +import { KibanaRequest as KibanaRequest_2 } from 'kibana/server'; +import { LegacyAPICaller } from 'kibana/server'; +import { Logger } from 'kibana/server'; import { LoggerFactory } from '@kbn/logging'; -import { LogMeta } from '@kbn/logging'; -import { MGetParams } from 'elasticsearch'; -import { MGetResponse } from 'elasticsearch'; import { Moment } from 'moment'; import moment from 'moment'; -import { MSearchParams } from 'elasticsearch'; -import { MSearchResponse } from 'elasticsearch'; -import { MSearchTemplateParams } from 'elasticsearch'; -import { MTermVectorsParams } from 'elasticsearch'; -import { NodesHotThreadsParams } from 'elasticsearch'; -import { NodesInfoParams } from 'elasticsearch'; -import { NodesStatsParams } from 'elasticsearch'; +import { NameList } from 'elasticsearch'; import { Observable } from 'rxjs'; import { PackageInfo } from '@kbn/config'; import { PathConfigType } from '@kbn/utils'; -import { PingParams } from 'elasticsearch'; import { Plugin as Plugin_2 } from 'src/core/server'; import { Plugin as Plugin_3 } from 'kibana/server'; import { PluginInitializerContext as PluginInitializerContext_2 } from 'src/core/server'; -import { PutScriptParams } from 'elasticsearch'; -import { PutTemplateParams } from 'elasticsearch'; import { RecursiveReadonly } from '@kbn/utility-types'; -import { ReindexParams } from 'elasticsearch'; -import { ReindexRethrottleParams } from 'elasticsearch'; -import { RenderSearchTemplateParams } from 'elasticsearch'; import { RequestAdapter } from 'src/plugins/inspector/common'; +import { RequestHandlerContext } from 'src/core/server'; import { RequestStatistics } from 'src/plugins/inspector/common'; import { SavedObject } from 'src/core/server'; -import { SavedObjectsClientContract as SavedObjectsClientContract_2 } from 'src/core/server'; -import { ScrollParams } from 'elasticsearch'; +import { SavedObjectsClientContract } from 'src/core/server'; import { Search } from '@elastic/elasticsearch/api/requestParams'; -import { SearchParams } from 'elasticsearch'; import { SearchResponse } from 'elasticsearch'; -import { SearchShardsParams } from 'elasticsearch'; -import { SearchTemplateParams } from 'elasticsearch'; import { SerializedFieldFormat as SerializedFieldFormat_2 } from 'src/plugins/expressions/common'; import { ShardsResponse } from 'elasticsearch'; -import { SnapshotCreateParams } from 'elasticsearch'; -import { SnapshotCreateRepositoryParams } from 'elasticsearch'; -import { SnapshotDeleteParams } from 'elasticsearch'; -import { SnapshotDeleteRepositoryParams } from 'elasticsearch'; -import { SnapshotGetParams } from 'elasticsearch'; -import { SnapshotGetRepositoryParams } from 'elasticsearch'; -import { SnapshotRestoreParams } from 'elasticsearch'; -import { SnapshotStatusParams } from 'elasticsearch'; -import { SnapshotVerifyRepositoryParams } from 'elasticsearch'; -import { SuggestParams } from 'elasticsearch'; -import { TasksCancelParams } from 'elasticsearch'; -import { TasksGetParams } from 'elasticsearch'; -import { TasksListParams } from 'elasticsearch'; -import { TermvectorsParams } from 'elasticsearch'; import { ToastInputFields } from 'src/core/public/notifications'; -import { TransportRequestOptions } from '@elastic/elasticsearch/lib/Transport'; -import { TransportRequestParams } from '@elastic/elasticsearch/lib/Transport'; -import { TransportRequestPromise } from '@elastic/elasticsearch/lib/Transport'; import { Type } from '@kbn/config-schema'; import { TypeOf } from '@kbn/config-schema'; import { Unit } from '@elastic/datemath'; import { UnwrapPromiseOrReturn } from '@kbn/utility-types'; -import { UpdateDocumentByQueryParams } from 'elasticsearch'; -import { UpdateDocumentParams } from 'elasticsearch'; // Warning: (ae-forgotten-export) The symbol "AggConfigSerialized" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "AggConfigOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -623,7 +502,7 @@ export type IMetricAggType = MetricAggType; // @public (undocumented) export class IndexPattern implements IIndexPattern { // Warning: (ae-forgotten-export) The symbol "IndexPatternDeps" needs to be exported by the entry point index.d.ts - constructor({ spec, savedObjectsClient, fieldFormats, shortDotsEnable, metaFields, }: IndexPatternDeps); + constructor({ spec, fieldFormats, shortDotsEnable, metaFields, }: IndexPatternDeps); addScriptedField(name: string, script: string, fieldType?: string): Promise; // (undocumented) fieldFormatMap: Record; @@ -704,8 +583,6 @@ export class IndexPattern implements IIndexPattern { isTimeNanosBased(): boolean; // (undocumented) metaFields: string[]; - // (undocumented) - popularizeField(fieldName: string, unit?: number): Promise; removeScriptedField(fieldName: string): void; resetOriginalSavedObjectBody: () => void; // Warning: (ae-forgotten-export) The symbol "SourceFilter" needs to be exported by the entry point index.d.ts @@ -764,7 +641,7 @@ export const indexPatterns: { // // @public (undocumented) export class IndexPatternsFetcher { - constructor(callDataCluster: LegacyAPICaller_2); + constructor(callDataCluster: LegacyAPICaller); getFieldsForTimePattern(options: { pattern: string; metaFields: string[]; @@ -791,7 +668,7 @@ export class IndexPatternsService implements Plugin_3 Promise; + indexPatternsServiceFactory: (kibanaRequest: KibanaRequest_2) => Promise; }; } @@ -828,10 +705,12 @@ export interface ISearchStart ISearchStrategy; - // Warning: (ae-forgotten-export) The symbol "RequestHandlerContext" needs to be exported by the entry point index.d.ts - // // (undocumented) search: (context: RequestHandlerContext, request: SearchStrategyRequest, options: ISearchOptions) => Promise; + // (undocumented) + searchSource: { + asScoped: (request: KibanaRequest) => Promise; + }; } // Warning: (ae-missing-release-tag) "ISearchStrategy" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -989,13 +868,13 @@ export class Plugin implements Plugin_2>; fieldFormats: { fieldFormatServiceFactory: (uiSettings: import("../../../core/server").IUiSettingsClient) => Promise; }; indexPatterns: { indexPatternsServiceFactory: (kibanaRequest: import("../../../core/server").KibanaRequest) => Promise; }; + search: ISearchStart>; }; // (undocumented) stop(): void; @@ -1251,6 +1130,7 @@ export function usageProvider(core: CoreSetup_2): SearchUsage; // src/plugins/data/server/index.ts:252:1 - (ae-forgotten-export) The symbol "toAbsoluteDates" needs to be exported by the entry point index.d.ts // src/plugins/data/server/index_patterns/index_patterns_service.ts:50:14 - (ae-forgotten-export) The symbol "IndexPatternsService" needs to be exported by the entry point index.d.ts // src/plugins/data/server/plugin.ts:88:66 - (ae-forgotten-export) The symbol "DataEnhancements" needs to be exported by the entry point index.d.ts +// src/plugins/data/server/search/types.ts:78:5 - (ae-forgotten-export) The symbol "ISearchStartSearchSource" needs to be exported by the entry point index.d.ts // (No @packageDocumentation comment for this package) diff --git a/src/plugins/discover/public/application/angular/context/query_parameters/actions.js b/src/plugins/discover/public/application/angular/context/query_parameters/actions.js index fcd4b8ac02cfb..cdf9283737226 100644 --- a/src/plugins/discover/public/application/angular/context/query_parameters/actions.js +++ b/src/plugins/discover/public/application/angular/context/query_parameters/actions.js @@ -19,6 +19,7 @@ import _ from 'lodash'; import { esFilters } from '../../../../../../data/public'; +import { popularizeField } from '../../../helpers/popularize_field'; import { MAX_CONTEXT_SIZE, MIN_CONTEXT_SIZE, QUERY_PARAMETER_KEYS } from './constants'; @@ -56,7 +57,7 @@ export function getQueryParameterActions(filterManager, indexPatterns) { filterManager.addFilters(newFilters); if (indexPatterns) { const indexPattern = await indexPatterns.get(indexPatternId); - indexPattern.popularizeField(field.name, 1); + await popularizeField(indexPattern, field.name, indexPatterns); } }; diff --git a/src/plugins/discover/public/application/angular/context_app.js b/src/plugins/discover/public/application/angular/context_app.js index f698ed84a8948..145d3afe23224 100644 --- a/src/plugins/discover/public/application/angular/context_app.js +++ b/src/plugins/discover/public/application/angular/context_app.js @@ -56,8 +56,8 @@ getAngularModule().directive('contextApp', function ContextApp() { }); function ContextAppController($scope, Private) { - const { filterManager, indexpatterns, uiSettings } = getServices(); - const queryParameterActions = getQueryParameterActions(filterManager, indexpatterns); + const { filterManager, indexPatterns, uiSettings } = getServices(); + const queryParameterActions = getQueryParameterActions(filterManager, indexPatterns); const queryActions = Private(QueryActionsProvider); this.state = createInitialState( parseInt(uiSettings.get(CONTEXT_STEP_SETTING), 10), diff --git a/src/plugins/discover/public/application/angular/discover.js b/src/plugins/discover/public/application/angular/discover.js index a396033e5dedb..92b96d11723e0 100644 --- a/src/plugins/discover/public/application/angular/discover.js +++ b/src/plugins/discover/public/application/angular/discover.js @@ -70,6 +70,7 @@ const { import { getRootBreadcrumbs, getSavedSearchBreadcrumbs } from '../helpers/breadcrumbs'; import { validateTimeRange } from '../helpers/validate_time_range'; +import { popularizeField } from '../helpers/popularize_field'; import { getIndexPatternId } from '../helpers/get_index_pattern_id'; import { addFatalError } from '../../../../kibana_legacy/public'; @@ -952,7 +953,9 @@ function discoverController($element, $route, $scope, $timeout, $window, Promise // TODO: On array fields, negating does not negate the combination, rather all terms $scope.filterQuery = function (field, values, operation) { - $scope.indexPattern.popularizeField(field, 1); + const { indexPattern } = $scope; + + popularizeField(indexPattern, field.name, indexPatterns); const newFilters = esFilters.generateFilters( filterManager, field, @@ -965,7 +968,8 @@ function discoverController($element, $route, $scope, $timeout, $window, Promise $scope.addColumn = function addColumn(columnName) { if (uiCapabilities.discover.save) { - $scope.indexPattern.popularizeField(columnName, 1); + const { indexPattern } = $scope; + popularizeField(indexPattern, columnName, indexPatterns); } const columns = columnActions.addColumn($scope.state.columns, columnName); setAppState({ columns }); @@ -973,7 +977,8 @@ function discoverController($element, $route, $scope, $timeout, $window, Promise $scope.removeColumn = function removeColumn(columnName) { if (uiCapabilities.discover.save) { - $scope.indexPattern.popularizeField(columnName, 1); + const { indexPattern } = $scope; + popularizeField(indexPattern, columnName, indexPatterns); } const columns = columnActions.removeColumn($scope.state.columns, columnName); // The state's sort property is an array of [sortByColumn,sortDirection] diff --git a/src/plugins/discover/public/application/components/sidebar/discover_field.test.tsx b/src/plugins/discover/public/application/components/sidebar/discover_field.test.tsx index 6211d302e7d20..8ab296bf1af4f 100644 --- a/src/plugins/discover/public/application/components/sidebar/discover_field.test.tsx +++ b/src/plugins/discover/public/application/components/sidebar/discover_field.test.tsx @@ -51,7 +51,17 @@ jest.mock('../../../kibana_services', () => ({ }), })); -function getComponent(selected = false, showDetails = false, useShortDots = false) { +function getComponent({ + selected = false, + showDetails = false, + useShortDots = false, + field, +}: { + selected?: boolean; + showDetails?: boolean; + useShortDots?: boolean; + field?: IndexPatternField; +}) { const indexPattern = getStubIndexPattern( 'logstash-*', (cfg: any) => cfg, @@ -60,23 +70,25 @@ function getComponent(selected = false, showDetails = false, useShortDots = fals coreMock.createSetup() ); - const field = new IndexPatternField( - { - name: 'bytes', - type: 'number', - esTypes: ['long'], - count: 10, - scripted: false, - searchable: true, - aggregatable: true, - readFromDocValues: true, - }, - 'bytes' - ); + const finalField = + field ?? + new IndexPatternField( + { + name: 'bytes', + type: 'number', + esTypes: ['long'], + count: 10, + scripted: false, + searchable: true, + aggregatable: true, + readFromDocValues: true, + }, + 'bytes' + ); const props = { indexPattern, - field, + field: finalField, getDetails: jest.fn(() => ({ buckets: [], error: '', exists: 1, total: true, columns: [] })), onAddFilter: jest.fn(), onAddField: jest.fn(), @@ -91,18 +103,37 @@ function getComponent(selected = false, showDetails = false, useShortDots = fals describe('discover sidebar field', function () { it('should allow selecting fields', function () { - const { comp, props } = getComponent(); + const { comp, props } = getComponent({}); findTestSubject(comp, 'fieldToggle-bytes').simulate('click'); expect(props.onAddField).toHaveBeenCalledWith('bytes'); }); it('should allow deselecting fields', function () { - const { comp, props } = getComponent(true); + const { comp, props } = getComponent({ selected: true }); findTestSubject(comp, 'fieldToggle-bytes').simulate('click'); expect(props.onRemoveField).toHaveBeenCalledWith('bytes'); }); it('should trigger getDetails', function () { - const { comp, props } = getComponent(true); + const { comp, props } = getComponent({ selected: true }); findTestSubject(comp, 'field-bytes-showDetails').simulate('click'); expect(props.getDetails).toHaveBeenCalledWith(props.field); }); + it('should not allow clicking on _source', function () { + const field = new IndexPatternField( + { + name: '_source', + type: '_source', + esTypes: ['_source'], + searchable: true, + aggregatable: true, + readFromDocValues: true, + }, + '_source' + ); + const { comp, props } = getComponent({ + selected: true, + field, + }); + findTestSubject(comp, 'field-_source-showDetails').simulate('click'); + expect(props.getDetails).not.toHaveBeenCalled(); + }); }); diff --git a/src/plugins/discover/public/application/components/sidebar/discover_field.tsx b/src/plugins/discover/public/application/components/sidebar/discover_field.tsx index bb330cba68e2e..8ff603884239e 100644 --- a/src/plugins/discover/public/application/components/sidebar/discover_field.tsx +++ b/src/plugins/discover/public/application/components/sidebar/discover_field.tsx @@ -172,6 +172,19 @@ export function DiscoverField({ ); } + if (field.type === '_source') { + return ( + + ); + } + return ( { togglePopover(); }} - buttonProps={{ 'data-test-subj': `field-${field.name}-showDetails` }} + dataTestSubj={`field-${field.name}-showDetails`} fieldIcon={dscFieldIcon} fieldAction={actionButton} fieldName={fieldName} diff --git a/src/plugins/discover/public/application/embeddable/search_embeddable.ts b/src/plugins/discover/public/application/embeddable/search_embeddable.ts index 1de62fe5a0348..af88cacfcf992 100644 --- a/src/plugins/discover/public/application/embeddable/search_embeddable.ts +++ b/src/plugins/discover/public/application/embeddable/search_embeddable.ts @@ -221,7 +221,6 @@ export class SearchEmbeddable if (!searchScope.columns) { return; } - indexPattern.popularizeField(columnName, 1); const columns = columnActions.addColumn(searchScope.columns, columnName); this.updateInput({ columns }); }; diff --git a/src/plugins/discover/public/application/helpers/popularize_field.test.ts b/src/plugins/discover/public/application/helpers/popularize_field.test.ts new file mode 100644 index 0000000000000..f1ff67c23b92b --- /dev/null +++ b/src/plugins/discover/public/application/helpers/popularize_field.test.ts @@ -0,0 +1,82 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { IndexPattern, IndexPatternsService } from '../../../../data/public'; +import { popularizeField } from './popularize_field'; + +describe('Popularize field', () => { + test('returns undefined if index pattern lacks id', async () => { + const indexPattern = ({} as unknown) as IndexPattern; + const fieldName = '@timestamp'; + const indexPatternsService = ({} as unknown) as IndexPatternsService; + const result = await popularizeField(indexPattern, fieldName, indexPatternsService); + expect(result).toBeUndefined(); + }); + + test('returns undefined if field not found', async () => { + const indexPattern = ({ + fields: { + getByName: () => {}, + }, + } as unknown) as IndexPattern; + const fieldName = '@timestamp'; + const indexPatternsService = ({} as unknown) as IndexPatternsService; + const result = await popularizeField(indexPattern, fieldName, indexPatternsService); + expect(result).toBeUndefined(); + }); + + test('returns undefined if successful', async () => { + const field = { + count: 0, + }; + const indexPattern = ({ + id: 'id', + fields: { + getByName: () => field, + }, + } as unknown) as IndexPattern; + const fieldName = '@timestamp'; + const indexPatternsService = ({ + updateSavedObject: async () => {}, + } as unknown) as IndexPatternsService; + const result = await popularizeField(indexPattern, fieldName, indexPatternsService); + expect(result).toBeUndefined(); + expect(field.count).toEqual(1); + }); + + test('hides errors', async () => { + const field = { + count: 0, + }; + const indexPattern = ({ + id: 'id', + fields: { + getByName: () => field, + }, + } as unknown) as IndexPattern; + const fieldName = '@timestamp'; + const indexPatternsService = ({ + updateSavedObject: async () => { + throw new Error('unknown error'); + }, + } as unknown) as IndexPatternsService; + const result = await popularizeField(indexPattern, fieldName, indexPatternsService); + expect(result).toBeUndefined(); + }); +}); diff --git a/packages/kbn-storybook/lib/dll.js b/src/plugins/discover/public/application/helpers/popularize_field.ts similarity index 56% rename from packages/kbn-storybook/lib/dll.js rename to src/plugins/discover/public/application/helpers/popularize_field.ts index 55bc8e43a02ec..0aea86e47c954 100644 --- a/packages/kbn-storybook/lib/dll.js +++ b/src/plugins/discover/public/application/helpers/popularize_field.ts @@ -17,26 +17,25 @@ * under the License. */ -const { resolve } = require('path'); -const { existsSync } = require('fs'); +import { IndexPattern, IndexPatternsService } from '../../../../data/public'; -const { REPO_ROOT } = require('@kbn/utils'); -const { DLL_DIST_DIR } = require('./constants'); - -exports.buildDll = async ({ rebuildDll, log, procRunner }) => { - if (rebuildDll) { - log.info('rebuilding dll'); - } else if (!existsSync(resolve(DLL_DIST_DIR, 'dll.js'))) { - log.info('dll missing, rebuilding'); - } else { - log.info('dll exists'); +async function popularizeField( + indexPattern: IndexPattern, + fieldName: string, + indexPatternsService: IndexPatternsService +) { + if (!indexPattern.id) return; + const field = indexPattern.fields.getByName(fieldName); + if (!field) { return; } - await procRunner.run('build dll ', { - cmd: require.resolve('webpack/bin/webpack'), - args: ['--config', require.resolve('./webpack.dll.config.js')], - cwd: REPO_ROOT, - wait: true, - }); -}; + field.count++; + // Catch 409 errors caused by user adding columns in a higher frequency that the changes can be persisted to Elasticsearch + try { + await indexPatternsService.updateSavedObject(indexPattern, 0, true); + // eslint-disable-next-line no-empty + } catch {} +} + +export { popularizeField }; diff --git a/src/plugins/discover/server/saved_objects/search_migrations.test.ts b/src/plugins/discover/server/saved_objects/search_migrations.test.ts index babd25c03dbb2..3324a2d93f5ad 100644 --- a/src/plugins/discover/server/saved_objects/search_migrations.test.ts +++ b/src/plugins/discover/server/saved_objects/search_migrations.test.ts @@ -22,36 +22,61 @@ import { searchMigrations } from './search_migrations'; const savedObjectMigrationContext = (null as unknown) as SavedObjectMigrationContext; +const testMigrateMatchAllQuery = (migrationFn: Function) => { + it('should migrate obsolete match_all query', () => { + const migratedDoc = migrationFn( + { + type: 'search', + attributes: { + kibanaSavedObjectMeta: { + searchSourceJSON: JSON.stringify({ + query: { + match_all: {}, + }, + }), + }, + }, + }, + savedObjectMigrationContext + ); + const migratedSearchSource = JSON.parse( + migratedDoc.attributes.kibanaSavedObjectMeta.searchSourceJSON + ); + + expect(migratedSearchSource).toEqual({ + query: { + query: '', + language: 'kuery', + }, + }); + }); + + it('should return original doc if searchSourceJSON cannot be parsed', () => { + const migratedDoc = migrationFn( + { + type: 'search', + attributes: { + kibanaSavedObjectMeta: 'kibanaSavedObjectMeta', + }, + }, + savedObjectMigrationContext + ); + + expect(migratedDoc).toEqual({ + type: 'search', + attributes: { + kibanaSavedObjectMeta: 'kibanaSavedObjectMeta', + }, + }); + }); +}; + describe('migration search', () => { describe('6.7.2', () => { const migrationFn = searchMigrations['6.7.2']; - it('should migrate obsolete match_all query', () => { - const migratedDoc = migrationFn( - { - type: 'search', - attributes: { - kibanaSavedObjectMeta: { - searchSourceJSON: JSON.stringify({ - query: { - match_all: {}, - }, - }), - }, - }, - }, - savedObjectMigrationContext - ); - const migratedSearchSource = JSON.parse( - migratedDoc.attributes.kibanaSavedObjectMeta.searchSourceJSON - ); - - expect(migratedSearchSource).toEqual({ - query: { - query: '', - language: 'kuery', - }, - }); + describe('migrateMatchAllQuery', () => { + testMigrateMatchAllQuery(migrationFn); }); }); @@ -328,4 +353,12 @@ Object { expect(migratedDoc).toEqual(doc); }); }); + + describe('7.9.3', () => { + const migrationFn = searchMigrations['7.9.3']; + + describe('migrateMatchAllQuery', () => { + testMigrateMatchAllQuery(migrationFn); + }); + }); }); diff --git a/src/plugins/discover/server/saved_objects/search_migrations.ts b/src/plugins/discover/server/saved_objects/search_migrations.ts index 0302159c43c56..fdb086bd17a2d 100644 --- a/src/plugins/discover/server/saved_objects/search_migrations.ts +++ b/src/plugins/discover/server/saved_objects/search_migrations.ts @@ -21,6 +21,12 @@ import { flow, get } from 'lodash'; import { SavedObjectMigrationFn } from 'kibana/server'; import { DEFAULT_QUERY_LANGUAGE } from '../../../data/common'; +/** + * This migration script is related to: + * @link https://github.com/elastic/kibana/pull/62194 + * @link https://github.com/elastic/kibana/pull/14644 + * This is only a problem when you import an object from 5.x into 6.x but to be sure that all saved objects migrated we should execute it twice in 6.7.2 and 7.9.3 + */ const migrateMatchAllQuery: SavedObjectMigrationFn = (doc) => { const searchSourceJSON = get(doc, 'attributes.kibanaSavedObjectMeta.searchSourceJSON'); @@ -31,6 +37,7 @@ const migrateMatchAllQuery: SavedObjectMigrationFn = (doc) => { searchSource = JSON.parse(searchSourceJSON); } catch (e) { // Let it go, the data is invalid and we'll leave it as is + return doc; } if (searchSource.query?.match_all) { @@ -125,4 +132,5 @@ export const searchMigrations = { '6.7.2': flow(migrateMatchAllQuery), '7.0.0': flow(setNewReferences), '7.4.0': flow(migrateSearchSortToNestedArray), + '7.9.3': flow(migrateMatchAllQuery), }; diff --git a/x-pack/plugins/dashboard_enhanced/scripts/storybook.js b/src/plugins/embeddable/.storybook/main.js similarity index 54% rename from x-pack/plugins/dashboard_enhanced/scripts/storybook.js rename to src/plugins/embeddable/.storybook/main.js index 5d95c56c31e3b..1818aa44a9399 100644 --- a/x-pack/plugins/dashboard_enhanced/scripts/storybook.js +++ b/src/plugins/embeddable/.storybook/main.js @@ -4,10 +4,4 @@ * you may not use this file except in compliance with the Elastic License. */ -import { join } from 'path'; - -// eslint-disable-next-line -require('@kbn/storybook').runStorybookCli({ - name: 'dashboard_enhanced', - storyGlobs: [join(__dirname, '..', 'public', '**', '*.story.tsx')], -}); +module.exports = require('@kbn/storybook').defaultConfig; diff --git a/src/plugins/embeddable/README.asciidoc b/src/plugins/embeddable/README.asciidoc new file mode 100644 index 0000000000000..10ec2b840ffa7 --- /dev/null +++ b/src/plugins/embeddable/README.asciidoc @@ -0,0 +1,44 @@ +[[embeddable-plugin]] +== Embeddables plugin + +Embeddables are re-usable widgets that can be rendered in any environment or plugin. Developers can embed them directly in their plugin. End users can dynamically add them to any embeddable _containers_. + +=== Embeddable containers + +Containers are a special type of embeddable that can contain nested embeddables. Embeddables can be dynamically added to embeddable _containers_. Currently only dashboard uses this interface. + +=== Examples + +Many example embeddables are implemented and registered https://github.com/elastic/kibana/tree/master/examples/embeddable_examples[here]. They can be played around with and explored https://github.com/elastic/kibana/tree/master/examples/embeddable_explorer[in the Embeddable Explorer example plugin]. Just run kibana with + +[source,sh] +-- +yarn start --run-examples +-- + +and navigate to the Embeddable explorer app. + +There is also an example of rendering dashboard container outside of dashboard app https://github.com/elastic/kibana/tree/master/examples/dashboard_embeddable_examples[here]. + +=== Docs + +(./docs/README.md)[Embeddable docs, guides & caveats] + +=== API docs + +==== Server API +https://github.com/elastic/kibana/blob/master/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.embeddablesetup.md[Server Setup contract] +https://github.com/elastic/kibana/blob/master/docs/development/plugins/embeddable/server/kibana-plugin-plugins-embeddable-server.embeddablestart.md[Server Start contract] + +===== Browser API +https://github.com/elastic/kibana/blob/master/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablesetup.md[Browser Setup contract] +https://github.com/elastic/kibana/blob/master/docs/development/plugins/embeddable/public/kibana-plugin-plugins-embeddable-public.embeddablestart.md[Browser Start contract] + +=== Testing + +Run unit tests + +[source,sh] +-- +node scripts/jest embeddable +-- diff --git a/src/plugins/embeddable/README.md b/src/plugins/embeddable/README.md deleted file mode 100644 index 55abe8606159c..0000000000000 --- a/src/plugins/embeddable/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Embeddables - -Embeddables are re-usable widgets that can be rendered in any environment or plugin. Developers can embed them directly in their plugin. End users can dynamically add them to any embeddable _containers_. - -## Embeddable containers - -Containers are a special type of embeddable that can contain nested embeddables. Embeddables can be dynamically added to embeddable _containers_. Currently only dashboard uses this interface. - -## Examples - -Many example embeddables are implemented and registered [here](https://github.com/elastic/kibana/tree/master/examples/embeddable_examples). They can be played around with and explored [in the Embeddable Explorer example plugin](https://github.com/elastic/kibana/tree/master/examples/embeddable_explorer). Just run kibana with - -``` -yarn start --run-examples -``` - -and navigate to the Embeddable explorer app. - -There is also an example of rendering dashboard container outside of dashboard app [here](https://github.com/elastic/kibana/tree/master/examples/dashboard_embeddable_examples). - -## Docs - -[Embeddable docs, guides & caveats](./docs/README.md) - -## Testing - -Run unit tests - -```shell -node scripts/jest embeddable -``` diff --git a/src/plugins/embeddable/public/components/panel_options_menu/__examples__/panel_options_menu.examples.tsx b/src/plugins/embeddable/public/components/panel_options_menu/__examples__/panel_options_menu.stories.tsx similarity index 100% rename from src/plugins/embeddable/public/components/panel_options_menu/__examples__/panel_options_menu.examples.tsx rename to src/plugins/embeddable/public/components/panel_options_menu/__examples__/panel_options_menu.stories.tsx diff --git a/src/plugins/embeddable/public/lib/panel/_embeddable_panel.scss b/src/plugins/embeddable/public/lib/panel/_embeddable_panel.scss index f6057524cb832..36a7fee14cce1 100644 --- a/src/plugins/embeddable/public/lib/panel/_embeddable_panel.scss +++ b/src/plugins/embeddable/public/lib/panel/_embeddable_panel.scss @@ -60,6 +60,12 @@ .embPanel__titleText { @include euiTextTruncate; } + + .embPanel__placeholderTitleText { + @include euiTextTruncate; + font-weight: $euiFontWeightRegular; + color: $euiColorMediumShade; + } } .embPanel__dragger:not(.embPanel__title) { @@ -159,4 +165,4 @@ pointer-events: none; filter: grayscale(100%); filter: gray; -} \ No newline at end of file +} diff --git a/src/plugins/embeddable/public/lib/panel/embeddable_panel.tsx b/src/plugins/embeddable/public/lib/panel/embeddable_panel.tsx index ca5cb5ca4f0d5..a2da31773696c 100644 --- a/src/plugins/embeddable/public/lib/panel/embeddable_panel.tsx +++ b/src/plugins/embeddable/public/lib/panel/embeddable_panel.tsx @@ -32,7 +32,12 @@ import { EmbeddableContext, contextMenuTrigger, } from '../triggers'; -import { IEmbeddable, EmbeddableOutput, EmbeddableError } from '../embeddables/i_embeddable'; +import { + IEmbeddable, + EmbeddableOutput, + EmbeddableError, + EmbeddableInput, +} from '../embeddables/i_embeddable'; import { ViewMode } from '../types'; import { RemovePanelAction } from './panel_header/panel_actions'; @@ -55,7 +60,7 @@ const removeById = (disabledActions: string[]) => ({ id }: { id: string }) => disabledActions.indexOf(id) === -1; interface Props { - embeddable: IEmbeddable; + embeddable: IEmbeddable; getActions: UiActionsService['getTriggerCompatibleActions']; getEmbeddableFactory: EmbeddableStart['getEmbeddableFactory']; getAllEmbeddableFactories: EmbeddableStart['getEmbeddableFactories']; @@ -72,7 +77,7 @@ interface State { panels: EuiContextMenuPanelDescriptor[]; focusedPanelIndex?: string; viewMode: ViewMode; - hidePanelTitles: boolean; + hidePanelTitle: boolean; closeContextMenu: boolean; badges: Array>; notifications: Array>; @@ -90,17 +95,15 @@ export class EmbeddablePanel extends React.Component { constructor(props: Props) { super(props); const { embeddable } = this.props; - const viewMode = embeddable.getInput().viewMode - ? embeddable.getInput().viewMode - : ViewMode.EDIT; - const hidePanelTitles = embeddable.parent - ? Boolean(embeddable.parent.getInput().hidePanelTitles) - : false; + const viewMode = embeddable.getInput().viewMode ?? ViewMode.EDIT; + const hidePanelTitle = + Boolean(embeddable.parent?.getInput()?.hidePanelTitles) || + Boolean(embeddable.getInput()?.hidePanelTitles); this.state = { panels: [], viewMode, - hidePanelTitles, + hidePanelTitle, closeContextMenu: false, badges: [], notifications: [], @@ -150,9 +153,7 @@ export class EmbeddablePanel extends React.Component { embeddable.getInput$().subscribe(async () => { if (this.mounted) { this.setState({ - viewMode: embeddable.getInput().viewMode - ? embeddable.getInput().viewMode - : ViewMode.EDIT, + viewMode: embeddable.getInput().viewMode ?? ViewMode.EDIT, }); this.refreshBadges(); @@ -165,7 +166,9 @@ export class EmbeddablePanel extends React.Component { this.parentSubscription = parent.getInput$().subscribe(async () => { if (this.mounted && parent) { this.setState({ - hidePanelTitles: Boolean(parent.getInput().hidePanelTitles), + hidePanelTitle: + Boolean(embeddable.parent?.getInput()?.hidePanelTitles) || + Boolean(embeddable.getInput()?.hidePanelTitles), }); this.refreshBadges(); @@ -219,7 +222,7 @@ export class EmbeddablePanel extends React.Component { {!this.props.hideHeader && ( { const createGetUserData = (overlays: OverlayStart) => async function getUserData(context: { embeddable: IEmbeddable }) { - return new Promise<{ title: string | undefined }>((resolve) => { + return new Promise<{ title: string | undefined; hideTitle?: boolean }>((resolve) => { const session = overlays.openModal( toMountPoint( { + updateTitle={(title, hideTitle) => { session.close(); - resolve({ title }); + resolve({ title, hideTitle }); }} + cancel={() => session.close()} /> ), { diff --git a/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/customize_title/customize_panel_action.ts b/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/customize_title/customize_panel_action.ts index 36957c3b79491..d65539e344a78 100644 --- a/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/customize_title/customize_panel_action.ts +++ b/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/customize_title/customize_panel_action.ts @@ -24,7 +24,9 @@ import { IEmbeddable } from '../../../../embeddables'; export const ACTION_CUSTOMIZE_PANEL = 'ACTION_CUSTOMIZE_PANEL'; -type GetUserData = (context: ActionContext) => Promise<{ title: string | undefined }>; +type GetUserData = ( + context: ActionContext +) => Promise<{ title: string | undefined; hideTitle?: boolean }>; interface ActionContext { embeddable: IEmbeddable; @@ -52,7 +54,8 @@ export class CustomizePanelTitleAction implements Action { } public async execute({ embeddable }: ActionContext) { - const customTitle = await this.getDataFromUser({ embeddable }); - embeddable.updateInput(customTitle); + const data = await this.getDataFromUser({ embeddable }); + const { title, hideTitle } = data; + embeddable.updateInput({ title, hidePanelTitles: hideTitle }); } } diff --git a/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/customize_title/customize_panel_modal.tsx b/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/customize_title/customize_panel_modal.tsx index b590f20092939..ad986adb619b8 100644 --- a/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/customize_title/customize_panel_modal.tsx +++ b/src/plugins/embeddable/public/lib/panel/panel_header/panel_actions/customize_title/customize_panel_modal.tsx @@ -36,31 +36,28 @@ import { IEmbeddable } from '../../../../'; interface CustomizePanelProps { embeddable: IEmbeddable; - updateTitle: (newTitle: string | undefined) => void; + updateTitle: (newTitle: string | undefined, hideTitle: boolean | undefined) => void; + cancel: () => void; } interface State { title: string | undefined; - hideTitle: boolean; + hideTitle: boolean | undefined; } export class CustomizePanelModal extends Component { constructor(props: CustomizePanelProps) { super(props); this.state = { - hideTitle: props.embeddable.getOutput().title === '', - title: props.embeddable.getInput().title, + hideTitle: props.embeddable.getInput().hidePanelTitles, + title: props.embeddable.getInput().title ?? this.props.embeddable.getOutput().defaultTitle, }; } - private updateTitle = (title: string | undefined) => { - // An empty string will mean "use the default value", which is represented by setting - // title to undefined (where as an empty string is actually used to indicate "hide title"). - this.setState({ title: title === '' ? undefined : title }); - }; - private reset = () => { - this.setState({ title: undefined }); + this.setState({ + title: this.props.embeddable.getOutput().defaultTitle, + }); }; private onHideTitleToggle = () => { @@ -70,12 +67,11 @@ export class CustomizePanelModal extends Component { }; private save = () => { - if (this.state.hideTitle) { - this.props.updateTitle(''); - } else { - const newTitle = this.state.title === '' ? undefined : this.state.title; - this.props.updateTitle(newTitle); - } + const newTitle = + this.state.title === this.props.embeddable.getOutput().defaultTitle + ? undefined + : this.state.title; + this.props.updateTitle(newTitle, this.state.hideTitle); }; public render() { @@ -116,9 +112,8 @@ export class CustomizePanelModal extends Component { name="min" type="text" disabled={this.state.hideTitle} - placeholder={this.props.embeddable.getOutput().defaultTitle} value={this.state.title || ''} - onChange={(e) => this.updateTitle(e.target.value)} + onChange={(e) => this.setState({ title: e.target.value })} aria-label={i18n.translate( 'embeddableApi.customizePanel.modal.optionsMenuForm.panelTitleInputAriaLabel', { @@ -141,9 +136,7 @@ export class CustomizePanelModal extends Component { - this.props.updateTitle(this.props.embeddable.getOutput().title)} - > + this.props.cancel()}> Promise; closeContextMenu: boolean; badges: Array>; notifications: Array>; embeddable: IEmbeddable; headerId?: string; + showPlaceholderTitle?: boolean; } function renderBadges(badges: Array>, embeddable: IEmbeddable) { @@ -126,7 +127,7 @@ function getViewDescription(embeddable: IEmbeddable | VisualizeEmbeddable) { export function PanelHeader({ title, isViewMode, - hidePanelTitles, + hidePanelTitle, getActionContextMenuPanel, closeContextMenu, badges, @@ -135,12 +136,30 @@ export function PanelHeader({ headerId, }: PanelHeaderProps) { const viewDescription = getViewDescription(embeddable); - const showTitle = !isViewMode || (title && !hidePanelTitles) || viewDescription !== ''; - const showPanelBar = badges.length > 0 || showTitle; + const showTitle = !hidePanelTitle && (!isViewMode || title || viewDescription !== ''); + const showPanelBar = badges.length > 0 || notifications.length > 0 || showTitle; const classes = classNames('embPanel__header', { // eslint-disable-next-line @typescript-eslint/naming-convention 'embPanel__header--floater': !showPanelBar, }); + const placeholderTitle = i18n.translate('embeddableApi.panel.placeholderTitle', { + defaultMessage: '[No Title]', + }); + + const getAriaLabel = () => { + return ( + + {showPanelBar && title + ? i18n.translate('embeddableApi.panel.enhancedDashboardPanelAriaLabel', { + defaultMessage: 'Dashboard panel: {title}', + values: { title: title || placeholderTitle }, + }) + : i18n.translate('embeddableApi.panel.dashboardPanelAriaLabel', { + defaultMessage: 'Dashboard panel', + })} + + ); + }; if (!showPanelBar) { return ( @@ -151,6 +170,7 @@ export function PanelHeader({ closeContextMenu={closeContextMenu} title={title} /> + {getAriaLabel()}
); } @@ -160,34 +180,20 @@ export function PanelHeader({ className={classes} data-test-subj={`embeddablePanelHeading-${(title || '').replace(/\s/g, '')}`} > -

+

{showTitle ? ( - ) : ( - - - {i18n.translate('embeddableApi.panel.dashboardPanelAriaLabel', { - defaultMessage: 'Dashboard panel', - })} - - + {getAriaLabel()} )} {renderBadges(badges, embeddable)}

diff --git a/src/plugins/embeddable/public/public.api.md b/src/plugins/embeddable/public/public.api.md new file mode 100644 index 0000000000000..b01995ccaab08 --- /dev/null +++ b/src/plugins/embeddable/public/public.api.md @@ -0,0 +1,843 @@ +## API Report File for "kibana" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { Action } from 'history'; +import { Action as Action_3 } from 'src/plugins/ui_actions/public'; +import { ActionExecutionContext as ActionExecutionContext_2 } from 'src/plugins/ui_actions/public'; +import { ApiResponse } from '@elastic/elasticsearch/lib/Transport'; +import { ApiResponse as ApiResponse_2 } from '@elastic/elasticsearch'; +import { ApplicationStart as ApplicationStart_2 } from 'kibana/public'; +import { Assign } from '@kbn/utility-types'; +import { BehaviorSubject } from 'rxjs'; +import Boom from 'boom'; +import { CoreSetup as CoreSetup_2 } from 'src/core/public'; +import { CoreSetup as CoreSetup_3 } from 'kibana/public'; +import { CoreStart as CoreStart_2 } from 'kibana/public'; +import * as CSS from 'csstype'; +import { EmbeddableStart as EmbeddableStart_2 } from 'src/plugins/embeddable/public/plugin'; +import { Ensure } from '@kbn/utility-types'; +import { EnvironmentMode } from '@kbn/config'; +import { ErrorToastOptions as ErrorToastOptions_2 } from 'src/core/public/notifications'; +import { EuiBreadcrumb } from '@elastic/eui'; +import { EuiButtonEmptyProps } from '@elastic/eui'; +import { EuiComboBoxProps } from '@elastic/eui'; +import { EuiConfirmModalProps } from '@elastic/eui'; +import { EuiContextMenuPanelDescriptor } from '@elastic/eui'; +import { EuiGlobalToastListToast } from '@elastic/eui'; +import { ExclusiveUnion } from '@elastic/eui'; +import { ExpressionAstFunction } from 'src/plugins/expressions/common'; +import { History } from 'history'; +import { Href } from 'history'; +import { IconType } from '@elastic/eui'; +import { ISearchOptions } from 'src/plugins/data/public'; +import { ISearchSource } from 'src/plugins/data/public'; +import { IStorageWrapper } from 'src/plugins/kibana_utils/public'; +import { IUiSettingsClient as IUiSettingsClient_2 } from 'src/core/public'; +import { KibanaClient } from '@elastic/elasticsearch/api/kibana'; +import { KibanaConfigType } from 'src/core/server/kibana_config'; +import { Location } from 'history'; +import { LocationDescriptorObject } from 'history'; +import { Logger } from '@kbn/logging'; +import { LogMeta } from '@kbn/logging'; +import { MaybePromise } from '@kbn/utility-types'; +import { Moment } from 'moment'; +import { NameList } from 'elasticsearch'; +import { NotificationsStart as NotificationsStart_2 } from 'src/core/public'; +import { Observable } from 'rxjs'; +import { Optional } from '@kbn/utility-types'; +import { OverlayStart as OverlayStart_2 } from 'src/core/public'; +import { PackageInfo } from '@kbn/config'; +import { Path } from 'history'; +import { PluginInitializerContext } from 'src/core/public'; +import * as PropTypes from 'prop-types'; +import { PublicMethodsOf } from '@kbn/utility-types'; +import { PublicUiSettingsParams } from 'src/core/server/types'; +import React from 'react'; +import { RecursiveReadonly } from '@kbn/utility-types'; +import { RequestAdapter } from 'src/plugins/inspector/common'; +import { Required } from '@kbn/utility-types'; +import * as Rx from 'rxjs'; +import { SavedObject as SavedObject_2 } from 'src/core/server'; +import { SavedObjectAttributes } from 'kibana/server'; +import { SavedObjectAttributes as SavedObjectAttributes_2 } from 'src/core/public'; +import { SavedObjectAttributes as SavedObjectAttributes_3 } from 'kibana/public'; +import { SavedObjectsClientContract as SavedObjectsClientContract_3 } from 'src/core/public'; +import { Search } from '@elastic/elasticsearch/api/requestParams'; +import { SearchResponse } from 'elasticsearch'; +import { SerializedFieldFormat as SerializedFieldFormat_2 } from 'src/plugins/expressions/common'; +import { ShallowPromise } from '@kbn/utility-types'; +import { SimpleSavedObject as SimpleSavedObject_2 } from 'src/core/public'; +import { ToastInputFields as ToastInputFields_2 } from 'src/core/public/notifications'; +import { ToastsSetup as ToastsSetup_2 } from 'kibana/public'; +import { TransportRequestOptions } from '@elastic/elasticsearch/lib/Transport'; +import { TransportRequestParams } from '@elastic/elasticsearch/lib/Transport'; +import { TransportRequestPromise } from '@elastic/elasticsearch/lib/Transport'; +import { TypeOf } from '@kbn/config-schema'; +import { UiComponent } from 'src/plugins/kibana_utils/public'; +import { UnregisterCallback } from 'history'; +import { UserProvidedValues } from 'src/core/server/types'; + +// Warning: (ae-missing-release-tag) "ACTION_ADD_PANEL" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const ACTION_ADD_PANEL = "ACTION_ADD_PANEL"; + +// Warning: (ae-missing-release-tag) "ACTION_EDIT_PANEL" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const ACTION_EDIT_PANEL = "editPanel"; + +// Warning: (ae-missing-release-tag) "Adapters" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface Adapters { + // (undocumented) + [key: string]: any; +} + +// Warning: (ae-forgotten-export) The symbol "ActionContext" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "AddPanelAction" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class AddPanelAction implements Action_3 { + // Warning: (ae-forgotten-export) The symbol "React" needs to be exported by the entry point index.d.ts + constructor(getFactory: EmbeddableStart_2['getEmbeddableFactory'], getAllFactories: EmbeddableStart_2['getEmbeddableFactories'], overlays: OverlayStart_2, notifications: NotificationsStart_2, SavedObjectFinder: React_2.ComponentType); + // (undocumented) + execute(context: ActionExecutionContext_2): Promise; + // (undocumented) + getDisplayName(): string; + // (undocumented) + getIconType(): string; + // (undocumented) + readonly id = "ACTION_ADD_PANEL"; + // (undocumented) + isCompatible(context: ActionExecutionContext_2): Promise; + // (undocumented) + readonly type = "ACTION_ADD_PANEL"; +} + +// Warning: (ae-missing-release-tag) "ChartActionContext" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ChartActionContext = ValueClickContext | RangeSelectContext; + +// Warning: (ae-missing-release-tag) "Container" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export abstract class Container = {}, TContainerInput extends ContainerInput = ContainerInput, TContainerOutput extends ContainerOutput = ContainerOutput> extends Embeddable implements IContainer { + constructor(input: TContainerInput, output: TContainerOutput, getFactory: EmbeddableStart['getEmbeddableFactory'], parent?: Container); + // (undocumented) + addNewEmbeddable = IEmbeddable>(type: string, explicitInput: Partial): Promise; + // (undocumented) + protected readonly children: { + [key: string]: IEmbeddable | ErrorEmbeddable; + }; + // (undocumented) + protected createNewPanelState>(factory: EmbeddableFactory, partial?: Partial): PanelState; + // (undocumented) + destroy(): void; + // (undocumented) + getChild(id: string): E; + // (undocumented) + getChildIds(): string[]; + // (undocumented) + protected readonly getFactory: EmbeddableStart['getEmbeddableFactory']; + protected abstract getInheritedInput(id: string): TChildInput; + // (undocumented) + getInputForChild(embeddableId: string): TEmbeddableInput; + // (undocumented) + protected getPanelState(embeddableId: string): PanelState; + // (undocumented) + readonly isContainer: boolean; + // (undocumented) + reload(): void; + // (undocumented) + removeEmbeddable(embeddableId: string): void; + // (undocumented) + untilEmbeddableLoaded(id: string): Promise; + // (undocumented) + updateInputForChild(id: string, changes: Partial): void; +} + +// Warning: (ae-missing-release-tag) "ContainerInput" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ContainerInput extends EmbeddableInput { + // (undocumented) + hidePanelTitles?: boolean; + // (undocumented) + panels: { + [key: string]: PanelState; + }; +} + +// Warning: (ae-missing-release-tag) "ContainerOutput" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ContainerOutput extends EmbeddableOutput { + // (undocumented) + embeddableLoaded: { + [key: string]: boolean; + }; +} + +// Warning: (ae-missing-release-tag) "CONTEXT_MENU_TRIGGER" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const CONTEXT_MENU_TRIGGER = "CONTEXT_MENU_TRIGGER"; + +// Warning: (ae-forgotten-export) The symbol "Trigger" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "contextMenuTrigger" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const contextMenuTrigger: Trigger<'CONTEXT_MENU_TRIGGER'>; + +// Warning: (ae-missing-release-tag) "defaultEmbeddableFactoryProvider" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const defaultEmbeddableFactoryProvider: = IEmbeddable, T extends SavedObjectAttributes_3 = SavedObjectAttributes_3>(def: EmbeddableFactoryDefinition) => EmbeddableFactory; + +// Warning: (ae-forgotten-export) The symbol "ActionContext" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "EditPanelAction" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class EditPanelAction implements Action_3 { + constructor(getEmbeddableFactory: EmbeddableStart['getEmbeddableFactory'], application: ApplicationStart_2, stateTransfer?: EmbeddableStateTransfer | undefined); + // (undocumented) + currentAppId: string | undefined; + // (undocumented) + execute(context: ActionContext_3): Promise; + // Warning: (ae-forgotten-export) The symbol "NavigationContext" needs to be exported by the entry point index.d.ts + // + // (undocumented) + getAppTarget({ embeddable }: ActionContext_3): NavigationContext | undefined; + // (undocumented) + getDisplayName({ embeddable }: ActionContext_3): string; + // (undocumented) + getHref({ embeddable }: ActionContext_3): Promise; + // (undocumented) + getIconType(): string; + // (undocumented) + readonly id = "editPanel"; + // (undocumented) + isCompatible({ embeddable }: ActionContext_3): Promise; + // (undocumented) + order: number; + // (undocumented) + readonly type = "editPanel"; +} + +// Warning: (ae-missing-release-tag) "Embeddable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export abstract class Embeddable implements IEmbeddable { + constructor(input: TEmbeddableInput, output: TEmbeddableOutput, parent?: IContainer); + destroy(): void; + // (undocumented) + getInput$(): Readonly>; + // (undocumented) + getInput(): Readonly; + getInspectorAdapters(): Adapters | undefined; + // (undocumented) + getIsContainer(): this is IContainer; + // (undocumented) + getOutput$(): Readonly>; + // (undocumented) + getOutput(): Readonly; + getRoot(): IEmbeddable | IContainer; + // (undocumented) + getTitle(): string; + // (undocumented) + readonly id: string; + // (undocumented) + protected input: TEmbeddableInput; + // (undocumented) + readonly isContainer: boolean; + // (undocumented) + protected output: TEmbeddableOutput; + // (undocumented) + readonly parent?: IContainer; + abstract reload(): void; + // (undocumented) + render(el: HTMLElement): void; + // Warning: (ae-forgotten-export) The symbol "RenderCompleteDispatcher" needs to be exported by the entry point index.d.ts + // + // (undocumented) + protected renderComplete: RenderCompleteDispatcher; + // (undocumented) + static runtimeId: number; + // (undocumented) + readonly runtimeId: number; + // Warning: (ae-forgotten-export) The symbol "TriggerContextMapping" needs to be exported by the entry point index.d.ts + // + // (undocumented) + supportedTriggers(): Array; + // (undocumented) + abstract readonly type: string; + // (undocumented) + updateInput(changes: Partial): void; + // (undocumented) + protected updateOutput(outputChanges: Partial): void; +} + +// Warning: (ae-forgotten-export) The symbol "State" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "EmbeddableChildPanel" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export class EmbeddableChildPanel extends React.Component { + constructor(props: EmbeddableChildPanelProps); + // (undocumented) + [panel: string]: any; + // (undocumented) + componentDidMount(): Promise; + // (undocumented) + componentWillUnmount(): void; + // (undocumented) + embeddable: IEmbeddable | ErrorEmbeddable; + // (undocumented) + mounted: boolean; + // (undocumented) + render(): JSX.Element; + } + +// Warning: (ae-missing-release-tag) "EmbeddableChildPanelProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface EmbeddableChildPanelProps { + // (undocumented) + className?: string; + // (undocumented) + container: IContainer; + // (undocumented) + embeddableId: string; + // (undocumented) + PanelComponent: EmbeddableStart['EmbeddablePanel']; +} + +// Warning: (ae-missing-release-tag) "EmbeddableContext" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface EmbeddableContext { + // (undocumented) + embeddable: IEmbeddable; +} + +// @public +export interface EmbeddableEditorState { + // (undocumented) + embeddableId?: string; + // (undocumented) + originatingApp: string; + // (undocumented) + valueInput?: EmbeddableInput; +} + +// Warning: (ae-forgotten-export) The symbol "PersistableState" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "EmbeddableFactory" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface EmbeddableFactory = IEmbeddable, TSavedObjectAttributes extends SavedObjectAttributes_2 = SavedObjectAttributes_2> extends PersistableState { + canCreateNew(): boolean; + create(initialInput: TEmbeddableInput, parent?: IContainer): Promise; + createFromSavedObject(savedObjectId: string, input: Partial, parent?: IContainer): Promise; + getDefaultInput(partial: Partial): Partial; + getDisplayName(): string; + getExplicitInput(): Promise>; + readonly isContainerType: boolean; + readonly isEditable: () => Promise; + // Warning: (ae-forgotten-export) The symbol "SavedObjectMetaData" needs to be exported by the entry point index.d.ts + // + // (undocumented) + readonly savedObjectMetaData?: SavedObjectMetaData; + // (undocumented) + readonly type: string; +} + +// Warning: (ae-missing-release-tag) "EmbeddableFactoryDefinition" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type EmbeddableFactoryDefinition = IEmbeddable, T extends SavedObjectAttributes = SavedObjectAttributes> = Pick, 'create' | 'type' | 'isEditable' | 'getDisplayName'> & Partial, 'createFromSavedObject' | 'isContainerType' | 'getExplicitInput' | 'savedObjectMetaData' | 'canCreateNew' | 'getDefaultInput' | 'telemetry' | 'extract' | 'inject'>>; + +// Warning: (ae-missing-release-tag) "EmbeddableFactoryNotFoundError" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class EmbeddableFactoryNotFoundError extends Error { + constructor(type: string); + // (undocumented) + code: string; +} + +// Warning: (ae-missing-release-tag) "EmbeddableInput" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type EmbeddableInput = { + viewMode?: ViewMode; + title?: string; + id: string; + lastReloadRequestTime?: number; + hidePanelTitles?: boolean; + enhancements?: SerializableState; + disabledActions?: string[]; + disableTriggers?: boolean; + timeRange?: TimeRange; + query?: Query; + filters?: Filter[]; +}; + +// Warning: (ae-missing-release-tag) "EmbeddableInstanceConfiguration" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface EmbeddableInstanceConfiguration { + // (undocumented) + id: string; + // (undocumented) + savedObjectId?: string; +} + +// Warning: (ae-missing-release-tag) "EmbeddableOutput" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface EmbeddableOutput { + // (undocumented) + defaultTitle?: string; + // (undocumented) + editable?: boolean; + // (undocumented) + editApp?: string; + // (undocumented) + editPath?: string; + // (undocumented) + editUrl?: string; + // Warning: (ae-forgotten-export) The symbol "EmbeddableError" needs to be exported by the entry point index.d.ts + // + // (undocumented) + error?: EmbeddableError; + // (undocumented) + loading?: boolean; + // (undocumented) + savedObjectId?: string; + // (undocumented) + title?: string; +} + +// @public +export interface EmbeddablePackageState { + // (undocumented) + embeddableId?: string; + // (undocumented) + input: Optional | Optional; + // (undocumented) + type: string; +} + +// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "State" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "EmbeddablePanel" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class EmbeddablePanel extends React.Component { + constructor(props: Props); + // (undocumented) + closeMyContextMenuPanel: () => void; + // (undocumented) + componentDidMount(): void; + // (undocumented) + componentWillUnmount(): void; + // (undocumented) + onBlur: (blurredPanelIndex: string) => void; + // (undocumented) + onFocus: (focusedPanelIndex: string) => void; + // (undocumented) + render(): JSX.Element; + // (undocumented) + UNSAFE_componentWillMount(): void; +} + +// Warning: (ae-missing-release-tag) "EmbeddablePanelHOC" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type EmbeddablePanelHOC = React.FC<{ + embeddable: IEmbeddable; + hideHeader?: boolean; +}>; + +// @public +export const EmbeddableRenderer: (props: EmbeddableRendererProps) => JSX.Element; + +// Warning: (ae-forgotten-export) The symbol "EmbeddableRendererPropsWithEmbeddable" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "EmbeddableRendererWithFactory" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "EmbeddableRendererProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type EmbeddableRendererProps = EmbeddableRendererPropsWithEmbeddable | EmbeddableRendererWithFactory; + +// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "EmbeddableRoot" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class EmbeddableRoot extends React.Component { + constructor(props: Props_2); + // (undocumented) + componentDidMount(): void; + // (undocumented) + componentDidUpdate(prevProps?: Props_2): void; + // (undocumented) + render(): JSX.Element; + // (undocumented) + shouldComponentUpdate(newProps: Props_2): boolean; +} + +// Warning: (ae-missing-release-tag) "EmbeddableSetup" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface EmbeddableSetup { + // (undocumented) + registerEmbeddableFactory: = IEmbeddable>(id: string, factory: EmbeddableFactoryDefinition) => () => EmbeddableFactory; + // (undocumented) + registerEnhancement: (enhancement: EnhancementRegistryDefinition) => void; + // Warning: (ae-forgotten-export) The symbol "EmbeddableFactoryProvider" needs to be exported by the entry point index.d.ts + // + // (undocumented) + setCustomEmbeddableFactoryProvider: (customProvider: EmbeddableFactoryProvider) => void; +} + +// Warning: (ae-missing-release-tag) "EmbeddableSetupDependencies" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface EmbeddableSetupDependencies { + // Warning: (ae-forgotten-export) The symbol "DataPublicPluginSetup" needs to be exported by the entry point index.d.ts + // + // (undocumented) + data: DataPublicPluginSetup; + // Warning: (ae-forgotten-export) The symbol "UiActionsSetup" needs to be exported by the entry point index.d.ts + // + // (undocumented) + uiActions: UiActionsSetup; +} + +// Warning: (ae-missing-release-tag) "EmbeddableStart" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface EmbeddableStart extends PersistableState { + // (undocumented) + EmbeddablePanel: EmbeddablePanelHOC; + // (undocumented) + getEmbeddableFactories: () => IterableIterator; + // (undocumented) + getEmbeddableFactory: = IEmbeddable>(embeddableFactoryId: string) => EmbeddableFactory | undefined; + // (undocumented) + getEmbeddablePanel: (stateTransfer?: EmbeddableStateTransfer) => EmbeddablePanelHOC; + // Warning: (ae-forgotten-export) The symbol "ScopedHistory" needs to be exported by the entry point index.d.ts + // + // (undocumented) + getStateTransfer: (history?: ScopedHistory) => EmbeddableStateTransfer; +} + +// Warning: (ae-missing-release-tag) "EmbeddableStartDependencies" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface EmbeddableStartDependencies { + // Warning: (ae-forgotten-export) The symbol "DataPublicPluginStart" needs to be exported by the entry point index.d.ts + // + // (undocumented) + data: DataPublicPluginStart; + // Warning: (ae-forgotten-export) The symbol "Start" needs to be exported by the entry point index.d.ts + // + // (undocumented) + inspector: Start; + // Warning: (ae-forgotten-export) The symbol "UiActionsStart" needs to be exported by the entry point index.d.ts + // + // (undocumented) + uiActions: UiActionsStart; +} + +// Warning: (ae-unresolved-link) The @link reference could not be resolved: The package "kibana" does not have an export "ScopedHistory" +// +// @public +export class EmbeddableStateTransfer { + // Warning: (ae-forgotten-export) The symbol "ApplicationStart" needs to be exported by the entry point index.d.ts + // Warning: (ae-forgotten-export) The symbol "PublicAppInfo" needs to be exported by the entry point index.d.ts + constructor(navigateToApp: ApplicationStart['navigateToApp'], scopedHistory?: ScopedHistory | undefined, appList?: ReadonlyMap | undefined); + getAppNameFromId: (appId: string) => string | undefined; + getIncomingEditorState(options?: { + keysToRemoveAfterFetch?: string[]; + }): EmbeddableEditorState | undefined; + getIncomingEmbeddablePackage(options?: { + keysToRemoveAfterFetch?: string[]; + }): EmbeddablePackageState | undefined; + // Warning: (ae-unresolved-link) The @link reference could not be resolved: The package "kibana" does not have an export "ApplicationStart" + navigateToEditor(appId: string, options?: { + path?: string; + state: EmbeddableEditorState; + appendToExistingState?: boolean; + }): Promise; + // Warning: (ae-unresolved-link) The @link reference could not be resolved: The package "kibana" does not have an export "ApplicationStart" + navigateToWithEmbeddablePackage(appId: string, options?: { + path?: string; + state: EmbeddablePackageState; + appendToExistingState?: boolean; + }): Promise; + } + +// Warning: (ae-forgotten-export) The symbol "PersistableStateDefinition" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "EnhancementRegistryDefinition" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface EnhancementRegistryDefinition

extends PersistableStateDefinition

{ + // (undocumented) + id: string; +} + +// Warning: (ae-missing-release-tag) "ErrorEmbeddable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class ErrorEmbeddable extends Embeddable { + constructor(error: Error | string, input: EmbeddableInput, parent?: IContainer); + // (undocumented) + destroy(): void; + // (undocumented) + error: Error | string; + // (undocumented) + reload(): void; + // (undocumented) + render(dom: HTMLElement): void; + // (undocumented) + readonly type = "error"; +} + +// Warning: (ae-missing-release-tag) "IContainer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface IContainer = ContainerInput, O extends ContainerOutput = ContainerOutput> extends IEmbeddable { + addNewEmbeddable = Embeddable>(type: string, explicitInput: Partial): Promise; + getChild = Embeddable>(id: string): E; + getInputForChild(id: string): EEI; + removeEmbeddable(embeddableId: string): void; + untilEmbeddableLoaded(id: string): Promise; + updateInputForChild(id: string, changes: Partial): void; +} + +// Warning: (ae-missing-release-tag) "IEmbeddable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface IEmbeddable { + destroy(): void; + enhancements?: object; + getInput$(): Readonly>; + getInput(): Readonly; + getInspectorAdapters(): Adapters | undefined; + getIsContainer(): this is IContainer; + getOutput$(): Readonly>; + getOutput(): Readonly; + getRoot(): IEmbeddable | IContainer; + getTitle(): string | undefined; + readonly id: string; + readonly isContainer: boolean; + readonly parent?: IContainer; + reload(): void; + render(domNode: HTMLElement | Element): void; + readonly runtimeId?: number; + supportedTriggers(): Array; + readonly type: string; + updateInput(changes: Partial): void; +} + +// Warning: (ae-missing-release-tag) "isErrorEmbeddable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function isErrorEmbeddable(embeddable: TEmbeddable | ErrorEmbeddable): embeddable is ErrorEmbeddable; + +// Warning: (ae-missing-release-tag) "isRangeSelectTriggerContext" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const isRangeSelectTriggerContext: (context: ChartActionContext) => context is RangeSelectContext>; + +// Warning: (ae-missing-release-tag) "isReferenceOrValueEmbeddable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function isReferenceOrValueEmbeddable(incoming: unknown): incoming is ReferenceOrValueEmbeddable; + +// Warning: (ae-missing-release-tag) "isSavedObjectEmbeddableInput" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function isSavedObjectEmbeddableInput(input: EmbeddableInput | SavedObjectEmbeddableInput): input is SavedObjectEmbeddableInput; + +// Warning: (ae-missing-release-tag) "isValueClickTriggerContext" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const isValueClickTriggerContext: (context: ChartActionContext) => context is ValueClickContext>; + +// Warning: (ae-missing-release-tag) "openAddPanelFlyout" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function openAddPanelFlyout(options: { + embeddable: IContainer; + getFactory: EmbeddableStart['getEmbeddableFactory']; + getAllFactories: EmbeddableStart['getEmbeddableFactories']; + overlays: OverlayStart_2; + notifications: NotificationsStart_2; + SavedObjectFinder: React.ComponentType; +}): Promise; + +// Warning: (ae-missing-release-tag) "OutputSpec" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface OutputSpec { + // (undocumented) + [key: string]: PropertySpec; +} + +// Warning: (ae-missing-release-tag) "PANEL_BADGE_TRIGGER" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const PANEL_BADGE_TRIGGER = "PANEL_BADGE_TRIGGER"; + +// Warning: (ae-missing-release-tag) "PANEL_NOTIFICATION_TRIGGER" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const PANEL_NOTIFICATION_TRIGGER = "PANEL_NOTIFICATION_TRIGGER"; + +// Warning: (ae-missing-release-tag) "panelBadgeTrigger" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const panelBadgeTrigger: Trigger<'PANEL_BADGE_TRIGGER'>; + +// Warning: (ae-missing-release-tag) "PanelNotFoundError" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class PanelNotFoundError extends Error { + constructor(); + // (undocumented) + code: string; +} + +// Warning: (ae-missing-release-tag) "panelNotificationTrigger" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const panelNotificationTrigger: Trigger<'PANEL_NOTIFICATION_TRIGGER'>; + +// Warning: (ae-missing-release-tag) "PanelState" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface PanelState { + // (undocumented) + explicitInput: Partial & { + id: string; + }; + // (undocumented) + type: string; +} + +// Warning: (ae-forgotten-export) The symbol "EmbeddablePublicPlugin" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "plugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function plugin(initializerContext: PluginInitializerContext): EmbeddablePublicPlugin; + +// Warning: (ae-missing-release-tag) "PropertySpec" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface PropertySpec { + // (undocumented) + accessPath: string; + // (undocumented) + description: string; + // (undocumented) + displayName: string; + // (undocumented) + id: string; + // (undocumented) + value?: string; +} + +// Warning: (ae-missing-release-tag) "RangeSelectContext" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface RangeSelectContext { + // (undocumented) + data: { + table: KibanaDatatable; + column: number; + range: number[]; + timeFieldName?: string; + }; + // (undocumented) + embeddable?: T; +} + +// @public +export interface ReferenceOrValueEmbeddable { + getInputAsRefType: () => Promise; + getInputAsValueType: () => Promise; + inputIsRefType: (input: ValTypeInput | RefTypeInput) => input is RefTypeInput; +} + +// Warning: (ae-missing-release-tag) "SavedObjectEmbeddableInput" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface SavedObjectEmbeddableInput extends EmbeddableInput { + // (undocumented) + savedObjectId: string; +} + +// Warning: (ae-missing-release-tag) "ValueClickContext" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ValueClickContext { + // (undocumented) + data: { + data: Array<{ + table: Pick; + column: number; + row: number; + value: any; + }>; + timeFieldName?: string; + negate?: boolean; + }; + // (undocumented) + embeddable?: T; +} + +// Warning: (ae-missing-release-tag) "ViewMode" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export enum ViewMode { + // (undocumented) + EDIT = "edit", + // (undocumented) + VIEW = "view" +} + +// Warning: (ae-missing-release-tag) "withEmbeddableSubscription" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const withEmbeddableSubscription: = IEmbeddable, ExtraProps = {}>(WrappedComponent: React.ComponentType<{ + input: I; + output: O; + embeddable: E; +} & ExtraProps>) => React.ComponentType<{ + embeddable: E; +} & ExtraProps>; + + +// Warnings were encountered during analysis: +// +// src/plugins/embeddable/common/types.ts:44:3 - (ae-forgotten-export) The symbol "SerializableState" needs to be exported by the entry point index.d.ts +// src/plugins/embeddable/common/types.ts:59:3 - (ae-forgotten-export) The symbol "TimeRange" needs to be exported by the entry point index.d.ts +// src/plugins/embeddable/common/types.ts:64:3 - (ae-forgotten-export) The symbol "Query" needs to be exported by the entry point index.d.ts +// src/plugins/embeddable/common/types.ts:69:3 - (ae-forgotten-export) The symbol "Filter" needs to be exported by the entry point index.d.ts +// src/plugins/embeddable/public/lib/triggers/triggers.ts:45:5 - (ae-forgotten-export) The symbol "KibanaDatatable" needs to be exported by the entry point index.d.ts + +// (No @packageDocumentation comment for this package) + +``` diff --git a/src/plugins/embeddable/public/tests/customize_panel_modal.test.tsx b/src/plugins/embeddable/public/tests/customize_panel_modal.test.tsx index d12a55dd827e6..24d94020af4dc 100644 --- a/src/plugins/embeddable/public/tests/customize_panel_modal.test.tsx +++ b/src/plugins/embeddable/public/tests/customize_panel_modal.test.tsx @@ -33,9 +33,9 @@ import { HelloWorldContainer } from '../lib/test_samples/embeddables/hello_world import { coreMock } from '../../../../core/public/mocks'; import { testPlugin } from './test_plugin'; import { CustomizePanelModal } from '../lib/panel/panel_header/panel_actions/customize_title/customize_panel_modal'; -import { mount } from 'enzyme'; import { EmbeddableStart } from '../plugin'; import { createEmbeddablePanelMock } from '../mocks'; +import { mountWithIntl } from '../../../../test_utils/public/enzyme_helpers'; let api: EmbeddableStart; let container: Container; @@ -84,19 +84,20 @@ beforeEach(async () => { } }); -test('Is initialized with the embeddables title', async () => { - const component = mount( {}} />); +test('Value is initialized with the embeddables title', async () => { + const component = mountWithIntl( + {}} cancel={() => {}} /> + ); const inputField = findTestSubject(component, 'customEmbeddablePanelTitleInput').find('input'); - expect(inputField.props().placeholder).toBe(embeddable.getOutput().title); - expect(inputField.props().placeholder).toBe(embeddable.getOutput().defaultTitle); - expect(inputField.props().value).toBe(''); + expect(inputField.props().value).toBe(embeddable.getOutput().title); + expect(inputField.props().value).toBe(embeddable.getOutput().defaultTitle); }); test('Calls updateTitle with a new title', async () => { const updateTitle = jest.fn(); - const component = mount( - + const component = mountWithIntl( + {}} /> ); const inputField = findTestSubject(component, 'customEmbeddablePanelTitleInput').find('input'); @@ -105,15 +106,15 @@ test('Calls updateTitle with a new title', async () => { findTestSubject(component, 'saveNewTitleButton').simulate('click'); - expect(updateTitle).toBeCalledWith('new title'); + expect(updateTitle).toBeCalledWith('new title', undefined); }); test('Input value shows custom title if one given', async () => { embeddable.updateInput({ title: 'new title' }); const updateTitle = jest.fn(); - const component = mount( - + const component = mountWithIntl( + {}} /> ); const inputField = findTestSubject(component, 'customEmbeddablePanelTitleInput').find('input'); @@ -122,12 +123,12 @@ test('Input value shows custom title if one given', async () => { expect(inputField.props().value).toBe('new title'); }); -test('Reset updates the input with the default title when the embeddable has no title override', async () => { +test('Reset updates the input value with the default title when the embeddable has a title override', async () => { const updateTitle = jest.fn(); embeddable.updateInput({ title: 'my custom title' }); - const component = mount( - + const component = mountWithIntl( + {}} /> ); const inputField = findTestSubject(component, 'customEmbeddablePanelTitleInput').find('input'); @@ -135,13 +136,14 @@ test('Reset updates the input with the default title when the embeddable has no inputField.simulate('change', event); findTestSubject(component, 'resetCustomEmbeddablePanelTitle').simulate('click'); - expect(inputField.props().placeholder).toBe(embeddable.getOutput().defaultTitle); + const inputAfter = findTestSubject(component, 'customEmbeddablePanelTitleInput').find('input'); + expect(inputAfter.props().value).toBe(embeddable.getOutput().defaultTitle); }); -test('Reset updates the input with the default title when the embeddable has a title override', async () => { +test('Reset updates the input with the default title when the embeddable has no title override', async () => { const updateTitle = jest.fn(); - const component = mount( - + const component = mountWithIntl( + {}} /> ); const inputField = findTestSubject(component, 'customEmbeddablePanelTitleInput').find('input'); @@ -149,13 +151,14 @@ test('Reset updates the input with the default title when the embeddable has a t inputField.simulate('change', event); findTestSubject(component, 'resetCustomEmbeddablePanelTitle').simulate('click'); - expect(inputField.props().placeholder).toBe(embeddable.getOutput().defaultTitle); + await component.update(); + expect(inputField.props().value).toBe(embeddable.getOutput().defaultTitle); }); test('Reset calls updateTitle with undefined', async () => { const updateTitle = jest.fn(); - const component = mount( - + const component = mountWithIntl( + {}} /> ); const inputField = findTestSubject(component, 'customEmbeddablePanelTitleInput').find('input'); @@ -165,19 +168,21 @@ test('Reset calls updateTitle with undefined', async () => { findTestSubject(component, 'resetCustomEmbeddablePanelTitle').simulate('click'); findTestSubject(component, 'saveNewTitleButton').simulate('click'); - expect(updateTitle).toBeCalledWith(undefined); + expect(updateTitle).toBeCalledWith(undefined, undefined); }); test('Can set title to an empty string', async () => { const updateTitle = jest.fn(); - const component = mount( - + const component = mountWithIntl( + {}} /> ); - const inputField = findTestSubject(component, 'customizePanelHideTitle'); - inputField.simulate('click'); + const inputField = findTestSubject(component, 'customEmbeddablePanelTitleInput'); + const event = { target: { value: '' } }; + inputField.simulate('change', event); findTestSubject(component, 'saveNewTitleButton').simulate('click'); - expect(inputField.props().value).toBeUndefined(); - expect(updateTitle).toBeCalledWith(''); + const inputFieldAfter = findTestSubject(component, 'customEmbeddablePanelTitleInput'); + expect(inputFieldAfter.props().value).toBe(''); + expect(updateTitle).toBeCalledWith('', undefined); }); diff --git a/src/plugins/embeddable/server/server.api.md b/src/plugins/embeddable/server/server.api.md new file mode 100644 index 0000000000000..c4fad2917343b --- /dev/null +++ b/src/plugins/embeddable/server/server.api.md @@ -0,0 +1,50 @@ +## API Report File for "kibana" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { CoreSetup } from 'kibana/server'; +import { CoreStart } from 'kibana/server'; +import { Plugin } from 'kibana/server'; +import { SavedObjectReference as SavedObjectReference_2 } from 'kibana/server'; + +// Warning: (ae-forgotten-export) The symbol "EmbeddableInput" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "PersistableStateDefinition" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "EmbeddableRegistryDefinition" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface EmbeddableRegistryDefinition

extends PersistableStateDefinition

{ + // (undocumented) + id: string; +} + +// Warning: (ae-missing-release-tag) "EmbeddableSetup" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface EmbeddableSetup { + // (undocumented) + registerEmbeddableFactory: (factory: EmbeddableRegistryDefinition) => void; + // (undocumented) + registerEnhancement: (enhancement: EnhancementRegistryDefinition) => void; +} + +// Warning: (ae-forgotten-export) The symbol "SerializableState" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "EnhancementRegistryDefinition" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface EnhancementRegistryDefinition

extends PersistableStateDefinition

{ + // (undocumented) + id: string; +} + +// Warning: (ae-forgotten-export) The symbol "EmbeddableServerPlugin" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "plugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const plugin: () => EmbeddableServerPlugin; + + +// (No @packageDocumentation comment for this package) + +``` diff --git a/src/plugins/expressions/README.asciidoc b/src/plugins/expressions/README.asciidoc new file mode 100644 index 0000000000000..e07f6e2909ab8 --- /dev/null +++ b/src/plugins/expressions/README.asciidoc @@ -0,0 +1,55 @@ +[[kibana-expressions-plugin]] +== `expressions` plugin + +Expression pipeline is a chain of functions that *pipe* its output to the +input of the next function. Functions can be configured using arguments provided +by the user. The final output of the expression pipeline can be rendered using +one of the *renderers* registered in `expressions` plugin. + +All the arguments to expression functions need to be serializable, as well as input and output. +Expression functions should try to stay 'pure'. This makes functions easy to reuse and also +make it possible to serialize the whole chain as well as output at every step of execution. + +Expressions power visualizations in Dashboard and Lens, as well as, every +*element* in Canvas is backed by an expression. + +This plugin provides methods which will parse & execute an *expression pipeline* +string for you, as well as a series of registries for advanced users who might +want to incorporate their own functions, types, and renderers into the service +for use in their own application. + +=== Examples + +Below is an example of serialized expression for one Canvas element that fetches +data using `essql` function, pipes it further to `math` and `metric` functions, +and final `render` function renders the result. + +[source] +filters +| essql + query="SELECT COUNT(timestamp) as total_errors + FROM kibana_sample_data_logs + WHERE tags LIKE '%warning%' OR tags LIKE '%error%'" +| math "total_errors" +| metric "TOTAL ISSUES" + metricFont={font family="'Open Sans', Helvetica, Arial, sans-serif" size=48 align="left" color="#FFFFFF" weight="normal" underline=false italic=false} + labelFont={font family="'Open Sans', Helvetica, Arial, sans-serif" size=30 align="left" color="#FFFFFF" weight="lighter" underline=false italic=false} +| render +[/source] + +[role="screenshot"] +image::https://user-images.githubusercontent.com/9773803/74162514-3250a880-4c21-11ea-9e68-86f66862a183.png[] + +=== API documentation + +==== Server API +https://github.com/elastic/kibana/blob/master/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserversetup.md[Server Setup contract] +https://github.com/elastic/kibana/blob/master/docs/development/plugins/expressions/server/kibana-plugin-plugins-expressions-server.expressionsserverstart.md[Server Start contract] + +===== Browser API +https://github.com/elastic/kibana/blob/master/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsservicesetup.md[Browser Setup contract] +https://github.com/elastic/kibana/blob/master/docs/development/plugins/expressions/public/kibana-plugin-plugins-expressions-public.expressionsstart.md[Browser Start contract] + + +==== Other documentation +https://www.elastic.co/guide/en/kibana/current/canvas-function-arguments.html[See Canvas documentation about expressions] diff --git a/src/plugins/expressions/README.md b/src/plugins/expressions/README.md deleted file mode 100644 index c1f032ace37c9..0000000000000 --- a/src/plugins/expressions/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# `expressions` plugin - -This plugin provides methods which will parse & execute an *expression pipeline* -string for you, as well as a series of registries for advanced users who might -want to incorporate their own functions, types, and renderers into the service -for use in their own application. - -Expression pipeline is a chain of functions that *pipe* its output to the -input of the next function. Functions can be configured using arguments provided -by the user. The final output of the expression pipeline can be rendered using -one of the *renderers* registered in `expressions` plugin. - -Expressions power visualizations in Dashboard and Lens, as well as, every -*element* in Canvas is backed by an expression. - -Below is an example of one Canvas element that fetches data using `essql` function, -pipes it further to `math` and `metric` functions, and final `render` function -renders the result. - -``` -filters -| essql - query="SELECT COUNT(timestamp) as total_errors - FROM kibana_sample_data_logs - WHERE tags LIKE '%warning%' OR tags LIKE '%error%'" -| math "total_errors" -| metric "TOTAL ISSUES" - metricFont={font family="'Open Sans', Helvetica, Arial, sans-serif" size=48 align="left" color="#FFFFFF" weight="normal" underline=false italic=false} - labelFont={font family="'Open Sans', Helvetica, Arial, sans-serif" size=30 align="left" color="#FFFFFF" weight="lighter" underline=false italic=false} -| render -``` - -![image](https://user-images.githubusercontent.com/9773803/74162514-3250a880-4c21-11ea-9e68-86f66862a183.png) - -[See Canvas documentation about expressions](https://www.elastic.co/guide/en/kibana/current/canvas-function-arguments.html). diff --git a/src/plugins/expressions/common/ast/types.ts b/src/plugins/expressions/common/ast/types.ts index d5039d0adb318..09fb4fae3f201 100644 --- a/src/plugins/expressions/common/ast/types.ts +++ b/src/plugins/expressions/common/ast/types.ts @@ -18,7 +18,6 @@ */ import { ExpressionValue, ExpressionValueError } from '../expression_types'; -import { ExpressionFunction } from '../../common'; export type ExpressionAstNode = | ExpressionAstExpression @@ -48,9 +47,9 @@ export interface ExpressionAstFunctionDebug { success: boolean; /** - * Reference to the expression function this AST node represents. + * Id of expression function. */ - fn: ExpressionFunction; + fn: string; /** * Input that expression function received as its first argument. diff --git a/src/plugins/expressions/common/execution/execution.test.ts b/src/plugins/expressions/common/execution/execution.test.ts index 2b8aa4b5e68f0..ff331d7c5ddaf 100644 --- a/src/plugins/expressions/common/execution/execution.test.ts +++ b/src/plugins/expressions/common/execution/execution.test.ts @@ -491,7 +491,7 @@ describe('Execution', () => { await execution.result; for (const node of execution.state.get().ast.chain) { - expect(node.debug?.fn.name).toBe('add'); + expect(node.debug?.fn).toBe('add'); } }); @@ -667,7 +667,7 @@ describe('Execution', () => { expect(node2.debug).toMatchObject({ success: false, - fn: expect.any(Object), + fn: 'throws', input: expect.any(Object), args: expect.any(Object), error: expect.any(Object), diff --git a/src/plugins/expressions/common/execution/execution.ts b/src/plugins/expressions/common/execution/execution.ts index 3533500a2fbc5..d4c9b0a25d45b 100644 --- a/src/plugins/expressions/common/execution/execution.ts +++ b/src/plugins/expressions/common/execution/execution.ts @@ -235,7 +235,7 @@ export class Execution< const timeEnd: number = now(); (link as ExpressionAstFunction).debug = { success: true, - fn, + fn: fn.name, input, args: resolvedArgs, output, @@ -253,7 +253,7 @@ export class Execution< if (this.params.debug) { (link as ExpressionAstFunction).debug = { success: false, - fn, + fn: fn.name, input, args, error, diff --git a/src/plugins/expressions/common/execution/execution_contract.ts b/src/plugins/expressions/common/execution/execution_contract.ts index 8c784352b9fdf..20c5b2dd434b5 100644 --- a/src/plugins/expressions/common/execution/execution_contract.ts +++ b/src/plugins/expressions/common/execution/execution_contract.ts @@ -18,6 +18,8 @@ */ import { Execution } from './execution'; +import { ExpressionValueError } from '../expression_types/specs'; +import { ExpressionAstExpression } from '../ast'; /** * `ExecutionContract` is a wrapper around `Execution` class. It provides the @@ -53,7 +55,7 @@ export class ExecutionContract< * wraps that error into `ExpressionValueError` type and returns that. * This function never throws. */ - getData = async () => { + getData = async (): Promise => { try { return await this.execution.result; } catch (e) { @@ -80,7 +82,7 @@ export class ExecutionContract< /** * Get AST used to execute the expression. */ - getAst = () => this.execution.state.get().ast; + getAst = (): ExpressionAstExpression => this.execution.state.get().ast; /** * Get Inspector adapters provided to all functions of expression through diff --git a/src/plugins/expressions/common/expression_types/specs/error.ts b/src/plugins/expressions/common/expression_types/specs/error.ts index c95a019f4e8d2..ebaedcbba0d23 100644 --- a/src/plugins/expressions/common/expression_types/specs/error.ts +++ b/src/plugins/expressions/common/expression_types/specs/error.ts @@ -28,6 +28,7 @@ export type ExpressionValueError = ExpressionValueBoxed< { error: { message: string; + type?: string; name?: string; stack?: string; original?: Error; diff --git a/src/plugins/expressions/common/service/expressions_services.ts b/src/plugins/expressions/common/service/expressions_services.ts index f1053c7bb8411..b5c98fada07c4 100644 --- a/src/plugins/expressions/common/service/expressions_services.ts +++ b/src/plugins/expressions/common/service/expressions_services.ts @@ -18,9 +18,11 @@ */ import { Executor } from '../executor'; -import { ExpressionRendererRegistry } from '../expression_renderers'; +import { AnyExpressionRenderDefinition, ExpressionRendererRegistry } from '../expression_renderers'; import { ExpressionAstExpression } from '../ast'; import { ExecutionContract } from '../execution/execution_contract'; +import { AnyExpressionTypeDefinition } from '../expression_types'; +import { AnyExpressionFunctionDefinition } from '../expression_functions'; /** * The public contract that `ExpressionsService` provides to other plugins @@ -45,18 +47,88 @@ export type ExpressionsServiceSetup = Pick< * The public contract that `ExpressionsService` provides to other plugins * in Kibana Platform in *start* life-cycle. */ -export type ExpressionsServiceStart = Pick< - ExpressionsService, - | 'getFunction' - | 'getFunctions' - | 'getRenderer' - | 'getRenderers' - | 'getType' - | 'getTypes' - | 'run' - | 'execute' - | 'fork' ->; +export interface ExpressionsServiceStart { + /** + * Get a registered `ExpressionFunction` by its name, which was registered + * using the `registerFunction` method. The returned `ExpressionFunction` + * instance is an internal representation of the function in Expressions + * service - do not mutate that object. + */ + getFunction: (name: string) => ReturnType; + + /** + * Get a registered `ExpressionRenderer` by its name, which was registered + * using the `registerRenderer` method. The returned `ExpressionRenderer` + * instance is an internal representation of the renderer in Expressions + * service - do not mutate that object. + */ + getRenderer: (name: string) => ReturnType; + + /** + * Get a registered `ExpressionType` by its name, which was registered + * using the `registerType` method. The returned `ExpressionType` + * instance is an internal representation of the type in Expressions + * service - do not mutate that object. + */ + getType: (name: string) => ReturnType; + + /** + * Executes expression string or a parsed expression AST and immediately + * returns the result. + * + * Below example will execute `sleep 100 | clog` expression with `123` initial + * input to the first function. + * + * ```ts + * expressions.run('sleep 100 | clog', 123); + * ``` + * + * - `sleep 100` will delay execution by 100 milliseconds and pass the `123` input as + * its output. + * - `clog` will print to console `123` and pass it as its output. + * - The final result of the execution will be `123`. + * + * Optionally, you can pass an object as the third argument which will be used + * to extend the `ExecutionContext`—an object passed to each function + * as the third argument, that allows functions to perform side-effects. + * + * ```ts + * expressions.run('...', null, { elasticsearchClient }); + * ``` + */ + run: = Record>( + ast: string | ExpressionAstExpression, + input: Input, + context?: ExtraContext + ) => Promise; + + /** + * Starts expression execution and immediately returns `ExecutionContract` + * instance that tracks the progress of the execution and can be used to + * interact with the execution. + */ + execute: < + Input = unknown, + Output = unknown, + ExtraContext extends Record = Record + >( + ast: string | ExpressionAstExpression, + // This any is for legacy reasons. + input: Input, + context?: ExtraContext + ) => ExecutionContract; + + /** + * Create a new instance of `ExpressionsService`. The new instance inherits + * all state of the original `ExpressionsService`, including all expression + * types, expression functions and context. Also, all new types and functions + * registered in the original services AFTER the forking event will be + * available in the forked instance. However, all new types and functions + * registered in the forked instances will NOT be available to the original + * service. + */ + fork: () => ExpressionsService; +} export interface ExpressionServiceParams { executor?: Executor; @@ -127,58 +199,21 @@ export class ExpressionsService { * passed to all functions that can be used for side-effects. */ public readonly registerFunction = ( - ...args: Parameters - ): ReturnType => this.executor.registerFunction(...args); + functionDefinition: AnyExpressionFunctionDefinition | (() => AnyExpressionFunctionDefinition) + ): void => this.executor.registerFunction(functionDefinition); public readonly registerType = ( - ...args: Parameters - ): ReturnType => this.executor.registerType(...args); + typeDefinition: AnyExpressionTypeDefinition | (() => AnyExpressionTypeDefinition) + ): void => this.executor.registerType(typeDefinition); public readonly registerRenderer = ( - ...args: Parameters - ): ReturnType => this.renderers.register(...args); + definition: AnyExpressionRenderDefinition | (() => AnyExpressionRenderDefinition) + ): void => this.renderers.register(definition); - /** - * Executes expression string or a parsed expression AST and immediately - * returns the result. - * - * Below example will execute `sleep 100 | clog` expression with `123` initial - * input to the first function. - * - * ```ts - * expressions.run('sleep 100 | clog', 123); - * ``` - * - * - `sleep 100` will delay execution by 100 milliseconds and pass the `123` input as - * its output. - * - `clog` will print to console `123` and pass it as its output. - * - The final result of the execution will be `123`. - * - * Optionally, you can pass an object as the third argument which will be used - * to extend the `ExecutionContext`—an object passed to each function - * as the third argument, that allows functions to perform side-effects. - * - * ```ts - * expressions.run('...', null, { elasticsearchClient }); - * ``` - */ - public readonly run = < - Input, - Output, - ExtraContext extends Record = Record - >( - ast: string | ExpressionAstExpression, - input: Input, - context?: ExtraContext - ): Promise => this.executor.run(ast, input, context); + public readonly run: ExpressionsServiceStart['run'] = (ast, input, context) => + this.executor.run(ast, input, context); - /** - * Get a registered `ExpressionFunction` by its name, which was registered - * using the `registerFunction` method. The returned `ExpressionFunction` - * instance is an internal representation of the function in Expressions - * service - do not mutate that object. - */ - public readonly getFunction = (name: string): ReturnType => + public readonly getFunction: ExpressionsServiceStart['getFunction'] = (name) => this.executor.getFunction(name); /** @@ -188,13 +223,7 @@ export class ExpressionsService { public readonly getFunctions = (): ReturnType => this.executor.getFunctions(); - /** - * Get a registered `ExpressionRenderer` by its name, which was registered - * using the `registerRenderer` method. The returned `ExpressionRenderer` - * instance is an internal representation of the renderer in Expressions - * service - do not mutate that object. - */ - public readonly getRenderer = (name: string): ReturnType => + public readonly getRenderer: ExpressionsServiceStart['getRenderer'] = (name) => this.renderers.get(name); /** @@ -204,13 +233,7 @@ export class ExpressionsService { public readonly getRenderers = (): ReturnType => this.renderers.toJS(); - /** - * Get a registered `ExpressionType` by its name, which was registered - * using the `registerType` method. The returned `ExpressionType` - * instance is an internal representation of the type in Expressions - * service - do not mutate that object. - */ - public readonly getType = (name: string): ReturnType => + public readonly getType: ExpressionsServiceStart['getType'] = (name) => this.executor.getType(name); /** @@ -219,36 +242,13 @@ export class ExpressionsService { */ public readonly getTypes = (): ReturnType => this.executor.getTypes(); - /** - * Starts expression execution and immediately returns `ExecutionContract` - * instance that tracks the progress of the execution and can be used to - * interact with the execution. - */ - public readonly execute = < - Input = unknown, - Output = unknown, - ExtraContext extends Record = Record - >( - ast: string | ExpressionAstExpression, - // This any is for legacy reasons. - input: Input = { type: 'null' } as any, - context?: ExtraContext - ): ExecutionContract => { - const execution = this.executor.createExecution(ast, context); + public readonly execute: ExpressionsServiceStart['execute'] = ((ast, input, context) => { + const execution = this.executor.createExecution(ast, context); execution.start(input); return execution.contract; - }; + }) as ExpressionsServiceStart['execute']; - /** - * Create a new instance of `ExpressionsService`. The new instance inherits - * all state of the original `ExpressionsService`, including all expression - * types, expression functions and context. Also, all new types and functions - * registered in the original services AFTER the forking event will be - * available in the forked instance. However, all new types and functions - * registered in the forked instances will NOT be available to the original - * service. - */ - public readonly fork = (): ExpressionsService => { + public readonly fork = () => { const executor = this.executor.fork(); const renderers = this.renderers; const fork = new ExpressionsService({ executor, renderers }); diff --git a/src/plugins/expressions/public/index.ts b/src/plugins/expressions/public/index.ts index 87406db89a2a8..039890c9233cf 100644 --- a/src/plugins/expressions/public/index.ts +++ b/src/plugins/expressions/public/index.ts @@ -122,4 +122,7 @@ export { TypeToString, UnmappedTypeStrings, ExpressionValueRender as Render, + ExpressionsService, + ExpressionsServiceSetup, + ExpressionsServiceStart, } from '../common'; diff --git a/src/plugins/expressions/public/mocks.tsx b/src/plugins/expressions/public/mocks.tsx index 3865b4d20620a..f6546a6b7ff35 100644 --- a/src/plugins/expressions/public/mocks.tsx +++ b/src/plugins/expressions/public/mocks.tsx @@ -49,11 +49,8 @@ const createStartContract = (): Start => { ExpressionRenderHandler: jest.fn(), fork: jest.fn(), getFunction: jest.fn(), - getFunctions: jest.fn(), getRenderer: jest.fn(), - getRenderers: jest.fn(), getType: jest.fn(), - getTypes: jest.fn(), loader: jest.fn(), ReactExpressionRenderer: jest.fn((props) => <>), render: jest.fn(), diff --git a/src/plugins/expressions/public/plugin.test.ts b/src/plugins/expressions/public/plugin.test.ts index 08f7135f033f1..d9dde1f6def68 100644 --- a/src/plugins/expressions/public/plugin.test.ts +++ b/src/plugins/expressions/public/plugin.test.ts @@ -67,7 +67,7 @@ describe('ExpressionsPublicPlugin', () => { const { doStart } = await expressionsPluginMock.createPlugin(); const start = await doStart(); - const handler = start.execute('clog'); + const handler = start.execute('clog', null); expect(handler.getAst()).toMatchInlineSnapshot(` Object { "chain": Array [ @@ -85,7 +85,7 @@ describe('ExpressionsPublicPlugin', () => { test('"kibana" function return value of type "kibana_context"', async () => { const { doStart } = await expressionsPluginMock.createPlugin(); const start = await doStart(); - const execution = start.execute('kibana'); + const execution = start.execute('kibana', null); const result = await execution.getData(); expect((result as any).type).toBe('kibana_context'); diff --git a/src/plugins/expressions/public/plugin.ts b/src/plugins/expressions/public/plugin.ts index 9768ece899dd4..4ad0e53cdd9c0 100644 --- a/src/plugins/expressions/public/plugin.ts +++ b/src/plugins/expressions/public/plugin.ts @@ -21,20 +21,26 @@ import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from 'src/core import { ExpressionsService, ExpressionsServiceSetup, - ExpressionsServiceStart, ExecutionContext, + ExpressionsServiceStart, } from '../common'; import { setRenderersRegistry, setNotifications, setExpressionsService } from './services'; import { ReactExpressionRenderer } from './react_expression_renderer'; -import { ExpressionLoader, loader } from './loader'; +import { ExpressionLoader, IExpressionLoader, loader } from './loader'; import { render, ExpressionRenderHandler } from './render'; +/** + * Expressions public setup contract, extends {@link ExpressionsServiceSetup} + */ export type ExpressionsSetup = ExpressionsServiceSetup; +/** + * Expressions public start contrect, extends {@link ExpressionServiceStart} + */ export interface ExpressionsStart extends ExpressionsServiceStart { ExpressionLoader: typeof ExpressionLoader; ExpressionRenderHandler: typeof ExpressionRenderHandler; - loader: typeof loader; + loader: IExpressionLoader; ReactExpressionRenderer: typeof ReactExpressionRenderer; render: typeof render; } diff --git a/src/plugins/expressions/public/public.api.md b/src/plugins/expressions/public/public.api.md new file mode 100644 index 0000000000000..162f0ef6824f5 --- /dev/null +++ b/src/plugins/expressions/public/public.api.md @@ -0,0 +1,1164 @@ +## API Report File for "kibana" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { CoreSetup } from 'src/core/public'; +import { CoreStart } from 'src/core/public'; +import { Ensure } from '@kbn/utility-types'; +import { EnvironmentMode } from '@kbn/config'; +import { EventEmitter } from 'events'; +import { Observable } from 'rxjs'; +import { PackageInfo } from '@kbn/config'; +import { Plugin as Plugin_2 } from 'src/core/public'; +import { PluginInitializerContext as PluginInitializerContext_2 } from 'src/core/public'; +import React from 'react'; +import { UnwrapPromiseOrReturn } from '@kbn/utility-types'; + +// Warning: (ae-missing-release-tag) "AnyExpressionFunctionDefinition" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type AnyExpressionFunctionDefinition = ExpressionFunctionDefinition, any>; + +// Warning: (ae-missing-release-tag) "AnyExpressionTypeDefinition" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type AnyExpressionTypeDefinition = ExpressionTypeDefinition; + +// Warning: (ae-forgotten-export) The symbol "SingleArgumentType" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "MultipleArgumentType" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "UnresolvedSingleArgumentType" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "UnresolvedMultipleArgumentType" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "ArgumentType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type ArgumentType = SingleArgumentType | MultipleArgumentType | UnresolvedSingleArgumentType | UnresolvedMultipleArgumentType; + +// Warning: (ae-missing-release-tag) "buildExpression" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export function buildExpression(initialState?: ExpressionAstFunctionBuilder[] | ExpressionAstExpression | string): ExpressionAstExpressionBuilder; + +// Warning: (ae-forgotten-export) The symbol "InferFunctionDefinition" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "FunctionArgs" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "buildExpressionFunction" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export function buildExpressionFunction(fnName: InferFunctionDefinition['name'], +initialArgs: { + [K in keyof FunctionArgs]: FunctionArgs[K] | ExpressionAstExpressionBuilder | ExpressionAstExpressionBuilder[]; +}): ExpressionAstFunctionBuilder; + +// Warning: (ae-missing-release-tag) "Datatable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface Datatable { + // (undocumented) + columns: DatatableColumn[]; + // (undocumented) + rows: DatatableRow[]; + // Warning: (ae-forgotten-export) The symbol "name" needs to be exported by the entry point index.d.ts + // + // (undocumented) + type: typeof name; +} + +// Warning: (ae-missing-release-tag) "DatatableColumn" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface DatatableColumn { + // (undocumented) + id: string; + // Warning: (ae-forgotten-export) The symbol "DatatableColumnMeta" needs to be exported by the entry point index.d.ts + // + // (undocumented) + meta: DatatableColumnMeta; + // (undocumented) + name: string; +} + +// Warning: (ae-missing-release-tag) "DatatableColumnType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type DatatableColumnType = 'string' | 'number' | 'boolean' | 'date' | 'null'; + +// Warning: (ae-missing-release-tag) "DatatableRow" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type DatatableRow = Record; + +// Warning: (ae-forgotten-export) The symbol "Adapters" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "DefaultInspectorAdapters" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "Execution" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class Execution = Record, Input = unknown, Output = unknown, InspectorAdapters extends Adapters = ExtraContext['inspectorAdapters'] extends object ? ExtraContext['inspectorAdapters'] : DefaultInspectorAdapters> { + constructor(params: ExecutionParams); + cancel(): void; + // (undocumented) + cast(value: any, toTypeNames?: string[]): any; + readonly context: ExecutionContext & ExtraContext; + readonly contract: ExecutionContract; + // (undocumented) + readonly expression: string; + input: Input; + // (undocumented) + get inspectorAdapters(): InspectorAdapters; + // Warning: (ae-forgotten-export) The symbol "ExpressionExecOptions" needs to be exported by the entry point index.d.ts + // + // (undocumented) + interpret(ast: ExpressionAstNode, input: T, options?: ExpressionExecOptions): Promise; + // (undocumented) + invokeChain(chainArr: ExpressionAstFunction[], input: unknown): Promise; + // (undocumented) + invokeFunction(fn: ExpressionFunction, input: unknown, args: Record): Promise; + // (undocumented) + readonly params: ExecutionParams; + // (undocumented) + resolveArgs(fnDef: ExpressionFunction, input: unknown, argAsts: any): Promise; + // (undocumented) + get result(): Promise; + start(input?: Input): void; + readonly state: ExecutionContainer; +} + +// Warning: (ae-forgotten-export) The symbol "StateContainer" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "ExecutionPureTransitions" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "ExecutionContainer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExecutionContainer = StateContainer, ExecutionPureTransitions>; + +// Warning: (ae-missing-release-tag) "ExecutionContext" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface ExecutionContext { + abortSignal: AbortSignal; + getInitialInput: () => Input; + // Warning: (ae-forgotten-export) The symbol "SavedObjectAttributes" needs to be exported by the entry point index.d.ts + // Warning: (ae-forgotten-export) The symbol "SavedObject" needs to be exported by the entry point index.d.ts + getSavedObject?: (type: string, id: string) => Promise>; + inspectorAdapters: InspectorAdapters; + // Warning: (ae-forgotten-export) The symbol "ExecutionContextSearch" needs to be exported by the entry point index.d.ts + search?: ExecutionContextSearch; + types: Record; + variables: Record; +} + +// Warning: (ae-missing-release-tag) "ExecutionContract" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export class ExecutionContract = Record, Input = unknown, Output = unknown, InspectorAdapters = unknown> { + constructor(execution: Execution); + cancel: () => void; + // (undocumented) + protected readonly execution: Execution; + getAst: () => ExpressionAstExpression; + getData: () => Promise; + getExpression: () => string; + inspect: () => InspectorAdapters; + // (undocumented) + get isPending(): boolean; +} + +// Warning: (ae-missing-release-tag) "ExecutionParams" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ExecutionParams = Record> { + // (undocumented) + ast?: ExpressionAstExpression; + // (undocumented) + context?: ExtraContext; + debug?: boolean; + // (undocumented) + executor: Executor; + // (undocumented) + expression?: string; +} + +// Warning: (ae-missing-release-tag) "ExecutionState" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ExecutionState extends ExecutorState { + // (undocumented) + ast: ExpressionAstExpression; + error?: Error; + result?: Output; + state: 'not-started' | 'pending' | 'result' | 'error'; +} + +// Warning: (ae-missing-release-tag) "Executor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class Executor = Record> { + constructor(state?: ExecutorState); + // (undocumented) + get context(): Record; + // (undocumented) + createExecution = Record, Input = unknown, Output = unknown>(ast: string | ExpressionAstExpression, context?: ExtraContext, { debug }?: ExpressionExecOptions): Execution; + // (undocumented) + static createWithDefaults = Record>(state?: ExecutorState): Executor; + // (undocumented) + extendContext(extraContext: Record): void; + // (undocumented) + fork(): Executor; + // @deprecated (undocumented) + readonly functions: FunctionsRegistry; + // (undocumented) + getFunction(name: string): ExpressionFunction | undefined; + // (undocumented) + getFunctions(): Record; + // (undocumented) + getType(name: string): ExpressionType | undefined; + // (undocumented) + getTypes(): Record; + // (undocumented) + registerFunction(functionDefinition: AnyExpressionFunctionDefinition | (() => AnyExpressionFunctionDefinition)): void; + // (undocumented) + registerType(typeDefinition: AnyExpressionTypeDefinition | (() => AnyExpressionTypeDefinition)): void; + run = Record>(ast: string | ExpressionAstExpression, input: Input, context?: ExtraContext): Promise; + // (undocumented) + readonly state: ExecutorContainer; + // @deprecated (undocumented) + readonly types: TypesRegistry; +} + +// Warning: (ae-forgotten-export) The symbol "ExecutorPureTransitions" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "ExecutorPureSelectors" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "ExecutorContainer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExecutorContainer = Record> = StateContainer, ExecutorPureTransitions, ExecutorPureSelectors>; + +// Warning: (ae-missing-release-tag) "ExecutorState" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ExecutorState = Record> { + // (undocumented) + context: Context; + // (undocumented) + functions: Record; + // (undocumented) + types: Record; +} + +// Warning: (ae-missing-release-tag) "ExpressionAstArgument" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionAstArgument = string | boolean | number | ExpressionAstExpression; + +// Warning: (ae-missing-release-tag) "ExpressionAstExpression" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ExpressionAstExpression { + // (undocumented) + chain: ExpressionAstFunction[]; + // (undocumented) + type: 'expression'; +} + +// Warning: (ae-missing-release-tag) "ExpressionAstExpressionBuilder" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ExpressionAstExpressionBuilder { + findFunction: (fnName: InferFunctionDefinition['name']) => Array> | []; + functions: ExpressionAstFunctionBuilder[]; + toAst: () => ExpressionAstExpression; + toString: () => string; + type: 'expression_builder'; +} + +// Warning: (ae-missing-release-tag) "ExpressionAstFunction" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ExpressionAstFunction { + // (undocumented) + arguments: Record; + // Warning: (ae-forgotten-export) The symbol "ExpressionAstFunctionDebug" needs to be exported by the entry point index.d.ts + debug?: ExpressionAstFunctionDebug; + // (undocumented) + function: string; + // (undocumented) + type: 'function'; +} + +// Warning: (ae-missing-release-tag) "ExpressionAstFunctionBuilder" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ExpressionAstFunctionBuilder { + // Warning: (ae-forgotten-export) The symbol "FunctionArgName" needs to be exported by the entry point index.d.ts + addArgument: >(name: A, value: FunctionArgs[A] | ExpressionAstExpressionBuilder) => this; + // Warning: (ae-forgotten-export) The symbol "FunctionBuilderArguments" needs to be exported by the entry point index.d.ts + arguments: FunctionBuilderArguments; + getArgument: >(name: A) => Array[A] | ExpressionAstExpressionBuilder> | undefined; + name: InferFunctionDefinition['name']; + // Warning: (ae-forgotten-export) The symbol "OptionalKeys" needs to be exported by the entry point index.d.ts + removeArgument: >>(name: A) => this; + replaceArgument: >(name: A, value: Array[A] | ExpressionAstExpressionBuilder>) => this; + toAst: () => ExpressionAstFunction; + toString: () => string; + type: 'expression_function_builder'; +} + +// Warning: (ae-missing-release-tag) "ExpressionAstNode" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionAstNode = ExpressionAstExpression | ExpressionAstFunction | ExpressionAstArgument; + +// Warning: (ae-missing-release-tag) "ExpressionExecutor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public @deprecated (undocumented) +export interface ExpressionExecutor { + // Warning: (ae-forgotten-export) The symbol "ExpressionInterpreter" needs to be exported by the entry point index.d.ts + // + // (undocumented) + interpreter: ExpressionInterpreter; +} + +// Warning: (ae-missing-release-tag) "ExpressionFunction" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class ExpressionFunction { + constructor(functionDefinition: AnyExpressionFunctionDefinition); + // (undocumented) + accepts: (type: string) => boolean; + aliases: string[]; + args: Record; + fn: (input: ExpressionValue, params: Record, handlers: object) => ExpressionValue; + help: string; + inputTypes: string[] | undefined; + name: string; + type: string; +} + +// Warning: (ae-missing-release-tag) "ExpressionFunctionDefinition" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface ExpressionFunctionDefinition, Output, Context extends ExecutionContext = ExecutionContext> { + aliases?: string[]; + args: { + [key in keyof Arguments]: ArgumentType; + }; + // @deprecated (undocumented) + context?: { + types: AnyExpressionFunctionDefinition['inputTypes']; + }; + fn(input: Input, args: Arguments, context: Context): Output; + help: string; + inputTypes?: Array>; + name: Name; + type?: TypeToString>; +} + +// @public +export interface ExpressionFunctionDefinitions { + // Warning: (ae-forgotten-export) The symbol "ExpressionFunctionClog" needs to be exported by the entry point index.d.ts + // + // (undocumented) + clog: ExpressionFunctionClog; + // Warning: (ae-forgotten-export) The symbol "ExpressionFunctionFont" needs to be exported by the entry point index.d.ts + // + // (undocumented) + font: ExpressionFunctionFont; + // (undocumented) + kibana: ExpressionFunctionKibana; + // Warning: (ae-forgotten-export) The symbol "ExpressionFunctionKibanaContext" needs to be exported by the entry point index.d.ts + // + // (undocumented) + kibana_context: ExpressionFunctionKibanaContext; + // Warning: (ae-forgotten-export) The symbol "ExpressionFunctionTheme" needs to be exported by the entry point index.d.ts + // + // (undocumented) + theme: ExpressionFunctionTheme; + // Warning: (ae-forgotten-export) The symbol "ExpressionFunctionVar" needs to be exported by the entry point index.d.ts + // + // (undocumented) + var: ExpressionFunctionVar; + // Warning: (ae-forgotten-export) The symbol "ExpressionFunctionVarSet" needs to be exported by the entry point index.d.ts + // + // (undocumented) + var_set: ExpressionFunctionVarSet; +} + +// Warning: (ae-missing-release-tag) "ExpressionFunctionKibana" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionFunctionKibana = ExpressionFunctionDefinition<'kibana', ExpressionValueSearchContext | null, object, ExpressionValueSearchContext>; + +// Warning: (ae-missing-release-tag) "ExpressionFunctionParameter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class ExpressionFunctionParameter { + constructor(name: string, arg: ArgumentType); + // (undocumented) + accepts(type: string): boolean; + // (undocumented) + aliases: string[]; + // (undocumented) + default: any; + // (undocumented) + help: string; + // (undocumented) + multi: boolean; + // (undocumented) + name: string; + // (undocumented) + options: any[]; + // (undocumented) + required: boolean; + // (undocumented) + resolve: boolean; + // (undocumented) + types: string[]; +} + +// Warning: (ae-missing-release-tag) "ExpressionImage" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ExpressionImage { + // (undocumented) + dataurl: string; + // (undocumented) + mode: string; + // (undocumented) + type: 'image'; +} + +// Warning: (ae-missing-release-tag) "ExpressionRenderDefinition" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ExpressionRenderDefinition { + displayName: string; + help?: string; + name: string; + render: (domNode: HTMLElement, config: Config, handlers: IInterpreterRenderHandlers) => void | Promise; + reuseDomNode: boolean; + validate?: () => undefined | Error; +} + +// Warning: (ae-missing-release-tag) "ExpressionRenderer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class ExpressionRenderer { + constructor(config: ExpressionRenderDefinition); + // (undocumented) + readonly displayName: string; + // (undocumented) + readonly help: string; + // (undocumented) + readonly name: string; + // (undocumented) + readonly render: ExpressionRenderDefinition['render']; + // (undocumented) + readonly reuseDomNode: boolean; + // (undocumented) + readonly validate: () => void | Error; +} + +// Warning: (ae-missing-release-tag) "ExpressionRendererComponent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionRendererComponent = React.FC; + +// Warning: (ae-missing-release-tag) "ExpressionRendererEvent" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ExpressionRendererEvent { + // (undocumented) + data: any; + // (undocumented) + name: string; +} + +// Warning: (ae-missing-release-tag) "ExpressionRendererRegistry" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class ExpressionRendererRegistry implements IRegistry { + // (undocumented) + get(id: string): ExpressionRenderer | null; + // Warning: (ae-forgotten-export) The symbol "AnyExpressionRenderDefinition" needs to be exported by the entry point index.d.ts + // + // (undocumented) + register(definition: AnyExpressionRenderDefinition | (() => AnyExpressionRenderDefinition)): void; + // (undocumented) + toArray(): ExpressionRenderer[]; + // (undocumented) + toJS(): Record; +} + +// Warning: (ae-missing-release-tag) "ExpressionRenderError" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ExpressionRenderError extends Error { + // (undocumented) + type?: string; +} + +// Warning: (ae-missing-release-tag) "ExpressionRenderHandler" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class ExpressionRenderHandler { + // Warning: (ae-forgotten-export) The symbol "ExpressionRenderHandlerParams" needs to be exported by the entry point index.d.ts + constructor(element: HTMLElement, { onRenderError }?: Partial); + // (undocumented) + destroy: () => void; + // (undocumented) + events$: Observable; + // (undocumented) + getElement: () => HTMLElement; + // (undocumented) + handleRenderError: (error: ExpressionRenderError) => void; + // (undocumented) + render$: Observable; + // (undocumented) + render: (data: any, uiState?: any) => Promise; + // Warning: (ae-forgotten-export) The symbol "UpdateValue" needs to be exported by the entry point index.d.ts + // + // (undocumented) + update$: Observable; + } + +// Warning: (ae-missing-release-tag) "ExpressionsPublicPlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +class ExpressionsPublicPlugin implements Plugin_2 { + constructor(initializerContext: PluginInitializerContext_2); + // (undocumented) + setup(core: CoreSetup): ExpressionsSetup; + // (undocumented) + start(core: CoreStart): ExpressionsStart; + // (undocumented) + stop(): void; +} + +export { ExpressionsPublicPlugin } + +export { ExpressionsPublicPlugin as Plugin } + +// Warning: (ae-missing-release-tag) "ExpressionsService" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export class ExpressionsService { + // Warning: (ae-forgotten-export) The symbol "ExpressionServiceParams" needs to be exported by the entry point index.d.ts + constructor({ executor, renderers, }?: ExpressionServiceParams); + // (undocumented) + readonly execute: ExpressionsServiceStart['execute']; + // (undocumented) + readonly executor: Executor; + // (undocumented) + readonly fork: () => ExpressionsService; + // (undocumented) + readonly getFunction: ExpressionsServiceStart['getFunction']; + readonly getFunctions: () => ReturnType; + // (undocumented) + readonly getRenderer: ExpressionsServiceStart['getRenderer']; + readonly getRenderers: () => ReturnType; + // (undocumented) + readonly getType: ExpressionsServiceStart['getType']; + readonly getTypes: () => ReturnType; + readonly registerFunction: (functionDefinition: AnyExpressionFunctionDefinition | (() => AnyExpressionFunctionDefinition)) => void; + // (undocumented) + readonly registerRenderer: (definition: AnyExpressionRenderDefinition | (() => AnyExpressionRenderDefinition)) => void; + // (undocumented) + readonly registerType: (typeDefinition: AnyExpressionTypeDefinition | (() => AnyExpressionTypeDefinition)) => void; + // (undocumented) + readonly renderers: ExpressionRendererRegistry; + // (undocumented) + readonly run: ExpressionsServiceStart['run']; + setup(): ExpressionsServiceSetup; + start(): ExpressionsServiceStart; + // (undocumented) + stop(): void; +} + +// Warning: (ae-missing-release-tag) "ExpressionsServiceSetup" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type ExpressionsServiceSetup = Pick; + +// Warning: (ae-missing-release-tag) "ExpressionsServiceStart" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface ExpressionsServiceStart { + execute: = Record>(ast: string | ExpressionAstExpression, input: Input, context?: ExtraContext) => ExecutionContract; + fork: () => ExpressionsService; + getFunction: (name: string) => ReturnType; + getRenderer: (name: string) => ReturnType; + getType: (name: string) => ReturnType; + run: = Record>(ast: string | ExpressionAstExpression, input: Input, context?: ExtraContext) => Promise; +} + +// Warning: (ae-missing-release-tag) "ExpressionsSetup" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type ExpressionsSetup = ExpressionsServiceSetup; + +// Warning: (ae-missing-release-tag) "ExpressionsStart" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// Warning: (ae-unresolved-link) The @link reference could not be resolved: The package "kibana" does not have an export "ExpressionServiceStart" +// +// @public +export interface ExpressionsStart extends ExpressionsServiceStart { + // Warning: (ae-forgotten-export) The symbol "ExpressionLoader" needs to be exported by the entry point index.d.ts + // + // (undocumented) + ExpressionLoader: typeof ExpressionLoader; + // (undocumented) + ExpressionRenderHandler: typeof ExpressionRenderHandler; + // Warning: (ae-forgotten-export) The symbol "IExpressionLoader" needs to be exported by the entry point index.d.ts + // + // (undocumented) + loader: IExpressionLoader; + // (undocumented) + ReactExpressionRenderer: typeof ReactExpressionRenderer; + // Warning: (ae-forgotten-export) The symbol "render" needs to be exported by the entry point index.d.ts + // + // (undocumented) + render: typeof render; +} + +// Warning: (ae-missing-release-tag) "ExpressionType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class ExpressionType { + constructor(definition: AnyExpressionTypeDefinition); + // (undocumented) + castsFrom: (value: ExpressionValue) => boolean; + // (undocumented) + castsTo: (value: ExpressionValue) => boolean; + // (undocumented) + create: unknown; + // (undocumented) + deserialize?: (serialized: any) => ExpressionValue; + // (undocumented) + from: (value: ExpressionValue, types: Record) => any; + // (undocumented) + getFromFn: (typeName: string) => undefined | ExpressionValueConverter; + // (undocumented) + getToFn: (typeName: string) => undefined | ExpressionValueConverter; + help: string; + // (undocumented) + name: string; + serialize?: (value: ExpressionValue) => any; + // (undocumented) + to: (value: ExpressionValue, toTypeName: string, types: Record) => any; + validate: (type: any) => void | Error; +} + +// Warning: (ae-missing-release-tag) "ExpressionTypeDefinition" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface ExpressionTypeDefinition { + // (undocumented) + deserialize?: (type: SerializedType) => Value; + // (undocumented) + from?: { + [type: string]: ExpressionValueConverter; + }; + // (undocumented) + help?: string; + // (undocumented) + name: Name; + // (undocumented) + serialize?: (type: Value) => SerializedType; + // (undocumented) + to?: { + [type: string]: ExpressionValueConverter; + }; + // (undocumented) + validate?: (type: any) => void | Error; +} + +// Warning: (ae-missing-release-tag) "ExpressionTypeStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface ExpressionTypeStyle { + // (undocumented) + css: string; + // Warning: (ae-forgotten-export) The symbol "CSSStyle" needs to be exported by the entry point index.d.ts + // + // (undocumented) + spec: CSSStyle; + // (undocumented) + type: 'style'; +} + +// Warning: (ae-missing-release-tag) "ExpressionValue" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionValue = ExpressionValueUnboxed | ExpressionValueBoxed; + +// Warning: (ae-missing-release-tag) "ExpressionValueBoxed" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionValueBoxed = { + type: Type; +} & Value; + +// Warning: (ae-missing-release-tag) "ExpressionValueConverter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionValueConverter = (input: I, availableTypes: Record) => O; + +// Warning: (ae-missing-release-tag) "ExpressionValueError" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionValueError = ExpressionValueBoxed<'error', { + error: { + message: string; + type?: string; + name?: string; + stack?: string; + original?: Error; + }; + info?: unknown; +}>; + +// Warning: (ae-missing-release-tag) "ExpressionValueFilter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type ExpressionValueFilter = ExpressionValueBoxed<'filter', { + filterType?: string; + value?: string; + column?: string; + and: ExpressionValueFilter[]; + to?: string; + from?: string; + query?: string | null; +}>; + +// Warning: (ae-missing-release-tag) "ExpressionValueNum" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionValueNum = ExpressionValueBoxed<'num', { + value: number; +}>; + +// Warning: (ae-forgotten-export) The symbol "name" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "ExpressionValueRender" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +type ExpressionValueRender = ExpressionValueBoxed; + +export { ExpressionValueRender } + +export { ExpressionValueRender as Render } + +// Warning: (ae-missing-release-tag) "ExpressionValueSearchContext" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionValueSearchContext = ExpressionValueBoxed<'kibana_context', ExecutionContextSearch>; + +// Warning: (ae-missing-release-tag) "ExpressionValueUnboxed" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionValueUnboxed = any; + +// Warning: (ae-missing-release-tag) "Font" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface Font { + // (undocumented) + label: FontLabel; + // (undocumented) + value: FontValue; +} + +// Warning: (ae-forgotten-export) The symbol "fonts" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "FontLabel" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type FontLabel = typeof fonts[number]['label']; + +// Warning: (ae-missing-release-tag) "FontStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export enum FontStyle { + // (undocumented) + ITALIC = "italic", + // (undocumented) + NORMAL = "normal" +} + +// Warning: (ae-missing-release-tag) "FontValue" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type FontValue = typeof fonts[number]['value']; + +// Warning: (ae-missing-release-tag) "FontWeight" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export enum FontWeight { + // (undocumented) + BOLD = "bold", + // (undocumented) + BOLDER = "bolder", + // (undocumented) + EIGHT = "800", + // (undocumented) + FIVE = "500", + // (undocumented) + FOUR = "400", + // (undocumented) + LIGHTER = "lighter", + // (undocumented) + NINE = "900", + // (undocumented) + NORMAL = "normal", + // (undocumented) + ONE = "100", + // (undocumented) + SEVEN = "700", + // (undocumented) + SIX = "600", + // (undocumented) + THREE = "300", + // (undocumented) + TWO = "200" +} + +// Warning: (ae-missing-release-tag) "format" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function format(ast: T, type: T extends ExpressionAstExpression ? 'expression' : 'argument'): string; + +// Warning: (ae-missing-release-tag) "formatExpression" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export function formatExpression(ast: ExpressionAstExpression): string; + +// Warning: (ae-missing-release-tag) "FunctionsRegistry" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class FunctionsRegistry implements IRegistry { + constructor(executor: Executor); + // (undocumented) + get(id: string): ExpressionFunction | null; + // (undocumented) + register(functionDefinition: AnyExpressionFunctionDefinition | (() => AnyExpressionFunctionDefinition)): void; + // (undocumented) + toArray(): ExpressionFunction[]; + // (undocumented) + toJS(): Record; +} + +// Warning: (ae-missing-release-tag) "IExpressionLoaderParams" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface IExpressionLoaderParams { + // (undocumented) + context?: ExpressionValue; + // (undocumented) + customFunctions?: []; + // (undocumented) + customRenderers?: []; + // (undocumented) + disableCaching?: boolean; + // (undocumented) + inspectorAdapters?: Adapters; + // Warning: (ae-forgotten-export) The symbol "RenderErrorHandlerFnType" needs to be exported by the entry point index.d.ts + // + // (undocumented) + onRenderError?: RenderErrorHandlerFnType; + // (undocumented) + searchContext?: ExecutionContextSearch; + // (undocumented) + uiState?: unknown; + // (undocumented) + variables?: Record; +} + +// Warning: (ae-missing-release-tag) "IInterpreterRenderHandlers" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface IInterpreterRenderHandlers { + done: () => void; + // (undocumented) + event: (event: any) => void; + // (undocumented) + onDestroy: (fn: () => void) => void; + // (undocumented) + reload: () => void; + // (undocumented) + update: (params: any) => void; +} + +// Warning: (ae-missing-release-tag) "InterpreterErrorType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public @deprecated (undocumented) +export type InterpreterErrorType = ExpressionValueError; + +// Warning: (ae-missing-release-tag) "IRegistry" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface IRegistry { + // (undocumented) + get(id: string): T | null; + // (undocumented) + toArray(): T[]; + // (undocumented) + toJS(): Record; +} + +// Warning: (ae-missing-release-tag) "isExpressionAstBuilder" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export function isExpressionAstBuilder(val: any): val is ExpressionAstExpressionBuilder; + +// Warning: (ae-missing-release-tag) "KIBANA_CONTEXT_NAME" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type KIBANA_CONTEXT_NAME = 'kibana_context'; + +// Warning: (ae-missing-release-tag) "KibanaContext" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type KibanaContext = ExpressionValueSearchContext; + +// Warning: (ae-missing-release-tag) "KibanaDatatable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface KibanaDatatable { + // (undocumented) + columns: KibanaDatatableColumn[]; + // (undocumented) + rows: KibanaDatatableRow[]; + // Warning: (ae-forgotten-export) The symbol "name" needs to be exported by the entry point index.d.ts + // + // (undocumented) + type: typeof name_3; +} + +// Warning: (ae-missing-release-tag) "KibanaDatatableColumn" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface KibanaDatatableColumn { + // (undocumented) + formatHint?: SerializedFieldFormat; + // (undocumented) + id: string; + // (undocumented) + meta?: KibanaDatatableColumnMeta; + // (undocumented) + name: string; +} + +// Warning: (ae-missing-release-tag) "KibanaDatatableColumnMeta" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface KibanaDatatableColumnMeta { + // (undocumented) + aggConfigParams?: Record; + // (undocumented) + indexPatternId?: string; + // (undocumented) + type: string; +} + +// Warning: (ae-missing-release-tag) "KibanaDatatableRow" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface KibanaDatatableRow { + // (undocumented) + [key: string]: unknown; +} + +// Warning: (ae-missing-release-tag) "KnownTypeToString" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type KnownTypeToString = T extends string ? 'string' : T extends boolean ? 'boolean' : T extends number ? 'number' : T extends null ? 'null' : T extends { + type: string; +} ? T['type'] : never; + +// Warning: (ae-missing-release-tag) "Overflow" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export enum Overflow { + // (undocumented) + AUTO = "auto", + // (undocumented) + HIDDEN = "hidden", + // (undocumented) + SCROLL = "scroll", + // (undocumented) + VISIBLE = "visible" +} + +// Warning: (ae-missing-release-tag) "parse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function parse(expression: E, startRule: S): S extends 'expression' ? ExpressionAstExpression : ExpressionAstArgument; + +// Warning: (ae-missing-release-tag) "parseExpression" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export function parseExpression(expression: string): ExpressionAstExpression; + +// Warning: (ae-forgotten-export) The symbol "PluginInitializerContext" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "plugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function plugin(initializerContext: PluginInitializerContext): ExpressionsPublicPlugin; + +// Warning: (ae-missing-release-tag) "PointSeries" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type PointSeries = ExpressionValueBoxed<'pointseries', { + columns: PointSeriesColumns; + rows: PointSeriesRow[]; +}>; + +// Warning: (ae-missing-release-tag) "PointSeriesColumn" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface PointSeriesColumn { + // (undocumented) + expression: string; + // (undocumented) + role: 'measure' | 'dimension'; + // (undocumented) + type: 'number' | 'string'; +} + +// Warning: (ae-missing-release-tag) "PointSeriesColumnName" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type PointSeriesColumnName = 'x' | 'y' | 'color' | 'size' | 'text'; + +// Warning: (ae-missing-release-tag) "PointSeriesColumns" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type PointSeriesColumns = Record | {}; + +// Warning: (ae-missing-release-tag) "PointSeriesRow" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type PointSeriesRow = Record; + +// Warning: (ae-missing-release-tag) "Range" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface Range { + // (undocumented) + from: number; + // (undocumented) + to: number; + // Warning: (ae-forgotten-export) The symbol "name" needs to be exported by the entry point index.d.ts + // + // (undocumented) + type: typeof name_4; +} + +// Warning: (ae-missing-release-tag) "ReactExpressionRenderer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const ReactExpressionRenderer: ({ className, dataAttrs, padding, renderError, expression, onEvent, reload$, ...expressionLoaderOptions }: ReactExpressionRendererProps) => JSX.Element; + +// Warning: (ae-missing-release-tag) "ReactExpressionRendererProps" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ReactExpressionRendererProps extends IExpressionLoaderParams { + // (undocumented) + className?: string; + // (undocumented) + dataAttrs?: string[]; + // (undocumented) + expression: string | ExpressionAstExpression; + // (undocumented) + onEvent?: (event: ExpressionRendererEvent) => void; + // (undocumented) + padding?: 'xs' | 's' | 'm' | 'l' | 'xl'; + reload$?: Observable; + // (undocumented) + renderError?: (error?: string | null) => React.ReactElement | React.ReactElement[]; +} + +// Warning: (ae-missing-release-tag) "ReactExpressionRendererType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ReactExpressionRendererType = React.ComponentType; + +// Warning: (ae-missing-release-tag) "SerializedDatatable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface SerializedDatatable extends Datatable { + // (undocumented) + rows: string[][]; +} + +// Warning: (ae-missing-release-tag) "SerializedFieldFormat" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface SerializedFieldFormat> { + // (undocumented) + id?: string; + // (undocumented) + params?: TParams; +} + +// Warning: (ae-missing-release-tag) "Style" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type Style = ExpressionTypeStyle; + +// Warning: (ae-missing-release-tag) "TextAlignment" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export enum TextAlignment { + // (undocumented) + CENTER = "center", + // (undocumented) + JUSTIFY = "justify", + // (undocumented) + LEFT = "left", + // (undocumented) + RIGHT = "right" +} + +// Warning: (ae-missing-release-tag) "TextDecoration" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export enum TextDecoration { + // (undocumented) + NONE = "none", + // (undocumented) + UNDERLINE = "underline" +} + +// Warning: (ae-missing-release-tag) "TypesRegistry" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class TypesRegistry implements IRegistry { + constructor(executor: Executor); + // (undocumented) + get(id: string): ExpressionType | null; + // (undocumented) + register(typeDefinition: AnyExpressionTypeDefinition | (() => AnyExpressionTypeDefinition)): void; + // (undocumented) + toArray(): ExpressionType[]; + // (undocumented) + toJS(): Record; +} + +// Warning: (ae-missing-release-tag) "TypeString" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type TypeString = KnownTypeToString>; + +// Warning: (ae-missing-release-tag) "TypeToString" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type TypeToString = KnownTypeToString | UnmappedTypeStrings; + +// Warning: (ae-missing-release-tag) "UnmappedTypeStrings" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type UnmappedTypeStrings = 'date' | 'filter'; + + +// (No @packageDocumentation comment for this package) + +``` diff --git a/src/plugins/expressions/server/mocks.ts b/src/plugins/expressions/server/mocks.ts index 0512789d76ab0..0beb4750c0d10 100644 --- a/src/plugins/expressions/server/mocks.ts +++ b/src/plugins/expressions/server/mocks.ts @@ -46,11 +46,8 @@ const createStartContract = (): Start => { execute: jest.fn(), fork: jest.fn(), getFunction: jest.fn(), - getFunctions: jest.fn(), getRenderer: jest.fn(), - getRenderers: jest.fn(), getType: jest.fn(), - getTypes: jest.fn(), run: jest.fn(), }; diff --git a/src/plugins/expressions/server/server.api.md b/src/plugins/expressions/server/server.api.md new file mode 100644 index 0000000000000..6ac251ea005b4 --- /dev/null +++ b/src/plugins/expressions/server/server.api.md @@ -0,0 +1,968 @@ +## API Report File for "kibana" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +import { CoreSetup } from 'src/core/server'; +import { CoreStart } from 'src/core/server'; +import { Ensure } from '@kbn/utility-types'; +import { EventEmitter } from 'events'; +import { Observable } from 'rxjs'; +import { Plugin as Plugin_2 } from 'src/core/server'; +import { PluginInitializerContext } from 'src/core/server'; +import { UnwrapPromiseOrReturn } from '@kbn/utility-types'; + +// Warning: (ae-missing-release-tag) "AnyExpressionFunctionDefinition" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type AnyExpressionFunctionDefinition = ExpressionFunctionDefinition, any>; + +// Warning: (ae-missing-release-tag) "AnyExpressionTypeDefinition" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type AnyExpressionTypeDefinition = ExpressionTypeDefinition; + +// Warning: (ae-forgotten-export) The symbol "SingleArgumentType" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "MultipleArgumentType" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "UnresolvedSingleArgumentType" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "UnresolvedMultipleArgumentType" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "ArgumentType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type ArgumentType = SingleArgumentType | MultipleArgumentType | UnresolvedSingleArgumentType | UnresolvedMultipleArgumentType; + +// Warning: (ae-missing-release-tag) "buildExpression" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export function buildExpression(initialState?: ExpressionAstFunctionBuilder[] | ExpressionAstExpression | string): ExpressionAstExpressionBuilder; + +// Warning: (ae-forgotten-export) The symbol "InferFunctionDefinition" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "FunctionArgs" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "buildExpressionFunction" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export function buildExpressionFunction(fnName: InferFunctionDefinition['name'], +initialArgs: { + [K in keyof FunctionArgs]: FunctionArgs[K] | ExpressionAstExpressionBuilder | ExpressionAstExpressionBuilder[]; +}): ExpressionAstFunctionBuilder; + +// Warning: (ae-missing-release-tag) "Datatable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface Datatable { + // (undocumented) + columns: DatatableColumn[]; + // (undocumented) + rows: DatatableRow[]; + // Warning: (ae-forgotten-export) The symbol "name" needs to be exported by the entry point index.d.ts + // + // (undocumented) + type: typeof name; +} + +// Warning: (ae-missing-release-tag) "DatatableColumn" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface DatatableColumn { + // (undocumented) + id: string; + // Warning: (ae-forgotten-export) The symbol "DatatableColumnMeta" needs to be exported by the entry point index.d.ts + // + // (undocumented) + meta: DatatableColumnMeta; + // (undocumented) + name: string; +} + +// Warning: (ae-missing-release-tag) "DatatableColumnType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type DatatableColumnType = 'string' | 'number' | 'boolean' | 'date' | 'null'; + +// Warning: (ae-missing-release-tag) "DatatableRow" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type DatatableRow = Record; + +// Warning: (ae-forgotten-export) The symbol "Adapters" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "DefaultInspectorAdapters" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "Execution" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class Execution = Record, Input = unknown, Output = unknown, InspectorAdapters extends Adapters = ExtraContext['inspectorAdapters'] extends object ? ExtraContext['inspectorAdapters'] : DefaultInspectorAdapters> { + constructor(params: ExecutionParams); + cancel(): void; + // (undocumented) + cast(value: any, toTypeNames?: string[]): any; + readonly context: ExecutionContext & ExtraContext; + // Warning: (ae-forgotten-export) The symbol "ExecutionContract" needs to be exported by the entry point index.d.ts + readonly contract: ExecutionContract; + // (undocumented) + readonly expression: string; + input: Input; + // (undocumented) + get inspectorAdapters(): InspectorAdapters; + // Warning: (ae-forgotten-export) The symbol "ExpressionExecOptions" needs to be exported by the entry point index.d.ts + // + // (undocumented) + interpret(ast: ExpressionAstNode, input: T, options?: ExpressionExecOptions): Promise; + // (undocumented) + invokeChain(chainArr: ExpressionAstFunction[], input: unknown): Promise; + // (undocumented) + invokeFunction(fn: ExpressionFunction, input: unknown, args: Record): Promise; + // (undocumented) + readonly params: ExecutionParams; + // (undocumented) + resolveArgs(fnDef: ExpressionFunction, input: unknown, argAsts: any): Promise; + // (undocumented) + get result(): Promise; + start(input?: Input): void; + readonly state: ExecutionContainer; +} + +// Warning: (ae-forgotten-export) The symbol "StateContainer" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "ExecutionPureTransitions" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "ExecutionContainer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExecutionContainer = StateContainer, ExecutionPureTransitions>; + +// Warning: (ae-missing-release-tag) "ExecutionContext" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface ExecutionContext { + abortSignal: AbortSignal; + getInitialInput: () => Input; + // Warning: (ae-forgotten-export) The symbol "SavedObjectAttributes" needs to be exported by the entry point index.d.ts + // Warning: (ae-forgotten-export) The symbol "SavedObject" needs to be exported by the entry point index.d.ts + getSavedObject?: (type: string, id: string) => Promise>; + inspectorAdapters: InspectorAdapters; + // Warning: (ae-forgotten-export) The symbol "ExecutionContextSearch" needs to be exported by the entry point index.d.ts + search?: ExecutionContextSearch; + types: Record; + variables: Record; +} + +// Warning: (ae-missing-release-tag) "ExecutionParams" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ExecutionParams = Record> { + // (undocumented) + ast?: ExpressionAstExpression; + // (undocumented) + context?: ExtraContext; + debug?: boolean; + // (undocumented) + executor: Executor; + // (undocumented) + expression?: string; +} + +// Warning: (ae-missing-release-tag) "ExecutionState" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ExecutionState extends ExecutorState { + // (undocumented) + ast: ExpressionAstExpression; + error?: Error; + result?: Output; + state: 'not-started' | 'pending' | 'result' | 'error'; +} + +// Warning: (ae-missing-release-tag) "Executor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class Executor = Record> { + constructor(state?: ExecutorState); + // (undocumented) + get context(): Record; + // (undocumented) + createExecution = Record, Input = unknown, Output = unknown>(ast: string | ExpressionAstExpression, context?: ExtraContext, { debug }?: ExpressionExecOptions): Execution; + // (undocumented) + static createWithDefaults = Record>(state?: ExecutorState): Executor; + // (undocumented) + extendContext(extraContext: Record): void; + // (undocumented) + fork(): Executor; + // @deprecated (undocumented) + readonly functions: FunctionsRegistry; + // (undocumented) + getFunction(name: string): ExpressionFunction | undefined; + // (undocumented) + getFunctions(): Record; + // (undocumented) + getType(name: string): ExpressionType | undefined; + // (undocumented) + getTypes(): Record; + // (undocumented) + registerFunction(functionDefinition: AnyExpressionFunctionDefinition | (() => AnyExpressionFunctionDefinition)): void; + // (undocumented) + registerType(typeDefinition: AnyExpressionTypeDefinition | (() => AnyExpressionTypeDefinition)): void; + run = Record>(ast: string | ExpressionAstExpression, input: Input, context?: ExtraContext): Promise; + // (undocumented) + readonly state: ExecutorContainer; + // @deprecated (undocumented) + readonly types: TypesRegistry; +} + +// Warning: (ae-forgotten-export) The symbol "ExecutorPureTransitions" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "ExecutorPureSelectors" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "ExecutorContainer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExecutorContainer = Record> = StateContainer, ExecutorPureTransitions, ExecutorPureSelectors>; + +// Warning: (ae-missing-release-tag) "ExecutorState" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ExecutorState = Record> { + // (undocumented) + context: Context; + // (undocumented) + functions: Record; + // (undocumented) + types: Record; +} + +// Warning: (ae-missing-release-tag) "ExpressionAstArgument" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionAstArgument = string | boolean | number | ExpressionAstExpression; + +// Warning: (ae-missing-release-tag) "ExpressionAstExpression" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ExpressionAstExpression { + // (undocumented) + chain: ExpressionAstFunction[]; + // (undocumented) + type: 'expression'; +} + +// Warning: (ae-missing-release-tag) "ExpressionAstExpressionBuilder" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ExpressionAstExpressionBuilder { + findFunction: (fnName: InferFunctionDefinition['name']) => Array> | []; + functions: ExpressionAstFunctionBuilder[]; + toAst: () => ExpressionAstExpression; + toString: () => string; + type: 'expression_builder'; +} + +// Warning: (ae-missing-release-tag) "ExpressionAstFunction" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ExpressionAstFunction { + // (undocumented) + arguments: Record; + // Warning: (ae-forgotten-export) The symbol "ExpressionAstFunctionDebug" needs to be exported by the entry point index.d.ts + debug?: ExpressionAstFunctionDebug; + // (undocumented) + function: string; + // (undocumented) + type: 'function'; +} + +// Warning: (ae-missing-release-tag) "ExpressionAstFunctionBuilder" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ExpressionAstFunctionBuilder { + // Warning: (ae-forgotten-export) The symbol "FunctionArgName" needs to be exported by the entry point index.d.ts + addArgument: >(name: A, value: FunctionArgs[A] | ExpressionAstExpressionBuilder) => this; + // Warning: (ae-forgotten-export) The symbol "FunctionBuilderArguments" needs to be exported by the entry point index.d.ts + arguments: FunctionBuilderArguments; + getArgument: >(name: A) => Array[A] | ExpressionAstExpressionBuilder> | undefined; + name: InferFunctionDefinition['name']; + // Warning: (ae-forgotten-export) The symbol "OptionalKeys" needs to be exported by the entry point index.d.ts + removeArgument: >>(name: A) => this; + replaceArgument: >(name: A, value: Array[A] | ExpressionAstExpressionBuilder>) => this; + toAst: () => ExpressionAstFunction; + toString: () => string; + type: 'expression_function_builder'; +} + +// Warning: (ae-missing-release-tag) "ExpressionAstNode" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionAstNode = ExpressionAstExpression | ExpressionAstFunction | ExpressionAstArgument; + +// Warning: (ae-missing-release-tag) "ExpressionFunction" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class ExpressionFunction { + constructor(functionDefinition: AnyExpressionFunctionDefinition); + // (undocumented) + accepts: (type: string) => boolean; + aliases: string[]; + args: Record; + fn: (input: ExpressionValue, params: Record, handlers: object) => ExpressionValue; + help: string; + inputTypes: string[] | undefined; + name: string; + type: string; +} + +// Warning: (ae-missing-release-tag) "ExpressionFunctionDefinition" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface ExpressionFunctionDefinition, Output, Context extends ExecutionContext = ExecutionContext> { + aliases?: string[]; + args: { + [key in keyof Arguments]: ArgumentType; + }; + // @deprecated (undocumented) + context?: { + types: AnyExpressionFunctionDefinition['inputTypes']; + }; + fn(input: Input, args: Arguments, context: Context): Output; + help: string; + inputTypes?: Array>; + name: Name; + type?: TypeToString>; +} + +// @public +export interface ExpressionFunctionDefinitions { + // Warning: (ae-forgotten-export) The symbol "ExpressionFunctionClog" needs to be exported by the entry point index.d.ts + // + // (undocumented) + clog: ExpressionFunctionClog; + // Warning: (ae-forgotten-export) The symbol "ExpressionFunctionFont" needs to be exported by the entry point index.d.ts + // + // (undocumented) + font: ExpressionFunctionFont; + // (undocumented) + kibana: ExpressionFunctionKibana; + // Warning: (ae-forgotten-export) The symbol "ExpressionFunctionKibanaContext" needs to be exported by the entry point index.d.ts + // + // (undocumented) + kibana_context: ExpressionFunctionKibanaContext; + // Warning: (ae-forgotten-export) The symbol "ExpressionFunctionTheme" needs to be exported by the entry point index.d.ts + // + // (undocumented) + theme: ExpressionFunctionTheme; + // Warning: (ae-forgotten-export) The symbol "ExpressionFunctionVar" needs to be exported by the entry point index.d.ts + // + // (undocumented) + var: ExpressionFunctionVar; + // Warning: (ae-forgotten-export) The symbol "ExpressionFunctionVarSet" needs to be exported by the entry point index.d.ts + // + // (undocumented) + var_set: ExpressionFunctionVarSet; +} + +// Warning: (ae-missing-release-tag) "ExpressionFunctionKibana" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionFunctionKibana = ExpressionFunctionDefinition<'kibana', ExpressionValueSearchContext | null, object, ExpressionValueSearchContext>; + +// Warning: (ae-missing-release-tag) "ExpressionFunctionParameter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class ExpressionFunctionParameter { + constructor(name: string, arg: ArgumentType); + // (undocumented) + accepts(type: string): boolean; + // (undocumented) + aliases: string[]; + // (undocumented) + default: any; + // (undocumented) + help: string; + // (undocumented) + multi: boolean; + // (undocumented) + name: string; + // (undocumented) + options: any[]; + // (undocumented) + required: boolean; + // (undocumented) + resolve: boolean; + // (undocumented) + types: string[]; +} + +// Warning: (ae-missing-release-tag) "ExpressionImage" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ExpressionImage { + // (undocumented) + dataurl: string; + // (undocumented) + mode: string; + // (undocumented) + type: 'image'; +} + +// Warning: (ae-missing-release-tag) "ExpressionRenderDefinition" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface ExpressionRenderDefinition { + displayName: string; + help?: string; + name: string; + render: (domNode: HTMLElement, config: Config, handlers: IInterpreterRenderHandlers) => void | Promise; + reuseDomNode: boolean; + validate?: () => undefined | Error; +} + +// Warning: (ae-missing-release-tag) "ExpressionRenderer" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class ExpressionRenderer { + constructor(config: ExpressionRenderDefinition); + // (undocumented) + readonly displayName: string; + // (undocumented) + readonly help: string; + // (undocumented) + readonly name: string; + // (undocumented) + readonly render: ExpressionRenderDefinition['render']; + // (undocumented) + readonly reuseDomNode: boolean; + // (undocumented) + readonly validate: () => void | Error; +} + +// Warning: (ae-missing-release-tag) "ExpressionRendererRegistry" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class ExpressionRendererRegistry implements IRegistry { + // (undocumented) + get(id: string): ExpressionRenderer | null; + // Warning: (ae-forgotten-export) The symbol "AnyExpressionRenderDefinition" needs to be exported by the entry point index.d.ts + // + // (undocumented) + register(definition: AnyExpressionRenderDefinition | (() => AnyExpressionRenderDefinition)): void; + // (undocumented) + toArray(): ExpressionRenderer[]; + // (undocumented) + toJS(): Record; +} + +// Warning: (ae-missing-release-tag) "ExpressionsServerPlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +class ExpressionsServerPlugin implements Plugin_2 { + constructor(initializerContext: PluginInitializerContext); + // Warning: (ae-forgotten-export) The symbol "ExpressionsService" needs to be exported by the entry point index.d.ts + // + // (undocumented) + readonly expressions: ExpressionsService; + // (undocumented) + setup(core: CoreSetup): ExpressionsServerSetup; + // (undocumented) + start(core: CoreStart): ExpressionsServerStart; + // (undocumented) + stop(): void; +} + +export { ExpressionsServerPlugin } + +export { ExpressionsServerPlugin as Plugin } + +// Warning: (ae-forgotten-export) The symbol "ExpressionsServiceSetup" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "ExpressionsServerSetup" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionsServerSetup = ExpressionsServiceSetup; + +// Warning: (ae-forgotten-export) The symbol "ExpressionsServiceStart" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "ExpressionsServerStart" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionsServerStart = ExpressionsServiceStart; + +// Warning: (ae-missing-release-tag) "ExpressionType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class ExpressionType { + constructor(definition: AnyExpressionTypeDefinition); + // (undocumented) + castsFrom: (value: ExpressionValue) => boolean; + // (undocumented) + castsTo: (value: ExpressionValue) => boolean; + // (undocumented) + create: unknown; + // (undocumented) + deserialize?: (serialized: any) => ExpressionValue; + // (undocumented) + from: (value: ExpressionValue, types: Record) => any; + // (undocumented) + getFromFn: (typeName: string) => undefined | ExpressionValueConverter; + // (undocumented) + getToFn: (typeName: string) => undefined | ExpressionValueConverter; + help: string; + // (undocumented) + name: string; + serialize?: (value: ExpressionValue) => any; + // (undocumented) + to: (value: ExpressionValue, toTypeName: string, types: Record) => any; + validate: (type: any) => void | Error; +} + +// Warning: (ae-missing-release-tag) "ExpressionTypeDefinition" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface ExpressionTypeDefinition { + // (undocumented) + deserialize?: (type: SerializedType) => Value; + // (undocumented) + from?: { + [type: string]: ExpressionValueConverter; + }; + // (undocumented) + help?: string; + // (undocumented) + name: Name; + // (undocumented) + serialize?: (type: Value) => SerializedType; + // (undocumented) + to?: { + [type: string]: ExpressionValueConverter; + }; + // (undocumented) + validate?: (type: any) => void | Error; +} + +// Warning: (ae-missing-release-tag) "ExpressionTypeStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface ExpressionTypeStyle { + // (undocumented) + css: string; + // Warning: (ae-forgotten-export) The symbol "CSSStyle" needs to be exported by the entry point index.d.ts + // + // (undocumented) + spec: CSSStyle; + // (undocumented) + type: 'style'; +} + +// Warning: (ae-missing-release-tag) "ExpressionValue" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionValue = ExpressionValueUnboxed | ExpressionValueBoxed; + +// Warning: (ae-missing-release-tag) "ExpressionValueBoxed" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionValueBoxed = { + type: Type; +} & Value; + +// Warning: (ae-missing-release-tag) "ExpressionValueConverter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionValueConverter = (input: I, availableTypes: Record) => O; + +// Warning: (ae-missing-release-tag) "ExpressionValueError" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionValueError = ExpressionValueBoxed<'error', { + error: { + message: string; + type?: string; + name?: string; + stack?: string; + original?: Error; + }; + info?: unknown; +}>; + +// Warning: (ae-missing-release-tag) "ExpressionValueFilter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type ExpressionValueFilter = ExpressionValueBoxed<'filter', { + filterType?: string; + value?: string; + column?: string; + and: ExpressionValueFilter[]; + to?: string; + from?: string; + query?: string | null; +}>; + +// Warning: (ae-missing-release-tag) "ExpressionValueNum" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionValueNum = ExpressionValueBoxed<'num', { + value: number; +}>; + +// Warning: (ae-forgotten-export) The symbol "name" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "ExpressionValueRender" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +type ExpressionValueRender = ExpressionValueBoxed; + +export { ExpressionValueRender } + +export { ExpressionValueRender as Render } + +// Warning: (ae-missing-release-tag) "ExpressionValueSearchContext" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionValueSearchContext = ExpressionValueBoxed<'kibana_context', ExecutionContextSearch>; + +// Warning: (ae-missing-release-tag) "ExpressionValueUnboxed" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type ExpressionValueUnboxed = any; + +// Warning: (ae-missing-release-tag) "Font" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface Font { + // (undocumented) + label: FontLabel; + // (undocumented) + value: FontValue; +} + +// Warning: (ae-forgotten-export) The symbol "fonts" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "FontLabel" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type FontLabel = typeof fonts[number]['label']; + +// Warning: (ae-missing-release-tag) "FontStyle" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export enum FontStyle { + // (undocumented) + ITALIC = "italic", + // (undocumented) + NORMAL = "normal" +} + +// Warning: (ae-missing-release-tag) "FontValue" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type FontValue = typeof fonts[number]['value']; + +// Warning: (ae-missing-release-tag) "FontWeight" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export enum FontWeight { + // (undocumented) + BOLD = "bold", + // (undocumented) + BOLDER = "bolder", + // (undocumented) + EIGHT = "800", + // (undocumented) + FIVE = "500", + // (undocumented) + FOUR = "400", + // (undocumented) + LIGHTER = "lighter", + // (undocumented) + NINE = "900", + // (undocumented) + NORMAL = "normal", + // (undocumented) + ONE = "100", + // (undocumented) + SEVEN = "700", + // (undocumented) + SIX = "600", + // (undocumented) + THREE = "300", + // (undocumented) + TWO = "200" +} + +// Warning: (ae-missing-release-tag) "format" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function format(ast: T, type: T extends ExpressionAstExpression ? 'expression' : 'argument'): string; + +// Warning: (ae-missing-release-tag) "formatExpression" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export function formatExpression(ast: ExpressionAstExpression): string; + +// Warning: (ae-missing-release-tag) "FunctionsRegistry" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class FunctionsRegistry implements IRegistry { + constructor(executor: Executor); + // (undocumented) + get(id: string): ExpressionFunction | null; + // (undocumented) + register(functionDefinition: AnyExpressionFunctionDefinition | (() => AnyExpressionFunctionDefinition)): void; + // (undocumented) + toArray(): ExpressionFunction[]; + // (undocumented) + toJS(): Record; +} + +// Warning: (ae-missing-release-tag) "IInterpreterRenderHandlers" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface IInterpreterRenderHandlers { + done: () => void; + // (undocumented) + event: (event: any) => void; + // (undocumented) + onDestroy: (fn: () => void) => void; + // (undocumented) + reload: () => void; + // (undocumented) + update: (params: any) => void; +} + +// Warning: (ae-missing-release-tag) "InterpreterErrorType" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public @deprecated (undocumented) +export type InterpreterErrorType = ExpressionValueError; + +// Warning: (ae-missing-release-tag) "IRegistry" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface IRegistry { + // (undocumented) + get(id: string): T | null; + // (undocumented) + toArray(): T[]; + // (undocumented) + toJS(): Record; +} + +// Warning: (ae-missing-release-tag) "isExpressionAstBuilder" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export function isExpressionAstBuilder(val: any): val is ExpressionAstExpressionBuilder; + +// Warning: (ae-missing-release-tag) "KIBANA_CONTEXT_NAME" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type KIBANA_CONTEXT_NAME = 'kibana_context'; + +// Warning: (ae-missing-release-tag) "KibanaContext" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type KibanaContext = ExpressionValueSearchContext; + +// Warning: (ae-missing-release-tag) "KibanaDatatable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface KibanaDatatable { + // (undocumented) + columns: KibanaDatatableColumn[]; + // (undocumented) + rows: KibanaDatatableRow[]; + // Warning: (ae-forgotten-export) The symbol "name" needs to be exported by the entry point index.d.ts + // + // (undocumented) + type: typeof name_3; +} + +// Warning: (ae-missing-release-tag) "KibanaDatatableColumn" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface KibanaDatatableColumn { + // (undocumented) + formatHint?: SerializedFieldFormat; + // (undocumented) + id: string; + // (undocumented) + meta?: KibanaDatatableColumnMeta; + // (undocumented) + name: string; +} + +// Warning: (ae-missing-release-tag) "KibanaDatatableColumnMeta" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface KibanaDatatableColumnMeta { + // (undocumented) + aggConfigParams?: Record; + // (undocumented) + indexPatternId?: string; + // (undocumented) + type: string; +} + +// Warning: (ae-missing-release-tag) "KibanaDatatableRow" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface KibanaDatatableRow { + // (undocumented) + [key: string]: unknown; +} + +// Warning: (ae-missing-release-tag) "KnownTypeToString" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type KnownTypeToString = T extends string ? 'string' : T extends boolean ? 'boolean' : T extends number ? 'number' : T extends null ? 'null' : T extends { + type: string; +} ? T['type'] : never; + +// Warning: (ae-missing-release-tag) "Overflow" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export enum Overflow { + // (undocumented) + AUTO = "auto", + // (undocumented) + HIDDEN = "hidden", + // (undocumented) + SCROLL = "scroll", + // (undocumented) + VISIBLE = "visible" +} + +// Warning: (ae-missing-release-tag) "parse" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function parse(expression: E, startRule: S): S extends 'expression' ? ExpressionAstExpression : ExpressionAstArgument; + +// Warning: (ae-missing-release-tag) "parseExpression" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export function parseExpression(expression: string): ExpressionAstExpression; + +// Warning: (ae-missing-release-tag) "plugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function plugin(initializerContext: PluginInitializerContext): ExpressionsServerPlugin; + +// Warning: (ae-missing-release-tag) "PointSeries" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type PointSeries = ExpressionValueBoxed<'pointseries', { + columns: PointSeriesColumns; + rows: PointSeriesRow[]; +}>; + +// Warning: (ae-missing-release-tag) "PointSeriesColumn" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface PointSeriesColumn { + // (undocumented) + expression: string; + // (undocumented) + role: 'measure' | 'dimension'; + // (undocumented) + type: 'number' | 'string'; +} + +// Warning: (ae-missing-release-tag) "PointSeriesColumnName" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type PointSeriesColumnName = 'x' | 'y' | 'color' | 'size' | 'text'; + +// Warning: (ae-missing-release-tag) "PointSeriesColumns" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type PointSeriesColumns = Record | {}; + +// Warning: (ae-missing-release-tag) "PointSeriesRow" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type PointSeriesRow = Record; + +// Warning: (ae-missing-release-tag) "Range" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface Range { + // (undocumented) + from: number; + // (undocumented) + to: number; + // Warning: (ae-forgotten-export) The symbol "name" needs to be exported by the entry point index.d.ts + // + // (undocumented) + type: typeof name_4; +} + +// Warning: (ae-missing-release-tag) "SerializedDatatable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface SerializedDatatable extends Datatable { + // (undocumented) + rows: string[][]; +} + +// Warning: (ae-missing-release-tag) "SerializedFieldFormat" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export interface SerializedFieldFormat> { + // (undocumented) + id?: string; + // (undocumented) + params?: TParams; +} + +// Warning: (ae-missing-release-tag) "Style" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type Style = ExpressionTypeStyle; + +// Warning: (ae-missing-release-tag) "TextAlignment" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export enum TextAlignment { + // (undocumented) + CENTER = "center", + // (undocumented) + JUSTIFY = "justify", + // (undocumented) + LEFT = "left", + // (undocumented) + RIGHT = "right" +} + +// Warning: (ae-missing-release-tag) "TextDecoration" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export enum TextDecoration { + // (undocumented) + NONE = "none", + // (undocumented) + UNDERLINE = "underline" +} + +// Warning: (ae-missing-release-tag) "TypesRegistry" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class TypesRegistry implements IRegistry { + constructor(executor: Executor); + // (undocumented) + get(id: string): ExpressionType | null; + // (undocumented) + register(typeDefinition: AnyExpressionTypeDefinition | (() => AnyExpressionTypeDefinition)): void; + // (undocumented) + toArray(): ExpressionType[]; + // (undocumented) + toJS(): Record; +} + +// Warning: (ae-missing-release-tag) "TypeString" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type TypeString = KnownTypeToString>; + +// Warning: (ae-missing-release-tag) "TypeToString" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type TypeToString = KnownTypeToString | UnmappedTypeStrings; + +// Warning: (ae-missing-release-tag) "UnmappedTypeStrings" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public +export type UnmappedTypeStrings = 'date' | 'filter'; + + +// (No @packageDocumentation comment for this package) + +``` diff --git a/src/plugins/home/public/application/components/sample_data/index.tsx b/src/plugins/home/public/application/components/sample_data/index.tsx index 2a51b48b08469..5f15994acc1cb 100644 --- a/src/plugins/home/public/application/components/sample_data/index.tsx +++ b/src/plugins/home/public/application/components/sample_data/index.tsx @@ -30,8 +30,8 @@ import { EuiButton, EuiButtonEmpty, } from '@elastic/eui'; - import { FormattedMessage } from '@kbn/i18n/react'; +import { getServices } from '../../kibana_services'; interface Props { urlBasePath: string; @@ -40,22 +40,29 @@ interface Props { } export function SampleDataCard({ urlBasePath, onDecline, onConfirm }: Props) { + const IS_DARK_THEME = getServices().uiSettings.get('theme:darkMode'); + const cardGraphicFile = !IS_DARK_THEME + ? 'illustration_integrations_lightmode.png' + : 'illustration_integrations_darkmode.png'; + const cardGraphicURL = `${urlBasePath}/plugins/home/assets/common/${cardGraphicFile}`; + return ( } + title={ + + } description={ } footer={

`; @@ -48,28 +58,38 @@ exports[`Storyshots arguments/AxisConfig/components simple template 1`] = ` } >
- + className="euiSwitch__body" + > + + + + +
`; diff --git a/x-pack/plugins/canvas/i18n/templates/template_strings.test.ts b/x-pack/plugins/canvas/i18n/templates/template_strings.test.ts index 4185ad00e7ed7..f27b3554cacd6 100644 --- a/x-pack/plugins/canvas/i18n/templates/template_strings.test.ts +++ b/x-pack/plugins/canvas/i18n/templates/template_strings.test.ts @@ -5,13 +5,13 @@ */ import { getTemplateStrings } from './template_strings'; -import { templates } from '../../server/templates'; // eslint-disable-line +import { loadTemplates } from '../../server/templates'; // eslint-disable-line import { TagStrings } from '../tags'; describe('TemplateStrings', () => { const templateStrings = getTemplateStrings(); - const templateNames = templates.map((template) => template.name); + const templateNames = loadTemplates().map((template) => template.name); const stringKeys = Object.keys(templateStrings); test('All template names should exist in the strings definition', () => { @@ -39,7 +39,7 @@ describe('TemplateStrings', () => { test('All templates should have tags that are defined', () => { const tagNames = Object.keys(TagStrings); - templates.forEach((template) => { + loadTemplates().forEach((template) => { template.tags.forEach((tagName: string) => expect(tagNames).toContain(tagName)); }); }); diff --git a/x-pack/plugins/canvas/public/expression_types/arg_types/container_style/__stories__/__snapshots__/simple_template.stories.storyshot b/x-pack/plugins/canvas/public/expression_types/arg_types/container_style/__stories__/__snapshots__/simple_template.stories.storyshot index 401e7bf1e937d..495bf5262476c 100644 --- a/x-pack/plugins/canvas/public/expression_types/arg_types/container_style/__stories__/__snapshots__/simple_template.stories.storyshot +++ b/x-pack/plugins/canvas/public/expression_types/arg_types/container_style/__stories__/__snapshots__/simple_template.stories.storyshot @@ -13,50 +13,60 @@ exports[`Storyshots arguments/ContainerStyle simple 1`] = `
- + /> +
+ +
@@ -76,50 +86,60 @@ exports[`Storyshots arguments/ContainerStyle/components simple template 1`] = `
- + /> +
+ +
diff --git a/x-pack/plugins/canvas/public/expression_types/arg_types/series_style/__stories__/__snapshots__/simple_template.stories.storyshot b/x-pack/plugins/canvas/public/expression_types/arg_types/series_style/__stories__/__snapshots__/simple_template.stories.storyshot index f8583d7cd0dc0..b242d90cd7361 100644 --- a/x-pack/plugins/canvas/public/expression_types/arg_types/series_style/__stories__/__snapshots__/simple_template.stories.storyshot +++ b/x-pack/plugins/canvas/public/expression_types/arg_types/series_style/__stories__/__snapshots__/simple_template.stories.storyshot @@ -11,31 +11,41 @@ exports[`Storyshots arguments/SeriesStyle simple 1`] = ` } >
- Color +
+ Color +
-
-
- + +
@@ -53,31 +63,41 @@ exports[`Storyshots arguments/SeriesStyle/components simple: defaults 1`] = ` } >
- Color +
+ Color +
-
-
- + +
@@ -95,31 +115,41 @@ exports[`Storyshots arguments/SeriesStyle/components simple: no labels 1`] = ` } >
- Color +
+ Color +
-
-
- + +
@@ -137,51 +167,61 @@ exports[`Storyshots arguments/SeriesStyle/components simple: no series 1`] = ` } >
- Color +
+ Color +
-
-
- + +
-
-
- -
- + +
+ +
@@ -198,31 +238,41 @@ exports[`Storyshots arguments/SeriesStyle/components simple: with series 1`] = ` } >
- Color +
+ Color +
-
-
- + +
diff --git a/x-pack/plugins/canvas/server/collectors/collector.ts b/x-pack/plugins/canvas/server/collectors/collector.ts index eb650ca5ad152..39a8262a5deec 100644 --- a/x-pack/plugins/canvas/server/collectors/collector.ts +++ b/x-pack/plugins/canvas/server/collectors/collector.ts @@ -5,11 +5,16 @@ */ import { UsageCollectionSetup } from 'src/plugins/usage_collection/server'; -import { LegacyAPICaller } from 'kibana/server'; import { TelemetryCollector } from '../../types'; -import { workpadCollector } from './workpad_collector'; -import { customElementCollector } from './custom_element_collector'; +import { workpadCollector, workpadSchema, WorkpadTelemetry } from './workpad_collector'; +import { + customElementCollector, + CustomElementTelemetry, + customElementSchema, +} from './custom_element_collector'; + +type CanvasUsage = WorkpadTelemetry & CustomElementTelemetry; const collectors: TelemetryCollector[] = [workpadCollector, customElementCollector]; @@ -29,18 +34,19 @@ export function registerCanvasUsageCollector( return; } - const canvasCollector = usageCollection.makeUsageCollector({ + const canvasCollector = usageCollection.makeUsageCollector({ type: 'canvas', isReady: () => true, - fetch: async (callCluster: LegacyAPICaller) => { + fetch: async (callCluster) => { const collectorResults = await Promise.all( collectors.map((collector) => collector(kibanaIndex, callCluster)) ); return collectorResults.reduce((reduction, usage) => { return { ...reduction, ...usage }; - }, {}); + }, {}) as CanvasUsage; // We need the casting because `TelemetryCollector` claims it returns `Record` }, + schema: { ...workpadSchema, ...customElementSchema }, }); usageCollection.registerCollector(canvasCollector); diff --git a/x-pack/plugins/canvas/server/collectors/custom_element_collector.ts b/x-pack/plugins/canvas/server/collectors/custom_element_collector.ts index 7b39e8b83b045..d3ed1e17785ee 100644 --- a/x-pack/plugins/canvas/server/collectors/custom_element_collector.ts +++ b/x-pack/plugins/canvas/server/collectors/custom_element_collector.ts @@ -6,6 +6,7 @@ import { SearchParams } from 'elasticsearch'; import { get } from 'lodash'; +import { MakeSchemaFrom } from 'src/plugins/usage_collection/server'; import { collectFns } from './collector_helpers'; import { TelemetryCollector, @@ -19,7 +20,7 @@ interface CustomElementSearch { [CUSTOM_ELEMENT_TYPE]: TelemetryCustomElementDocument; } -interface CustomElementTelemetry { +export interface CustomElementTelemetry { custom_elements?: { count: number; elements: { @@ -31,6 +32,18 @@ interface CustomElementTelemetry { }; } +export const customElementSchema: MakeSchemaFrom = { + custom_elements: { + count: { type: 'long' }, + elements: { + min: { type: 'long' }, + max: { type: 'long' }, + avg: { type: 'float' }, + }, + functions_in_use: { type: 'array', items: { type: 'keyword' } }, + }, +}; + function isCustomElement(maybeCustomElement: any): maybeCustomElement is TelemetryCustomElement { return ( maybeCustomElement !== null && diff --git a/x-pack/plugins/canvas/server/collectors/workpad_collector.ts b/x-pack/plugins/canvas/server/collectors/workpad_collector.ts index 9fa39c580962d..0479411528802 100644 --- a/x-pack/plugins/canvas/server/collectors/workpad_collector.ts +++ b/x-pack/plugins/canvas/server/collectors/workpad_collector.ts @@ -6,6 +6,7 @@ import { SearchParams } from 'elasticsearch'; import { sum as arraySum, min as arrayMin, max as arrayMax, get } from 'lodash'; +import { MakeSchemaFrom } from 'src/plugins/usage_collection/server'; import { CANVAS_TYPE } from '../../common/lib/constants'; import { collectFns } from './collector_helpers'; import { TelemetryCollector, CanvasWorkpad } from '../../types'; @@ -15,7 +16,7 @@ interface WorkpadSearch { [CANVAS_TYPE]: CanvasWorkpad; } -interface WorkpadTelemetry { +export interface WorkpadTelemetry { workpads?: { total: number; }; @@ -54,6 +55,43 @@ interface WorkpadTelemetry { }; } +export const workpadSchema: MakeSchemaFrom = { + workpads: { total: { type: 'long' } }, + pages: { + total: { type: 'long' }, + per_workpad: { + avg: { type: 'float' }, + min: { type: 'long' }, + max: { type: 'long' }, + }, + }, + elements: { + total: { type: 'long' }, + per_page: { + avg: { type: 'float' }, + min: { type: 'long' }, + max: { type: 'long' }, + }, + }, + functions: { + total: { type: 'long' }, + in_use: { type: 'array', items: { type: 'keyword' } }, + per_element: { + avg: { type: 'float' }, + min: { type: 'long' }, + max: { type: 'long' }, + }, + }, + variables: { + total: { type: 'long' }, + per_workpad: { + avg: { type: 'float' }, + min: { type: 'long' }, + max: { type: 'long' }, + }, + }, +}; + /** Gather statistic about the given workpads @param workpadDocs a collection of workpad documents diff --git a/x-pack/plugins/canvas/server/templates/index.ts b/x-pack/plugins/canvas/server/templates/index.ts index c2723fbc87e17..800ac10fb9cd4 100644 --- a/x-pack/plugins/canvas/server/templates/index.ts +++ b/x-pack/plugins/canvas/server/templates/index.ts @@ -5,15 +5,24 @@ */ import { SavedObjectsRepository } from 'src/core/server'; -import { pitch } from './pitch_presentation'; -import { status } from './status_report'; -import { summary } from './summary_report'; -import { dark } from './theme_dark'; -import { light } from './theme_light'; import { TEMPLATE_TYPE } from '../../common/lib/constants'; -export const templates = [status, summary, dark, light, pitch]; +// only load templates when requested to reduce require() cost on startup +export function loadTemplates() { + return [ + // eslint-disable-next-line @typescript-eslint/no-var-requires + require('./pitch_presentation').pitch, + // eslint-disable-next-line @typescript-eslint/no-var-requires + require('./status_report').status, + // eslint-disable-next-line @typescript-eslint/no-var-requires + require('./summary_report').summary, + // eslint-disable-next-line @typescript-eslint/no-var-requires + require('./theme_dark').dark, + // eslint-disable-next-line @typescript-eslint/no-var-requires + require('./theme_light').light, + ]; +} export async function initializeTemplates( client: Pick @@ -26,7 +35,7 @@ export async function initializeTemplates( // So, rather than doing a bulk create of templates, we're going to fire off individual // creates and catch and throw-away any errors that happen. // Once packages are ready, we should probably move that pitch that is so large to a package - for (const template of templates) { + for (const template of loadTemplates()) { client.create(TEMPLATE_TYPE, template, { id: template.id }).catch((err) => undefined); } } diff --git a/x-pack/plugins/canvas/storybook/addon/src/register.tsx b/x-pack/plugins/canvas/storybook/addon/src/register.tsx index 4934438789b94..7fcb8832b1ed8 100644 --- a/x-pack/plugins/canvas/storybook/addon/src/register.tsx +++ b/x-pack/plugins/canvas/storybook/addon/src/register.tsx @@ -24,7 +24,7 @@ addons.register(ADDON_ID, (api) => { type: types.PANEL, render: ({ active, key }) => { return ( - + ); diff --git a/x-pack/plugins/canvas/storybook/decorators/index.ts b/x-pack/plugins/canvas/storybook/decorators/index.ts index 8cd716cf7e3f1..c518e7e0daaa3 100644 --- a/x-pack/plugins/canvas/storybook/decorators/index.ts +++ b/x-pack/plugins/canvas/storybook/decorators/index.ts @@ -5,14 +5,6 @@ */ import { addDecorator } from '@storybook/react'; -// @ts-expect-error -import { withInfo } from '@storybook/addon-info'; -import { Provider as ReduxProvider } from 'react-redux'; - -import { ServicesProvider } from '../../public/services'; -import { RouterContext } from '../../public/components/router'; -import { KibanaContextProvider } from '../../../../../src/plugins/kibana_react/public'; - import { routerContextDecorator } from './router_decorator'; import { kibanaContextDecorator } from './kibana_decorator'; import { servicesContextDecorator } from './services_decorator'; @@ -23,22 +15,6 @@ export const addDecorators = () => { if (process.env.NODE_ENV === 'test') { // eslint-disable-next-line @typescript-eslint/no-var-requires require('babel-plugin-require-context-hook/register')(); - } else { - // Customize the info for each story. - addDecorator( - withInfo({ - inline: true, - styles: { - infoBody: { - margin: 20, - }, - infoStory: { - margin: '40px 60px', - }, - }, - propTablesExclude: [ReduxProvider, ServicesProvider, RouterContext, KibanaContextProvider], - }) - ); } addDecorator(kibanaContextDecorator); diff --git a/x-pack/plugins/canvas/storybook/main.ts b/x-pack/plugins/canvas/storybook/main.ts index ad6d10f9bc75f..29952d22e44df 100644 --- a/x-pack/plugins/canvas/storybook/main.ts +++ b/x-pack/plugins/canvas/storybook/main.ts @@ -4,11 +4,20 @@ * you may not use this file except in compliance with the Elastic License. */ +/* eslint-disable @typescript-eslint/no-var-requires */ +const { existsSync } = require('fs'); +const { join } = require('path'); + +// Check for DLL +if (!existsSync(join(__dirname, '../../../../built_assets/canvas_storybook_dll/manifest.json'))) { + // eslint-disable-next-line no-console + console.error( + 'No DLL found. Run `node scripts/storybook --dll` from the Canvas plugin directory.' + ); + process.exit(1); +} + module.exports = { stories: ['../**/*.stories.tsx'], - addons: [ - '@storybook/addon-actions', - '@storybook/addon-knobs', - './storybook/addon/target/register', - ], + addons: ['@storybook/addon-actions', '@storybook/addon-knobs', './addon/target/register'], }; diff --git a/x-pack/plugins/canvas/storybook/storyshots.test.tsx b/x-pack/plugins/canvas/storybook/storyshots.test.tsx index 85ec7baf18c62..44420159c328a 100644 --- a/x-pack/plugins/canvas/storybook/storyshots.test.tsx +++ b/x-pack/plugins/canvas/storybook/storyshots.test.tsx @@ -11,7 +11,7 @@ import moment from 'moment'; import 'moment-timezone'; import ReactDOM from 'react-dom'; -import initStoryshots, { multiSnapshotWithOptions } from '@storybook/addon-storyshots'; +// import initStoryshots, { multiSnapshotWithOptions } from '@storybook/addon-storyshots'; // @ts-expect-error untyped library import styleSheetSerializer from 'jest-styled-components/src/styleSheetSerializer'; import { addSerializer } from 'jest-specific-snapshot'; @@ -104,9 +104,12 @@ if (!fs.existsSync(cssDir)) { addSerializer(styleSheetSerializer); // Initialize Storyshots and build the Jest Snapshots -initStoryshots({ - configPath: path.resolve(__dirname, './../storybook'), - test: multiSnapshotWithOptions({}), - // Don't snapshot tests that start with 'redux' - storyNameRegex: /^((?!.*?redux).)*$/, -}); +// Commenting this out until after #75357 is merged and Jest gets updated. +// initStoryshots({ +// configPath: path.resolve(__dirname, './../storybook'), +// test: multiSnapshotWithOptions({}), +// // Don't snapshot tests that start with 'redux' +// storyNameRegex: /^((?!.*?redux).)*$/, +// }); + +test.todo('Storyshots'); diff --git a/x-pack/plugins/dashboard_enhanced/.storybook/main.js b/x-pack/plugins/dashboard_enhanced/.storybook/main.js new file mode 100644 index 0000000000000..1818aa44a9399 --- /dev/null +++ b/x-pack/plugins/dashboard_enhanced/.storybook/main.js @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +module.exports = require('@kbn/storybook').defaultConfig; diff --git a/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/dashboard_to_dashboard_drilldown/components/dashboard_drilldown_config/dashboard_drilldown_config.story.tsx b/x-pack/plugins/dashboard_enhanced/public/services/drilldowns/dashboard_to_dashboard_drilldown/components/dashboard_drilldown_config/dashboard_drilldown_config.stories.tsx similarity index 100% rename from x-pack/plugins/dashboard_enhanced/public/services/drilldowns/dashboard_to_dashboard_drilldown/components/dashboard_drilldown_config/dashboard_drilldown_config.story.tsx rename to x-pack/plugins/dashboard_enhanced/public/services/drilldowns/dashboard_to_dashboard_drilldown/components/dashboard_drilldown_config/dashboard_drilldown_config.stories.tsx diff --git a/x-pack/plugins/data_enhanced/public/autocomplete/providers/kql_query_suggestion/value.ts b/x-pack/plugins/data_enhanced/public/autocomplete/providers/kql_query_suggestion/value.ts index 6f9ba4d00109d..441e5a6f775dd 100644 --- a/x-pack/plugins/data_enhanced/public/autocomplete/providers/kql_query_suggestion/value.ts +++ b/x-pack/plugins/data_enhanced/public/autocomplete/providers/kql_query_suggestion/value.ts @@ -9,6 +9,8 @@ import { escapeQuotes } from './lib/escape_kuery'; import { KqlQuerySuggestionProvider } from './types'; import { getAutocompleteService } from '../../../services'; import { + IFieldType, + IIndexPattern, QuerySuggestion, QuerySuggestionTypes, } from '../../../../../../../src/plugins/data/public'; @@ -23,29 +25,27 @@ const wrapAsSuggestions = (start: number, end: number, query: string, values: st end, })); -export const setupGetValueSuggestions: KqlQuerySuggestionProvider = (core) => { +export const setupGetValueSuggestions: KqlQuerySuggestionProvider = () => { return async ( { indexPatterns, boolFilter, signal }, { start, end, prefix, suffix, fieldName, nestedPath } ): Promise => { - const allFields = flatten( - indexPatterns.map((indexPattern) => - indexPattern.fields.map((field) => ({ - ...field, - indexPattern, - })) - ) - ); - const fullFieldName = nestedPath ? `${nestedPath}.${fieldName}` : fieldName; - const fields = allFields.filter((field) => field.name === fullFieldName); + + const indexPatternFieldEntries: Array<[IIndexPattern, IFieldType]> = []; + indexPatterns.forEach((indexPattern) => { + indexPattern.fields + .filter((field) => field.name === fullFieldName) + .forEach((field) => indexPatternFieldEntries.push([indexPattern, field])); + }); + const query = `${prefix}${suffix}`.trim(); const { getValueSuggestions } = getAutocompleteService(); const data = await Promise.all( - fields.map((field) => + indexPatternFieldEntries.map(([indexPattern, field]) => getValueSuggestions({ - indexPattern: field.indexPattern, + indexPattern, field, query, boolFilter, diff --git a/x-pack/plugins/enterprise_search/README.md b/x-pack/plugins/enterprise_search/README.md index ba14be5564be1..711c7c7b065d2 100644 --- a/x-pack/plugins/enterprise_search/README.md +++ b/x-pack/plugins/enterprise_search/README.md @@ -17,6 +17,10 @@ This plugin's goal is to provide a Kibana user interface to the Enterprise Searc Enterprise Search uses [Kea.js](https://github.com/keajs/kea) to manage our React/Redux state for us. Kea state is handled in our `*Logic` files and exposes [values](https://kea.js.org/docs/guide/concepts#values) and [actions](https://kea.js.org/docs/guide/concepts#actions) for our components to get and set state with. +#### Advanced Kea usage + +For the most part, we stick to the functionality described in Kea's [core concepts](https://kea.js.org/docs/guide/concepts). However, in some files, we also take advantage of [props](https://kea.js.org/docs/guide/additional#props) and [events](https://kea.js.org/docs/guide/additional#events), as well as [manually mounting](https://kea.js.org/docs/guide/advanced#mounting-and-unmounting) some shared logic files on plugin init outside of React. + #### Debugging Kea To debug Kea state in-browser, Kea recommends [Redux Devtools](https://kea.js.org/docs/guide/debugging). To facilitate debugging, we use the [path](https://kea.js.org/docs/guide/debugging/#setting-the-path-manually) key with `snake_case`d paths. The path key should always end with the logic filename (e.g. `['enterprise_search', 'some_logic']`) to make it easy for devs to quickly find/jump to files via IDE tooling. diff --git a/x-pack/plugins/enterprise_search/public/applications/__mocks__/index.ts b/x-pack/plugins/enterprise_search/public/applications/__mocks__/index.ts index f48f5fb91e3e7..22bb556e6d602 100644 --- a/x-pack/plugins/enterprise_search/public/applications/__mocks__/index.ts +++ b/x-pack/plugins/enterprise_search/public/applications/__mocks__/index.ts @@ -9,7 +9,7 @@ export { mockKibanaValues } from './kibana_logic.mock'; export { mockLicensingValues } from './licensing_logic.mock'; export { mockHttpValues } from './http_logic.mock'; export { mockFlashMessagesValues, mockFlashMessagesActions } from './flash_messages_logic.mock'; -export { mockAllValues, mockAllActions, setMockValues } from './kea.mock'; +export { mockAllValues, mockAllActions, setMockValues, setMockActions } from './kea.mock'; export { mountAsync } from './mount_async.mock'; export { mountWithIntl } from './mount_with_i18n.mock'; diff --git a/x-pack/plugins/enterprise_search/public/applications/__mocks__/kea.mock.ts b/x-pack/plugins/enterprise_search/public/applications/__mocks__/kea.mock.ts index b616cbab03e28..ffbbaaf794bcc 100644 --- a/x-pack/plugins/enterprise_search/public/applications/__mocks__/kea.mock.ts +++ b/x-pack/plugins/enterprise_search/public/applications/__mocks__/kea.mock.ts @@ -48,8 +48,11 @@ jest.mock('kea', () => ({ * setMockValues({ someValue: 'hello' }); * }); */ -import { useValues } from 'kea'; +import { useValues, useActions } from 'kea'; export const setMockValues = (values: object) => { (useValues as jest.Mock).mockImplementation(() => ({ ...mockAllValues, ...values })); }; +export const setMockActions = (actions: object) => { + (useActions as jest.Mock).mockImplementation(() => ({ ...mockAllActions, ...actions })); +}; diff --git a/x-pack/plugins/enterprise_search/public/applications/__mocks__/kibana_logic.mock.ts b/x-pack/plugins/enterprise_search/public/applications/__mocks__/kibana_logic.mock.ts index 9f3c2443bc9b8..ab91666d4acb6 100644 --- a/x-pack/plugins/enterprise_search/public/applications/__mocks__/kibana_logic.mock.ts +++ b/x-pack/plugins/enterprise_search/public/applications/__mocks__/kibana_logic.mock.ts @@ -4,9 +4,13 @@ * you may not use this file except in compliance with the Elastic License. */ +import { mockHistory } from './'; + export const mockKibanaValues = { config: { host: 'http://localhost:3002' }, + history: mockHistory, navigateToUrl: jest.fn(), setBreadcrumbs: jest.fn(), setDocTitle: jest.fn(), + renderHeaderActions: jest.fn(), }; diff --git a/x-pack/plugins/enterprise_search/public/applications/__mocks__/react_router_history.mock.ts b/x-pack/plugins/enterprise_search/public/applications/__mocks__/react_router_history.mock.ts index 7b3ac86ad0ab1..2c833bcfeaf4c 100644 --- a/x-pack/plugins/enterprise_search/public/applications/__mocks__/react_router_history.mock.ts +++ b/x-pack/plugins/enterprise_search/public/applications/__mocks__/react_router_history.mock.ts @@ -15,7 +15,7 @@ export const mockHistory = { pathname: '/current-path', }, listen: jest.fn(() => jest.fn()), -}; +} as any; export const mockLocation = { key: 'someKey', pathname: '/current-path', @@ -25,6 +25,7 @@ export const mockLocation = { }; jest.mock('react-router-dom', () => ({ + ...(jest.requireActual('react-router-dom') as object), useHistory: jest.fn(() => mockHistory), useLocation: jest.fn(() => mockLocation), })); diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/credentials/credentials_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/credentials/credentials_logic.test.ts index c5cb8a2c61759..56fc825493b80 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/credentials/credentials_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/credentials/credentials_logic.test.ts @@ -27,7 +27,7 @@ describe('CredentialsLogic', () => { write: true, access_all_engines: true, }, - activeApiTokenIsExisting: false, + activeApiTokenExists: false, activeApiTokenRawName: '', apiTokens: [], dataLoading: true, @@ -37,7 +37,7 @@ describe('CredentialsLogic', () => { isCredentialsDetailsComplete: false, meta: {}, nameInputBlurred: false, - showCredentialsForm: false, + shouldShowCredentialsForm: false, }; const mount = (defaults?: object) => { @@ -85,710 +85,499 @@ describe('CredentialsLogic', () => { expect(CredentialsLogic.values).toEqual(DEFAULT_VALUES); }); - describe('addEngineName', () => { - const values = { - ...DEFAULT_VALUES, - activeApiToken: expect.any(Object), - }; - - describe('activeApiToken', () => { - it("should add an engine to the active api token's engine list", () => { - mount({ - activeApiToken: { - ...newToken, - engines: ['someEngine'], - }, - }); - - CredentialsLogic.actions.addEngineName('newEngine'); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiToken: { ...newToken, engines: ['someEngine', 'newEngine'] }, - }); - }); - - it("should create a new engines list if one doesn't exist", () => { - mount({ - activeApiToken: { - ...newToken, - engines: undefined, - }, - }); - - CredentialsLogic.actions.addEngineName('newEngine'); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiToken: { ...newToken, engines: ['newEngine'] }, - }); - }); - }); - }); - - describe('removeEngineName', () => { - describe('activeApiToken', () => { + describe('actions', () => { + describe('addEngineName', () => { const values = { ...DEFAULT_VALUES, activeApiToken: expect.any(Object), + activeApiTokenExists: expect.any(Boolean), }; - it("should remove an engine from the active api token's engine list", () => { - mount({ - activeApiToken: { - ...newToken, - engines: ['someEngine', 'anotherEngine'], - }, - }); - - CredentialsLogic.actions.removeEngineName('someEngine'); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiToken: { ...newToken, engines: ['anotherEngine'] }, - }); - }); + describe('activeApiToken', () => { + it("should add an engine to the active api token's engine list", () => { + mount({ + activeApiToken: { + ...newToken, + engines: ['someEngine'], + }, + }); - it('will not remove the engine if it is not found', () => { - mount({ - activeApiToken: { - ...newToken, - engines: ['someEngine', 'anotherEngine'], - }, + CredentialsLogic.actions.addEngineName('newEngine'); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: { ...newToken, engines: ['someEngine', 'newEngine'] }, + }); }); - CredentialsLogic.actions.removeEngineName('notfound'); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiToken: { ...newToken, engines: ['someEngine', 'anotherEngine'] }, - }); - }); + it("should create a new engines list if one doesn't exist", () => { + mount({ + activeApiToken: { + ...newToken, + engines: undefined, + }, + }); - it('does not throw a type error if no engines are stored in state', () => { - mount({ - activeApiToken: {}, - }); - CredentialsLogic.actions.removeEngineName(''); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiToken: { engines: [] }, + CredentialsLogic.actions.addEngineName('newEngine'); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: { ...newToken, engines: ['newEngine'] }, + }); }); }); }); - }); - - describe('setAccessAllEngines', () => { - const values = { - ...DEFAULT_VALUES, - activeApiToken: expect.any(Object), - }; - - describe('activeApiToken', () => { - it('should set the value of access_all_engines and clear out engines list if true', () => { - mount({ - activeApiToken: { - ...newToken, - access_all_engines: false, - engines: ['someEngine', 'anotherEngine'], - }, - }); - - CredentialsLogic.actions.setAccessAllEngines(true); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiToken: { ...newToken, engines: [], access_all_engines: true }, - }); - }); - - it('should set the value of access_all_engines and but maintain engines list if false', () => { - mount({ - activeApiToken: { - ...newToken, - access_all_engines: true, - engines: ['someEngine', 'anotherEngine'], - }, - }); - CredentialsLogic.actions.setAccessAllEngines(false); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiToken: { - ...newToken, - access_all_engines: false, - engines: ['someEngine', 'anotherEngine'], - }, - }); - }); - }); - }); + describe('removeEngineName', () => { + describe('activeApiToken', () => { + const values = { + ...DEFAULT_VALUES, + activeApiToken: expect.any(Object), + activeApiTokenExists: expect.any(Boolean), + }; - describe('onApiKeyDelete', () => { - const values = { - ...DEFAULT_VALUES, - apiTokens: expect.any(Array), - }; + it("should remove an engine from the active api token's engine list", () => { + mount({ + activeApiToken: { + ...newToken, + engines: ['someEngine', 'anotherEngine'], + }, + }); - describe('apiTokens', () => { - it('should remove specified token from apiTokens if name matches', () => { - mount({ - apiTokens: [newToken], + CredentialsLogic.actions.removeEngineName('someEngine'); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: { ...newToken, engines: ['anotherEngine'] }, + }); }); - CredentialsLogic.actions.onApiKeyDelete(newToken.name); - expect(CredentialsLogic.values).toEqual({ - ...values, - apiTokens: [], - }); - }); + it('will not remove the engine if it is not found', () => { + mount({ + activeApiToken: { + ...newToken, + engines: ['someEngine', 'anotherEngine'], + }, + }); - it('should not remove specified token from apiTokens if name does not match', () => { - mount({ - apiTokens: [newToken], + CredentialsLogic.actions.removeEngineName('notfound'); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: { ...newToken, engines: ['someEngine', 'anotherEngine'] }, + }); }); - CredentialsLogic.actions.onApiKeyDelete('foo'); - expect(CredentialsLogic.values).toEqual({ - ...values, - apiTokens: [newToken], + it('does not throw a type error if no engines are stored in state', () => { + mount({ + activeApiToken: {}, + }); + CredentialsLogic.actions.removeEngineName(''); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: { engines: [] }, + }); }); }); }); - }); - describe('onApiTokenCreateSuccess', () => { - const values = { - ...DEFAULT_VALUES, - apiTokens: expect.any(Array), - activeApiToken: expect.any(Object), - activeApiTokenRawName: expect.any(String), - showCredentialsForm: expect.any(Boolean), - formErrors: expect.any(Array), - }; - - describe('apiTokens', () => { - const existingToken = { - name: 'some_token', - type: PRIVATE, + describe('setAccessAllEngines', () => { + const values = { + ...DEFAULT_VALUES, + activeApiToken: expect.any(Object), + activeApiTokenExists: expect.any(Boolean), }; - it('should add the provided token to the apiTokens list', () => { - mount({ - apiTokens: [existingToken], - }); - - CredentialsLogic.actions.onApiTokenCreateSuccess(newToken); - expect(CredentialsLogic.values).toEqual({ - ...values, - apiTokens: [existingToken, newToken], - }); - }); - }); - - describe('activeApiToken', () => { - // TODO It is weird that methods like this update activeApiToken but not activeApiTokenIsExisting... - it('should reset to the default value, which effectively clears out the current form', () => { - mount({ - activeApiToken: newToken, - }); + describe('activeApiToken', () => { + it('should set the value of access_all_engines and clear out engines list if true', () => { + mount({ + activeApiToken: { + ...newToken, + access_all_engines: false, + engines: ['someEngine', 'anotherEngine'], + }, + }); - CredentialsLogic.actions.onApiTokenCreateSuccess(newToken); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiToken: DEFAULT_VALUES.activeApiToken, + CredentialsLogic.actions.setAccessAllEngines(true); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: { ...newToken, engines: [], access_all_engines: true }, + }); }); - }); - }); - describe('activeApiTokenRawName', () => { - it('should reset to the default value, which effectively clears out the current form', () => { - mount({ - activeApiTokenRawName: 'foo', - }); + it('should set the value of access_all_engines and but maintain engines list if false', () => { + mount({ + activeApiToken: { + ...newToken, + access_all_engines: true, + engines: ['someEngine', 'anotherEngine'], + }, + }); - CredentialsLogic.actions.onApiTokenCreateSuccess(newToken); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiTokenRawName: DEFAULT_VALUES.activeApiTokenRawName, + CredentialsLogic.actions.setAccessAllEngines(false); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: { + ...newToken, + access_all_engines: false, + engines: ['someEngine', 'anotherEngine'], + }, + }); }); }); }); - describe('showCredentialsForm', () => { - it('should reset to the default value, which closes the credentials form', () => { - mount({ - showCredentialsForm: true, - }); - - CredentialsLogic.actions.onApiTokenCreateSuccess(newToken); - expect(CredentialsLogic.values).toEqual({ - ...values, - showCredentialsForm: false, - }); - }); - }); + describe('onApiKeyDelete', () => { + const values = { + ...DEFAULT_VALUES, + apiTokens: expect.any(Array), + }; - describe('formErrors', () => { - it('should reset `formErrors`', () => { - mount({ - formErrors: ['I am an error'], - }); + describe('apiTokens', () => { + it('should remove specified token from apiTokens if name matches', () => { + mount({ + apiTokens: [newToken], + }); - CredentialsLogic.actions.onApiTokenCreateSuccess(newToken); - expect(CredentialsLogic.values).toEqual({ - ...values, - formErrors: [], + CredentialsLogic.actions.onApiKeyDelete(newToken.name); + expect(CredentialsLogic.values).toEqual({ + ...values, + apiTokens: [], + }); }); - }); - }); - }); - - describe('onApiTokenError', () => { - const values = { - ...DEFAULT_VALUES, - formErrors: expect.any(Array), - }; - describe('formErrors', () => { - it('should set `formErrors`', () => { - mount({ - formErrors: ['I am an error'], - }); + it('should not remove specified token from apiTokens if name does not match', () => { + mount({ + apiTokens: [newToken], + }); - CredentialsLogic.actions.onApiTokenError(['I am the NEW error']); - expect(CredentialsLogic.values).toEqual({ - ...values, - formErrors: ['I am the NEW error'], + CredentialsLogic.actions.onApiKeyDelete('foo'); + expect(CredentialsLogic.values).toEqual({ + ...values, + apiTokens: [newToken], + }); }); }); }); - }); - describe('onApiTokenUpdateSuccess', () => { - const values = { - ...DEFAULT_VALUES, - apiTokens: expect.any(Array), - activeApiToken: expect.any(Object), - activeApiTokenRawName: expect.any(String), - showCredentialsForm: expect.any(Boolean), - }; - - describe('apiTokens', () => { - const existingToken = { - name: 'some_token', - type: PRIVATE, + describe('onApiTokenCreateSuccess', () => { + const values = { + ...DEFAULT_VALUES, + activeApiTokenExists: expect.any(Boolean), + apiTokens: expect.any(Array), + activeApiToken: expect.any(Object), + activeApiTokenRawName: expect.any(String), + shouldShowCredentialsForm: expect.any(Boolean), + formErrors: expect.any(Array), }; - it('should replace the existing token with the new token by name', () => { - mount({ - apiTokens: [newToken, existingToken], - }); - const updatedExistingToken = { - ...existingToken, - type: ADMIN, - }; - - CredentialsLogic.actions.onApiTokenUpdateSuccess(updatedExistingToken); - expect(CredentialsLogic.values).toEqual({ - ...values, - apiTokens: [newToken, updatedExistingToken], - }); - }); - - // TODO Not sure if this is a good behavior or not - it('if for some reason the existing token is not found, it adds a new token...', () => { - mount({ - apiTokens: [newToken, existingToken], - }); - const brandNewToken = { - name: 'brand new token', - type: ADMIN, + describe('apiTokens', () => { + const existingToken = { + name: 'some_token', + type: PRIVATE, }; - CredentialsLogic.actions.onApiTokenUpdateSuccess(brandNewToken); - expect(CredentialsLogic.values).toEqual({ - ...values, - apiTokens: [newToken, existingToken, brandNewToken], - }); - }); - }); - - describe('activeApiToken', () => { - it('should reset to the default value, which effectively clears out the current form', () => { - mount({ - activeApiToken: newToken, - }); - - CredentialsLogic.actions.onApiTokenUpdateSuccess({ ...newToken, type: ADMIN }); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiToken: DEFAULT_VALUES.activeApiToken, - }); - }); - }); - - describe('activeApiTokenRawName', () => { - it('should reset to the default value, which effectively clears out the current form', () => { - mount({ - activeApiTokenRawName: 'foo', - }); + it('should add the provided token to the apiTokens list', () => { + mount({ + apiTokens: [existingToken], + }); - CredentialsLogic.actions.onApiTokenUpdateSuccess({ ...newToken, type: ADMIN }); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiTokenRawName: DEFAULT_VALUES.activeApiTokenRawName, + CredentialsLogic.actions.onApiTokenCreateSuccess(newToken); + expect(CredentialsLogic.values).toEqual({ + ...values, + apiTokens: [existingToken, newToken], + }); }); }); - }); - describe('showCredentialsForm', () => { - it('should reset to the default value, which closes the credentials form', () => { - mount({ - showCredentialsForm: true, - }); + describe('activeApiToken', () => { + it('should reset to the default value, which effectively clears out the current form', () => { + mount({ + activeApiToken: newToken, + }); - CredentialsLogic.actions.onApiTokenUpdateSuccess({ ...newToken, type: ADMIN }); - expect(CredentialsLogic.values).toEqual({ - ...values, - showCredentialsForm: false, + CredentialsLogic.actions.onApiTokenCreateSuccess(newToken); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: DEFAULT_VALUES.activeApiToken, + }); }); }); - }); - }); - describe('setCredentialsData', () => { - const meta = { - page: { - current: 1, - size: 1, - total_pages: 1, - total_results: 1, - }, - }; - - const values = { - ...DEFAULT_VALUES, - apiTokens: expect.any(Array), - meta: expect.any(Object), - isCredentialsDataComplete: expect.any(Boolean), - }; - - describe('apiTokens', () => { - it('should be set', () => { - mount(); + describe('activeApiTokenRawName', () => { + it('should reset to the default value, which effectively clears out the current form', () => { + mount({ + activeApiTokenRawName: 'foo', + }); - CredentialsLogic.actions.setCredentialsData(meta, [newToken, newToken]); - expect(CredentialsLogic.values).toEqual({ - ...values, - apiTokens: [newToken, newToken], + CredentialsLogic.actions.onApiTokenCreateSuccess(newToken); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiTokenRawName: DEFAULT_VALUES.activeApiTokenRawName, + }); }); }); - }); - describe('meta', () => { - it('should be set', () => { - mount(); + describe('shouldShowCredentialsForm', () => { + it('should reset to the default value, which closes the credentials form', () => { + mount({ + shouldShowCredentialsForm: true, + }); - CredentialsLogic.actions.setCredentialsData(meta, [newToken, newToken]); - expect(CredentialsLogic.values).toEqual({ - ...values, - meta, + CredentialsLogic.actions.onApiTokenCreateSuccess(newToken); + expect(CredentialsLogic.values).toEqual({ + ...values, + shouldShowCredentialsForm: false, + }); }); }); - }); - describe('isCredentialsDataComplete', () => { - it('should be set to true so we know that data fetching has completed', () => { - mount({ - isCredentialsDataComplete: false, - }); + describe('formErrors', () => { + it('should reset `formErrors`', () => { + mount({ + formErrors: ['I am an error'], + }); - CredentialsLogic.actions.setCredentialsData(meta, [newToken, newToken]); - expect(CredentialsLogic.values).toEqual({ - ...values, - isCredentialsDataComplete: true, + CredentialsLogic.actions.onApiTokenCreateSuccess(newToken); + expect(CredentialsLogic.values).toEqual({ + ...values, + formErrors: [], + }); }); }); }); - }); - describe('setCredentialsDetails', () => { - const values = { - ...DEFAULT_VALUES, - engines: expect.any(Array), - isCredentialsDetailsComplete: expect.any(Boolean), - }; + describe('onApiTokenError', () => { + const values = { + ...DEFAULT_VALUES, + formErrors: expect.any(Array), + }; - describe('isCredentialsDataComplete', () => { - it('should be set to true so that we know data fetching has been completed', () => { - mount({ - isCredentialsDetailsComplete: false, - }); + describe('formErrors', () => { + it('should set `formErrors`', () => { + mount({ + formErrors: ['I am an error'], + }); - CredentialsLogic.actions.setCredentialsDetails(credentialsDetails); - expect(CredentialsLogic.values).toEqual({ - ...values, - isCredentialsDetailsComplete: true, + CredentialsLogic.actions.onApiTokenError(['I am the NEW error']); + expect(CredentialsLogic.values).toEqual({ + ...values, + formErrors: ['I am the NEW error'], + }); }); }); }); - describe('engines', () => { - it('should set `engines` from the provided details object', () => { - mount({ - engines: [], - }); - - CredentialsLogic.actions.setCredentialsDetails(credentialsDetails); - expect(CredentialsLogic.values).toEqual({ - ...values, - engines: credentialsDetails.engines, - }); - }); - }); - }); + describe('onApiTokenUpdateSuccess', () => { + const values = { + ...DEFAULT_VALUES, + apiTokens: expect.any(Array), + activeApiToken: expect.any(Object), + activeApiTokenRawName: expect.any(String), + shouldShowCredentialsForm: expect.any(Boolean), + }; - describe('setNameInputBlurred', () => { - const values = { - ...DEFAULT_VALUES, - nameInputBlurred: expect.any(Boolean), - }; + describe('apiTokens', () => { + const existingToken = { + name: 'some_token', + type: PRIVATE, + }; - describe('nameInputBlurred', () => { - it('should set this value', () => { - mount({ - nameInputBlurred: false, - }); + it('should replace the existing token with the new token by name', () => { + mount({ + apiTokens: [newToken, existingToken], + }); + const updatedExistingToken = { + ...existingToken, + type: ADMIN, + }; - CredentialsLogic.actions.setNameInputBlurred(true); - expect(CredentialsLogic.values).toEqual({ - ...values, - nameInputBlurred: true, + CredentialsLogic.actions.onApiTokenUpdateSuccess(updatedExistingToken); + expect(CredentialsLogic.values).toEqual({ + ...values, + apiTokens: [newToken, updatedExistingToken], + }); }); - }); - }); - }); - - describe('setTokenReadWrite', () => { - const values = { - ...DEFAULT_VALUES, - activeApiToken: expect.any(Object), - }; - describe('activeApiToken', () => { - it('should set "read" or "write" values', () => { - mount({ - activeApiToken: { - ...newToken, - read: false, - }, - }); + // TODO Not sure if this is a good behavior or not + it('if for some reason the existing token is not found, it adds a new token...', () => { + mount({ + apiTokens: [newToken, existingToken], + }); + const brandNewToken = { + name: 'brand new token', + type: ADMIN, + }; - CredentialsLogic.actions.setTokenReadWrite({ name: 'read', checked: true }); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiToken: { - ...newToken, - read: true, - }, + CredentialsLogic.actions.onApiTokenUpdateSuccess(brandNewToken); + expect(CredentialsLogic.values).toEqual({ + ...values, + apiTokens: [newToken, existingToken, brandNewToken], + }); }); }); - }); - }); - - describe('setTokenName', () => { - const values = { - ...DEFAULT_VALUES, - activeApiToken: expect.any(Object), - activeApiTokenRawName: expect.any(String), - }; - describe('activeApiToken', () => { - it('update the name property on the activeApiToken, formatted correctly', () => { - mount({ - activeApiToken: { - ...newToken, - name: 'bar', - }, - }); + describe('activeApiToken', () => { + it('should reset to the default value, which effectively clears out the current form', () => { + mount({ + activeApiToken: newToken, + }); - CredentialsLogic.actions.setTokenName('New Name'); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiToken: { ...newToken, name: 'new-name' }, + CredentialsLogic.actions.onApiTokenUpdateSuccess({ ...newToken, type: ADMIN }); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: DEFAULT_VALUES.activeApiToken, + }); }); }); - }); - describe('activeApiTokenRawName', () => { - it('updates the raw name, with no formatting applied', () => { - mount(); + describe('activeApiTokenRawName', () => { + it('should reset to the default value, which effectively clears out the current form', () => { + mount({ + activeApiTokenRawName: 'foo', + }); - CredentialsLogic.actions.setTokenName('New Name'); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiTokenRawName: 'New Name', + CredentialsLogic.actions.onApiTokenUpdateSuccess({ ...newToken, type: ADMIN }); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiTokenRawName: DEFAULT_VALUES.activeApiTokenRawName, + }); }); }); - }); - }); - describe('setTokenType', () => { - const values = { - ...DEFAULT_VALUES, - activeApiToken: { - ...newToken, - type: expect.any(String), - read: expect.any(Boolean), - write: expect.any(Boolean), - access_all_engines: expect.any(Boolean), - engines: expect.any(Array), - }, - }; - - describe('activeApiToken.access_all_engines', () => { - describe('when value is ADMIN', () => { - it('updates access_all_engines to false', () => { + describe('shouldShowCredentialsForm', () => { + it('should reset to the default value, which closes the credentials form', () => { mount({ - activeApiToken: { - ...newToken, - access_all_engines: true, - }, + shouldShowCredentialsForm: true, }); - CredentialsLogic.actions.setTokenType(ADMIN); + CredentialsLogic.actions.onApiTokenUpdateSuccess({ ...newToken, type: ADMIN }); expect(CredentialsLogic.values).toEqual({ ...values, - activeApiToken: { - ...values.activeApiToken, - access_all_engines: false, - }, + shouldShowCredentialsForm: false, }); }); }); + }); - describe('when value is not ADMIN', () => { - it('will maintain access_all_engines value when true', () => { - mount({ - activeApiToken: { - ...newToken, - access_all_engines: true, - }, - }); + describe('setCredentialsData', () => { + const meta = { + page: { + current: 1, + size: 1, + total_pages: 1, + total_results: 1, + }, + }; - CredentialsLogic.actions.setTokenType(PRIVATE); + const values = { + ...DEFAULT_VALUES, + apiTokens: expect.any(Array), + meta: expect.any(Object), + isCredentialsDataComplete: expect.any(Boolean), + }; + + describe('apiTokens', () => { + it('should be set', () => { + mount(); + + CredentialsLogic.actions.setCredentialsData(meta, [newToken, newToken]); expect(CredentialsLogic.values).toEqual({ ...values, - activeApiToken: { - ...values.activeApiToken, - access_all_engines: true, - }, + apiTokens: [newToken, newToken], }); }); + }); - it('will maintain access_all_engines value when false', () => { - mount({ - activeApiToken: { - ...newToken, - access_all_engines: false, - }, - }); + describe('meta', () => { + it('should be set', () => { + mount(); - CredentialsLogic.actions.setTokenType(PRIVATE); + CredentialsLogic.actions.setCredentialsData(meta, [newToken, newToken]); expect(CredentialsLogic.values).toEqual({ ...values, - activeApiToken: { - ...values.activeApiToken, - access_all_engines: false, - }, + meta, }); }); }); - }); - describe('activeApiToken.engines', () => { - describe('when value is ADMIN', () => { - it('clears the array', () => { + describe('isCredentialsDataComplete', () => { + it('should be set to true so we know that data fetching has completed', () => { mount({ - activeApiToken: { - ...newToken, - engines: [{}, {}], - }, + isCredentialsDataComplete: false, }); - CredentialsLogic.actions.setTokenType(ADMIN); + CredentialsLogic.actions.setCredentialsData(meta, [newToken, newToken]); expect(CredentialsLogic.values).toEqual({ ...values, - activeApiToken: { - ...values.activeApiToken, - engines: [], - }, + isCredentialsDataComplete: true, }); }); }); + }); + + describe('setCredentialsDetails', () => { + const values = { + ...DEFAULT_VALUES, + engines: expect.any(Array), + isCredentialsDetailsComplete: expect.any(Boolean), + }; - describe('when value is not ADMIN', () => { - it('will maintain engines array', () => { + describe('isCredentialsDataComplete', () => { + it('should be set to true so that we know data fetching has been completed', () => { mount({ - activeApiToken: { - ...newToken, - engines: [{}, {}], - }, + isCredentialsDetailsComplete: false, }); - CredentialsLogic.actions.setTokenType(PRIVATE); + CredentialsLogic.actions.setCredentialsDetails(credentialsDetails); expect(CredentialsLogic.values).toEqual({ ...values, - activeApiToken: { - ...values.activeApiToken, - engines: [{}, {}], - }, + isCredentialsDetailsComplete: true, }); }); }); - }); - describe('activeApiToken.write', () => { - describe('when value is PRIVATE', () => { - it('sets this to true', () => { + describe('engines', () => { + it('should set `engines` from the provided details object', () => { mount({ - activeApiToken: { - ...newToken, - write: false, - }, + engines: [], }); - CredentialsLogic.actions.setTokenType(PRIVATE); + CredentialsLogic.actions.setCredentialsDetails(credentialsDetails); expect(CredentialsLogic.values).toEqual({ ...values, - activeApiToken: { - ...values.activeApiToken, - write: true, - }, + engines: credentialsDetails.engines, }); }); }); + }); + + describe('setNameInputBlurred', () => { + const values = { + ...DEFAULT_VALUES, + nameInputBlurred: expect.any(Boolean), + }; - describe('when value is not PRIVATE', () => { - it('sets this to false', () => { + describe('nameInputBlurred', () => { + it('should set this value', () => { mount({ - activeApiToken: { - ...newToken, - write: true, - }, + nameInputBlurred: false, }); - CredentialsLogic.actions.setTokenType(ADMIN); + CredentialsLogic.actions.setNameInputBlurred(true); expect(CredentialsLogic.values).toEqual({ ...values, - activeApiToken: { - ...values.activeApiToken, - write: false, - }, + nameInputBlurred: true, }); }); }); }); - describe('activeApiToken.read', () => { - describe('when value is PRIVATE', () => { - it('sets this to true', () => { + describe('setTokenReadWrite', () => { + const values = { + ...DEFAULT_VALUES, + activeApiToken: expect.any(Object), + activeApiTokenExists: expect.any(Boolean), + }; + + describe('activeApiToken', () => { + it('should set "read" or "write" values', () => { mount({ activeApiToken: { ...newToken, @@ -796,401 +585,594 @@ describe('CredentialsLogic', () => { }, }); - CredentialsLogic.actions.setTokenType(PRIVATE); + CredentialsLogic.actions.setTokenReadWrite({ name: 'read', checked: true }); expect(CredentialsLogic.values).toEqual({ ...values, activeApiToken: { - ...values.activeApiToken, + ...newToken, read: true, }, }); }); }); + }); + + describe('setTokenName', () => { + const values = { + ...DEFAULT_VALUES, + activeApiToken: expect.any(Object), + activeApiTokenRawName: expect.any(String), + activeApiTokenExists: expect.any(Boolean), + }; - describe('when value is not PRIVATE', () => { - it('sets this to false', () => { + describe('activeApiToken', () => { + it('update the name property on the activeApiToken, formatted correctly', () => { mount({ activeApiToken: { ...newToken, - read: true, + name: 'bar', }, }); - CredentialsLogic.actions.setTokenType(ADMIN); + CredentialsLogic.actions.setTokenName('New Name'); expect(CredentialsLogic.values).toEqual({ ...values, - activeApiToken: { - ...values.activeApiToken, - read: false, - }, + activeApiToken: { ...newToken, name: 'new-name' }, }); }); }); - }); - describe('activeApiToken.type', () => { - it('sets the type value', () => { - mount({ - activeApiToken: { - ...newToken, - type: ADMIN, - }, - }); + describe('activeApiTokenRawName', () => { + it('updates the raw name, with no formatting applied', () => { + mount(); - CredentialsLogic.actions.setTokenType(PRIVATE); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiToken: { - ...values.activeApiToken, - type: PRIVATE, - }, + CredentialsLogic.actions.setTokenName('New Name'); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiTokenRawName: 'New Name', + }); }); }); }); - }); - describe('toggleCredentialsForm', () => { - const values = { - ...DEFAULT_VALUES, - activeApiTokenIsExisting: expect.any(Boolean), - activeApiToken: expect.any(Object), - activeApiTokenRawName: expect.any(String), - formErrors: expect.any(Array), - showCredentialsForm: expect.any(Boolean), - }; + describe('setTokenType', () => { + const values = { + ...DEFAULT_VALUES, + activeApiToken: { + ...newToken, + type: expect.any(String), + read: expect.any(Boolean), + write: expect.any(Boolean), + access_all_engines: expect.any(Boolean), + engines: expect.any(Array), + }, + activeApiTokenExists: expect.any(Boolean), + }; - describe('showCredentialsForm', () => { - it('should toggle `showCredentialsForm`', () => { - mount({ - showCredentialsForm: false, + describe('activeApiToken.access_all_engines', () => { + describe('when value is ADMIN', () => { + it('updates access_all_engines to false', () => { + mount({ + activeApiToken: { + ...newToken, + access_all_engines: true, + }, + }); + + CredentialsLogic.actions.setTokenType(ADMIN); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: { + ...values.activeApiToken, + access_all_engines: false, + }, + }); + }); }); - CredentialsLogic.actions.toggleCredentialsForm(); - expect(CredentialsLogic.values).toEqual({ - ...values, - showCredentialsForm: true, - }); + describe('when value is not ADMIN', () => { + it('will maintain access_all_engines value when true', () => { + mount({ + activeApiToken: { + ...newToken, + access_all_engines: true, + }, + }); + + CredentialsLogic.actions.setTokenType(PRIVATE); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: { + ...values.activeApiToken, + access_all_engines: true, + }, + }); + }); - CredentialsLogic.actions.toggleCredentialsForm(); - expect(CredentialsLogic.values).toEqual({ - ...values, - showCredentialsForm: false, + it('will maintain access_all_engines value when false', () => { + mount({ + activeApiToken: { + ...newToken, + access_all_engines: false, + }, + }); + + CredentialsLogic.actions.setTokenType(PRIVATE); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: { + ...values.activeApiToken, + access_all_engines: false, + }, + }); + }); }); }); - }); - describe('formErrors', () => { - it('should reset `formErrors`', () => { - mount({ - formErrors: ['I am an error'], + describe('activeApiToken.engines', () => { + describe('when value is ADMIN', () => { + it('clears the array', () => { + mount({ + activeApiToken: { + ...newToken, + engines: [{}, {}], + }, + }); + + CredentialsLogic.actions.setTokenType(ADMIN); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: { + ...values.activeApiToken, + engines: [], + }, + }); + }); }); - CredentialsLogic.actions.toggleCredentialsForm(); - expect(CredentialsLogic.values).toEqual({ - ...values, - formErrors: [], + describe('when value is not ADMIN', () => { + it('will maintain engines array', () => { + mount({ + activeApiToken: { + ...newToken, + engines: [{}, {}], + }, + }); + + CredentialsLogic.actions.setTokenType(PRIVATE); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: { + ...values.activeApiToken, + engines: [{}, {}], + }, + }); + }); }); }); - }); - describe('activeApiTokenRawName', () => { - it('should set `activeApiTokenRawName` to the name of the provided token', () => { - mount(); + describe('activeApiToken.write', () => { + describe('when value is PRIVATE', () => { + it('sets this to true', () => { + mount({ + activeApiToken: { + ...newToken, + write: false, + }, + }); + + CredentialsLogic.actions.setTokenType(PRIVATE); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: { + ...values.activeApiToken, + write: true, + }, + }); + }); + }); - CredentialsLogic.actions.toggleCredentialsForm(newToken); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiTokenRawName: 'myToken', + describe('when value is not PRIVATE', () => { + it('sets this to false', () => { + mount({ + activeApiToken: { + ...newToken, + write: true, + }, + }); + + CredentialsLogic.actions.setTokenType(ADMIN); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: { + ...values.activeApiToken, + write: false, + }, + }); + }); }); }); - it('should set `activeApiTokenRawName` to the default value if no token is provided', () => { - mount(); + describe('activeApiToken.read', () => { + describe('when value is PRIVATE', () => { + it('sets this to true', () => { + mount({ + activeApiToken: { + ...newToken, + read: false, + }, + }); + + CredentialsLogic.actions.setTokenType(PRIVATE); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: { + ...values.activeApiToken, + read: true, + }, + }); + }); + }); - CredentialsLogic.actions.toggleCredentialsForm(); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiTokenRawName: DEFAULT_VALUES.activeApiTokenRawName, + describe('when value is not PRIVATE', () => { + it('sets this to false', () => { + mount({ + activeApiToken: { + ...newToken, + read: true, + }, + }); + + CredentialsLogic.actions.setTokenType(ADMIN); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: { + ...values.activeApiToken, + read: false, + }, + }); + }); }); }); - // TODO: This fails, is this an issue? Instead of reseting back to the default value, it sets it to the previously - // used value... to be honest, this should probably just be a selector - // it('should set `activeApiTokenRawName` back to the default value if no token is provided', () => { - // mount(); - // CredentialsLogic.actions.toggleCredentialsForm(newToken); - // CredentialsLogic.actions.toggleCredentialsForm(); - // expect(CredentialsLogic.values).toEqual({ - // ...values, - // activeApiTokenRawName: DEFAULT_VALUES.activeApiTokenRawName, - // }); - // }); - }); - - describe('activeApiToken', () => { - it('should set `activeApiToken` to the provided token', () => { - mount(); + describe('activeApiToken.type', () => { + it('sets the type value', () => { + mount({ + activeApiToken: { + ...newToken, + type: ADMIN, + }, + }); - CredentialsLogic.actions.toggleCredentialsForm(newToken); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiToken: newToken, + CredentialsLogic.actions.setTokenType(PRIVATE); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: { + ...values.activeApiToken, + type: PRIVATE, + }, + }); }); }); + }); - it('should set `activeApiToken` to the default value if no token is provided', () => { - mount({ - activeApiToken: newToken, - }); + describe('showCredentialsForm', () => { + const values = { + ...DEFAULT_VALUES, + activeApiTokenExists: expect.any(Boolean), + activeApiToken: expect.any(Object), + activeApiTokenRawName: expect.any(String), + formErrors: expect.any(Array), + shouldShowCredentialsForm: expect.any(Boolean), + }; + + describe('shouldShowCredentialsForm', () => { + it('should toggle `shouldShowCredentialsForm`', () => { + mount({ + shouldShowCredentialsForm: false, + }); - CredentialsLogic.actions.toggleCredentialsForm(); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiToken: DEFAULT_VALUES.activeApiToken, + CredentialsLogic.actions.showCredentialsForm(); + expect(CredentialsLogic.values).toEqual({ + ...values, + shouldShowCredentialsForm: true, + }); }); }); - }); - // TODO: This should probably just be a selector... - describe('activeApiTokenIsExisting', () => { - it('should set `activeApiTokenIsExisting` to true when the provided token has an id', () => { - mount({ - activeApiTokenIsExisting: false, - }); + describe('formErrors', () => { + it('should reset `formErrors`', () => { + mount({ + formErrors: ['I am an error'], + }); - CredentialsLogic.actions.toggleCredentialsForm(newToken); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiTokenIsExisting: true, + CredentialsLogic.actions.showCredentialsForm(); + expect(CredentialsLogic.values).toEqual({ + ...values, + formErrors: [], + }); }); }); - it('should set `activeApiTokenIsExisting` to false when the provided token has no id', () => { - mount({ - activeApiTokenIsExisting: true, + describe('activeApiTokenRawName', () => { + it('should set `activeApiTokenRawName` to the name of the provided token', () => { + mount({ + activeApiTokenRawName: 'Some Name', + }); + + CredentialsLogic.actions.showCredentialsForm(newToken); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiTokenRawName: 'myToken', + }); }); - const { id, ...newTokenWithoutId } = newToken; - CredentialsLogic.actions.toggleCredentialsForm(newTokenWithoutId); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiTokenIsExisting: false, + it('should set `activeApiTokenRawName` to the default value if no token is provided', () => { + mount({ + activeApiTokenRawName: 'Some Name', + }); + + CredentialsLogic.actions.showCredentialsForm(); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiTokenRawName: DEFAULT_VALUES.activeApiTokenRawName, + }); }); }); - it('should set `activeApiTokenIsExisting` to false when no token is provided', () => { - mount({ - activeApiTokenIsExisting: true, + describe('activeApiToken', () => { + it('should set `activeApiToken` to the provided token', () => { + mount(); + + CredentialsLogic.actions.showCredentialsForm(newToken); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: newToken, + }); }); - CredentialsLogic.actions.toggleCredentialsForm(); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiTokenIsExisting: false, + it('should set `activeApiToken` to the default value if no token is provided', () => { + mount({ + activeApiToken: newToken, + }); + + CredentialsLogic.actions.showCredentialsForm(); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiToken: DEFAULT_VALUES.activeApiToken, + }); }); }); }); - }); - describe('hideCredentialsForm', () => { - const values = { - ...DEFAULT_VALUES, - showCredentialsForm: expect.any(Boolean), - activeApiTokenRawName: expect.any(String), - }; + describe('hideCredentialsForm', () => { + const values = { + ...DEFAULT_VALUES, + shouldShowCredentialsForm: expect.any(Boolean), + activeApiTokenRawName: expect.any(String), + }; - describe('activeApiTokenRawName', () => { - it('resets this value', () => { - mount({ - activeApiTokenRawName: 'foo', - }); + describe('activeApiTokenRawName', () => { + it('resets this value', () => { + mount({ + activeApiTokenRawName: 'foo', + }); - CredentialsLogic.actions.hideCredentialsForm(); - expect(CredentialsLogic.values).toEqual({ - ...values, - activeApiTokenRawName: '', + CredentialsLogic.actions.hideCredentialsForm(); + expect(CredentialsLogic.values).toEqual({ + ...values, + activeApiTokenRawName: '', + }); }); }); - }); - describe('showCredentialsForm', () => { - it('resets this value', () => { - mount({ - showCredentialsForm: true, - }); + describe('shouldShowCredentialsForm', () => { + it('resets this value', () => { + mount({ + shouldShowCredentialsForm: true, + }); - CredentialsLogic.actions.hideCredentialsForm(); - expect(CredentialsLogic.values).toEqual({ - ...values, - showCredentialsForm: false, + CredentialsLogic.actions.hideCredentialsForm(); + expect(CredentialsLogic.values).toEqual({ + ...values, + shouldShowCredentialsForm: false, + }); }); }); }); - }); - describe('resetCredentials', () => { - const values = { - ...DEFAULT_VALUES, - isCredentialsDetailsComplete: expect.any(Boolean), - isCredentialsDataComplete: expect.any(Boolean), - formErrors: expect.any(Array), - }; + describe('resetCredentials', () => { + const values = { + ...DEFAULT_VALUES, + isCredentialsDetailsComplete: expect.any(Boolean), + isCredentialsDataComplete: expect.any(Boolean), + formErrors: expect.any(Array), + }; - describe('isCredentialsDetailsComplete', () => { - it('should reset to false', () => { - mount({ - isCredentialsDetailsComplete: true, - }); + describe('isCredentialsDetailsComplete', () => { + it('should reset to false', () => { + mount({ + isCredentialsDetailsComplete: true, + }); - CredentialsLogic.actions.resetCredentials(); - expect(CredentialsLogic.values).toEqual({ - ...values, - isCredentialsDetailsComplete: false, + CredentialsLogic.actions.resetCredentials(); + expect(CredentialsLogic.values).toEqual({ + ...values, + isCredentialsDetailsComplete: false, + }); }); }); - }); - describe('isCredentialsDataComplete', () => { - it('should reset to false', () => { - mount({ - isCredentialsDataComplete: true, - }); + describe('isCredentialsDataComplete', () => { + it('should reset to false', () => { + mount({ + isCredentialsDataComplete: true, + }); - CredentialsLogic.actions.resetCredentials(); - expect(CredentialsLogic.values).toEqual({ - ...values, - isCredentialsDataComplete: false, + CredentialsLogic.actions.resetCredentials(); + expect(CredentialsLogic.values).toEqual({ + ...values, + isCredentialsDataComplete: false, + }); }); }); - }); - describe('formErrors', () => { - it('should reset', () => { - mount({ - formErrors: ['I am an error'], - }); + describe('formErrors', () => { + it('should reset', () => { + mount({ + formErrors: ['I am an error'], + }); - CredentialsLogic.actions.resetCredentials(); - expect(CredentialsLogic.values).toEqual({ - ...values, - formErrors: [], + CredentialsLogic.actions.resetCredentials(); + expect(CredentialsLogic.values).toEqual({ + ...values, + formErrors: [], + }); }); }); }); - }); - describe('initializeCredentialsData', () => { - it('should call fetchCredentials and fetchDetails', () => { - mount(); - jest.spyOn(CredentialsLogic.actions, 'fetchCredentials').mockImplementationOnce(() => {}); - jest.spyOn(CredentialsLogic.actions, 'fetchDetails').mockImplementationOnce(() => {}); + describe('initializeCredentialsData', () => { + it('should call fetchCredentials and fetchDetails', () => { + mount(); + jest.spyOn(CredentialsLogic.actions, 'fetchCredentials').mockImplementationOnce(() => {}); + jest.spyOn(CredentialsLogic.actions, 'fetchDetails').mockImplementationOnce(() => {}); - CredentialsLogic.actions.initializeCredentialsData(); - expect(CredentialsLogic.actions.fetchCredentials).toHaveBeenCalled(); - expect(CredentialsLogic.actions.fetchDetails).toHaveBeenCalled(); + CredentialsLogic.actions.initializeCredentialsData(); + expect(CredentialsLogic.actions.fetchCredentials).toHaveBeenCalled(); + expect(CredentialsLogic.actions.fetchDetails).toHaveBeenCalled(); + }); }); - }); - describe('fetchCredentials', () => { - const meta = { - page: { - current: 1, - size: 1, - total_pages: 1, - total_results: 1, - }, - }; - const results: object[] = []; - - it('will call an API endpoint and set the results with the `setCredentialsData` action', async () => { - mount(); - jest.spyOn(CredentialsLogic.actions, 'setCredentialsData').mockImplementationOnce(() => {}); - const promise = Promise.resolve({ meta, results }); - (HttpLogic.values.http.get as jest.Mock).mockReturnValue(promise); - - CredentialsLogic.actions.fetchCredentials(2); - expect(HttpLogic.values.http.get).toHaveBeenCalledWith('/api/app_search/credentials', { - query: { - 'page[current]': 2, + describe('fetchCredentials', () => { + const meta = { + page: { + current: 1, + size: 1, + total_pages: 1, + total_results: 1, }, + }; + const results: object[] = []; + + it('will call an API endpoint and set the results with the `setCredentialsData` action', async () => { + mount(); + jest.spyOn(CredentialsLogic.actions, 'setCredentialsData').mockImplementationOnce(() => {}); + const promise = Promise.resolve({ meta, results }); + (HttpLogic.values.http.get as jest.Mock).mockReturnValue(promise); + + CredentialsLogic.actions.fetchCredentials(2); + expect(HttpLogic.values.http.get).toHaveBeenCalledWith('/api/app_search/credentials', { + query: { + 'page[current]': 2, + }, + }); + await promise; + expect(CredentialsLogic.actions.setCredentialsData).toHaveBeenCalledWith(meta, results); }); - await promise; - expect(CredentialsLogic.actions.setCredentialsData).toHaveBeenCalledWith(meta, results); - }); - it('handles errors', async () => { - mount(); - const promise = Promise.reject('An error occured'); - (HttpLogic.values.http.get as jest.Mock).mockReturnValue(promise); + it('handles errors', async () => { + mount(); + const promise = Promise.reject('An error occured'); + (HttpLogic.values.http.get as jest.Mock).mockReturnValue(promise); + + CredentialsLogic.actions.fetchCredentials(); + try { + await promise; + } catch { + expect(flashAPIErrors).toHaveBeenCalledWith('An error occured'); + } + }); + }); - CredentialsLogic.actions.fetchCredentials(); - try { + describe('fetchDetails', () => { + it('will call an API endpoint and set the results with the `setCredentialsDetails` action', async () => { + mount(); + jest + .spyOn(CredentialsLogic.actions, 'setCredentialsDetails') + .mockImplementationOnce(() => {}); + const promise = Promise.resolve(credentialsDetails); + (HttpLogic.values.http.get as jest.Mock).mockReturnValue(promise); + + CredentialsLogic.actions.fetchDetails(); + expect(HttpLogic.values.http.get).toHaveBeenCalledWith( + '/api/app_search/credentials/details' + ); await promise; - } catch { - expect(flashAPIErrors).toHaveBeenCalledWith('An error occured'); - } - }); - }); + expect(CredentialsLogic.actions.setCredentialsDetails).toHaveBeenCalledWith( + credentialsDetails + ); + }); - describe('fetchDetails', () => { - it('will call an API endpoint and set the results with the `setCredentialsDetails` action', async () => { - mount(); - jest - .spyOn(CredentialsLogic.actions, 'setCredentialsDetails') - .mockImplementationOnce(() => {}); - const promise = Promise.resolve(credentialsDetails); - (HttpLogic.values.http.get as jest.Mock).mockReturnValue(promise); - - CredentialsLogic.actions.fetchDetails(); - expect(HttpLogic.values.http.get).toHaveBeenCalledWith('/api/app_search/credentials/details'); - await promise; - expect(CredentialsLogic.actions.setCredentialsDetails).toHaveBeenCalledWith( - credentialsDetails - ); + it('handles errors', async () => { + mount(); + const promise = Promise.reject('An error occured'); + (HttpLogic.values.http.get as jest.Mock).mockReturnValue(promise); + + CredentialsLogic.actions.fetchDetails(); + try { + await promise; + } catch { + expect(flashAPIErrors).toHaveBeenCalledWith('An error occured'); + } + }); }); - it('handles errors', async () => { - mount(); - const promise = Promise.reject('An error occured'); - (HttpLogic.values.http.get as jest.Mock).mockReturnValue(promise); + describe('deleteApiKey', () => { + const tokenName = 'abc123'; - CredentialsLogic.actions.fetchDetails(); - try { + it('will call an API endpoint and set the results with the `onApiKeyDelete` action', async () => { + mount(); + jest.spyOn(CredentialsLogic.actions, 'onApiKeyDelete').mockImplementationOnce(() => {}); + const promise = Promise.resolve(); + (HttpLogic.values.http.delete as jest.Mock).mockReturnValue(promise); + + CredentialsLogic.actions.deleteApiKey(tokenName); + expect(HttpLogic.values.http.delete).toHaveBeenCalledWith( + `/api/app_search/credentials/${tokenName}` + ); await promise; - } catch { - expect(flashAPIErrors).toHaveBeenCalledWith('An error occured'); - } + expect(CredentialsLogic.actions.onApiKeyDelete).toHaveBeenCalledWith(tokenName); + }); + + it('handles errors', async () => { + mount(); + const promise = Promise.reject('An error occured'); + (HttpLogic.values.http.delete as jest.Mock).mockReturnValue(promise); + + CredentialsLogic.actions.deleteApiKey(tokenName); + try { + await promise; + } catch { + expect(flashAPIErrors).toHaveBeenCalledWith('An error occured'); + } + }); }); }); - describe('deleteApiKey', () => { - const tokenName = 'abc123'; - - it('will call an API endpoint and set the results with the `onApiKeyDelete` action', async () => { - mount(); - jest.spyOn(CredentialsLogic.actions, 'onApiKeyDelete').mockImplementationOnce(() => {}); - const promise = Promise.resolve(); - (HttpLogic.values.http.delete as jest.Mock).mockReturnValue(promise); - - CredentialsLogic.actions.deleteApiKey(tokenName); - expect(HttpLogic.values.http.delete).toHaveBeenCalledWith( - `/api/app_search/credentials/${tokenName}` - ); - await promise; - expect(CredentialsLogic.actions.onApiKeyDelete).toHaveBeenCalledWith(tokenName); - }); + describe('selectors', () => { + describe('activeApiTokenExists', () => { + it('should be false if the token has no id', () => { + mount({ + activeApiToken: { + ...DEFAULT_VALUES.activeApiToken, + id: undefined, + }, + }); - it('handles errors', async () => { - mount(); - const promise = Promise.reject('An error occured'); - (HttpLogic.values.http.delete as jest.Mock).mockReturnValue(promise); + expect(CredentialsLogic.values.activeApiTokenExists).toEqual(false); + }); - CredentialsLogic.actions.deleteApiKey(tokenName); - try { - await promise; - } catch { - expect(flashAPIErrors).toHaveBeenCalledWith('An error occured'); - } + it('should be true if the token has an id', () => { + mount({ + activeApiToken: { + ...DEFAULT_VALUES.activeApiToken, + id: '123', + }, + }); + + expect(CredentialsLogic.values.activeApiTokenExists).toEqual(true); + }); }); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/credentials/credentials_logic.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/credentials/credentials_logic.ts index 43f2731711823..41897b8edbc1e 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/credentials/credentials_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/credentials/credentials_logic.ts @@ -13,12 +13,7 @@ import { HttpLogic } from '../../../shared/http'; import { IMeta } from '../../../../../common/types'; import { flashAPIErrors } from '../../../shared/flash_messages'; import { IEngine } from '../../types'; -import { IApiToken, ICredentialsDetails } from './types'; - -interface ITokenReadWrite { - name: 'read' | 'write'; - checked: boolean; -} +import { IApiToken, ICredentialsDetails, ITokenReadWrite } from './types'; const defaultApiToken: IApiToken = { name: '', @@ -44,7 +39,7 @@ export interface ICredentialsLogicActions { setTokenReadWrite(tokenReadWrite: ITokenReadWrite): ITokenReadWrite; setTokenName(name: string): string; setTokenType(tokenType: string): string; - toggleCredentialsForm(apiToken?: IApiToken): IApiToken; + showCredentialsForm(apiToken?: IApiToken): IApiToken; hideCredentialsForm(): { value: boolean }; resetCredentials(): { value: boolean }; initializeCredentialsData(): { value: boolean }; @@ -55,7 +50,7 @@ export interface ICredentialsLogicActions { export interface ICredentialsLogicValues { activeApiToken: IApiToken; - activeApiTokenIsExisting: boolean; + activeApiTokenExists: boolean; activeApiTokenRawName: string; apiTokens: IApiToken[]; dataLoading: boolean; @@ -66,7 +61,7 @@ export interface ICredentialsLogicValues { fullEngineAccessChecked: boolean; meta: Partial; nameInputBlurred: boolean; - showCredentialsForm: boolean; + shouldShowCredentialsForm: boolean; } export const CredentialsLogic = kea< @@ -90,7 +85,7 @@ export const CredentialsLogic = kea< }), setTokenName: (name) => name, setTokenType: (tokenType) => tokenType, - toggleCredentialsForm: (apiToken = { ...defaultApiToken }) => apiToken, + showCredentialsForm: (apiToken = { ...defaultApiToken }) => apiToken, hideCredentialsForm: false, resetCredentials: false, initializeCredentialsData: true, @@ -175,30 +170,23 @@ export const CredentialsLogic = kea< read: tokenType === PRIVATE, type: tokenType, }), - toggleCredentialsForm: (_, activeApiToken) => activeApiToken, + showCredentialsForm: (_, activeApiToken) => activeApiToken, }, ], activeApiTokenRawName: [ '', { setTokenName: (_, activeApiTokenRawName) => activeApiTokenRawName, - toggleCredentialsForm: (activeApiTokenRawName, activeApiToken) => - activeApiToken.name || activeApiTokenRawName, + showCredentialsForm: (_, activeApiToken) => activeApiToken.name, hideCredentialsForm: () => '', onApiTokenCreateSuccess: () => '', onApiTokenUpdateSuccess: () => '', }, ], - activeApiTokenIsExisting: [ + shouldShowCredentialsForm: [ false, { - toggleCredentialsForm: (_, activeApiToken) => !!activeApiToken.id, - }, - ], - showCredentialsForm: [ - false, - { - toggleCredentialsForm: (showCredentialsForm) => !showCredentialsForm, + showCredentialsForm: () => true, hideCredentialsForm: () => false, onApiTokenCreateSuccess: () => false, onApiTokenUpdateSuccess: () => false, @@ -209,7 +197,7 @@ export const CredentialsLogic = kea< { onApiTokenError: (_, formErrors) => formErrors, onApiTokenCreateSuccess: () => [], - toggleCredentialsForm: () => [], + showCredentialsForm: () => [], resetCredentials: () => [], }, ], @@ -222,6 +210,10 @@ export const CredentialsLogic = kea< return isCredentialsDetailsComplete === false || isCredentialsDataComplete === false; }, ], + activeApiTokenExists: [ + () => [selectors.activeApiToken], + (activeApiToken) => !!activeApiToken.id, + ], }), listeners: ({ actions, values }) => ({ initializeCredentialsData: () => { diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/credentials/types.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/credentials/types.ts index 9b09bd13a9086..bbf7a54da10da 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/credentials/types.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/credentials/types.ts @@ -20,3 +20,8 @@ export interface IApiToken { type: string; write?: boolean; } + +export interface ITokenReadWrite { + name: 'read' | 'write'; + checked: boolean; +} diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/index.test.tsx b/x-pack/plugins/enterprise_search/public/applications/app_search/index.test.tsx index c54d6ed3ddd6f..ab5b3c9faeea7 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/index.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/index.test.tsx @@ -7,11 +7,11 @@ import '../__mocks__/shallow_useeffect.mock'; import '../__mocks__/kea.mock'; import '../__mocks__/enterprise_search_url.mock'; +import { setMockValues, setMockActions } from '../__mocks__'; import React from 'react'; import { Redirect } from 'react-router-dom'; import { shallow } from 'enzyme'; -import { useValues, useActions } from 'kea'; import { Layout, SideNav, SideNavLink } from '../shared/layout'; import { SetupGuide } from './components/setup_guide'; @@ -21,14 +21,14 @@ import { AppSearch, AppSearchUnconfigured, AppSearchConfigured, AppSearchNav } f describe('AppSearch', () => { it('renders AppSearchUnconfigured when config.host is not set', () => { - (useValues as jest.Mock).mockImplementationOnce(() => ({ config: { host: '' } })); + setMockValues({ config: { host: '' } }); const wrapper = shallow(); expect(wrapper.find(AppSearchUnconfigured)).toHaveLength(1); }); it('renders AppSearchConfigured when config.host set', () => { - (useValues as jest.Mock).mockImplementationOnce(() => ({ config: { host: 'some.url' } })); + setMockValues({ config: { host: 'some.url' } }); const wrapper = shallow(); expect(wrapper.find(AppSearchConfigured)).toHaveLength(1); @@ -47,8 +47,8 @@ describe('AppSearchUnconfigured', () => { describe('AppSearchConfigured', () => { beforeEach(() => { // Mock resets - (useValues as jest.Mock).mockImplementation(() => ({ myRole: {} })); - (useActions as jest.Mock).mockImplementation(() => ({ initializeAppData: () => {} })); + setMockValues({ myRole: {} }); + setMockActions({ initializeAppData: () => {} }); }); it('renders with layout', () => { @@ -61,7 +61,7 @@ describe('AppSearchConfigured', () => { it('initializes app data with passed props', () => { const initializeAppData = jest.fn(); - (useActions as jest.Mock).mockImplementation(() => ({ initializeAppData })); + setMockActions({ initializeAppData }); shallow(); @@ -70,8 +70,8 @@ describe('AppSearchConfigured', () => { it('does not re-initialize app data', () => { const initializeAppData = jest.fn(); - (useActions as jest.Mock).mockImplementation(() => ({ initializeAppData })); - (useValues as jest.Mock).mockImplementation(() => ({ myRole: {}, hasInitialized: true })); + setMockActions({ initializeAppData }); + setMockValues({ myRole: {}, hasInitialized: true }); shallow(); @@ -79,7 +79,7 @@ describe('AppSearchConfigured', () => { }); it('renders ErrorConnecting', () => { - (useValues as jest.Mock).mockImplementation(() => ({ myRole: {}, errorConnecting: true })); + setMockValues({ myRole: {}, errorConnecting: true }); const wrapper = shallow(); @@ -87,7 +87,7 @@ describe('AppSearchConfigured', () => { }); it('passes readOnlyMode state', () => { - (useValues as jest.Mock).mockImplementation(() => ({ myRole: {}, readOnlyMode: true })); + setMockValues({ myRole: {}, readOnlyMode: true }); const wrapper = shallow(); @@ -109,9 +109,7 @@ describe('AppSearchNav', () => { }); it('renders the Settings link', () => { - (useValues as jest.Mock).mockImplementation(() => ({ - myRole: { canViewSettings: true }, - })); + setMockValues({ myRole: { canViewSettings: true } }); const wrapper = shallow(); expect(wrapper.find(SideNavLink).last().prop('to')).toEqual( @@ -120,9 +118,7 @@ describe('AppSearchNav', () => { }); it('renders the Credentials link', () => { - (useValues as jest.Mock).mockImplementation(() => ({ - myRole: { canViewAccountCredentials: true }, - })); + setMockValues({ myRole: { canViewAccountCredentials: true } }); const wrapper = shallow(); expect(wrapper.find(SideNavLink).last().prop('to')).toEqual( @@ -131,9 +127,7 @@ describe('AppSearchNav', () => { }); it('renders the Role Mappings link', () => { - (useValues as jest.Mock).mockImplementation(() => ({ - myRole: { canViewRoleMappings: true }, - })); + setMockValues({ myRole: { canViewRoleMappings: true } }); const wrapper = shallow(); expect(wrapper.find(SideNavLink).last().prop('to')).toEqual( diff --git a/x-pack/plugins/enterprise_search/public/applications/index.test.tsx b/x-pack/plugins/enterprise_search/public/applications/index.test.tsx index 66772f96671e8..d5b9513d0dbb3 100644 --- a/x-pack/plugins/enterprise_search/public/applications/index.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/index.test.tsx @@ -5,13 +5,16 @@ */ import React from 'react'; +import { getContext } from 'kea'; import { coreMock } from 'src/core/public/mocks'; import { licensingMock } from '../../../licensing/public/mocks'; import { renderApp, renderHeaderActions } from './'; +import { EnterpriseSearch } from './enterprise_search'; import { AppSearch } from './app_search'; import { WorkplaceSearch } from './workplace_search'; +import { KibanaLogic } from './shared/kibana'; describe('renderApp', () => { const kibanaDeps = { @@ -28,36 +31,70 @@ describe('renderApp', () => { jest.clearAllMocks(); }); - it('mounts and unmounts UI', () => { - const MockApp = () =>
Hello world!
; + const mockContainer = kibanaDeps.params.element; + const MockApp = () =>
Hello world!
; + it('mounts and unmounts UI', () => { const unmount = renderApp(MockApp, kibanaDeps, pluginData); - expect(kibanaDeps.params.element.querySelector('.hello-world')).not.toBeNull(); + expect(mockContainer.querySelector('.hello-world')).not.toBeNull(); unmount(); - expect(kibanaDeps.params.element.innerHTML).toEqual(''); + expect(mockContainer.innerHTML).toEqual(''); }); - it('renders AppSearch', () => { - renderApp(AppSearch, kibanaDeps, pluginData); - expect(kibanaDeps.params.element.querySelector('.setupGuide')).not.toBeNull(); - }); + /** + * Helper for automatically mounting and unmounting future tests + */ + let unmount: any; + const mount = (App: React.FC) => { + unmount = renderApp(App, kibanaDeps, pluginData); + }; + + describe('Enterprise Search apps', () => { + afterEach(() => unmount()); + + it('renders EnterpriseSearch', () => { + mount(EnterpriseSearch); + expect(mockContainer.querySelector('.enterpriseSearchOverview')).not.toBeNull(); + }); + + it('renders AppSearch', () => { + mount(AppSearch); + expect(mockContainer.querySelector('.setupGuide')).not.toBeNull(); + }); - it('renders WorkplaceSearch', () => { - renderApp(WorkplaceSearch, kibanaDeps, pluginData); - expect(kibanaDeps.params.element.querySelector('.setupGuide')).not.toBeNull(); + it('renders WorkplaceSearch', () => { + mount(WorkplaceSearch); + expect(mockContainer.querySelector('.setupGuide')).not.toBeNull(); + }); }); -}); -describe('renderHeaderActions', () => { - it('mounts and unmounts any HeaderActions component', () => { + describe('renderHeaderActions', () => { const mockHeaderEl = document.createElement('header'); const MockHeaderActions = () => ; - const unmount = renderHeaderActions(MockHeaderActions, mockHeaderEl); - expect(mockHeaderEl.querySelector('.hello-world')).not.toBeNull(); + it('mounts and unmounts any HeaderActions component', () => { + const store = getContext().store; - unmount(); - expect(mockHeaderEl.innerHTML).toEqual(''); + const unmountHeader = renderHeaderActions(MockHeaderActions, store, mockHeaderEl); + expect(mockHeaderEl.querySelector('.hello-world')).not.toBeNull(); + + unmountHeader(); + expect(mockHeaderEl.innerHTML).toEqual(''); + }); + + it('passes a renderHeaderActions helper to KibanaLogic, which can be used by our apps to render HeaderActions', () => { + // Setup + kibanaDeps.params.setHeaderActionMenu.mockImplementationOnce((cb: any) => cb(mockHeaderEl)); + mount(MockApp); + + // Call KibanaLogic's renderHeaderActions, which should call params.setHeaderActionMenu + KibanaLogic.values.renderHeaderActions(MockHeaderActions); + expect(kibanaDeps.params.setHeaderActionMenu).toHaveBeenCalled(); + + // renderHeaderActions should have been called and generated the correct DOM + expect(mockHeaderEl.querySelector('.hello-world')).not.toBeNull(); + unmount(); + }); }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/index.tsx b/x-pack/plugins/enterprise_search/public/applications/index.tsx index 63be9b684e56f..b9c94e351089d 100644 --- a/x-pack/plugins/enterprise_search/public/applications/index.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/index.tsx @@ -37,13 +37,16 @@ export const renderApp = ( externalUrl.enterpriseSearchUrl = publicUrl || config.host || ''; resetContext({ createStore: true }); - const store = getContext().store as Store; + const store = getContext().store; const unmountKibanaLogic = mountKibanaLogic({ config, + history: params.history, navigateToUrl: core.application.navigateToUrl, setBreadcrumbs: core.chrome.setBreadcrumbs, setDocTitle: core.chrome.docTitle.change, + renderHeaderActions: (HeaderActions) => + params.setHeaderActionMenu((el) => renderHeaderActions(HeaderActions, store, el)), }); const unmountLicensingLogic = mountLicensingLogic({ license$: plugins.licensing.license$, @@ -53,9 +56,7 @@ export const renderApp = ( errorConnecting, readOnlyMode: initialData.readOnlyMode, }); - const unmountFlashMessagesLogic = mountFlashMessagesLogic({ - history: params.history, - }); + const unmountFlashMessagesLogic = mountFlashMessagesLogic(); ReactDOM.render( @@ -83,7 +84,16 @@ export const renderApp = ( * @see https://github.com/elastic/kibana/blob/master/docs/development/core/public/kibana-plugin-core-public.appmountparameters.setheaderactionmenu.md */ -export const renderHeaderActions = (HeaderActions: React.FC, kibanaHeaderEl: HTMLElement) => { - ReactDOM.render(, kibanaHeaderEl); +export const renderHeaderActions = ( + HeaderActions: React.FC, + store: Store, + kibanaHeaderEl: HTMLElement +) => { + ReactDOM.render( + + + , + kibanaHeaderEl + ); return () => ReactDOM.unmountComponentAtNode(kibanaHeaderEl); }; diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/flash_messages/flash_messages_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/shared/flash_messages/flash_messages_logic.test.ts index c12011b47a472..ff1ec7428e828 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/flash_messages/flash_messages_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/flash_messages/flash_messages_logic.test.ts @@ -7,11 +7,14 @@ import { resetContext } from 'kea'; import { mockHistory } from '../../__mocks__'; +jest.mock('../kibana', () => ({ + KibanaLogic: { values: { history: mockHistory } }, +})); import { FlashMessagesLogic, mountFlashMessagesLogic, IFlashMessage } from './'; describe('FlashMessagesLogic', () => { - const mount = () => mountFlashMessagesLogic({ history: mockHistory as any }); + const mount = () => mountFlashMessagesLogic(); beforeEach(() => { jest.clearAllMocks(); diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/flash_messages/flash_messages_logic.ts b/x-pack/plugins/enterprise_search/public/applications/shared/flash_messages/flash_messages_logic.ts index 1735cc8ac7228..5a05a03adeb6b 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/flash_messages/flash_messages_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/flash_messages/flash_messages_logic.ts @@ -6,7 +6,8 @@ import { kea, MakeLogicType } from 'kea'; import { ReactNode } from 'react'; -import { History } from 'history'; + +import { KibanaLogic } from '../kibana'; export interface IFlashMessage { type: 'success' | 'info' | 'warning' | 'error'; @@ -61,10 +62,10 @@ export const FlashMessagesLogic = kea ({ + events: ({ values, actions }) => ({ afterMount: () => { // On React Router navigation, clear previous flash messages and load any queued messages - const unlisten = props.history.listen(() => { + const unlisten = KibanaLogic.values.history.listen(() => { actions.clearFlashMessages(); actions.setFlashMessages(values.queuedMessages); actions.clearQueuedMessages(); @@ -81,11 +82,7 @@ export const FlashMessagesLogic = kea { - FlashMessagesLogic(props); +export const mountFlashMessagesLogic = () => { const unmount = FlashMessagesLogic.mount(); return unmount; }; diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/flash_messages/set_message_helpers.test.ts b/x-pack/plugins/enterprise_search/public/applications/shared/flash_messages/set_message_helpers.test.ts index f2ddd560ac9c1..46027fdfb22b1 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/flash_messages/set_message_helpers.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/flash_messages/set_message_helpers.test.ts @@ -5,6 +5,9 @@ */ import { mockHistory } from '../../__mocks__'; +jest.mock('../kibana', () => ({ + KibanaLogic: { values: { history: mockHistory } }, +})); import { FlashMessagesLogic, @@ -18,7 +21,7 @@ describe('Flash Message Helpers', () => { const message = 'I am a message'; beforeEach(() => { - mountFlashMessagesLogic({ history: mockHistory as any }); + mountFlashMessagesLogic(); }); it('setSuccessMessage()', () => { diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.test.ts b/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.test.ts index 99262cca97ca8..4d51362a7e11b 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.test.ts @@ -20,7 +20,10 @@ describe('KibanaLogic', () => { it('sets values from props', () => { mountKibanaLogic(mockKibanaValues); - expect(KibanaLogic.values).toEqual(mockKibanaValues); + expect(KibanaLogic.values).toEqual({ + ...mockKibanaValues, + navigateToUrl: expect.any(Function), + }); }); it('gracefully handles missing configs', () => { @@ -29,4 +32,20 @@ describe('KibanaLogic', () => { expect(KibanaLogic.values.config).toEqual({}); }); }); + + describe('navigateToUrl()', () => { + beforeEach(() => mountKibanaLogic(mockKibanaValues)); + + it('runs paths through createHref before calling navigateToUrl', () => { + KibanaLogic.values.navigateToUrl('/test'); + + expect(mockKibanaValues.navigateToUrl).toHaveBeenCalledWith('/app/enterprise_search/test'); + }); + + it('does not run paths through createHref if the shouldNotCreateHref option is passed', () => { + KibanaLogic.values.navigateToUrl('/test', { shouldNotCreateHref: true }); + + expect(mockKibanaValues.navigateToUrl).toHaveBeenCalledWith('/test'); + }); + }); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts b/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts index a884acb02d10a..9519a62ac352b 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts @@ -6,26 +6,43 @@ import { kea, MakeLogicType } from 'kea'; +import { FC } from 'react'; +import { History } from 'history'; import { ApplicationStart, ChromeBreadcrumb } from 'src/core/public'; -export interface IKibanaValues { +import { createHref, ICreateHrefOptions } from '../react_router_helpers'; + +interface IKibanaLogicProps { config: { host?: string }; + history: History; navigateToUrl: ApplicationStart['navigateToUrl']; setBreadcrumbs(crumbs: ChromeBreadcrumb[]): void; setDocTitle(title: string): void; + renderHeaderActions(HeaderActions: FC): void; +} +export interface IKibanaValues extends IKibanaLogicProps { + navigateToUrl(path: string, options?: ICreateHrefOptions): Promise; } export const KibanaLogic = kea>({ path: ['enterprise_search', 'kibana_logic'], reducers: ({ props }) => ({ config: [props.config || {}, {}], - navigateToUrl: [props.navigateToUrl, {}], + history: [props.history, {}], + navigateToUrl: [ + (url: string, options?: ICreateHrefOptions) => { + const href = createHref(url, props.history, options); + return props.navigateToUrl(href); + }, + {}, + ], setBreadcrumbs: [props.setBreadcrumbs, {}], setDocTitle: [props.setDocTitle, {}], + renderHeaderActions: [props.renderHeaderActions, {}], }), }); -export const mountKibanaLogic = (props: IKibanaValues) => { +export const mountKibanaLogic = (props: IKibanaLogicProps) => { KibanaLogic(props); const unmount = KibanaLogic.mount(); return unmount; diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/kibana_chrome/generate_breadcrumbs.test.ts b/x-pack/plugins/enterprise_search/public/applications/shared/kibana_chrome/generate_breadcrumbs.test.ts index a2c0bcae6fc18..61a4397486346 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/kibana_chrome/generate_breadcrumbs.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/kibana_chrome/generate_breadcrumbs.test.ts @@ -5,10 +5,12 @@ */ import '../../__mocks__/kea.mock'; -import '../../__mocks__/react_router_history.mock'; import { mockKibanaValues, mockHistory } from '../../__mocks__'; -jest.mock('../react_router_helpers', () => ({ letBrowserHandleEvent: jest.fn(() => false) })); +jest.mock('../react_router_helpers', () => ({ + letBrowserHandleEvent: jest.fn(() => false), + createHref: jest.requireActual('../react_router_helpers').createHref, +})); import { letBrowserHandleEvent } from '../react_router_helpers'; import { @@ -50,21 +52,23 @@ describe('useBreadcrumbs', () => { it('prevents default navigation and uses React Router history on click', () => { const breadcrumb = useBreadcrumbs([{ text: '', path: '/test' }])[0] as any; + + expect(breadcrumb.href).toEqual('/app/enterprise_search/test'); + expect(mockHistory.createHref).toHaveBeenCalled(); + const event = { preventDefault: jest.fn() }; breadcrumb.onClick(event); - expect(mockKibanaValues.navigateToUrl).toHaveBeenCalledWith('/app/enterprise_search/test'); - expect(mockHistory.createHref).toHaveBeenCalled(); expect(event.preventDefault).toHaveBeenCalled(); + expect(mockKibanaValues.navigateToUrl).toHaveBeenCalled(); }); it('does not call createHref if shouldNotCreateHref is passed', () => { const breadcrumb = useBreadcrumbs([ { text: '', path: '/test', shouldNotCreateHref: true }, ])[0] as any; - breadcrumb.onClick({ preventDefault: () => null }); - expect(mockKibanaValues.navigateToUrl).toHaveBeenCalledWith('/test'); + expect(breadcrumb.href).toEqual('/test'); expect(mockHistory.createHref).not.toHaveBeenCalled(); }); diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/kibana_chrome/generate_breadcrumbs.ts b/x-pack/plugins/enterprise_search/public/applications/shared/kibana_chrome/generate_breadcrumbs.ts index ff7f29e2e393c..9ef23e6b176d9 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/kibana_chrome/generate_breadcrumbs.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/kibana_chrome/generate_breadcrumbs.ts @@ -5,7 +5,6 @@ */ import { useValues } from 'kea'; -import { useHistory } from 'react-router-dom'; import { EuiBreadcrumb } from '@elastic/eui'; import { KibanaLogic } from '../../shared/kibana'; @@ -16,7 +15,7 @@ import { WORKPLACE_SEARCH_PLUGIN, } from '../../../../common/constants'; -import { letBrowserHandleEvent } from '../react_router_helpers'; +import { letBrowserHandleEvent, createHref } from '../react_router_helpers'; /** * Generate React-Router-friendly EUI breadcrumb objects @@ -33,20 +32,17 @@ interface IBreadcrumb { export type TBreadcrumbs = IBreadcrumb[]; export const useBreadcrumbs = (breadcrumbs: TBreadcrumbs) => { - const history = useHistory(); - const { navigateToUrl } = useValues(KibanaLogic); + const { navigateToUrl, history } = useValues(KibanaLogic); return breadcrumbs.map(({ text, path, shouldNotCreateHref }) => { const breadcrumb = { text } as EuiBreadcrumb; if (path) { - const href = shouldNotCreateHref ? path : (history.createHref({ pathname: path }) as string); - - breadcrumb.href = href; + breadcrumb.href = createHref(path, history, { shouldNotCreateHref }); breadcrumb.onClick = (event) => { if (letBrowserHandleEvent(event)) return; event.preventDefault(); - navigateToUrl(href); + navigateToUrl(path, { shouldNotCreateHref }); }; } diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/create_href.test.ts b/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/create_href.test.ts new file mode 100644 index 0000000000000..5f96beeb42ae4 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/create_href.test.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { mockHistory } from '../../__mocks__'; + +import { createHref } from './'; + +describe('createHref', () => { + it('generates a path with the React Router basename included', () => { + expect(createHref('/test', mockHistory)).toEqual('/app/enterprise_search/test'); + }); + + it('does not include the basename if shouldNotCreateHref is passed', () => { + expect(createHref('/test', mockHistory, { shouldNotCreateHref: true })).toEqual('/test'); + }); +}); diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/create_href.ts b/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/create_href.ts new file mode 100644 index 0000000000000..cc8279c80a092 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/create_href.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { History } from 'history'; + +/** + * This helper uses React Router's createHref function to generate links with router basenames accounted for. + * For example, if we perform navigateToUrl('/engines') within App Search, we expect the app basename + * to be taken into account to be intelligently routed to '/app/enterprise_search/app_search/engines'. + * + * This helper accomplishes that, while still giving us an escape hatch for navigation *between* apps. + * For example, if we want to navigate the user from App Search to Enterprise Search we could + * navigateToUrl('/app/enterprise_search', { shouldNotCreateHref: true }) + */ +export interface ICreateHrefOptions { + shouldNotCreateHref?: boolean; +} +export const createHref = ( + path: string, + history: History, + options?: ICreateHrefOptions +): string => { + return options?.shouldNotCreateHref ? path : history.createHref({ pathname: path }); +}; diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/eui_link.test.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/eui_link.test.tsx index eba632d86dc66..82fbb8940d460 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/eui_link.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/eui_link.test.tsx @@ -5,7 +5,6 @@ */ import '../../__mocks__/kea.mock'; -import '../../__mocks__/react_router_history.mock'; import React from 'react'; import { shallow, mount } from 'enzyme'; diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/eui_link.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/eui_link.tsx index 99314515f2734..e0aa5afdf38c1 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/eui_link.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/eui_link.tsx @@ -6,11 +6,10 @@ import React from 'react'; import { useValues } from 'kea'; -import { useHistory } from 'react-router-dom'; import { EuiLink, EuiButton, EuiButtonProps, EuiLinkAnchorProps } from '@elastic/eui'; import { KibanaLogic } from '../../shared/kibana'; -import { letBrowserHandleEvent } from './link_events'; +import { letBrowserHandleEvent, createHref } from './'; /** * Generates either an EuiLink or EuiButton with a React-Router-ified link @@ -33,11 +32,10 @@ export const EuiReactRouterHelper: React.FC = ({ shouldNotCreateHref, children, }) => { - const history = useHistory(); - const { navigateToUrl } = useValues(KibanaLogic); + const { navigateToUrl, history } = useValues(KibanaLogic); // Generate the correct link href (with basename etc. accounted for) - const href = shouldNotCreateHref ? to : history.createHref({ pathname: to }); + const href = createHref(to, history, { shouldNotCreateHref }); const reactRouterLinkClick = (event: React.MouseEvent) => { if (onClick) onClick(); // Run any passed click events (e.g. telemetry) @@ -47,7 +45,7 @@ export const EuiReactRouterHelper: React.FC = ({ event.preventDefault(); // Perform SPA navigation. - navigateToUrl(href); + navigateToUrl(to, { shouldNotCreateHref }); }; const reactRouterProps = { href, onClick: reactRouterLinkClick }; diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/index.ts b/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/index.ts index 46dc328633153..6915d3222c45c 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/index.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/react_router_helpers/index.ts @@ -5,5 +5,6 @@ */ export { letBrowserHandleEvent } from './link_events'; +export { createHref, ICreateHrefOptions } from './create_href'; export { EuiReactRouterLink as EuiLink } from './eui_link'; export { EuiReactRouterButton as EuiButton } from './eui_link'; diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.test.tsx b/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.test.tsx index 76afde142a690..25544b4a9bb68 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.test.tsx @@ -6,13 +6,14 @@ import '../__mocks__/shallow_useeffect.mock'; import '../__mocks__/kea.mock'; +import { setMockValues, setMockActions, mockKibanaValues } from '../__mocks__'; import React from 'react'; import { Redirect } from 'react-router-dom'; import { shallow } from 'enzyme'; -import { useValues, useActions } from 'kea'; import { Layout } from '../shared/layout'; +import { WorkplaceSearchHeaderActions } from './components/layout'; import { SetupGuide } from './views/setup_guide'; import { ErrorState } from './views/error_state'; import { Overview } from './views/overview'; @@ -21,14 +22,14 @@ import { WorkplaceSearch, WorkplaceSearchUnconfigured, WorkplaceSearchConfigured describe('WorkplaceSearch', () => { it('renders WorkplaceSearchUnconfigured when config.host is not set', () => { - (useValues as jest.Mock).mockImplementationOnce(() => ({ config: { host: '' } })); + setMockValues({ config: { host: '' } }); const wrapper = shallow(); expect(wrapper.find(WorkplaceSearchUnconfigured)).toHaveLength(1); }); it('renders WorkplaceSearchConfigured when config.host set', () => { - (useValues as jest.Mock).mockImplementationOnce(() => ({ config: { host: 'some.url' } })); + setMockValues({ config: { host: 'some.url' } }); const wrapper = shallow(); expect(wrapper.find(WorkplaceSearchConfigured)).toHaveLength(1); @@ -46,39 +47,40 @@ describe('WorkplaceSearchUnconfigured', () => { describe('WorkplaceSearchConfigured', () => { beforeEach(() => { - // Mock resets - (useValues as jest.Mock).mockImplementation(() => ({})); - (useActions as jest.Mock).mockImplementation(() => ({ initializeAppData: () => {} })); + jest.clearAllMocks(); + setMockActions({ initializeAppData: () => {} }); }); - it('renders with layout', () => { + it('renders layout and header actions', () => { const wrapper = shallow(); expect(wrapper.find(Layout).prop('readOnlyMode')).toBeFalsy(); expect(wrapper.find(Overview)).toHaveLength(1); + expect(mockKibanaValues.renderHeaderActions).toHaveBeenCalledWith(WorkplaceSearchHeaderActions); }); it('initializes app data with passed props', () => { const initializeAppData = jest.fn(); - (useActions as jest.Mock).mockImplementation(() => ({ initializeAppData })); + setMockActions({ initializeAppData }); shallow(); expect(initializeAppData).toHaveBeenCalledWith({ isFederatedAuth: true }); }); - it('does not re-initialize app data', () => { + it('does not re-initialize app data or re-render header actions', () => { const initializeAppData = jest.fn(); - (useActions as jest.Mock).mockImplementation(() => ({ initializeAppData })); - (useValues as jest.Mock).mockImplementation(() => ({ hasInitialized: true })); + setMockActions({ initializeAppData }); + setMockValues({ hasInitialized: true }); shallow(); expect(initializeAppData).not.toHaveBeenCalled(); + expect(mockKibanaValues.renderHeaderActions).not.toHaveBeenCalled(); }); it('renders ErrorState', () => { - (useValues as jest.Mock).mockImplementation(() => ({ errorConnecting: true })); + setMockValues({ errorConnecting: true }); const wrapper = shallow(); @@ -86,7 +88,7 @@ describe('WorkplaceSearchConfigured', () => { }); it('passes readOnlyMode state', () => { - (useValues as jest.Mock).mockImplementation(() => ({ readOnlyMode: true })); + setMockValues({ readOnlyMode: true }); const wrapper = shallow(); diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.tsx b/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.tsx index 4769358a3eb30..b4c4217659043 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/index.tsx @@ -14,7 +14,7 @@ import { KibanaLogic } from '../shared/kibana'; import { HttpLogic } from '../shared/http'; import { AppLogic } from './app_logic'; import { Layout } from '../shared/layout'; -import { WorkplaceSearchNav } from './components/layout/nav'; +import { WorkplaceSearchNav, WorkplaceSearchHeaderActions } from './components/layout'; import { SETUP_GUIDE_PATH } from './routes'; @@ -31,10 +31,14 @@ export const WorkplaceSearch: React.FC = (props) => { export const WorkplaceSearchConfigured: React.FC = (props) => { const { hasInitialized } = useValues(AppLogic); const { initializeAppData } = useActions(AppLogic); + const { renderHeaderActions } = useValues(KibanaLogic); const { errorConnecting, readOnlyMode } = useValues(HttpLogic); useEffect(() => { - if (!hasInitialized) initializeAppData(props); + if (!hasInitialized) { + initializeAppData(props); + renderHeaderActions(WorkplaceSearchHeaderActions); + } }, [hasInitialized]); return ( diff --git a/x-pack/plugins/enterprise_search/public/plugin.ts b/x-pack/plugins/enterprise_search/public/plugin.ts index d870127f297b4..e054a49ef1f74 100644 --- a/x-pack/plugins/enterprise_search/public/plugin.ts +++ b/x-pack/plugins/enterprise_search/public/plugin.ts @@ -23,7 +23,6 @@ import { WORKPLACE_SEARCH_PLUGIN, } from '../common/constants'; import { IInitialAppData } from '../common/types'; -import { externalUrl } from './applications/shared/enterprise_search_url'; export interface ClientConfigType { host?: string; @@ -101,21 +100,14 @@ export class EnterpriseSearchPlugin implements Plugin { mount: async (params: AppMountParameters) => { const kibanaDeps = await this.getKibanaDeps(core, params); const { chrome, http } = kibanaDeps.core; - chrome.docTitle.change(APP_SEARCH_PLUGIN.NAME); + chrome.docTitle.change(WORKPLACE_SEARCH_PLUGIN.NAME); await this.getInitialData(http); const pluginData = this.getPluginData(); - const { renderApp, renderHeaderActions } = await import('./applications'); + const { renderApp } = await import('./applications'); const { WorkplaceSearch } = await import('./applications/workplace_search'); - const { WorkplaceSearchHeaderActions } = await import( - './applications/workplace_search/components/layout' - ); - params.setHeaderActionMenu((element) => - renderHeaderActions(WorkplaceSearchHeaderActions, element) - ); - return renderApp(WorkplaceSearch, kibanaDeps, pluginData); }, }); @@ -175,10 +167,6 @@ export class EnterpriseSearchPlugin implements Plugin { try { this.data = await http.get('/api/enterprise_search/config_data'); this.hasInitialized = true; - - // TODO: This is a temporary workaround to keep the WorkplaceSearchHeaderActions working. - // We'll solve this shortly by ensuring the main app store loads before the header actions. - externalUrl.enterpriseSearchUrl = this.data.publicUrl || this.config.host; } catch { this.data.errorConnecting = true; } diff --git a/x-pack/plugins/global_search_bar/public/components/search_bar.tsx b/x-pack/plugins/global_search_bar/public/components/search_bar.tsx index dc1c111dea006..0dde28db0436d 100644 --- a/x-pack/plugins/global_search_bar/public/components/search_bar.tsx +++ b/x-pack/plugins/global_search_bar/public/components/search_bar.tsx @@ -161,6 +161,9 @@ export function SearchBar({ globalSearch, navigateToUrl }: Props) { defaultMessage: 'Search Elastic', }), }} + popoverProps={{ + repositionOnScroll: true, + }} emptyMessage={

diff --git a/x-pack/plugins/index_lifecycle_management/README.md b/x-pack/plugins/index_lifecycle_management/README.md index 3b72ac85810c6..28b2a4637da89 100644 --- a/x-pack/plugins/index_lifecycle_management/README.md +++ b/x-pack/plugins/index_lifecycle_management/README.md @@ -1,6 +1,8 @@ # Index Lifecycle Management -## Quick steps for testing ILM in Index Management +## Testing + +### Quick steps for testing ILM in Index Management You can test that the `Frozen` badge, phase filtering, and lifecycle information is surfaced in Index Management by running this series of requests in Console: @@ -92,4 +94,26 @@ After about a minute, there should be an error on this index. When you click the ILM information in the detail panel as well as an error. You can dismiss the error by clicking `Manage > Retry lifecycle step`. -![image](https://user-images.githubusercontent.com/1238659/78087984-a6811000-7377-11ea-880e-1a7b182c14f1.png) \ No newline at end of file +![image](https://user-images.githubusercontent.com/1238659/78087984-a6811000-7377-11ea-880e-1a7b182c14f1.png) + +### Data tier notifications + +When creating or editing an ILM policy the UI should notify users that under certain conditions their data will not be +moved to a tier corresponding to a phase. For instance, when a cluster only has hot-tier nodes. We test the UI +with this cluster state by starting an ES node with the `data_hot` role. Using this command: + +```bash +yarn es snapshot --license=trial -E node.roles=data_hot,master,data_content +``` + +This will create a cluster where we have a single node that belongs to the hot-tier. In the data allocation section of +both the warm and cold phase you should see notice like the following: + +![image](https://user-images.githubusercontent.com/8155004/94132944-4b306600-fe60-11ea-9c3d-02229e3055b8.png) + +Default configuration for a node is that it belongs to all tiers, in which case you should not see this notice. Test +this by running: + +```bash +yarn es snapshot --license=trial +``` \ No newline at end of file diff --git a/x-pack/plugins/index_lifecycle_management/__jest__/components/edit_policy.test.tsx b/x-pack/plugins/index_lifecycle_management/__jest__/components/edit_policy.test.tsx index f195228775772..dfbe19ba21a94 100644 --- a/x-pack/plugins/index_lifecycle_management/__jest__/components/edit_policy.test.tsx +++ b/x-pack/plugins/index_lifecycle_management/__jest__/components/edit_policy.test.tsx @@ -503,6 +503,30 @@ describe('edit policy', () => { expect(rendered.find('.euiLoadingSpinner').exists()).toBeFalsy(); expect(findTestSubject(rendered, 'defaultAllocationWarning').exists()).toBeTruthy(); }); + test('should show default allocation notice when hot tier exists, but not warm tier', async () => { + http.setupNodeListResponse({ + nodesByAttributes: {}, + nodesByRoles: { data_hot: ['test'], data_cold: ['test'] }, + }); + const rendered = mountWithIntl(component); + noRollover(rendered); + setPolicyName(rendered, 'mypolicy'); + await activatePhase(rendered, 'warm'); + expect(rendered.find('.euiLoadingSpinner').exists()).toBeFalsy(); + expect(findTestSubject(rendered, 'defaultAllocationNotice').exists()).toBeTruthy(); + }); + test('should not show default allocation notice when node with "data" role exists', async () => { + http.setupNodeListResponse({ + nodesByAttributes: {}, + nodesByRoles: { data: ['test'] }, + }); + const rendered = mountWithIntl(component); + noRollover(rendered); + setPolicyName(rendered, 'mypolicy'); + await activatePhase(rendered, 'warm'); + expect(rendered.find('.euiLoadingSpinner').exists()).toBeFalsy(); + expect(findTestSubject(rendered, 'defaultAllocationNotice').exists()).toBeFalsy(); + }); }); describe('cold phase', () => { beforeEach(() => { @@ -610,6 +634,30 @@ describe('edit policy', () => { expect(rendered.find('.euiLoadingSpinner').exists()).toBeFalsy(); expect(findTestSubject(rendered, 'defaultAllocationWarning').exists()).toBeTruthy(); }); + test('should show default allocation notice when warm or hot tiers exists, but not cold tier', async () => { + http.setupNodeListResponse({ + nodesByAttributes: {}, + nodesByRoles: { data_hot: ['test'], data_warm: ['test'] }, + }); + const rendered = mountWithIntl(component); + noRollover(rendered); + setPolicyName(rendered, 'mypolicy'); + await activatePhase(rendered, 'cold'); + expect(rendered.find('.euiLoadingSpinner').exists()).toBeFalsy(); + expect(findTestSubject(rendered, 'defaultAllocationNotice').exists()).toBeTruthy(); + }); + test('should not show default allocation notice when node with "data" role exists', async () => { + http.setupNodeListResponse({ + nodesByAttributes: {}, + nodesByRoles: { data: ['test'] }, + }); + const rendered = mountWithIntl(component); + noRollover(rendered); + setPolicyName(rendered, 'mypolicy'); + await activatePhase(rendered, 'cold'); + expect(rendered.find('.euiLoadingSpinner').exists()).toBeFalsy(); + expect(findTestSubject(rendered, 'defaultAllocationNotice').exists()).toBeFalsy(); + }); }); describe('delete phase', () => { test('should allow 0 for phase timing', async () => { diff --git a/x-pack/plugins/index_lifecycle_management/common/constants/data_tiers.ts b/x-pack/plugins/index_lifecycle_management/common/constants/data_tiers.ts new file mode 100644 index 0000000000000..8a1acf72949e6 --- /dev/null +++ b/x-pack/plugins/index_lifecycle_management/common/constants/data_tiers.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +// Order of node roles matters here, the warm phase prefers allocating data +// to the data_warm role. +import { NodeDataRole, PhaseWithAllocation } from '../types'; + +const WARM_PHASE_NODE_PREFERENCE: NodeDataRole[] = ['data_warm', 'data_hot']; + +const COLD_PHASE_NODE_PREFERENCE: NodeDataRole[] = ['data_cold', 'data_warm', 'data_hot']; + +export const phaseToNodePreferenceMap: Record = Object.freeze({ + warm: WARM_PHASE_NODE_PREFERENCE, + cold: COLD_PHASE_NODE_PREFERENCE, +}); diff --git a/x-pack/plugins/index_lifecycle_management/common/constants/index.ts b/x-pack/plugins/index_lifecycle_management/common/constants/index.ts index 5c89b917163d8..522dc6d82a4e9 100644 --- a/x-pack/plugins/index_lifecycle_management/common/constants/index.ts +++ b/x-pack/plugins/index_lifecycle_management/common/constants/index.ts @@ -7,6 +7,8 @@ import { i18n } from '@kbn/i18n'; import { LicenseType } from '../../../licensing/common/types'; +export { phaseToNodePreferenceMap } from './data_tiers'; + const basicLicense: LicenseType = 'basic'; export const PLUGIN = { diff --git a/x-pack/plugins/index_lifecycle_management/common/types/api.ts b/x-pack/plugins/index_lifecycle_management/common/types/api.ts index 16b8fbd127ab6..fcdbdf2c9cc90 100644 --- a/x-pack/plugins/index_lifecycle_management/common/types/api.ts +++ b/x-pack/plugins/index_lifecycle_management/common/types/api.ts @@ -4,9 +4,9 @@ * you may not use this file except in compliance with the Elastic License. */ -export type NodeDataRole = 'data' | 'data_hot' | 'data_warm' | 'data_cold' | 'data_frozen'; +import { NodeDataRoleWithCatchAll } from '.'; export interface ListNodesRouteResponse { nodesByAttributes: { [attributePair: string]: string[] }; - nodesByRoles: { [role in NodeDataRole]?: string[] }; + nodesByRoles: { [role in NodeDataRoleWithCatchAll]?: string[] }; } diff --git a/x-pack/plugins/index_lifecycle_management/common/types/index.ts b/x-pack/plugins/index_lifecycle_management/common/types/index.ts index a23dc647f1f65..1f41370e48f18 100644 --- a/x-pack/plugins/index_lifecycle_management/common/types/index.ts +++ b/x-pack/plugins/index_lifecycle_management/common/types/index.ts @@ -7,3 +7,10 @@ export * from './api'; export * from './policies'; + +/** + * These roles reflect how nodes are stratified into different data tiers. The "data" role + * is a catch-all that can be used to store data in any phase. + */ +export type NodeDataRole = 'data_hot' | 'data_warm' | 'data_cold'; +export type NodeDataRoleWithCatchAll = 'data' | NodeDataRole; diff --git a/x-pack/plugins/index_lifecycle_management/public/application/lib/data_tiers/check_phase_compatibility.ts b/x-pack/plugins/index_lifecycle_management/public/application/lib/data_tiers/check_phase_compatibility.ts deleted file mode 100644 index 2ef0fb145551f..0000000000000 --- a/x-pack/plugins/index_lifecycle_management/public/application/lib/data_tiers/check_phase_compatibility.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { - NodeDataRole, - ListNodesRouteResponse, - PhaseWithAllocation, -} from '../../../../common/types'; - -/** - * Given a phase and current node roles, determine whether the phase - * can use default data tier allocation. - * - * This can only be checked for phases that have an allocate action. - */ -export const isPhaseDefaultDataAllocationCompatible = ( - phase: PhaseWithAllocation, - nodesByRoles: ListNodesRouteResponse['nodesByRoles'] -): boolean => { - // The 'data' role covers all node roles, so if we have at least one node with the data role - // we can use default allocation. - if (nodesByRoles.data?.length) { - return true; - } - - // Otherwise we need to check whether a node role for the specific phase exists - if (nodesByRoles[`data_${phase}` as NodeDataRole]?.length) { - return true; - } - - // Otherwise default allocation has nowhere to allocate new shards to in this phase. - return false; -}; diff --git a/x-pack/plugins/index_lifecycle_management/public/application/lib/data_tiers/get_available_node_roles_for_phase.ts b/x-pack/plugins/index_lifecycle_management/public/application/lib/data_tiers/get_available_node_roles_for_phase.ts new file mode 100644 index 0000000000000..6daae57330886 --- /dev/null +++ b/x-pack/plugins/index_lifecycle_management/public/application/lib/data_tiers/get_available_node_roles_for_phase.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { + NodeDataRole, + ListNodesRouteResponse, + PhaseWithAllocation, +} from '../../../../common/types'; + +import { phaseToNodePreferenceMap } from '../../../../common/constants'; + +export type AllocationNodeRole = NodeDataRole | 'none'; + +/** + * Given a phase and current cluster node roles, determine which nodes the phase + * will allocate data to. For instance, for the warm phase, with warm + * tier nodes, we would expect "data_warm". + * + * If no nodes can be identified for allocation (very special case) then + * we return "none". + */ +export const getAvailableNodeRoleForPhase = ( + phase: PhaseWithAllocation, + nodesByRoles: ListNodesRouteResponse['nodesByRoles'] +): AllocationNodeRole => { + const preferredNodeRoles = phaseToNodePreferenceMap[phase]; + + // The 'data' role covers all node roles, so if we have at least one node with the data role + // we can allocate to our first preference. + if (nodesByRoles.data?.length) { + return preferredNodeRoles[0]; + } + + return preferredNodeRoles.find((role) => Boolean(nodesByRoles[role]?.length)) ?? 'none'; +}; diff --git a/x-pack/plugins/index_lifecycle_management/public/application/lib/data_tiers/index.ts b/x-pack/plugins/index_lifecycle_management/public/application/lib/data_tiers/index.ts index 67a512cefe00c..87f2cbc08ecc0 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/lib/data_tiers/index.ts +++ b/x-pack/plugins/index_lifecycle_management/public/application/lib/data_tiers/index.ts @@ -6,4 +6,4 @@ export * from './determine_allocation_type'; -export * from './check_phase_compatibility'; +export * from './get_available_node_roles_for_phase'; diff --git a/x-pack/plugins/index_lifecycle_management/public/application/lib/data_tiers/is_node_role_first_preference.ts b/x-pack/plugins/index_lifecycle_management/public/application/lib/data_tiers/is_node_role_first_preference.ts new file mode 100644 index 0000000000000..872efa740b131 --- /dev/null +++ b/x-pack/plugins/index_lifecycle_management/public/application/lib/data_tiers/is_node_role_first_preference.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { NodeDataRole, PhaseWithAllocation } from '../../../../common/types'; +import { phaseToNodePreferenceMap } from '../../../../common/constants'; + +export const isNodeRoleFirstPreference = (phase: PhaseWithAllocation, nodeRole: NodeDataRole) => { + return phaseToNodePreferenceMap[phase][0] === nodeRole; +}; diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/data_tier_allocation/default_allocation_notice.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/data_tier_allocation/default_allocation_notice.tsx new file mode 100644 index 0000000000000..8faa9bb2972c2 --- /dev/null +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/data_tier_allocation/default_allocation_notice.tsx @@ -0,0 +1,111 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { i18n } from '@kbn/i18n'; +import React, { FunctionComponent } from 'react'; +import { EuiCallOut, EuiSpacer } from '@elastic/eui'; + +import { PhaseWithAllocation, NodeDataRole } from '../../../../../../common/types'; + +import { AllocationNodeRole } from '../../../../lib'; + +const i18nTextsNodeRoleToDataTier: Record = { + data_hot: i18n.translate('xpack.indexLifecycleMgmt.editPolicy.dataTierHotLabel', { + defaultMessage: 'hot', + }), + data_warm: i18n.translate('xpack.indexLifecycleMgmt.editPolicy.dataTierWarmLabel', { + defaultMessage: 'warm', + }), + data_cold: i18n.translate('xpack.indexLifecycleMgmt.editPolicy.dataTierColdLabel', { + defaultMessage: 'cold', + }), +}; + +const i18nTexts = { + notice: { + warm: { + title: i18n.translate( + 'xpack.indexLifecycleMgmt.warmPhase.dataTier.defaultAllocationNotice.warm.title', + { defaultMessage: 'No nodes assigned to the warm tier' } + ), + body: (nodeRole: NodeDataRole) => + i18n.translate('xpack.indexLifecycleMgmt.warmPhase.dataTier.defaultAllocationNotice.warm', { + defaultMessage: + 'This policy will move data in the warm phase to {tier} tier nodes instead.', + values: { tier: i18nTextsNodeRoleToDataTier[nodeRole] }, + }), + }, + cold: { + title: i18n.translate( + 'xpack.indexLifecycleMgmt.warmPhase.dataTier.defaultAllocationNotice.cold.title', + { defaultMessage: 'No nodes assigned to the cold tier' } + ), + body: (nodeRole: NodeDataRole) => + i18n.translate('xpack.indexLifecycleMgmt.warmPhase.dataTier.defaultAllocationNotice.cold', { + defaultMessage: + 'This policy will move data in the cold phase to {tier} tier nodes instead.', + values: { tier: i18nTextsNodeRoleToDataTier[nodeRole] }, + }), + }, + }, + warning: { + warm: { + title: i18n.translate( + 'xpack.indexLifecycleMgmt.warmPhase.dataTier.defaultAllocationNotAvailableTitle', + { defaultMessage: 'No nodes assigned to the warm tier' } + ), + body: i18n.translate( + 'xpack.indexLifecycleMgmt.warmPhase.dataTier.defaultAllocationNotAvailableBody', + { + defaultMessage: + 'Assign at least one node to the warm or hot tier to use role-based allocation. The policy will fail to complete allocation if there are no available nodes.', + } + ), + }, + cold: { + title: i18n.translate( + 'xpack.indexLifecycleMgmt.coldPhase.dataTier.defaultAllocationNotAvailableTitle', + { defaultMessage: 'No nodes assigned to the cold tier' } + ), + body: i18n.translate( + 'xpack.indexLifecycleMgmt.coldPhase.dataTier.defaultAllocationNotAvailableBody', + { + defaultMessage: + 'Assign at least one node to the cold, warm, or hot tier to use role-based allocation. The policy will fail to complete allocation if there are no available nodes.', + } + ), + }, + }, +}; + +interface Props { + phase: PhaseWithAllocation; + targetNodeRole: AllocationNodeRole; +} + +export const DefaultAllocationNotice: FunctionComponent = ({ phase, targetNodeRole }) => { + const content = + targetNodeRole === 'none' ? ( + + {i18nTexts.warning[phase].body} + + ) : ( + + {i18nTexts.notice[phase].body(targetNodeRole)} + + ); + + return ( + <> + + {content} + + ); +}; diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/data_tier_allocation/default_allocation_warning.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/data_tier_allocation/default_allocation_warning.tsx deleted file mode 100644 index 5aba411b6fe53..0000000000000 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/data_tier_allocation/default_allocation_warning.tsx +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { i18n } from '@kbn/i18n'; -import React, { FunctionComponent } from 'react'; -import { EuiCallOut, EuiSpacer } from '@elastic/eui'; - -import { PhaseWithAllocation } from '../../../../../../common/types'; - -const i18nTexts = { - warm: { - title: i18n.translate( - 'xpack.indexLifecycleMgmt.warmPhase.dataTier.defaultAllocationNotAvailableTitle', - { defaultMessage: 'No nodes assigned to the warm tier' } - ), - body: i18n.translate( - 'xpack.indexLifecycleMgmt.warmPhase.dataTier.defaultAllocationNotAvailableBody', - { - defaultMessage: - 'Assign at least one node to the warm tier to use role-based allocation. The policy will fail to complete allocation if there are no warm nodes.', - } - ), - }, - cold: { - title: i18n.translate( - 'xpack.indexLifecycleMgmt.coldPhase.dataTier.defaultAllocationNotAvailableTitle', - { defaultMessage: 'No nodes assigned to the cold tier' } - ), - body: i18n.translate( - 'xpack.indexLifecycleMgmt.coldPhase.dataTier.defaultAllocationNotAvailableBody', - { - defaultMessage: - 'Assign at least one node to the cold tier to use role-based allocation. The policy will fail to complete allocation if there are no cold nodes.', - } - ), - }, -}; - -interface Props { - phase: PhaseWithAllocation; -} - -export const DefaultAllocationWarning: FunctionComponent = ({ phase }) => { - return ( - <> - - - {i18nTexts[phase].body} - - - ); -}; diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/data_tier_allocation/index.ts b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/data_tier_allocation/index.ts index 26464a75ae14c..dcbdf960fd380 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/data_tier_allocation/index.ts +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/data_tier_allocation/index.ts @@ -8,5 +8,5 @@ export { NodesDataProvider } from './node_data_provider'; export { NodeAllocation } from './node_allocation'; export { NodeAttrsDetails } from './node_attrs_details'; export { DataTierAllocation } from './data_tier_allocation'; -export { DefaultAllocationWarning } from './default_allocation_warning'; +export { DefaultAllocationNotice } from './default_allocation_notice'; export { NoNodeAttributesWarning } from './no_node_attributes_warning'; diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/index.ts b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/index.ts index 2428cade0898e..c39545112ee52 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/index.ts +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/index.ts @@ -18,7 +18,7 @@ export { NodeAllocation, NodeAttrsDetails, NodesDataProvider, - DefaultAllocationWarning, + DefaultAllocationNotice, } from './data_tier_allocation'; export { DescribedFormField } from './described_form_field'; export { Forcemerge } from './forcemerge'; diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/cold_phase.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/cold_phase.tsx index 241a98fffa6df..b9b1b8b663ec8 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/cold_phase.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/cold_phase.tsx @@ -33,7 +33,7 @@ const i18nTexts = { dataTierAllocation: { description: i18n.translate('xpack.indexLifecycleMgmt.coldPhase.dataTier.description', { defaultMessage: - 'Move data to data nodes optimized for less frequent, read-only access. Store cold data on less-expensive hardware.', + 'Move data to nodes optimized for less frequent, read-only access. Store data in the cold phase on less-expensive hardware.', }), }, }; @@ -192,8 +192,7 @@ export const ColdPhase: FunctionComponent = ({ {' '} diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/shared/data_tier_allocation_field.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/shared/data_tier_allocation_field.tsx index 6475e5286a778..623d443a1db01 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/shared/data_tier_allocation_field.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/shared/data_tier_allocation_field.tsx @@ -9,15 +9,16 @@ import { i18n } from '@kbn/i18n'; import { EuiDescribedFormGroup, EuiFormRow } from '@elastic/eui'; import { PhaseWithAllocationAction, PhaseWithAllocation } from '../../../../../../common/types'; +import { PhaseValidationErrors } from '../../../../services/policies/policy_validation'; +import { getAvailableNodeRoleForPhase } from '../../../../lib/data_tiers'; +import { isNodeRoleFirstPreference } from '../../../../lib/data_tiers/is_node_role_first_preference'; import { DataTierAllocation, - DefaultAllocationWarning, + DefaultAllocationNotice, NoNodeAttributesWarning, NodesDataProvider, } from '../../components/data_tier_allocation'; -import { PhaseValidationErrors } from '../../../../services/policies/policy_validation'; -import { isPhaseDefaultDataAllocationCompatible } from '../../../../lib/data_tiers'; const i18nTexts = { title: i18n.translate('xpack.indexLifecycleMgmt.common.dataTier.title', { @@ -48,9 +49,34 @@ export const DataTierAllocationField: FunctionComponent = ({ return ( {(nodesData) => { - const isCompatible = isPhaseDefaultDataAllocationCompatible(phase, nodesData.nodesByRoles); const hasNodeAttrs = Boolean(Object.keys(nodesData.nodesByAttributes ?? {}).length); + const renderDefaultAllocationNotice = () => { + if (phaseData.dataTierAllocationType !== 'default') { + return null; + } + + const allocationNodeRole = getAvailableNodeRoleForPhase(phase, nodesData.nodesByRoles); + if ( + allocationNodeRole !== 'none' && + isNodeRoleFirstPreference(phase, allocationNodeRole) + ) { + return null; + } + + return ; + }; + + const renderNodeAttributesWarning = () => { + if (phaseData.dataTierAllocationType !== 'custom') { + return null; + } + if (hasNodeAttrs) { + return null; + } + return ; + }; + return ( {i18nTexts.title}} @@ -70,14 +96,8 @@ export const DataTierAllocationField: FunctionComponent = ({ /> {/* Data tier related warnings */} - - {phaseData.dataTierAllocationType === 'default' && !isCompatible && ( - - )} - - {phaseData.dataTierAllocationType === 'custom' && !hasNodeAttrs && ( - - )} + {renderDefaultAllocationNotice()} + {renderNodeAttributesWarning()} diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/warm_phase.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/warm_phase.tsx index 16a740b1171c9..b837eed1256c5 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/warm_phase.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/phases/warm_phase.tsx @@ -45,8 +45,7 @@ const i18nTexts = { ), dataTierAllocation: { description: i18n.translate('xpack.indexLifecycleMgmt.warmPhase.dataTier.description', { - defaultMessage: - 'Move warm data to nodes optimized for read-only access. Store warm data on less-expensive hardware.', + defaultMessage: 'Move data to nodes optimized for less-frequent, read-only access.', }), }, }; diff --git a/x-pack/plugins/infra/.storybook/main.js b/x-pack/plugins/infra/.storybook/main.js new file mode 100644 index 0000000000000..1818aa44a9399 --- /dev/null +++ b/x-pack/plugins/infra/.storybook/main.js @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +module.exports = require('@kbn/storybook').defaultConfig; diff --git a/x-pack/plugins/infra/common/alerting/logs/types.ts b/x-pack/plugins/infra/common/alerting/logs/log_threshold/types.ts similarity index 69% rename from x-pack/plugins/infra/common/alerting/logs/types.ts rename to x-pack/plugins/infra/common/alerting/logs/log_threshold/types.ts index 1b736f52aa7e2..c505a234c7b2b 100644 --- a/x-pack/plugins/infra/common/alerting/logs/types.ts +++ b/x-pack/plugins/infra/common/alerting/logs/log_threshold/types.ts @@ -5,10 +5,18 @@ */ import { i18n } from '@kbn/i18n'; import * as rt from 'io-ts'; -import { commonSearchSuccessResponseFieldsRT } from '../../utils/elasticsearch_runtime_types'; +import { commonSearchSuccessResponseFieldsRT } from '../../../utils/elasticsearch_runtime_types'; export const LOG_DOCUMENT_COUNT_ALERT_TYPE_ID = 'logs.alert.document.count'; +const ThresholdTypeRT = rt.keyof({ + count: null, + ratio: null, +}); + +export type ThresholdType = rt.TypeOf; + +// Comparators // export enum Comparator { GT = 'more than', GT_OR_EQ = 'more than or equals', @@ -82,6 +90,7 @@ export const ComparatorToi18nMap = { ), }; +// Alert parameters // export enum AlertStates { OK, ALERT, @@ -89,12 +98,12 @@ export enum AlertStates { ERROR, } -const DocumentCountRT = rt.type({ +const ThresholdRT = rt.type({ comparator: ComparatorRT, value: rt.number, }); -export type DocumentCount = rt.TypeOf; +export type Threshold = rt.TypeOf; export const CriterionRT = rt.type({ field: rt.string, @@ -104,6 +113,13 @@ export const CriterionRT = rt.type({ export type Criterion = rt.TypeOf; export const criteriaRT = rt.array(CriterionRT); +export type Criteria = rt.TypeOf; + +export const countCriteriaRT = criteriaRT; +export type CountCriteria = rt.TypeOf; + +export const ratioCriteriaRT = rt.tuple([criteriaRT, criteriaRT]); +export type RatioCriteria = rt.TypeOf; export const TimeUnitRT = rt.union([ rt.literal('s'), @@ -116,25 +132,73 @@ export type TimeUnit = rt.TypeOf; export const timeSizeRT = rt.number; export const groupByRT = rt.array(rt.string); -export const LogDocumentCountAlertParamsRT = rt.intersection([ +const RequiredAlertParamsRT = rt.type({ + // NOTE: "count" would be better named as "threshold", but this would require a + // migration of encrypted saved objects, so we'll keep "count" until it's problematic. + count: ThresholdRT, + timeUnit: TimeUnitRT, + timeSize: timeSizeRT, +}); + +const OptionalAlertParamsRT = rt.partial({ + groupBy: groupByRT, +}); + +export const alertParamsRT = rt.intersection([ rt.type({ - count: DocumentCountRT, - criteria: criteriaRT, - timeUnit: TimeUnitRT, - timeSize: timeSizeRT, + criteria: countCriteriaRT, + ...RequiredAlertParamsRT.props, }), rt.partial({ - groupBy: groupByRT, + ...OptionalAlertParamsRT.props, }), ]); -export type LogDocumentCountAlertParams = rt.TypeOf; +export type CountAlertParams = rt.TypeOf; + +export const ratioAlertParamsRT = rt.intersection([ + rt.type({ + criteria: ratioCriteriaRT, + ...RequiredAlertParamsRT.props, + }), + rt.partial({ + ...OptionalAlertParamsRT.props, + }), +]); + +export type RatioAlertParams = rt.TypeOf; + +export const AlertParamsRT = rt.union([alertParamsRT, ratioAlertParamsRT]); +export type AlertParams = rt.TypeOf; + +export const isRatioAlert = (criteria: AlertParams['criteria']): criteria is RatioCriteria => { + return criteria.length > 0 && Array.isArray(criteria[0]) ? true : false; +}; + +export const isRatioAlertParams = (params: AlertParams): params is RatioAlertParams => { + return isRatioAlert(params.criteria); +}; + +export const getNumerator = (criteria: RatioCriteria): Criteria => { + return criteria[0]; +}; + +export const getDenominator = (criteria: RatioCriteria): Criteria => { + return criteria[1]; +}; + +export const hasGroupBy = (alertParams: AlertParams) => { + const { groupBy } = alertParams; + return groupBy && groupBy.length > 0 ? true : false; +}; +// Chart previews // const chartPreviewHistogramBucket = rt.type({ key: rt.number, doc_count: rt.number, }); +// ES query responses // export const UngroupedSearchQueryResponseRT = rt.intersection([ commonSearchSuccessResponseFieldsRT, rt.intersection([ diff --git a/x-pack/plugins/infra/common/http_api/infra_ml/results/common.ts b/x-pack/plugins/infra/common/http_api/infra_ml/results/common.ts index 0474fbd1cfc2f..deb8e6401008d 100644 --- a/x-pack/plugins/infra/common/http_api/infra_ml/results/common.ts +++ b/x-pack/plugins/infra/common/http_api/infra_ml/results/common.ts @@ -57,3 +57,11 @@ export const sortRT = rt.type({ }); export type Sort = rt.TypeOf; + +export const metricRT = rt.keyof({ + memory_usage: null, + network_in: null, + network_out: null, +}); + +export type Metric = rt.TypeOf; diff --git a/x-pack/plugins/infra/common/http_api/infra_ml/results/metrics_hosts_anomalies.ts b/x-pack/plugins/infra/common/http_api/infra_ml/results/metrics_hosts_anomalies.ts index 9fdac09fec20e..a08dd438a32c8 100644 --- a/x-pack/plugins/infra/common/http_api/infra_ml/results/metrics_hosts_anomalies.ts +++ b/x-pack/plugins/infra/common/http_api/infra_ml/results/metrics_hosts_anomalies.ts @@ -7,7 +7,7 @@ import * as rt from 'io-ts'; import { timeRangeRT, routeTimingMetadataRT } from '../../shared'; -import { anomalyTypeRT, paginationCursorRT, sortRT, paginationRT } from './common'; +import { anomalyTypeRT, paginationCursorRT, sortRT, paginationRT, metricRT } from './common'; export const INFA_ML_GET_METRICS_HOSTS_ANOMALIES_PATH = '/api/infra/infra_ml/results/metrics_hosts_anomalies'; @@ -18,6 +18,7 @@ const metricsHostAnomalyCommonFieldsRT = rt.type({ typical: rt.number, actual: rt.number, type: anomalyTypeRT, + influencers: rt.array(rt.string), duration: rt.number, startTime: rt.number, jobId: rt.string, @@ -64,12 +65,11 @@ export const getMetricsHostsAnomaliesRequestPayloadRT = rt.type({ timeRange: timeRangeRT, }), rt.partial({ + metric: metricRT, // Pagination properties pagination: paginationRT, // Sort properties sort: sortRT, - // // Dataset filters - // datasets: rt.array(rt.string), }), ]), }); diff --git a/x-pack/plugins/infra/common/http_api/infra_ml/results/metrics_k8s_anomalies.ts b/x-pack/plugins/infra/common/http_api/infra_ml/results/metrics_k8s_anomalies.ts index ab1f245a74c0c..7450bb39276ac 100644 --- a/x-pack/plugins/infra/common/http_api/infra_ml/results/metrics_k8s_anomalies.ts +++ b/x-pack/plugins/infra/common/http_api/infra_ml/results/metrics_k8s_anomalies.ts @@ -7,7 +7,7 @@ import * as rt from 'io-ts'; import { timeRangeRT, routeTimingMetadataRT } from '../../shared'; -import { paginationCursorRT, anomalyTypeRT, sortRT, paginationRT } from './common'; +import { paginationCursorRT, anomalyTypeRT, sortRT, paginationRT, metricRT } from './common'; export const INFA_ML_GET_METRICS_K8S_ANOMALIES_PATH = '/api/infra/infra_ml/results/metrics_k8s_anomalies'; @@ -18,6 +18,7 @@ const metricsK8sAnomalyCommonFieldsRT = rt.type({ typical: rt.number, actual: rt.number, type: anomalyTypeRT, + influencers: rt.array(rt.string), duration: rt.number, startTime: rt.number, jobId: rt.string, @@ -64,6 +65,7 @@ export const getMetricsK8sAnomaliesRequestPayloadRT = rt.type({ timeRange: timeRangeRT, }), rt.partial({ + metric: metricRT, // Pagination properties pagination: paginationRT, // Sort properties diff --git a/x-pack/plugins/infra/common/http_api/log_alerts/chart_preview_data.ts b/x-pack/plugins/infra/common/http_api/log_alerts/chart_preview_data.ts index 15914bd1b2209..3226287d4cbde 100644 --- a/x-pack/plugins/infra/common/http_api/log_alerts/chart_preview_data.ts +++ b/x-pack/plugins/infra/common/http_api/log_alerts/chart_preview_data.ts @@ -5,7 +5,12 @@ */ import * as rt from 'io-ts'; -import { criteriaRT, TimeUnitRT, timeSizeRT, groupByRT } from '../../alerting/logs/types'; +import { + criteriaRT, + TimeUnitRT, + timeSizeRT, + groupByRT, +} from '../../alerting/logs/log_threshold/types'; export const LOG_ALERTS_CHART_PREVIEW_DATA_PATH = '/api/infra/log_alerts/chart_preview_data'; diff --git a/x-pack/plugins/infra/public/components/alerting/logs/expression_editor/criteria.tsx b/x-pack/plugins/infra/public/components/alerting/logs/expression_editor/criteria.tsx deleted file mode 100644 index 627ea2bbef429..0000000000000 --- a/x-pack/plugins/infra/public/components/alerting/logs/expression_editor/criteria.tsx +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import React from 'react'; -import { EuiFlexItem, EuiFlexGroup, EuiAccordion } from '@elastic/eui'; -import { IFieldType } from 'src/plugins/data/public'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { IErrorObject } from '../../../../../../triggers_actions_ui/public/types'; -import { Criterion } from './criterion'; -import { - LogDocumentCountAlertParams, - Criterion as CriterionType, -} from '../../../../../common/alerting/logs/types'; -import { AlertsContext } from './editor'; -import { CriterionPreview } from './criterion_preview_chart'; - -interface Props { - fields: IFieldType[]; - criteria?: LogDocumentCountAlertParams['criteria']; - updateCriterion: (idx: number, params: Partial) => void; - removeCriterion: (idx: number) => void; - errors: IErrorObject; - alertParams: Partial; - context: AlertsContext; - sourceId: string; -} - -export const Criteria: React.FC = ({ - fields, - criteria, - updateCriterion, - removeCriterion, - errors, - alertParams, - context, - sourceId, -}) => { - if (!criteria) return null; - return ( - - - {criteria.map((criterion, idx) => { - return ( - 1} - errors={errors[idx.toString()] as IErrorObject} - /> - } - key={idx} - arrowDisplay="right" - > - - - ); - })} - - - ); -}; diff --git a/x-pack/plugins/infra/public/components/alerting/logs/expression_editor/document_count.tsx b/x-pack/plugins/infra/public/components/alerting/logs/expression_editor/document_count.tsx deleted file mode 100644 index ff6a8e7e55fd6..0000000000000 --- a/x-pack/plugins/infra/public/components/alerting/logs/expression_editor/document_count.tsx +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import React, { useState } from 'react'; -import { i18n } from '@kbn/i18n'; -import { - EuiPopoverTitle, - EuiFlexItem, - EuiFlexGroup, - EuiPopover, - EuiSelect, - EuiFieldNumber, - EuiExpression, - EuiFormRow, -} from '@elastic/eui'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { IErrorObject } from '../../../../../../triggers_actions_ui/public/types'; -import { - Comparator, - ComparatorToi18nMap, - LogDocumentCountAlertParams, -} from '../../../../../common/alerting/logs/types'; - -const documentCountPrefix = i18n.translate('xpack.infra.logs.alertFlyout.documentCountPrefix', { - defaultMessage: 'when', -}); - -const getComparatorOptions = (): Array<{ - value: Comparator; - text: string; -}> => { - return [ - { value: Comparator.LT, text: ComparatorToi18nMap[Comparator.LT] }, - { value: Comparator.LT_OR_EQ, text: ComparatorToi18nMap[Comparator.LT_OR_EQ] }, - { value: Comparator.GT, text: ComparatorToi18nMap[Comparator.GT] }, - { value: Comparator.GT_OR_EQ, text: ComparatorToi18nMap[Comparator.GT_OR_EQ] }, - ]; -}; - -interface Props { - comparator?: Comparator; - value?: number; - updateCount: (params: Partial) => void; - errors: IErrorObject; -} - -export const DocumentCount: React.FC = ({ comparator, value, updateCount, errors }) => { - const [isComparatorPopoverOpen, setComparatorPopoverOpenState] = useState(false); - const [isValuePopoverOpen, setIsValuePopoverOpen] = useState(false); - - const documentCountValue = i18n.translate('xpack.infra.logs.alertFlyout.documentCountValue', { - defaultMessage: '{value, plural, one {log entry} other {log entries}}', - values: { value }, - }); - - const documentCountSuffix = i18n.translate('xpack.infra.logs.alertFlyout.documentCountSuffix', { - defaultMessage: '{value, plural, one {occurs} other {occur}}', - values: { value }, - }); - - return ( - - - setComparatorPopoverOpenState(true)} - /> - } - isOpen={isComparatorPopoverOpen} - closePopover={() => setComparatorPopoverOpenState(false)} - ownFocus - panelPaddingSize="s" - anchorPosition="downLeft" - > -

- {documentCountPrefix} - updateCount({ comparator: e.target.value as Comparator })} - options={getComparatorOptions()} - /> -
- - - - - setIsValuePopoverOpen(true)} - color={errors.value.length === 0 ? 'secondary' : 'danger'} - /> - } - isOpen={isValuePopoverOpen} - closePopover={() => setIsValuePopoverOpen(false)} - ownFocus - panelPaddingSize="s" - anchorPosition="downLeft" - > -
- {documentCountValue} - 0} error={errors.value}> - { - const number = parseInt(e.target.value, 10); - updateCount({ value: number ? number : undefined }); - }} - /> - -
-
-
- - - - - - ); -}; diff --git a/x-pack/plugins/infra/public/components/alerting/logs/alert_dropdown.tsx b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/alert_dropdown.tsx similarity index 97% rename from x-pack/plugins/infra/public/components/alerting/logs/alert_dropdown.tsx rename to x-pack/plugins/infra/public/components/alerting/logs/log_threshold/alert_dropdown.tsx index b8eb73b99f45e..74634bbd5d290 100644 --- a/x-pack/plugins/infra/public/components/alerting/logs/alert_dropdown.tsx +++ b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/alert_dropdown.tsx @@ -8,7 +8,7 @@ import React, { useState, useCallback, useMemo } from 'react'; import { EuiPopover, EuiButtonEmpty, EuiContextMenuItem, EuiContextMenuPanel } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; import { AlertFlyout } from './alert_flyout'; -import { useLinkProps } from '../../../hooks/use_link_props'; +import { useLinkProps } from '../../../../hooks/use_link_props'; export const AlertDropdown = () => { const [popoverOpen, setPopoverOpen] = useState(false); diff --git a/x-pack/plugins/infra/public/components/alerting/logs/alert_flyout.tsx b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/alert_flyout.tsx similarity index 84% rename from x-pack/plugins/infra/public/components/alerting/logs/alert_flyout.tsx rename to x-pack/plugins/infra/public/components/alerting/logs/log_threshold/alert_flyout.tsx index 45e4f8576892c..c6e16dcc9aaef 100644 --- a/x-pack/plugins/infra/public/components/alerting/logs/alert_flyout.tsx +++ b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/alert_flyout.tsx @@ -6,11 +6,10 @@ import React, { useContext } from 'react'; import { ApplicationStart, DocLinksStart, HttpStart, NotificationsStart } from 'src/core/public'; - -import { AlertsContextProvider, AlertAdd } from '../../../../../triggers_actions_ui/public'; -import { TriggerActionsContext } from '../../../utils/triggers_actions_context'; -import { useKibana } from '../../../../../../../src/plugins/kibana_react/public'; -import { LOG_DOCUMENT_COUNT_ALERT_TYPE_ID } from '../../../../common/alerting/logs/types'; +import { AlertsContextProvider, AlertAdd } from '../../../../../../triggers_actions_ui/public'; +import { TriggerActionsContext } from '../../../../utils/triggers_actions_context'; +import { useKibana } from '../../../../../../../../src/plugins/kibana_react/public'; +import { LOG_DOCUMENT_COUNT_ALERT_TYPE_ID } from '../../../../../common/alerting/logs/log_threshold/types'; interface Props { visible?: boolean; diff --git a/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/expression_editor/criteria.tsx b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/expression_editor/criteria.tsx new file mode 100644 index 0000000000000..a607b5ebf9975 --- /dev/null +++ b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/expression_editor/criteria.tsx @@ -0,0 +1,284 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { useCallback } from 'react'; +import { EuiFlexItem, EuiFlexGroup, EuiButtonEmpty, EuiAccordion, EuiSpacer } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n/react'; +import { i18n } from '@kbn/i18n'; +import { IFieldType } from 'src/plugins/data/public'; +import { Criterion } from './criterion'; +import { + AlertParams, + Comparator, + Criteria as CriteriaType, + Criterion as CriterionType, + CountCriteria as CountCriteriaType, + RatioCriteria as RatioCriteriaType, + isRatioAlert, + getNumerator, + getDenominator, +} from '../../../../../../common/alerting/logs/log_threshold/types'; +import { AlertsContext, ExpressionLike } from './editor'; +import { CriterionPreview } from './criterion_preview_chart'; +import { Errors, CriterionErrors } from '../validation'; + +const DEFAULT_CRITERIA = { field: 'log.level', comparator: Comparator.EQ, value: 'error' }; + +const QueryAText = i18n.translate('xpack.infra.logs.alerting.threshold.ratioCriteriaQueryAText', { + defaultMessage: 'Query A', +}); + +const QueryBText = i18n.translate('xpack.infra.logs.alerting.threshold.ratioCriteriaQueryBText', { + defaultMessage: 'Query B', +}); + +interface SharedProps { + fields: IFieldType[]; + criteria?: AlertParams['criteria']; + errors: Errors['criteria']; + alertParams: Partial; + context: AlertsContext; + sourceId: string; + updateCriteria: (criteria: AlertParams['criteria']) => void; +} + +type CriteriaProps = SharedProps; + +export const Criteria: React.FC = (props) => { + const { criteria, errors } = props; + if (!criteria || criteria.length === 0) return null; + + return !isRatioAlert(criteria) ? ( + + ) : ( + + ); +}; + +interface CriteriaWrapperProps { + alertParams: SharedProps['alertParams']; + fields: SharedProps['fields']; + updateCriterion: (idx: number, params: Partial) => void; + removeCriterion: (idx: number) => void; + addCriterion: () => void; + criteria: CriteriaType; + errors: CriterionErrors; + context: SharedProps['context']; + sourceId: SharedProps['sourceId']; + isRatio?: boolean; +} + +const CriteriaWrapper: React.FC = (props) => { + const { + updateCriterion, + removeCriterion, + addCriterion, + criteria, + fields, + errors, + alertParams, + context, + sourceId, + isRatio = false, + } = props; + + return ( + + + {criteria.map((criterion, idx) => { + return ( + 1} + errors={errors[idx]} + /> + } + key={idx} + arrowDisplay="right" + > + + + ); + })} + + + + ); +}; + +interface RatioCriteriaProps { + alertParams: SharedProps['alertParams']; + fields: SharedProps['fields']; + criteria: RatioCriteriaType; + errors: Errors['criteria']; + context: SharedProps['context']; + sourceId: SharedProps['sourceId']; + updateCriteria: (criteria: AlertParams['criteria']) => void; +} + +const RatioCriteria: React.FC = (props) => { + const { criteria, errors, updateCriteria } = props; + + const handleUpdateNumeratorCriteria = useCallback( + (criteriaParam: CriteriaType) => { + const nextCriteria: RatioCriteriaType = [criteriaParam, getDenominator(criteria)]; + updateCriteria(nextCriteria); + }, + [updateCriteria, criteria] + ); + + const handleUpdateDenominatorCriteria = useCallback( + (criteriaParam: CriteriaType) => { + const nextCriteria: RatioCriteriaType = [getNumerator(criteria), criteriaParam]; + updateCriteria(nextCriteria); + }, + [updateCriteria, criteria] + ); + + const { + updateCriterion: updateNumeratorCriterion, + addCriterion: addNumeratorCriterion, + removeCriterion: removeNumeratorCriterion, + } = useCriteriaState(getNumerator(criteria), handleUpdateNumeratorCriteria); + + const { + updateCriterion: updateDenominatorCriterion, + addCriterion: addDenominatorCriterion, + removeCriterion: removeDenominatorCriterion, + } = useCriteriaState(getDenominator(criteria), handleUpdateDenominatorCriteria); + + return ( + <> + + + + + + + + + + + + + ); +}; + +interface CountCriteriaProps { + alertParams: SharedProps['alertParams']; + fields: SharedProps['fields']; + criteria: CountCriteriaType; + errors: Errors['criteria']; + context: SharedProps['context']; + sourceId: SharedProps['sourceId']; + updateCriteria: (criteria: AlertParams['criteria']) => void; +} + +const CountCriteria: React.FC = (props) => { + const { criteria, updateCriteria, errors } = props; + + const handleUpdateCriteria = useCallback( + (criteriaParam: CriteriaType) => { + updateCriteria(criteriaParam); + }, + [updateCriteria] + ); + + const { updateCriterion, addCriterion, removeCriterion } = useCriteriaState( + criteria, + handleUpdateCriteria + ); + + return ( + + ); +}; + +const useCriteriaState = ( + criteria: CriteriaType, + onUpdateCriteria: (criteria: CriteriaType) => void +) => { + const updateCriterion = useCallback( + (idx, criterionParams) => { + const nextCriteria = criteria.map((criterion, index) => { + return idx === index ? { ...criterion, ...criterionParams } : criterion; + }); + onUpdateCriteria(nextCriteria); + }, + [criteria, onUpdateCriteria] + ); + + const addCriterion = useCallback(() => { + const nextCriteria = criteria ? [...criteria, DEFAULT_CRITERIA] : [DEFAULT_CRITERIA]; + onUpdateCriteria(nextCriteria); + }, [criteria, onUpdateCriteria]); + + const removeCriterion = useCallback( + (idx) => { + const nextCriteria = criteria.filter((criterion, index) => { + return index !== idx; + }); + onUpdateCriteria(nextCriteria); + }, + [criteria, onUpdateCriteria] + ); + + return { updateCriterion, addCriterion, removeCriterion }; +}; + +const AddCriterionButton = ({ addCriterion }: { addCriterion: () => void }) => { + return ( +
+ + + +
+ ); +}; diff --git a/x-pack/plugins/infra/public/components/alerting/logs/expression_editor/criterion.tsx b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/expression_editor/criterion.tsx similarity index 95% rename from x-pack/plugins/infra/public/components/alerting/logs/expression_editor/criterion.tsx rename to x-pack/plugins/infra/public/components/alerting/logs/log_threshold/expression_editor/criterion.tsx index 9ee9373bd2c14..8ecd172c08d24 100644 --- a/x-pack/plugins/infra/public/components/alerting/logs/expression_editor/criterion.tsx +++ b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/expression_editor/criterion.tsx @@ -18,14 +18,15 @@ import { EuiFormRow, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { isNumber, isFinite } from 'lodash'; import { IFieldType } from 'src/plugins/data/public'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { IErrorObject } from '../../../../../../triggers_actions_ui/public/types'; +import { IErrorObject } from '../../../../../../../triggers_actions_ui/public/types'; import { Comparator, Criterion as CriterionType, ComparatorToi18nMap, -} from '../../../../../common/alerting/logs/types'; +} from '../../../../../../common/alerting/logs/log_threshold/types'; const firstCriterionFieldPrefix = i18n.translate( 'xpack.infra.logs.alertFlyout.firstCriterionFieldPrefix', @@ -239,8 +240,10 @@ export const Criterion: React.FC = ({ compressed value={criterion.value as number | undefined} onChange={(e) => { - const number = parseInt(e.target.value, 10); - updateCriterion(idx, { value: number ? number : undefined }); + const number = parseFloat(e.target.value); + updateCriterion(idx, { + value: isNumber(number) && isFinite(number) ? number : undefined, + }); }} /> ) : ( diff --git a/x-pack/plugins/infra/public/components/alerting/logs/expression_editor/criterion_preview_chart.tsx b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/expression_editor/criterion_preview_chart.tsx similarity index 87% rename from x-pack/plugins/infra/public/components/alerting/logs/expression_editor/criterion_preview_chart.tsx rename to x-pack/plugins/infra/public/components/alerting/logs/log_threshold/expression_editor/criterion_preview_chart.tsx index 31f9a64015c07..675900499e793 100644 --- a/x-pack/plugins/infra/public/components/alerting/logs/expression_editor/criterion_preview_chart.tsx +++ b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/expression_editor/criterion_preview_chart.tsx @@ -31,28 +31,30 @@ import { getChartTheme, yAxisFormatter, NUM_BUCKETS, -} from '../../shared/criterion_preview_chart/criterion_preview_chart'; +} from '../../../shared/criterion_preview_chart/criterion_preview_chart'; import { - LogDocumentCountAlertParams, + AlertParams, + Threshold, Criterion, Comparator, -} from '../../../../../common/alerting/logs/types'; -import { Color, colorTransformer } from '../../../../../common/color_palette'; +} from '../../../../../../common/alerting/logs/log_threshold/types'; +import { Color, colorTransformer } from '../../../../../../common/color_palette'; import { GetLogAlertsChartPreviewDataAlertParamsSubset, getLogAlertsChartPreviewDataAlertParamsSubsetRT, -} from '../../../../../common/http_api/log_alerts/'; +} from '../../../../../../common/http_api/log_alerts/'; import { AlertsContext } from './editor'; import { useChartPreviewData } from './hooks/use_chart_preview_data'; -import { decodeOrThrow } from '../../../../../common/runtime_types'; +import { decodeOrThrow } from '../../../../../../common/runtime_types'; const GROUP_LIMIT = 5; interface Props { - alertParams: Partial; + alertParams: Partial; context: AlertsContext; chartCriterion: Partial; sourceId: string; + showThreshold: boolean; } export const CriterionPreview: React.FC = ({ @@ -60,6 +62,7 @@ export const CriterionPreview: React.FC = ({ context, chartCriterion, sourceId, + showThreshold, }) => { const chartAlertParams: GetLogAlertsChartPreviewDataAlertParamsSubset | null = useMemo(() => { const { field, comparator, value } = chartCriterion; @@ -92,6 +95,7 @@ export const CriterionPreview: React.FC = ({ sourceId={sourceId} threshold={alertParams.count} chartAlertParams={chartAlertParams} + showThreshold={showThreshold} /> ); }; @@ -100,8 +104,9 @@ interface ChartProps { buckets: number; context: AlertsContext; sourceId: string; - threshold?: LogDocumentCountAlertParams['count']; + threshold?: Threshold; chartAlertParams: GetLogAlertsChartPreviewDataAlertParamsSubset; + showThreshold: boolean; } const CriterionPreviewChart: React.FC = ({ @@ -110,6 +115,7 @@ const CriterionPreviewChart: React.FC = ({ sourceId, threshold, chartAlertParams, + showThreshold, }) => { const isDarkMode = context.uiSettings?.get('theme:darkMode') || false; @@ -140,17 +146,18 @@ const CriterionPreviewChart: React.FC = ({ const isGrouped = groupBy && groupBy.length > 0 ? true : false; const isAbove = - threshold && threshold.comparator + showThreshold && threshold && threshold.comparator ? [Comparator.GT, Comparator.GT_OR_EQ].includes(threshold.comparator) : false; const isBelow = - threshold && threshold.comparator + showThreshold && threshold && threshold.comparator ? [Comparator.LT, Comparator.LT_OR_EQ].includes(threshold.comparator) : false; // For grouped scenarios we want to limit the groups displayed, for "isAbove" thresholds we'll show // groups with the highest doc counts. And for "isBelow" thresholds we'll show groups with the lowest doc counts. + // Ratio scenarios will just default to max. const filteredSeries = useMemo(() => { if (!isGrouped) { return series; @@ -183,11 +190,14 @@ const CriterionPreviewChart: React.FC = ({ const hasData = series.length > 0; const { yMin, yMax, xMin, xMax } = getDomain(filteredSeries, isStacked); const chartDomain = { - max: threshold && threshold.value ? Math.max(yMax, threshold.value) * 1.1 : yMax * 1.1, // Add 10% headroom. - min: threshold && threshold.value ? Math.min(yMin, threshold.value) : yMin, + max: + showThreshold && threshold && threshold.value + ? Math.max(yMax, threshold.value) * 1.1 + : yMax * 1.1, // Add 10% headroom. + min: showThreshold && threshold && threshold.value ? Math.min(yMin, threshold.value) : yMin, }; - if (threshold && threshold.value && chartDomain.min === threshold.value) { + if (showThreshold && threshold && threshold.value && chartDomain.min === threshold.value) { chartDomain.min = chartDomain.min * 0.9; // Allow some padding so the threshold annotation has better visibility } @@ -229,7 +239,7 @@ const CriterionPreviewChart: React.FC = ({ }} color={!isGrouped ? colorTransformer(Color.color0) : undefined} /> - {threshold && threshold.value ? ( + {showThreshold && threshold && threshold.value ? ( = ({ }} /> ) : null} - {threshold && threshold.value && isBelow ? ( + {showThreshold && threshold && threshold.value && isBelow ? ( = ({ ]} /> ) : null} - {threshold && threshold.value && isAbove ? ( + {showThreshold && threshold && threshold.value && isAbove ? ( ; interface Props { - errors: IErrorObject; - alertParams: Partial; + errors: Errors; + alertParams: Partial; setAlertParams(key: string, value: any): void; setAlertProperty(key: string, value: any): void; alertsContext: AlertsContext; @@ -46,14 +50,30 @@ interface Props { const DEFAULT_CRITERIA = { field: 'log.level', comparator: Comparator.EQ, value: 'error' }; -const DEFAULT_EXPRESSION = { +const DEFAULT_BASE_EXPRESSION = { + timeSize: 5, + timeUnit: 'm', +}; + +const DEFAULT_COUNT_EXPRESSION = { + ...DEFAULT_BASE_EXPRESSION, count: { value: 75, comparator: Comparator.GT, }, criteria: [DEFAULT_CRITERIA], - timeSize: 5, - timeUnit: 'm', +}; + +const DEFAULT_RATIO_EXPRESSION = { + ...DEFAULT_BASE_EXPRESSION, + count: { + value: 2, + comparator: Comparator.GT, + }, + criteria: [ + [DEFAULT_CRITERIA], + [{ field: 'log.level', comparator: Comparator.EQ, value: 'warning' }], + ], }; export const ExpressionEditor: React.FC = (props) => { @@ -125,10 +145,10 @@ export const Editor: React.FC = (props) => { const [hasSetDefaults, setHasSetDefaults] = useState(false); const { sourceStatus } = useLogSourceContext(); useMount(() => { - for (const [key, value] of Object.entries({ ...DEFAULT_EXPRESSION, ...alertParams })) { + for (const [key, value] of Object.entries({ ...DEFAULT_COUNT_EXPRESSION, ...alertParams })) { setAlertParams(key, value); - setHasSetDefaults(true); } + setHasSetDefaults(true); }); const supportedFields = useMemo(() => { @@ -153,22 +173,19 @@ export const Editor: React.FC = (props) => { /* eslint-disable-next-line react-hooks/exhaustive-deps */ }, [sourceStatus]); - const updateCount = useCallback( - (countParams) => { - const nextCountParams = { ...alertParams.count, ...countParams }; - setAlertParams('count', nextCountParams); + const updateThreshold = useCallback( + (thresholdParams) => { + const nextThresholdParams = { ...alertParams.count, ...thresholdParams }; + setAlertParams('count', nextThresholdParams); }, [alertParams.count, setAlertParams] ); - const updateCriterion = useCallback( - (idx, criterionParams) => { - const nextCriteria = alertParams.criteria?.map((criterion, index) => { - return idx === index ? { ...criterion, ...criterionParams } : criterion; - }); - setAlertParams('criteria', nextCriteria ? nextCriteria : []); + const updateCriteria = useCallback( + (criteria: AlertParams['criteria']) => { + setAlertParams('criteria', criteria); }, - [alertParams, setAlertParams] + [setAlertParams] ); const updateTimeSize = useCallback( @@ -192,46 +209,46 @@ export const Editor: React.FC = (props) => { [setAlertParams] ); - const addCriterion = useCallback(() => { - const nextCriteria = alertParams?.criteria - ? [...alertParams.criteria, DEFAULT_CRITERIA] - : [DEFAULT_CRITERIA]; - setAlertParams('criteria', nextCriteria); - /* eslint-disable-next-line react-hooks/exhaustive-deps */ - }, [alertParams, setAlertParams]); - - const removeCriterion = useCallback( - (idx) => { - const nextCriteria = alertParams?.criteria?.filter((criterion, index) => { - return index !== idx; - }); - setAlertParams('criteria', nextCriteria); + const updateType = useCallback( + (type: ThresholdType) => { + const defaults = type === 'count' ? DEFAULT_COUNT_EXPRESSION : DEFAULT_RATIO_EXPRESSION; + // Reset properties that don't make sense switching from one context to the other + for (const [key, value] of Object.entries({ + criteria: defaults.criteria, + count: defaults.count, + })) { + setAlertParams(key, value); + } }, - /* eslint-disable-next-line react-hooks/exhaustive-deps */ - [alertParams, setAlertParams] + [setAlertParams] ); // Wait until the alert param defaults have been set if (!hasSetDefaults) return null; + const criteriaComponent = alertParams.criteria ? ( + + ) : null; + return ( <> - + + {alertParams.criteria && !isRatioAlert(alertParams.criteria) && criteriaComponent} + + - - = (props) => { timeWindowUnit={alertParams.timeUnit} onChangeWindowSize={updateTimeSize} onChangeWindowUnit={updateTimeUnit} - errors={errors as { [key: string]: string[] }} + errors={{ timeWindowSize: errors.timeWindowSize, timeSizeUnit: errors.timeSizeUnit }} /> = (props) => { fields={groupByFields} /> -
- - - -
+ {alertParams.criteria && isRatioAlert(alertParams.criteria) && criteriaComponent} + + ); }; @@ -269,3 +275,13 @@ export const Editor: React.FC = (props) => { // required for dynamic import // eslint-disable-next-line import/no-default-export export default ExpressionEditor; + +// NOTE: Temporary until EUI allow empty values in EuiExpression +// components. +export const ExpressionLike = ({ text }: { text: string }) => { + return ( +
+ {text} +
+ ); +}; diff --git a/x-pack/plugins/infra/public/components/alerting/logs/expression_editor/hooks/use_chart_preview_data.tsx b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/expression_editor/hooks/use_chart_preview_data.tsx similarity index 90% rename from x-pack/plugins/infra/public/components/alerting/logs/expression_editor/hooks/use_chart_preview_data.tsx rename to x-pack/plugins/infra/public/components/alerting/logs/log_threshold/expression_editor/hooks/use_chart_preview_data.tsx index d5ba730026b12..d43e291f900f2 100644 --- a/x-pack/plugins/infra/public/components/alerting/logs/expression_editor/hooks/use_chart_preview_data.tsx +++ b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/expression_editor/hooks/use_chart_preview_data.tsx @@ -5,15 +5,15 @@ */ import { useState, useMemo } from 'react'; import { AlertsContext } from '../editor'; -import { useTrackedPromise } from '../../../../../utils/use_tracked_promise'; +import { useTrackedPromise } from '../../../../../../utils/use_tracked_promise'; import { GetLogAlertsChartPreviewDataSuccessResponsePayload, getLogAlertsChartPreviewDataSuccessResponsePayloadRT, getLogAlertsChartPreviewDataRequestPayloadRT, LOG_ALERTS_CHART_PREVIEW_DATA_PATH, -} from '../../../../../../common/http_api'; -import { decodeOrThrow } from '../../../../../../common/runtime_types'; -import { GetLogAlertsChartPreviewDataAlertParamsSubset } from '../../../../../../common/http_api/log_alerts/'; +} from '../../../../../../../common/http_api'; +import { decodeOrThrow } from '../../../../../../../common/runtime_types'; +import { GetLogAlertsChartPreviewDataAlertParamsSubset } from '../../../../../../../common/http_api/log_alerts/'; interface Options { sourceId: string; diff --git a/x-pack/plugins/infra/public/components/alerting/logs/expression_editor/index.tsx b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/expression_editor/index.tsx similarity index 100% rename from x-pack/plugins/infra/public/components/alerting/logs/expression_editor/index.tsx rename to x-pack/plugins/infra/public/components/alerting/logs/log_threshold/expression_editor/index.tsx diff --git a/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/expression_editor/threshold.tsx b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/expression_editor/threshold.tsx new file mode 100644 index 0000000000000..e2065ca25cb6f --- /dev/null +++ b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/expression_editor/threshold.tsx @@ -0,0 +1,111 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { useState } from 'react'; +import { i18n } from '@kbn/i18n'; +import { isNumber, isFinite } from 'lodash'; +import { + EuiPopoverTitle, + EuiFlexItem, + EuiFlexGroup, + EuiPopover, + EuiSelect, + EuiFieldNumber, + EuiExpression, + EuiFormRow, +} from '@elastic/eui'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { IErrorObject } from '../../../../../../../triggers_actions_ui/public/types'; +import { + Comparator, + ComparatorToi18nMap, + AlertParams, +} from '../../../../../../common/alerting/logs/log_threshold/types'; + +const thresholdPrefix = i18n.translate('xpack.infra.logs.alertFlyout.thresholdPrefix', { + defaultMessage: 'is', +}); + +const popoverTitle = i18n.translate('xpack.infra.logs.alertFlyout.thresholdPopoverTitle', { + defaultMessage: 'Threshold', +}); + +const getComparatorOptions = (): Array<{ + value: Comparator; + text: string; +}> => { + return [ + { value: Comparator.LT, text: ComparatorToi18nMap[Comparator.LT] }, + { value: Comparator.LT_OR_EQ, text: ComparatorToi18nMap[Comparator.LT_OR_EQ] }, + { value: Comparator.GT, text: ComparatorToi18nMap[Comparator.GT] }, + { value: Comparator.GT_OR_EQ, text: ComparatorToi18nMap[Comparator.GT_OR_EQ] }, + ]; +}; + +interface Props { + comparator?: Comparator; + value?: number; + updateThreshold: (params: Partial) => void; + errors: IErrorObject; +} + +export const Threshold: React.FC = ({ comparator, value, updateThreshold, errors }) => { + const [isThresholdPopoverOpen, setThresholdPopoverOpenState] = useState(false); + + return ( + + + setThresholdPopoverOpenState(true)} + /> + } + isOpen={isThresholdPopoverOpen} + closePopover={() => setThresholdPopoverOpenState(false)} + ownFocus + panelPaddingSize="s" + anchorPosition="downLeft" + > + <> + {popoverTitle} + + + + updateThreshold({ comparator: e.target.value as Comparator })} + options={getComparatorOptions()} + /> + + + + 0} error={errors.value}> + { + const number = parseFloat(e.target.value); + updateThreshold({ + value: isNumber(number) && isFinite(number) ? number : undefined, + }); + }} + /> + + + + + + + + ); +}; diff --git a/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/expression_editor/type_switcher.tsx b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/expression_editor/type_switcher.tsx new file mode 100644 index 0000000000000..03c895dcd0f2d --- /dev/null +++ b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/expression_editor/type_switcher.tsx @@ -0,0 +1,101 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { useState } from 'react'; +import { i18n } from '@kbn/i18n'; +import { EuiFlexItem, EuiFlexGroup, EuiPopover, EuiSelect, EuiExpression } from '@elastic/eui'; +import { + AlertParams, + ThresholdType, + isRatioAlert, +} from '../../../../../../common/alerting/logs/log_threshold/types'; +import { ExpressionLike } from './editor'; + +const typePrefix = i18n.translate('xpack.infra.logs.alertFlyout.thresholdTypePrefix', { + defaultMessage: 'when the', +}); + +const countSuffix = i18n.translate('xpack.infra.logs.alertFlyout.thresholdTypeCountSuffix', { + defaultMessage: 'of log entries', +}); + +const ratioSuffix = i18n.translate('xpack.infra.logs.alertFlyout.thresholdTypeRatioSuffix', { + defaultMessage: 'of Query A to Query B', +}); + +const countI18n = i18n.translate('xpack.infra.logs.alertFlyout.thresholdTypeCount', { + defaultMessage: 'count', +}); + +const ratioI18n = i18n.translate('xpack.infra.logs.alertFlyout.thresholdTypeRatio', { + defaultMessage: 'ratio', +}); + +const getOptions = (): Array<{ + value: ThresholdType; + text: string; +}> => { + return [ + { value: 'ratio', text: ratioI18n }, + { value: 'count', text: countI18n }, + ]; +}; + +interface Props { + criteria: AlertParams['criteria']; + updateType: (type: ThresholdType) => void; +} + +const getThresholdType = (criteria: AlertParams['criteria']): ThresholdType => { + return isRatioAlert(criteria) ? 'ratio' : 'count'; +}; + +export const TypeSwitcher: React.FC = ({ criteria, updateType }) => { + const [isThresholdTypePopoverOpen, setThresholdTypePopoverOpenState] = useState(false); + const thresholdType = getThresholdType(criteria); + + return ( + + + + setThresholdTypePopoverOpenState(true)} + /> + + + } + isOpen={isThresholdTypePopoverOpen} + closePopover={() => setThresholdTypePopoverOpenState(false)} + ownFocus + panelPaddingSize="s" + anchorPosition="downLeft" + > + + + updateType(thresholdType === 'ratio' ? 'count' : 'ratio')} + options={getOptions()} + /> + + + + + + ); +}; diff --git a/x-pack/plugins/infra/public/components/alerting/logs/log_threshold_alert_type.ts b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/log_threshold_alert_type.ts similarity index 53% rename from x-pack/plugins/infra/public/components/alerting/logs/log_threshold_alert_type.ts rename to x-pack/plugins/infra/public/components/alerting/logs/log_threshold/log_threshold_alert_type.ts index a26a7328c9103..15ff5844c1236 100644 --- a/x-pack/plugins/infra/public/components/alerting/logs/log_threshold_alert_type.ts +++ b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/log_threshold_alert_type.ts @@ -6,8 +6,8 @@ import { i18n } from '@kbn/i18n'; import React from 'react'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { AlertTypeModel } from '../../../../../triggers_actions_ui/public/types'; -import { LOG_DOCUMENT_COUNT_ALERT_TYPE_ID } from '../../../../common/alerting/logs/types'; +import { AlertTypeModel } from '../../../../../../triggers_actions_ui/public/types'; +import { LOG_DOCUMENT_COUNT_ALERT_TYPE_ID } from '../../../../../common/alerting/logs/log_threshold/types'; import { validateExpression } from './validation'; export function getAlertType(): AlertTypeModel { @@ -22,7 +22,7 @@ export function getAlertType(): AlertTypeModel { defaultActionMessage: i18n.translate( 'xpack.infra.logs.alerting.threshold.defaultActionMessage', { - defaultMessage: `\\{\\{#context.group\\}\\}\\{\\{context.group\\}\\} - \\{\\{/context.group\\}\\}\\{\\{context.matchingDocuments\\}\\} log entries have matched the following conditions: \\{\\{context.conditions\\}\\}`, + defaultMessage: `\\{\\{^context.isRatio\\}\\}\\{\\{#context.group\\}\\}\\{\\{context.group\\}\\} - \\{\\{/context.group\\}\\}\\{\\{context.matchingDocuments\\}\\} log entries have matched the following conditions: \\{\\{context.conditions\\}\\}\\{\\{/context.isRatio\\}\\}\\{\\{#context.isRatio\\}\\}\\{\\{#context.group\\}\\}\\{\\{context.group\\}\\} - \\{\\{/context.group\\}\\} Ratio of the count of log entries matching \\{\\{context.numeratorConditions\\}\\} to the count of log entries matching \\{\\{context.denominatorConditions\\}\\} was \\{\\{context.ratio\\}\\}\\{\\{/context.isRatio\\}\\}`, } ), requiresAppContext: false, diff --git a/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/validation.ts b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/validation.ts new file mode 100644 index 0000000000000..a7f773c08d2b3 --- /dev/null +++ b/x-pack/plugins/infra/public/components/alerting/logs/log_threshold/validation.ts @@ -0,0 +1,129 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { i18n } from '@kbn/i18n'; +import { isNumber, isFinite } from 'lodash'; +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { ValidationResult } from '../../../../../../triggers_actions_ui/public/types'; +import { + AlertParams, + Criteria, + RatioCriteria, + isRatioAlert, + getNumerator, + getDenominator, +} from '../../../../../common/alerting/logs/log_threshold/types'; + +export interface CriterionErrors { + [id: string]: { + field: string[]; + comparator: string[]; + value: string[]; + }; +} + +export interface Errors { + threshold: { + value: string[]; + }; + // NOTE: The data structure for criteria errors isn't 100% + // ideal but we need to conform to the interfaces that the alerting + // framework expects. + criteria: { + [id: string]: CriterionErrors; + }; + timeWindowSize: string[]; + timeSizeUnit: string[]; +} + +export function validateExpression({ + count, + criteria, + timeSize, + timeUnit, +}: Partial): ValidationResult { + const validationResult = { errors: {} }; + + // NOTE: In the case of components provided by the Alerting framework the error property names + // must match what they expect. + const errors: Errors = { + threshold: { + value: [], + }, + criteria: {}, + timeSizeUnit: [], + timeWindowSize: [], + }; + + validationResult.errors = errors; + + // Threshold validation + if (!isNumber(count?.value) && !isFinite(count?.value)) { + errors.threshold.value.push( + i18n.translate('xpack.infra.logs.alertFlyout.error.thresholdRequired', { + defaultMessage: 'Numeric threshold value is Required.', + }) + ); + } + + // Time validation + if (!timeSize) { + errors.timeWindowSize.push( + i18n.translate('xpack.infra.logs.alertFlyout.error.timeSizeRequired', { + defaultMessage: 'Time size is Required.', + }) + ); + } + + // Criteria validation + if (criteria && criteria.length > 0) { + const getCriterionErrors = (_criteria: Criteria): CriterionErrors => { + const _errors: CriterionErrors = {}; + + _criteria.forEach((criterion, idx) => { + _errors[idx] = { + field: [], + comparator: [], + value: [], + }; + if (!criterion.field) { + _errors[idx].field.push( + i18n.translate('xpack.infra.logs.alertFlyout.error.criterionFieldRequired', { + defaultMessage: 'Field is required.', + }) + ); + } + if (!criterion.comparator) { + _errors[idx].comparator.push( + i18n.translate('xpack.infra.logs.alertFlyout.error.criterionComparatorRequired', { + defaultMessage: 'Comparator is required.', + }) + ); + } + if (criterion.value === undefined || criterion.value === null) { + _errors[idx].value.push( + i18n.translate('xpack.infra.logs.alertFlyout.error.criterionValueRequired', { + defaultMessage: 'Value is required.', + }) + ); + } + }); + return _errors; + }; + + if (!isRatioAlert(criteria)) { + const criteriaErrors = getCriterionErrors(criteria as Criteria); + errors.criteria[0] = criteriaErrors; + } else { + const numeratorErrors = getCriterionErrors(getNumerator(criteria as RatioCriteria)); + errors.criteria[0] = numeratorErrors; + const denominatorErrors = getCriterionErrors(getDenominator(criteria as RatioCriteria)); + errors.criteria[1] = denominatorErrors; + } + } + + return validationResult; +} diff --git a/x-pack/plugins/infra/public/components/alerting/logs/validation.ts b/x-pack/plugins/infra/public/components/alerting/logs/validation.ts deleted file mode 100644 index c8c513f57a9d7..0000000000000 --- a/x-pack/plugins/infra/public/components/alerting/logs/validation.ts +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { i18n } from '@kbn/i18n'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ValidationResult } from '../../../../../triggers_actions_ui/public/types'; -import { LogDocumentCountAlertParams } from '../../../../common/alerting/logs/types'; - -export function validateExpression({ - count, - criteria, - timeSize, - timeUnit, -}: Partial): ValidationResult { - const validationResult = { errors: {} }; - - // NOTE: In the case of components provided by the Alerting framework the error property names - // must match what they expect. - const errors: { - count: { - value: string[]; - }; - criteria: { - [id: string]: { - field: string[]; - comparator: string[]; - value: string[]; - }; - }; - timeWindowSize: string[]; - timeSizeUnit: string[]; - } = { - count: { - value: [], - }, - criteria: {}, - timeSizeUnit: [], - timeWindowSize: [], - }; - - validationResult.errors = errors; - - // Document count validation - if (typeof count?.value !== 'number') { - errors.count.value.push( - i18n.translate('xpack.infra.logs.alertFlyout.error.documentCountRequired', { - defaultMessage: 'Document count is Required.', - }) - ); - } - - // Time validation - if (!timeSize) { - errors.timeWindowSize.push( - i18n.translate('xpack.infra.logs.alertFlyout.error.timeSizeRequired', { - defaultMessage: 'Time size is Required.', - }) - ); - } - - if (criteria && criteria.length > 0) { - // Criteria validation - criteria.forEach((criterion, idx: number) => { - const id = idx.toString(); - - errors.criteria[id] = { - field: [], - comparator: [], - value: [], - }; - - if (!criterion.field) { - errors.criteria[id].field.push( - i18n.translate('xpack.infra.logs.alertFlyout.error.criterionFieldRequired', { - defaultMessage: 'Field is required.', - }) - ); - } - - if (!criterion.comparator) { - errors.criteria[id].comparator.push( - i18n.translate('xpack.infra.logs.alertFlyout.error.criterionComparatorRequired', { - defaultMessage: 'Comparator is required.', - }) - ); - } - - if (!criterion.value) { - errors.criteria[id].value.push( - i18n.translate('xpack.infra.logs.alertFlyout.error.criterionValueRequired', { - defaultMessage: 'Value is required.', - }) - ); - } - }); - } - - return validationResult; -} diff --git a/x-pack/plugins/infra/public/pages/logs/page_content.tsx b/x-pack/plugins/infra/public/pages/logs/page_content.tsx index 426ae8e9d05a8..973037af499e5 100644 --- a/x-pack/plugins/infra/public/pages/logs/page_content.tsx +++ b/x-pack/plugins/infra/public/pages/logs/page_content.tsx @@ -23,7 +23,7 @@ import { LogEntryCategoriesPage } from './log_entry_categories'; import { LogEntryRatePage } from './log_entry_rate'; import { LogsSettingsPage } from './settings'; import { StreamPage } from './stream'; -import { AlertDropdown } from '../../components/alerting/logs/alert_dropdown'; +import { AlertDropdown } from '../../components/alerting/logs/log_threshold/alert_dropdown'; export const LogsPageContent: React.FunctionComponent = () => { const uiCapabilities = useKibana().services.application?.capabilities; diff --git a/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/ml/anomaly_detection/flyout_home.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/ml/anomaly_detection/flyout_home.tsx index 9cf898b684336..801dff9c4a17a 100644 --- a/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/ml/anomaly_detection/flyout_home.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/ml/anomaly_detection/flyout_home.tsx @@ -84,7 +84,7 @@ export const FlyoutHome = (props: Props) => { return ( ); diff --git a/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/ml/anomaly_detection/job_setup_screen.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/ml/anomaly_detection/job_setup_screen.tsx index 730cd7b6e9ef5..428c002da6383 100644 --- a/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/ml/anomaly_detection/job_setup_screen.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/ml/anomaly_detection/job_setup_screen.tsx @@ -223,7 +223,7 @@ export const JobSetupScreen = (props: Props) => { label={ } compressed diff --git a/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/timeline/timeline.tsx b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/timeline/timeline.tsx index 2792b6eb18b00..a3b02b858385e 100644 --- a/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/timeline/timeline.tsx +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/components/timeline/timeline.tsx @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import React, { useMemo, useCallback } from 'react'; +import React, { useMemo, useCallback, useEffect } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; import moment from 'moment'; @@ -18,7 +18,12 @@ import { TooltipValue, niceTimeFormatter, ElementClickListener, + RectAnnotation, + RectAnnotationDatum, } from '@elastic/charts'; +import { EuiFlexItem } from '@elastic/eui'; +import { EuiFlexGroup } from '@elastic/eui'; +import { EuiIcon } from '@elastic/eui'; import { useUiSetting } from '../../../../../../../../../src/plugins/kibana_react/public'; import { toMetricOpt } from '../../../../../../common/snapshot_metric_i18n'; import { MetricsExplorerAggregation } from '../../../../../../common/http_api'; @@ -35,6 +40,8 @@ import { calculateDomain } from '../../../metrics_explorer/components/helpers/ca import { euiStyled } from '../../../../../../../observability/public'; import { InfraFormatter } from '../../../../../lib/lib'; +import { useMetricsHostsAnomaliesResults } from '../../hooks/use_metrics_hosts_anomalies'; +import { useMetricsK8sAnomaliesResults } from '../../hooks/use_metrics_k8s_anomalies'; interface Props { interval: string; @@ -47,7 +54,8 @@ export const Timeline: React.FC = ({ interval, yAxisFormatter, isVisible const { metric, nodeType, accountId, region } = useWaffleOptionsContext(); const { currentTime, jumpToTime, stopAutoReload } = useWaffleTimeContext(); const { filterQueryAsJson } = useWaffleFiltersContext(); - const { loading, error, timeseries, reload } = useTimeline( + + const { loading, error, startTime, endTime, timeseries, reload } = useTimeline( filterQueryAsJson, [metric], nodeType, @@ -59,6 +67,40 @@ export const Timeline: React.FC = ({ interval, yAxisFormatter, isVisible isVisible ); + const anomalyParams = { + sourceId: 'default', + startTime, + endTime, + defaultSortOptions: { + direction: 'desc' as const, + field: 'anomalyScore' as const, + }, + defaultPaginationOptions: { pageSize: 100 }, + }; + + const { metricsHostsAnomalies, getMetricsHostsAnomalies } = useMetricsHostsAnomaliesResults( + anomalyParams + ); + const { metricsK8sAnomalies, getMetricsK8sAnomalies } = useMetricsK8sAnomaliesResults( + anomalyParams + ); + + const getAnomalies = useMemo(() => { + if (nodeType === 'host') { + return getMetricsHostsAnomalies; + } else if (nodeType === 'pod') { + return getMetricsK8sAnomalies; + } + }, [nodeType, getMetricsK8sAnomalies, getMetricsHostsAnomalies]); + + const anomalies = useMemo(() => { + if (nodeType === 'host') { + return metricsHostsAnomalies; + } else if (nodeType === 'pod') { + return metricsK8sAnomalies; + } + }, [nodeType, metricsHostsAnomalies, metricsK8sAnomalies]); + const metricLabel = toMetricOpt(metric.type)?.textLC; const chartMetric = { @@ -104,6 +146,25 @@ export const Timeline: React.FC = ({ interval, yAxisFormatter, isVisible [jumpToTime, stopAutoReload] ); + const anomalyMetricName = useMemo(() => { + const metricType = metric.type; + if (metricType === 'memory') { + return 'memory_usage'; + } + if (metricType === 'rx') { + return 'network_in'; + } + if (metricType === 'tx') { + return 'network_out'; + } + }, [metric]); + + useEffect(() => { + if (getAnomalies && anomalyMetricName) { + getAnomalies(anomalyMetricName); + } + }, [getAnomalies, anomalyMetricName]); + if (loading) { return ( @@ -130,21 +191,86 @@ export const Timeline: React.FC = ({ interval, yAxisFormatter, isVisible ); } + function generateAnnotationData(results: Array<[number, string[]]>): RectAnnotationDatum[] { + return results.map((anomaly) => { + const [val, influencers] = anomaly; + return { + coordinates: { + x0: val, + x1: moment(val).add(15, 'minutes').valueOf(), + y0: dataDomain?.min, + y1: dataDomain?.max, + }, + details: influencers.join(','), + }; + }); + } + return ( - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {anomalies && ( + [a.startTime, a.influencers]) + )} + style={{ fill: '#D36086' }} + /> + )} props.theme.eui.paddingSizes.xs}; + padding-left: ${(props) => props.theme.eui.paddingSizes.xs}; width: 100%; height: 100%; `; diff --git a/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_metrics_hosts_anomalies.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_metrics_hosts_anomalies.ts index f755057d0b76d..f33e3ea16b389 100644 --- a/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_metrics_hosts_anomalies.ts +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_metrics_hosts_anomalies.ts @@ -7,6 +7,7 @@ import { useMemo, useState, useCallback, useEffect, useReducer } from 'react'; import { INFA_ML_GET_METRICS_HOSTS_ANOMALIES_PATH, + Metric, Sort, Pagination, PaginationCursor, @@ -168,7 +169,7 @@ export const useMetricsHostsAnomaliesResults = ({ const [getMetricsHostsAnomaliesRequest, getMetricsHostsAnomalies] = useTrackedPromise( { cancelPreviousOn: 'creation', - createPromise: async () => { + createPromise: async (metric: Metric) => { const { timeRange: { start: queryStartTime, end: queryEndTime }, sortOptions, @@ -179,6 +180,7 @@ export const useMetricsHostsAnomaliesResults = ({ sourceId, queryStartTime, queryEndTime, + metric, sortOptions, { ...paginationOptions, @@ -249,10 +251,6 @@ export const useMetricsHostsAnomaliesResults = ({ }); }, [filteredDatasets]); - useEffect(() => { - getMetricsHostsAnomalies(); - }, [getMetricsHostsAnomalies]); // TODO: FIgure out the deps here. - const handleFetchNextPage = useCallback(() => { if (reducerState.lastReceivedCursors) { dispatch({ type: 'fetchNextPage' }); @@ -294,6 +292,7 @@ export const callGetMetricHostsAnomaliesAPI = async ( sourceId: string, startTime: number, endTime: number, + metric: Metric, sort: Sort, pagination: Pagination ) => { @@ -307,6 +306,7 @@ export const callGetMetricHostsAnomaliesAPI = async ( startTime, endTime, }, + metric, sort, pagination, }, diff --git a/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_metrics_k8s_anomalies.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_metrics_k8s_anomalies.ts index 4a7b78e1fdf92..89e70c4c5c4c7 100644 --- a/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_metrics_k8s_anomalies.ts +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_metrics_k8s_anomalies.ts @@ -13,6 +13,7 @@ import { getMetricsK8sAnomaliesSuccessReponsePayloadRT, getMetricsK8sAnomaliesRequestPayloadRT, MetricsK8sAnomaly, + Metric, } from '../../../../../common/http_api/infra_ml'; import { useTrackedPromise } from '../../../../utils/use_tracked_promise'; import { npStart } from '../../../../legacy_singletons'; @@ -168,7 +169,7 @@ export const useMetricsK8sAnomaliesResults = ({ const [getMetricsK8sAnomaliesRequest, getMetricsK8sAnomalies] = useTrackedPromise( { cancelPreviousOn: 'creation', - createPromise: async () => { + createPromise: async (metric: Metric) => { const { timeRange: { start: queryStartTime, end: queryEndTime }, sortOptions, @@ -180,6 +181,7 @@ export const useMetricsK8sAnomaliesResults = ({ sourceId, queryStartTime, queryEndTime, + metric, sortOptions, { ...paginationOptions, @@ -251,10 +253,6 @@ export const useMetricsK8sAnomaliesResults = ({ }); }, [filteredDatasets]); - useEffect(() => { - getMetricsK8sAnomalies(); - }, [getMetricsK8sAnomalies]); - const handleFetchNextPage = useCallback(() => { if (reducerState.lastReceivedCursors) { dispatch({ type: 'fetchNextPage' }); @@ -296,6 +294,7 @@ export const callGetMetricsK8sAnomaliesAPI = async ( sourceId: string, startTime: number, endTime: number, + metric: Metric, sort: Sort, pagination: Pagination, datasets?: string[] @@ -310,6 +309,7 @@ export const callGetMetricsK8sAnomaliesAPI = async ( startTime, endTime, }, + metric, sort, pagination, datasets, diff --git a/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_timeline.ts b/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_timeline.ts index acf9011ac7ddd..597c268180819 100644 --- a/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_timeline.ts +++ b/x-pack/plugins/infra/public/pages/metrics/inventory_view/hooks/use_timeline.ts @@ -81,10 +81,12 @@ export function useTimeline( ]); const { timeLength, intervalInSeconds } = timeLengthResult; + const endTime = currentTime + intervalInSeconds * 1000; + const startTime = currentTime - timeLength * 1000; const timerange: InfraTimerangeInput = { interval: displayInterval ?? '', - to: currentTime + intervalInSeconds * 1000, - from: currentTime - timeLength * 1000, + to: endTime, + from: startTime, ignoreLookback: true, forceInterval: true, }; @@ -127,6 +129,8 @@ export function useTimeline( error: (error && error.message) || null, loading: !interval ? true : loading, timeseries, + startTime, + endTime, reload: makeRequest, }; } diff --git a/x-pack/plugins/infra/public/plugin.ts b/x-pack/plugins/infra/public/plugin.ts index 66715b3fee28b..b409c32603ffc 100644 --- a/x-pack/plugins/infra/public/plugin.ts +++ b/x-pack/plugins/infra/public/plugin.ts @@ -8,7 +8,7 @@ import { AppMountParameters, PluginInitializerContext } from 'kibana/public'; import { DEFAULT_APP_CATEGORIES } from '../../../../src/core/public'; import { createMetricThresholdAlertType } from './alerting/metric_threshold'; import { createInventoryMetricAlertType } from './alerting/inventory'; -import { getAlertType as getLogsAlertType } from './components/alerting/logs/log_threshold_alert_type'; +import { getAlertType as getLogsAlertType } from './components/alerting/logs/log_threshold/log_threshold_alert_type'; import { registerStartSingleton } from './legacy_singletons'; import { registerFeatures } from './register_feature'; import { diff --git a/x-pack/plugins/infra/server/features.ts b/x-pack/plugins/infra/server/features.ts index 12ac57eb90186..444530c4d79f0 100644 --- a/x-pack/plugins/infra/server/features.ts +++ b/x-pack/plugins/infra/server/features.ts @@ -5,7 +5,7 @@ */ import { i18n } from '@kbn/i18n'; -import { LOG_DOCUMENT_COUNT_ALERT_TYPE_ID } from '../common/alerting/logs/types'; +import { LOG_DOCUMENT_COUNT_ALERT_TYPE_ID } from '../common/alerting/logs/log_threshold/types'; import { METRIC_INVENTORY_THRESHOLD_ALERT_TYPE_ID } from './lib/alerting/inventory_metric_threshold/types'; import { METRIC_THRESHOLD_ALERT_TYPE_ID } from './lib/alerting/metric_threshold/types'; import { DEFAULT_APP_CATEGORIES } from '../../../../src/core/server'; diff --git a/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_chart_preview.ts b/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_chart_preview.ts index 71115ad3a5745..e1657968b3f92 100644 --- a/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_chart_preview.ts +++ b/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_chart_preview.ts @@ -23,7 +23,7 @@ import { UngroupedSearchQueryResponse, GroupedSearchQueryResponse, GroupedSearchQueryResponseRT, -} from '../../../../common/alerting/logs/types'; +} from '../../../../common/alerting/logs/log_threshold/types'; import { decodeOrThrow } from '../../../../common/runtime_types'; const COMPOSITE_GROUP_SIZE = 40; diff --git a/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.test.ts b/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.test.ts index f730513991a78..e04fe338f3436 100644 --- a/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.test.ts +++ b/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.test.ts @@ -17,11 +17,11 @@ import { import { Comparator, AlertStates, - LogDocumentCountAlertParams, + AlertParams, Criterion, UngroupedSearchQueryResponse, GroupedSearchQueryResponse, -} from '../../../../common/alerting/logs/types'; +} from '../../../../common/alerting/logs/log_threshold/types'; import { alertsMock } from '../../../../../alerts/server/mocks'; // Mocks // @@ -56,7 +56,7 @@ const negativeCriteria: Criterion[] = [ { ...textField, comparator: Comparator.NOT_MATCH_PHRASE }, ]; -const baseAlertParams: Pick = { +const baseAlertParams: Pick = { count: { comparator: Comparator.GT, value: 5, @@ -85,7 +85,7 @@ describe('Log threshold executor', () => { }); describe('Criteria filter building', () => { test('Handles positive criteria', () => { - const alertParams: LogDocumentCountAlertParams = { + const alertParams: AlertParams = { ...baseAlertParams, criteria: positiveCriteria, }; @@ -140,7 +140,7 @@ describe('Log threshold executor', () => { }); test('Handles negative criteria', () => { - const alertParams: LogDocumentCountAlertParams = { + const alertParams: AlertParams = { ...baseAlertParams, criteria: negativeCriteria, }; @@ -168,7 +168,7 @@ describe('Log threshold executor', () => { }); test('Handles time range', () => { - const alertParams: LogDocumentCountAlertParams = { ...baseAlertParams, criteria: [] }; + const alertParams: AlertParams = { ...baseAlertParams, criteria: [] }; const filters = buildFiltersFromCriteria(alertParams, TIMESTAMP_FIELD); expect(typeof filters.rangeFilter.range[TIMESTAMP_FIELD].gte).toBe('number'); expect(typeof filters.rangeFilter.range[TIMESTAMP_FIELD].lte).toBe('number'); @@ -183,7 +183,7 @@ describe('Log threshold executor', () => { describe('ES queries', () => { describe('Query generation', () => { test('Correctly generates ungrouped queries', () => { - const alertParams: LogDocumentCountAlertParams = { + const alertParams: AlertParams = { ...baseAlertParams, criteria: [...positiveCriteria, ...negativeCriteria], }; @@ -279,7 +279,7 @@ describe('Log threshold executor', () => { }); test('Correctly generates grouped queries', () => { - const alertParams: LogDocumentCountAlertParams = { + const alertParams: AlertParams = { ...baseAlertParams, groupBy: ['host.name'], criteria: [...positiveCriteria, ...negativeCriteria], @@ -303,25 +303,6 @@ describe('Log threshold executor', () => { }, }, ], - must_not: [ - { - term: { - keywordField: { - value: 'error', - }, - }, - }, - { - match: { - textField: 'Something went wrong', - }, - }, - { - match_phrase: { - textField: 'Something went wrong', - }, - }, - ], }, }, aggregations: { @@ -398,6 +379,25 @@ describe('Log threshold executor', () => { }, }, ], + must_not: [ + { + term: { + keywordField: { + value: 'error', + }, + }, + }, + { + match: { + textField: 'Something went wrong', + }, + }, + { + match_phrase: { + textField: 'Something went wrong', + }, + }, + ], }, }, }, @@ -467,6 +467,7 @@ describe('Log threshold executor', () => { conditions: ' numericField more than 10', group: null, matchingDocuments: 10, + isRatio: false, }, }, ]); @@ -593,6 +594,7 @@ describe('Log threshold executor', () => { conditions: ' numericField more than 10', group: 'i-am-a-host-name-1, i-am-a-dataset-1', matchingDocuments: 10, + isRatio: false, }, }, ]); @@ -612,6 +614,7 @@ describe('Log threshold executor', () => { conditions: ' numericField more than 10', group: 'i-am-a-host-name-3, i-am-a-dataset-3', matchingDocuments: 20, + isRatio: false, }, }, ]); diff --git a/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts b/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts index 224b898141c36..0ea65f94c9400 100644 --- a/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts +++ b/x-pack/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts @@ -14,14 +14,21 @@ import { import { AlertStates, Comparator, - LogDocumentCountAlertParams, + AlertParams, Criterion, GroupedSearchQueryResponseRT, UngroupedSearchQueryResponseRT, UngroupedSearchQueryResponse, GroupedSearchQueryResponse, - LogDocumentCountAlertParamsRT, -} from '../../../../common/alerting/logs/types'; + AlertParamsRT, + isRatioAlertParams, + hasGroupBy, + getNumerator, + getDenominator, + Criteria, + CountAlertParams, + RatioAlertParams, +} from '../../../../common/alerting/logs/log_threshold/types'; import { InfraBackendLibs } from '../../infra_types'; import { getIntervalInSeconds } from '../../../utils/get_interval_in_seconds'; import { decodeOrThrow } from '../../../../common/runtime_types'; @@ -42,7 +49,6 @@ export const createLogThresholdExecutor = (libs: InfraBackendLibs) => async function ({ services, params }: AlertExecutorOptions) { const { alertInstanceFactory, savedObjectsClient, callCluster } = services; const { sources } = libs; - const { groupBy } = params; const sourceConfiguration = await sources.getSourceConfiguration(savedObjectsClient, 'default'); const indexPattern = sourceConfiguration.configuration.logAlias; @@ -50,30 +56,23 @@ export const createLogThresholdExecutor = (libs: InfraBackendLibs) => const alertInstance = alertInstanceFactory(UNGROUPED_FACTORY_KEY); try { - const validatedParams = decodeOrThrow(LogDocumentCountAlertParamsRT)(params); + const validatedParams = decodeOrThrow(AlertParamsRT)(params); - const query = - groupBy && groupBy.length > 0 - ? getGroupedESQuery(validatedParams, timestampField, indexPattern) - : getUngroupedESQuery(validatedParams, timestampField, indexPattern); - - if (!query) { - throw new Error('ES query could not be built from the provided alert params'); - } - - if (groupBy && groupBy.length > 0) { - processGroupByResults( - await getGroupedResults(query, callCluster), + if (!isRatioAlertParams(validatedParams)) { + await executeAlert( validatedParams, - alertInstanceFactory, - updateAlertInstance + timestampField, + indexPattern, + callCluster, + alertInstanceFactory ); } else { - processUngroupedResults( - await getUngroupedResults(query, callCluster), + await executeRatioAlert( validatedParams, - alertInstanceFactory, - updateAlertInstance + timestampField, + indexPattern, + callCluster, + alertInstanceFactory ); } } catch (e) { @@ -85,9 +84,97 @@ export const createLogThresholdExecutor = (libs: InfraBackendLibs) => } }; +async function executeAlert( + alertParams: CountAlertParams, + timestampField: string, + indexPattern: string, + callCluster: AlertServices['callCluster'], + alertInstanceFactory: AlertServices['alertInstanceFactory'] +) { + const query = getESQuery(alertParams, timestampField, indexPattern); + + if (!query) { + throw new Error('ES query could not be built from the provided alert params'); + } + + if (hasGroupBy(alertParams)) { + processGroupByResults( + await getGroupedResults(query, callCluster), + alertParams, + alertInstanceFactory, + updateAlertInstance + ); + } else { + processUngroupedResults( + await getUngroupedResults(query, callCluster), + alertParams, + alertInstanceFactory, + updateAlertInstance + ); + } +} + +async function executeRatioAlert( + alertParams: RatioAlertParams, + timestampField: string, + indexPattern: string, + callCluster: AlertServices['callCluster'], + alertInstanceFactory: AlertServices['alertInstanceFactory'] +) { + // Ratio alert params are separated out into two standard sets of alert params + const numeratorParams: AlertParams = { + ...alertParams, + criteria: getNumerator(alertParams.criteria), + }; + + const denominatorParams: AlertParams = { + ...alertParams, + criteria: getDenominator(alertParams.criteria), + }; + + const numeratorQuery = getESQuery(numeratorParams, timestampField, indexPattern); + const denominatorQuery = getESQuery(denominatorParams, timestampField, indexPattern); + + if (!numeratorQuery || !denominatorQuery) { + throw new Error('ES query could not be built from the provided ratio alert params'); + } + + if (hasGroupBy(alertParams)) { + const numeratorGroupedResults = await getGroupedResults(numeratorQuery, callCluster); + const denominatorGroupedResults = await getGroupedResults(denominatorQuery, callCluster); + processGroupByRatioResults( + numeratorGroupedResults, + denominatorGroupedResults, + alertParams, + alertInstanceFactory, + updateAlertInstance + ); + } else { + const numeratorUngroupedResults = await getUngroupedResults(numeratorQuery, callCluster); + const denominatorUngroupedResults = await getUngroupedResults(denominatorQuery, callCluster); + processUngroupedRatioResults( + numeratorUngroupedResults, + denominatorUngroupedResults, + alertParams, + alertInstanceFactory, + updateAlertInstance + ); + } +} + +const getESQuery = ( + alertParams: Omit & { criteria: Criteria }, + timestampField: string, + indexPattern: string +) => { + return hasGroupBy(alertParams) + ? getGroupedESQuery(alertParams, timestampField, indexPattern) + : getUngroupedESQuery(alertParams, timestampField, indexPattern); +}; + export const processUngroupedResults = ( results: UngroupedSearchQueryResponse, - params: LogDocumentCountAlertParams, + params: CountAlertParams, alertInstanceFactory: AlertExecutorOptions['services']['alertInstanceFactory'], alertInstaceUpdater: AlertInstanceUpdater ) => { @@ -102,8 +189,41 @@ export const processUngroupedResults = ( actionGroup: FIRED_ACTIONS.id, context: { matchingDocuments: documentCount, - conditions: createConditionsMessage(criteria), + conditions: createConditionsMessageForCriteria(criteria), + group: null, + isRatio: false, + }, + }, + ]); + } else { + alertInstaceUpdater(alertInstance, AlertStates.OK); + } +}; + +export const processUngroupedRatioResults = ( + numeratorResults: UngroupedSearchQueryResponse, + denominatorResults: UngroupedSearchQueryResponse, + params: RatioAlertParams, + alertInstanceFactory: AlertExecutorOptions['services']['alertInstanceFactory'], + alertInstaceUpdater: AlertInstanceUpdater +) => { + const { count, criteria } = params; + + const alertInstance = alertInstanceFactory(UNGROUPED_FACTORY_KEY); + const numeratorCount = numeratorResults.hits.total.value; + const denominatorCount = denominatorResults.hits.total.value; + const ratio = getRatio(numeratorCount, denominatorCount); + + if (ratio !== undefined && checkValueAgainstComparatorMap[count.comparator](ratio, count.value)) { + alertInstaceUpdater(alertInstance, AlertStates.ALERT, [ + { + actionGroup: FIRED_ACTIONS.id, + context: { + ratio, + numeratorConditions: createConditionsMessageForCriteria(getNumerator(criteria)), + denominatorConditions: createConditionsMessageForCriteria(getDenominator(criteria)), group: null, + isRatio: true, }, }, ]); @@ -112,24 +232,39 @@ export const processUngroupedResults = ( } }; -interface ReducedGroupByResults { +const getRatio = (numerator: number, denominator: number) => { + // We follow the mathematics principle that dividing by 0 isn't possible, + // and a ratio is therefore undefined (or indeterminate). + if (numerator === 0 || denominator === 0) return undefined; + return numerator / denominator; +}; + +interface ReducedGroupByResult { name: string; documentCount: number; } +type ReducedGroupByResults = ReducedGroupByResult[]; + +const getReducedGroupByResults = ( + results: GroupedSearchQueryResponse['aggregations']['groups']['buckets'] +): ReducedGroupByResults => { + return results.reduce((acc, groupBucket) => { + const groupName = Object.values(groupBucket.key).join(', '); + const groupResult = { name: groupName, documentCount: groupBucket.filtered_results.doc_count }; + return [...acc, groupResult]; + }, []); +}; + export const processGroupByResults = ( results: GroupedSearchQueryResponse['aggregations']['groups']['buckets'], - params: LogDocumentCountAlertParams, + params: CountAlertParams, alertInstanceFactory: AlertExecutorOptions['services']['alertInstanceFactory'], alertInstaceUpdater: AlertInstanceUpdater ) => { const { count, criteria } = params; - const groupResults = results.reduce((acc, groupBucket) => { - const groupName = Object.values(groupBucket.key).join(', '); - const groupResult = { name: groupName, documentCount: groupBucket.filtered_results.doc_count }; - return [...acc, groupResult]; - }, []); + const groupResults = getReducedGroupByResults(results); groupResults.forEach((group) => { const alertInstance = alertInstanceFactory(group.name); @@ -141,8 +276,53 @@ export const processGroupByResults = ( actionGroup: FIRED_ACTIONS.id, context: { matchingDocuments: documentCount, - conditions: createConditionsMessage(criteria), + conditions: createConditionsMessageForCriteria(criteria), group: group.name, + isRatio: false, + }, + }, + ]); + } else { + alertInstaceUpdater(alertInstance, AlertStates.OK); + } + }); +}; + +export const processGroupByRatioResults = ( + numeratorResults: GroupedSearchQueryResponse['aggregations']['groups']['buckets'], + denominatorResults: GroupedSearchQueryResponse['aggregations']['groups']['buckets'], + params: RatioAlertParams, + alertInstanceFactory: AlertExecutorOptions['services']['alertInstanceFactory'], + alertInstaceUpdater: AlertInstanceUpdater +) => { + const { count, criteria } = params; + + const numeratorGroupResults = getReducedGroupByResults(numeratorResults); + const denominatorGroupResults = getReducedGroupByResults(denominatorResults); + + numeratorGroupResults.forEach((numeratorGroup) => { + const alertInstance = alertInstanceFactory(numeratorGroup.name); + const numeratorDocumentCount = numeratorGroup.documentCount; + const denominatorGroup = denominatorGroupResults.find( + (_group) => _group.name === numeratorGroup.name + ); + // If there is no matching group, a ratio cannot be determined, and is therefore undefined. + const ratio = denominatorGroup + ? getRatio(numeratorDocumentCount, denominatorGroup.documentCount) + : undefined; + if ( + ratio !== undefined && + checkValueAgainstComparatorMap[count.comparator](ratio, count.value) + ) { + alertInstaceUpdater(alertInstance, AlertStates.ALERT, [ + { + actionGroup: FIRED_ACTIONS.id, + context: { + ratio, + numeratorConditions: createConditionsMessageForCriteria(getNumerator(criteria)), + denominatorConditions: createConditionsMessageForCriteria(getDenominator(criteria)), + group: numeratorGroup.name, + isRatio: true, }, }, ]); @@ -172,7 +352,7 @@ export const updateAlertInstance: AlertInstanceUpdater = (alertInstance, state, }; export const buildFiltersFromCriteria = ( - params: Omit, + params: Pick & { criteria: Criteria }, timestampField: string ) => { const { timeSize, timeUnit, criteria } = params; @@ -223,7 +403,7 @@ export const buildFiltersFromCriteria = ( }; export const getGroupedESQuery = ( - params: Omit, + params: Pick & { criteria: Criteria }, timestampField: string, index: string ): object | undefined => { @@ -254,6 +434,7 @@ export const getGroupedESQuery = ( bool: { // Scope the inner filtering back to the unpadded range filter: [rangeFilter, ...mustFilters], + ...(mustNotFilters.length > 0 && { must_not: mustNotFilters }), }, }, }, @@ -265,7 +446,6 @@ export const getGroupedESQuery = ( query: { bool: { filter: [groupedRangeFilter], - ...(mustNotFilters.length > 0 && { must_not: mustNotFilters }), }, }, aggregations, @@ -281,7 +461,7 @@ export const getGroupedESQuery = ( }; export const getUngroupedESQuery = ( - params: Omit, + params: Pick & { criteria: Criteria }, timestampField: string, index: string ): object => { @@ -315,7 +495,7 @@ type Filter = { [key in SupportedESQueryTypes]?: object; }; -const buildFiltersForCriteria = (criteria: LogDocumentCountAlertParams['criteria']) => { +const buildFiltersForCriteria = (criteria: Criteria) => { let filters: Filter[] = []; criteria.forEach((criterion) => { @@ -443,7 +623,7 @@ const getGroupedResults = async (query: object, callCluster: AlertServices['call return compositeGroupBuckets; }; -const createConditionsMessage = (criteria: LogDocumentCountAlertParams['criteria']) => { +const createConditionsMessageForCriteria = (criteria: Criteria) => { const parts = criteria.map((criterion, index) => { const { field, comparator, value } = criterion; return `${index === 0 ? '' : 'and'} ${field} ${comparator} ${value}`; diff --git a/x-pack/plugins/infra/server/lib/alerting/log_threshold/register_log_threshold_alert_type.ts b/x-pack/plugins/infra/server/lib/alerting/log_threshold/register_log_threshold_alert_type.ts index ab55601f4c475..2c1d7e0976607 100644 --- a/x-pack/plugins/infra/server/lib/alerting/log_threshold/register_log_threshold_alert_type.ts +++ b/x-pack/plugins/infra/server/lib/alerting/log_threshold/register_log_threshold_alert_type.ts @@ -4,14 +4,14 @@ * you may not use this file except in compliance with the Elastic License. */ import { i18n } from '@kbn/i18n'; -import { schema } from '@kbn/config-schema'; import { PluginSetupContract } from '../../../../../alerts/server'; import { createLogThresholdExecutor, FIRED_ACTIONS } from './log_threshold_executor'; import { LOG_DOCUMENT_COUNT_ALERT_TYPE_ID, - Comparator, -} from '../../../../common/alerting/logs/types'; + AlertParamsRT, +} from '../../../../common/alerting/logs/log_threshold/types'; import { InfraBackendLibs } from '../../infra_types'; +import { decodeOrThrow } from '../../../../common/runtime_types'; const documentCountActionVariableDescription = i18n.translate( 'xpack.infra.logs.alerting.threshold.documentCountActionVariableDescription', @@ -34,33 +34,33 @@ const groupByActionVariableDescription = i18n.translate( } ); -const countSchema = schema.object({ - value: schema.number(), - comparator: schema.oneOf([ - schema.literal(Comparator.GT), - schema.literal(Comparator.LT), - schema.literal(Comparator.GT_OR_EQ), - schema.literal(Comparator.LT_OR_EQ), - schema.literal(Comparator.EQ), - ]), -}); +const isRatioActionVariableDescription = i18n.translate( + 'xpack.infra.logs.alerting.threshold.isRatioActionVariableDescription', + { + defaultMessage: 'Denotes whether this alert was configured with a ratio', + } +); + +const ratioActionVariableDescription = i18n.translate( + 'xpack.infra.logs.alerting.threshold.ratioActionVariableDescription', + { + defaultMessage: 'The ratio value of the two sets of criteria', + } +); -const criteriaSchema = schema.object({ - field: schema.string(), - comparator: schema.oneOf([ - schema.literal(Comparator.GT), - schema.literal(Comparator.LT), - schema.literal(Comparator.GT_OR_EQ), - schema.literal(Comparator.LT_OR_EQ), - schema.literal(Comparator.EQ), - schema.literal(Comparator.NOT_EQ), - schema.literal(Comparator.MATCH), - schema.literal(Comparator.NOT_MATCH), - schema.literal(Comparator.MATCH_PHRASE), - schema.literal(Comparator.NOT_MATCH_PHRASE), - ]), - value: schema.oneOf([schema.number(), schema.string()]), -}); +const numeratorConditionsActionVariableDescription = i18n.translate( + 'xpack.infra.logs.alerting.threshold.numeratorConditionsActionVariableDescription', + { + defaultMessage: 'The conditions that the numerator of the ratio needed to fulfill', + } +); + +const denominatorConditionsActionVariableDescription = i18n.translate( + 'xpack.infra.logs.alerting.threshold.denominatorConditionsActionVariableDescription', + { + defaultMessage: 'The conditions that the denominator of the ratio needed to fulfill', + } +); export async function registerLogThresholdAlertType( alertingPlugin: PluginSetupContract, @@ -76,13 +76,9 @@ export async function registerLogThresholdAlertType( id: LOG_DOCUMENT_COUNT_ALERT_TYPE_ID, name: 'Log threshold', validate: { - params: schema.object({ - count: countSchema, - criteria: schema.arrayOf(criteriaSchema), - timeUnit: schema.string(), - timeSize: schema.number(), - groupBy: schema.maybe(schema.arrayOf(schema.string())), - }), + params: { + validate: (params) => decodeOrThrow(AlertParamsRT)(params), + }, }, defaultActionGroupId: FIRED_ACTIONS.id, actionGroups: [FIRED_ACTIONS], @@ -92,6 +88,14 @@ export async function registerLogThresholdAlertType( { name: 'matchingDocuments', description: documentCountActionVariableDescription }, { name: 'conditions', description: conditionsActionVariableDescription }, { name: 'group', description: groupByActionVariableDescription }, + // Ratio alerts + { name: 'isRatio', description: isRatioActionVariableDescription }, + { name: 'ratio', description: ratioActionVariableDescription }, + { name: 'numeratorConditions', description: numeratorConditionsActionVariableDescription }, + { + name: 'denominatorConditions', + description: denominatorConditionsActionVariableDescription, + }, ], }, producer: 'logs', diff --git a/x-pack/plugins/infra/server/lib/infra_ml/metrics_hosts_anomalies.ts b/x-pack/plugins/infra/server/lib/infra_ml/metrics_hosts_anomalies.ts index e0afa458aac88..a3a0f91afaab8 100644 --- a/x-pack/plugins/infra/server/lib/infra_ml/metrics_hosts_anomalies.ts +++ b/x-pack/plugins/infra/server/lib/infra_ml/metrics_hosts_anomalies.ts @@ -7,7 +7,7 @@ import { RequestHandlerContext } from 'src/core/server'; import { InfraRequestHandlerContext } from '../../types'; import { TracingSpan, startTracingSpan } from '../../../common/performance_tracing'; -import { fetchMlJob, getLogEntryDatasets } from './common'; +import { fetchMlJob } from './common'; import { getJobId, metricsHostsJobTypes } from '../../../common/infra_ml'; import { Sort, Pagination } from '../../../common/http_api/infra_ml'; import type { MlSystem, MlAnomalyDetectors } from '../../types'; @@ -21,37 +21,43 @@ import { interface MappedAnomalyHit { id: string; anomalyScore: number; - dataset: string; typical: number; actual: number; jobId: string; startTime: number; duration: number; - hostName: string[]; + influencers: string[]; categoryId?: string; } async function getCompatibleAnomaliesJobIds( spaceId: string, sourceId: string, + metric: 'memory_usage' | 'network_in' | 'network_out' | undefined, mlAnomalyDetectors: MlAnomalyDetectors ) { - const metricsHostsJobIds = metricsHostsJobTypes.map((jt) => getJobId(spaceId, sourceId, jt)); + let metricsHostsJobIds = metricsHostsJobTypes; + + if (metric) { + metricsHostsJobIds = metricsHostsJobIds.filter((jt) => jt === `hosts_${metric}`); + } const jobIds: string[] = []; let jobSpans: TracingSpan[] = []; try { await Promise.all( - metricsHostsJobIds.map((id) => { - return (async () => { - const { - timing: { spans }, - } = await fetchMlJob(mlAnomalyDetectors, id); - jobIds.push(id); - jobSpans = [...jobSpans, ...spans]; - })(); - }) + metricsHostsJobIds + .map((jt) => getJobId(spaceId, sourceId, jt)) + .map((id) => { + return (async () => { + const { + timing: { spans }, + } = await fetchMlJob(mlAnomalyDetectors, id); + jobIds.push(id); + jobSpans = [...jobSpans, ...spans]; + })(); + }) ); } catch (e) { if (isMlPrivilegesError(e)) { @@ -71,6 +77,7 @@ export async function getMetricsHostsAnomalies( sourceId: string, startTime: number, endTime: number, + metric: 'memory_usage' | 'network_in' | 'network_out' | undefined, sort: Sort, pagination: Pagination ) { @@ -82,6 +89,7 @@ export async function getMetricsHostsAnomalies( } = await getCompatibleAnomaliesJobIds( context.infra.spaceId, sourceId, + metric, context.infra.mlAnomalyDetectors ); @@ -131,22 +139,20 @@ const parseAnomalyResult = (anomaly: MappedAnomalyHit, jobId: string) => { const { id, anomalyScore, - dataset, typical, actual, duration, - hostName, + influencers, startTime: anomalyStartTime, } = anomaly; return { id, anomalyScore, - dataset, typical, actual, duration, - hostName, + influencers, startTime: anomalyStartTime, type: 'metrics_hosts' as const, jobId, @@ -169,16 +175,6 @@ async function fetchMetricsHostsAnomalies( const finalizeFetchLogEntryAnomaliesSpan = startTracingSpan('fetch metrics hosts anomalies'); - // console.log( - // 'data', - // JSON.stringify( - // await mlSystem.mlAnomalySearch( - // createMetricsHostsAnomaliesQuery(jobIds, startTime, endTime, sort, expandedPagination) - // ), - // null, - // 2 - // ) - // ); const results = decodeOrThrow(metricsHostsAnomaliesResponseRT)( await mlSystem.mlAnomalySearch( createMetricsHostsAnomaliesQuery(jobIds, startTime, endTime, sort, expandedPagination) @@ -216,11 +212,13 @@ async function fetchMetricsHostsAnomalies( record_score: anomalyScore, typical, actual, + influencers, bucket_span: duration, timestamp: anomalyStartTime, by_field_value: categoryId, } = result._source; + const hostInfluencers = influencers.filter((i) => i.influencer_field_name === 'host.name'); return { id: result._id, anomalyScore, @@ -228,7 +226,10 @@ async function fetchMetricsHostsAnomalies( typical: typical[0], actual: actual[0], jobId: job_id, - hostName: result._source['host.name'], + influencers: hostInfluencers.reduce( + (acc: string[], i) => [...acc, ...i.influencer_field_values], + [] + ), startTime: anomalyStartTime, duration: duration * 1000, categoryId, @@ -246,44 +247,3 @@ async function fetchMetricsHostsAnomalies( }, }; } - -// TODO: FIgure out why we need datasets -export async function getMetricsHostsAnomaliesDatasets( - context: { - infra: { - mlSystem: MlSystem; - mlAnomalyDetectors: MlAnomalyDetectors; - spaceId: string; - }; - }, - sourceId: string, - startTime: number, - endTime: number -) { - const { - jobIds, - timing: { spans: jobSpans }, - } = await getCompatibleAnomaliesJobIds( - context.infra.spaceId, - sourceId, - context.infra.mlAnomalyDetectors - ); - - if (jobIds.length === 0) { - throw new InsufficientAnomalyMlJobsConfigured( - 'Log rate or categorisation ML jobs need to be configured to search for anomaly datasets' - ); - } - - const { - data: datasets, - timing: { spans: datasetsSpans }, - } = await getLogEntryDatasets(context.infra.mlSystem, startTime, endTime, jobIds); - - return { - datasets, - timing: { - spans: [...jobSpans, ...datasetsSpans], - }, - }; -} diff --git a/x-pack/plugins/infra/server/lib/infra_ml/metrics_k8s_anomalies.ts b/x-pack/plugins/infra/server/lib/infra_ml/metrics_k8s_anomalies.ts index 29507900e1847..1a9b48ade83ed 100644 --- a/x-pack/plugins/infra/server/lib/infra_ml/metrics_k8s_anomalies.ts +++ b/x-pack/plugins/infra/server/lib/infra_ml/metrics_k8s_anomalies.ts @@ -7,7 +7,7 @@ import { RequestHandlerContext } from 'src/core/server'; import { InfraRequestHandlerContext } from '../../types'; import { TracingSpan, startTracingSpan } from '../../../common/performance_tracing'; -import { fetchMlJob, getLogEntryDatasets } from './common'; +import { fetchMlJob } from './common'; import { getJobId, metricsK8SJobTypes } from '../../../common/infra_ml'; import { Sort, Pagination } from '../../../common/http_api/infra_ml'; import type { MlSystem, MlAnomalyDetectors } from '../../types'; @@ -21,11 +21,11 @@ import { interface MappedAnomalyHit { id: string; anomalyScore: number; - // dataset: string; typical: number; actual: number; jobId: string; startTime: number; + influencers: string[]; duration: number; categoryId?: string; } @@ -33,24 +33,31 @@ interface MappedAnomalyHit { async function getCompatibleAnomaliesJobIds( spaceId: string, sourceId: string, + metric: 'memory_usage' | 'network_in' | 'network_out' | undefined, mlAnomalyDetectors: MlAnomalyDetectors ) { - const metricsK8sJobIds = metricsK8SJobTypes.map((jt) => getJobId(spaceId, sourceId, jt)); + let metricsK8sJobIds = metricsK8SJobTypes; + + if (metric) { + metricsK8sJobIds = metricsK8sJobIds.filter((jt) => jt === `k8s_${metric}`); + } const jobIds: string[] = []; let jobSpans: TracingSpan[] = []; try { await Promise.all( - metricsK8sJobIds.map((id) => { - return (async () => { - const { - timing: { spans }, - } = await fetchMlJob(mlAnomalyDetectors, id); - jobIds.push(id); - jobSpans = [...jobSpans, ...spans]; - })(); - }) + metricsK8sJobIds + .map((jt) => getJobId(spaceId, sourceId, jt)) + .map((id) => { + return (async () => { + const { + timing: { spans }, + } = await fetchMlJob(mlAnomalyDetectors, id); + jobIds.push(id); + jobSpans = [...jobSpans, ...spans]; + })(); + }) ); } catch (e) { if (isMlPrivilegesError(e)) { @@ -70,6 +77,7 @@ export async function getMetricK8sAnomalies( sourceId: string, startTime: number, endTime: number, + metric: 'memory_usage' | 'network_in' | 'network_out' | undefined, sort: Sort, pagination: Pagination ) { @@ -81,6 +89,7 @@ export async function getMetricK8sAnomalies( } = await getCompatibleAnomaliesJobIds( context.infra.spaceId, sourceId, + metric, context.infra.mlAnomalyDetectors ); @@ -126,21 +135,21 @@ const parseAnomalyResult = (anomaly: MappedAnomalyHit, jobId: string) => { const { id, anomalyScore, - // dataset, typical, actual, duration, + influencers, startTime: anomalyStartTime, } = anomaly; return { id, anomalyScore, - // dataset, typical, actual, duration, startTime: anomalyStartTime, + influencers, type: 'metrics_k8s' as const, jobId, }; @@ -199,19 +208,25 @@ async function fetchMetricK8sAnomalies( record_score: anomalyScore, typical, actual, - // partition_field_value: dataset, bucket_span: duration, timestamp: anomalyStartTime, by_field_value: categoryId, + influencers, } = result._source; + const podInfluencers = influencers.filter( + (i) => i.influencer_field_name === 'kubernetes.pod.uid' + ); return { id: result._id, anomalyScore, - // dataset, typical: typical[0], actual: actual[0], jobId: job_id, + influencers: podInfluencers.reduce( + (acc: string[], i) => [...acc, ...i.influencer_field_values], + [] + ), startTime: anomalyStartTime, duration: duration * 1000, categoryId, @@ -229,44 +244,3 @@ async function fetchMetricK8sAnomalies( }, }; } - -// TODO: FIgure out why we need datasets -export async function getMetricK8sAnomaliesDatasets( - context: { - infra: { - mlSystem: MlSystem; - mlAnomalyDetectors: MlAnomalyDetectors; - spaceId: string; - }; - }, - sourceId: string, - startTime: number, - endTime: number -) { - const { - jobIds, - timing: { spans: jobSpans }, - } = await getCompatibleAnomaliesJobIds( - context.infra.spaceId, - sourceId, - context.infra.mlAnomalyDetectors - ); - - if (jobIds.length === 0) { - throw new InsufficientAnomalyMlJobsConfigured( - 'Log rate or categorisation ML jobs need to be configured to search for anomaly datasets' - ); - } - - const { - data: datasets, - timing: { spans: datasetsSpans }, - } = await getLogEntryDatasets(context.infra.mlSystem, startTime, endTime, jobIds); - - return { - datasets, - timing: { - spans: [...jobSpans, ...datasetsSpans], - }, - }; -} diff --git a/x-pack/plugins/infra/server/lib/infra_ml/queries/common.ts b/x-pack/plugins/infra/server/lib/infra_ml/queries/common.ts index 63e39ef022392..eb08b6d692336 100644 --- a/x-pack/plugins/infra/server/lib/infra_ml/queries/common.ts +++ b/x-pack/plugins/infra/server/lib/infra_ml/queries/common.ts @@ -40,6 +40,16 @@ export const createTimeRangeFilters = (startTime: number, endTime: number) => [ }, ]; +export const createAnomalyScoreFilter = (minScore: number) => [ + { + range: { + record_score: { + gte: minScore, + }, + }, + }, +]; + export const createResultTypeFilters = (resultTypes: Array<'model_plot' | 'record'>) => [ { terms: { diff --git a/x-pack/plugins/infra/server/lib/infra_ml/queries/metrics_hosts_anomalies.ts b/x-pack/plugins/infra/server/lib/infra_ml/queries/metrics_hosts_anomalies.ts index b61119b60bc18..bbdc77af1fbe6 100644 --- a/x-pack/plugins/infra/server/lib/infra_ml/queries/metrics_hosts_anomalies.ts +++ b/x-pack/plugins/infra/server/lib/infra_ml/queries/metrics_hosts_anomalies.ts @@ -11,6 +11,7 @@ import { createTimeRangeFilters, createResultTypeFilters, defaultRequestParameters, + createAnomalyScoreFilter, } from './common'; import { Sort, Pagination } from '../../../../common/http_api/infra_ml'; @@ -35,6 +36,7 @@ export const createMetricsHostsAnomaliesQuery = ( const filters = [ ...createJobIdsFilters(jobIds), + ...createAnomalyScoreFilter(50), ...createTimeRangeFilters(startTime, endTime), ...createResultTypeFilters(['record']), ]; @@ -86,6 +88,12 @@ export const metricsHostsAnomalyHitRT = rt.type({ record_score: rt.number, typical: rt.array(rt.number), actual: rt.array(rt.number), + influencers: rt.array( + rt.type({ + influencer_field_name: rt.string, + influencer_field_values: rt.array(rt.string), + }) + ), 'host.name': rt.array(rt.string), bucket_span: rt.number, timestamp: rt.number, diff --git a/x-pack/plugins/infra/server/lib/infra_ml/queries/metrics_k8s_anomalies.ts b/x-pack/plugins/infra/server/lib/infra_ml/queries/metrics_k8s_anomalies.ts index 84ed8b064c5ca..79bfdc91dc5a4 100644 --- a/x-pack/plugins/infra/server/lib/infra_ml/queries/metrics_k8s_anomalies.ts +++ b/x-pack/plugins/infra/server/lib/infra_ml/queries/metrics_k8s_anomalies.ts @@ -11,6 +11,7 @@ import { createTimeRangeFilters, createResultTypeFilters, defaultRequestParameters, + createAnomalyScoreFilter, } from './common'; import { Sort, Pagination } from '../../../../common/http_api/infra_ml'; @@ -35,6 +36,7 @@ export const createMetricsK8sAnomaliesQuery = ( const filters = [ ...createJobIdsFilters(jobIds), + ...createAnomalyScoreFilter(50), ...createTimeRangeFilters(startTime, endTime), ...createResultTypeFilters(['record']), ]; @@ -48,6 +50,8 @@ export const createMetricsK8sAnomaliesQuery = ( 'timestamp', 'bucket_span', 'by_field_value', + 'influencers.influencer_field_name', + 'influencers.influencer_field_values', ]; const { querySortDirection, queryCursor } = parsePaginationCursor(sort, pagination); @@ -83,7 +87,12 @@ export const metricsK8sAnomalyHitRT = rt.type({ record_score: rt.number, typical: rt.array(rt.number), actual: rt.array(rt.number), - // partition_field_value: rt.string, + influencers: rt.array( + rt.type({ + influencer_field_name: rt.string, + influencer_field_values: rt.array(rt.string), + }) + ), bucket_span: rt.number, timestamp: rt.number, }), diff --git a/x-pack/plugins/infra/server/lib/metrics/constants.ts b/x-pack/plugins/infra/server/lib/metrics/constants.ts index 590eaf5605c72..dcff96ed155dc 100644 --- a/x-pack/plugins/infra/server/lib/metrics/constants.ts +++ b/x-pack/plugins/infra/server/lib/metrics/constants.ts @@ -4,13 +4,6 @@ * you may not use this file except in compliance with the Elastic License. */ export const EMPTY_RESPONSE = { - series: [ - { - id: '*', - keys: ['*'], - columns: [], - rows: [], - }, - ], + series: [], info: { total: 0, afterKey: null, interval: 0 }, }; diff --git a/x-pack/plugins/infra/server/routes/infra_ml/results/metrics_hosts_anomalies.ts b/x-pack/plugins/infra/server/routes/infra_ml/results/metrics_hosts_anomalies.ts index 29122ae159cdc..9dc309c605206 100644 --- a/x-pack/plugins/infra/server/routes/infra_ml/results/metrics_hosts_anomalies.ts +++ b/x-pack/plugins/infra/server/routes/infra_ml/results/metrics_hosts_anomalies.ts @@ -36,6 +36,7 @@ export const initGetHostsAnomaliesRoute = ({ framework }: InfraBackendLibs) => { timeRange: { startTime, endTime }, sort: sortParam, pagination: paginationParam, + metric, }, } = request.body; @@ -54,12 +55,11 @@ export const initGetHostsAnomaliesRoute = ({ framework }: InfraBackendLibs) => { sourceId, startTime, endTime, + metric, sort, pagination ); - // console.log('---- anomalies', anomalies); - return response.ok({ body: getMetricsHostsAnomaliesSuccessReponsePayloadRT.encode({ data: { diff --git a/x-pack/plugins/infra/server/routes/infra_ml/results/metrics_k8s_anomalies.ts b/x-pack/plugins/infra/server/routes/infra_ml/results/metrics_k8s_anomalies.ts index 5260c55836c59..1618018b85fcf 100644 --- a/x-pack/plugins/infra/server/routes/infra_ml/results/metrics_k8s_anomalies.ts +++ b/x-pack/plugins/infra/server/routes/infra_ml/results/metrics_k8s_anomalies.ts @@ -35,6 +35,7 @@ export const initGetK8sAnomaliesRoute = ({ framework }: InfraBackendLibs) => { timeRange: { startTime, endTime }, sort: sortParam, pagination: paginationParam, + metric, }, } = request.body; @@ -53,6 +54,7 @@ export const initGetK8sAnomaliesRoute = ({ framework }: InfraBackendLibs) => { sourceId, startTime, endTime, + metric, sort, pagination ); diff --git a/x-pack/plugins/ingest_manager/common/openapi/spec_oas3.json b/x-pack/plugins/ingest_manager/common/openapi/spec_oas3.json index b7856e6d57402..28a88aa2be605 100644 --- a/x-pack/plugins/ingest_manager/common/openapi/spec_oas3.json +++ b/x-pack/plugins/ingest_manager/common/openapi/spec_oas3.json @@ -2757,7 +2757,7 @@ "data": "{\"config\":{\"id\":\"ae556400-5e39-11ea-8b49-f9747e466f7b\",\"outputs\":{\"default\":{\"type\":\"elasticsearch\",\"hosts\":[\"http://localhost:9200\"],\"api_key\":\"\",\"api_token\":\"6ckkp3ABz7e_XRqr3LM8:gQuDfUNSRgmY0iziYqP9Hw\"}},\"packagePolicies\":[]}}", "created_at": "2020-03-04T20:02:56.149Z", "id": "6a95c00a-d76d-4931-97c3-0bf935272d7d", - "type": "CONFIG_CHANGE" + "type": "POLICY_CHANGE" } ], "access_api_key_id": "6Mkkp3ABz7e_XRqrzLNJ", @@ -2920,7 +2920,7 @@ "actions": [ { "agent_id": "a6f14bd2-1a2a-481c-9212-9494d064ffdf", - "type": "CONFIG_CHANGE", + "type": "POLICY_CHANGE", "data": { "config": { "id": "2fe89350-a5e0-11ea-a587-5f886c8a849f", diff --git a/x-pack/plugins/ingest_manager/common/services/is_valid_namespace.test.ts b/x-pack/plugins/ingest_manager/common/services/is_valid_namespace.test.ts index 40f37cc456f94..3ed9e3a087a92 100644 --- a/x-pack/plugins/ingest_manager/common/services/is_valid_namespace.test.ts +++ b/x-pack/plugins/ingest_manager/common/services/is_valid_namespace.test.ts @@ -7,22 +7,32 @@ import { isValidNamespace } from './is_valid_namespace'; describe('Ingest Manager - isValidNamespace', () => { it('returns true for valid namespaces', () => { - expect(isValidNamespace('default')).toBe(true); - expect(isValidNamespace('namespace-with-dash')).toBe(true); - expect(isValidNamespace('123')).toBe(true); + expect(isValidNamespace('default').valid).toBe(true); + expect(isValidNamespace('namespace-with-dash').valid).toBe(true); + expect(isValidNamespace('123').valid).toBe(true); + expect(isValidNamespace('testlength😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀').valid).toBe( + true + ); }); it('returns false for invalid namespaces', () => { - expect(isValidNamespace('Default')).toBe(false); - expect(isValidNamespace('namespace with spaces')).toBe(false); - expect(isValidNamespace('foo/bar')).toBe(false); - expect(isValidNamespace('foo\\bar')).toBe(false); - expect(isValidNamespace('foo*bar')).toBe(false); - expect(isValidNamespace('foo?bar')).toBe(false); - expect(isValidNamespace('foo"bar')).toBe(false); - expect(isValidNamespace('foo, |, space character, comma, #, : - /^[^\*\\/\?"<>|\s,#:]+$/.test(namespace) - ); +// and implements a limit based on https://github.com/elastic/kibana/issues/75846 +export function isValidNamespace(namespace: string): { valid: boolean; error?: string } { + if (!namespace.trim()) { + return { + valid: false, + error: i18n.translate('xpack.ingestManager.namespaceValidation.requiredErrorMessage', { + defaultMessage: 'Namespace is required', + }), + }; + } else if (namespace !== namespace.toLowerCase()) { + return { + valid: false, + error: i18n.translate('xpack.ingestManager.namespaceValidation.lowercaseErrorMessage', { + defaultMessage: 'Namespace must be lowercase', + }), + }; + } else if (/[\*\\/\?"<>|\s,#:]+/.test(namespace)) { + return { + valid: false, + error: i18n.translate( + 'xpack.ingestManager.namespaceValidation.invalidCharactersErrorMessage', + { + defaultMessage: 'Namespace contains invalid characters', + } + ), + }; + } + // Node.js doesn't have Blob, and browser doesn't have Buffer :) + else if ( + (typeof Blob === 'function' && new Blob([namespace]).size > 100) || + (typeof Buffer === 'function' && Buffer.from(namespace).length > 100) + ) { + return { + valid: false, + error: i18n.translate('xpack.ingestManager.namespaceValidation.tooLongErrorMessage', { + defaultMessage: 'Namespace cannot be more than 100 bytes', + }), + }; + } + + return { valid: true }; } diff --git a/x-pack/plugins/ingest_manager/common/types/models/agent.ts b/x-pack/plugins/ingest_manager/common/types/models/agent.ts index 7110fd4ce52ea..6ac783820ce82 100644 --- a/x-pack/plugins/ingest_manager/common/types/models/agent.ts +++ b/x-pack/plugins/ingest_manager/common/types/models/agent.ts @@ -3,7 +3,7 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ - +import { FullAgentPolicy } from './agent_policy'; import { AGENT_TYPE_EPHEMERAL, AGENT_TYPE_PERMANENT, AGENT_TYPE_TEMPORARY } from '../../constants'; export type AgentType = @@ -22,7 +22,7 @@ export type AgentStatus = | 'upgrading' | 'degraded'; -export type AgentActionType = 'CONFIG_CHANGE' | 'UNENROLL' | 'UPGRADE'; +export type AgentActionType = 'POLICY_CHANGE' | 'UNENROLL' | 'UPGRADE'; export interface NewAgentAction { type: AgentActionType; data?: any; @@ -42,13 +42,24 @@ export interface AgentAction extends NewAgentAction { export interface AgentPolicyAction extends NewAgentAction { id: string; type: AgentActionType; - data?: any; + data: { + policy: FullAgentPolicy; + }; policy_id: string; policy_revision: number; created_at: string; ack_data?: any; } +// Make policy change action renaming BWC with agent version <= 7.9 +// eslint-disable-next-line @typescript-eslint/naming-convention +export type AgentPolicyActionV7_9 = Omit & { + type: 'CONFIG_CHANGE'; + data: { + config: FullAgentPolicy; + }; +}; + interface CommonAgentActionSOAttributes { type: AgentActionType; sent_at?: string; diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/hooks/use_breadcrumbs.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/hooks/use_breadcrumbs.tsx index 1d80495d2b347..b263f46b90a25 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/hooks/use_breadcrumbs.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/hooks/use_breadcrumbs.tsx @@ -11,7 +11,7 @@ import { useCore } from './use_core'; const BASE_BREADCRUMB: ChromeBreadcrumb = { href: pagePathGetters.overview(), text: i18n.translate('xpack.ingestManager.breadcrumbs.appTitle', { - defaultMessage: 'Ingest Manager', + defaultMessage: 'Fleet', }), }; @@ -155,21 +155,15 @@ const breadcrumbGetters: { fleet: () => [ BASE_BREADCRUMB, { - text: i18n.translate('xpack.ingestManager.breadcrumbs.fleetPageTitle', { - defaultMessage: 'Fleet', + text: i18n.translate('xpack.ingestManager.breadcrumbs.agentsPageTitle', { + defaultMessage: 'Agents', }), }, ], fleet_agent_list: () => [ BASE_BREADCRUMB, { - href: pagePathGetters.fleet(), - text: i18n.translate('xpack.ingestManager.breadcrumbs.fleetPageTitle', { - defaultMessage: 'Fleet', - }), - }, - { - text: i18n.translate('xpack.ingestManager.breadcrumbs.fleetAgentsPageTitle', { + text: i18n.translate('xpack.ingestManager.breadcrumbs.agentsPageTitle', { defaultMessage: 'Agents', }), }, @@ -178,12 +172,7 @@ const breadcrumbGetters: { BASE_BREADCRUMB, { href: pagePathGetters.fleet(), - text: i18n.translate('xpack.ingestManager.breadcrumbs.fleetPageTitle', { - defaultMessage: 'Fleet', - }), - }, - { - text: i18n.translate('xpack.ingestManager.breadcrumbs.fleetAgentsPageTitle', { + text: i18n.translate('xpack.ingestManager.breadcrumbs.agentsPageTitle', { defaultMessage: 'Agents', }), }, @@ -193,12 +182,12 @@ const breadcrumbGetters: { BASE_BREADCRUMB, { href: pagePathGetters.fleet(), - text: i18n.translate('xpack.ingestManager.breadcrumbs.fleetPageTitle', { - defaultMessage: 'Fleet', + text: i18n.translate('xpack.ingestManager.breadcrumbs.agentsPageTitle', { + defaultMessage: 'Agents', }), }, { - text: i18n.translate('xpack.ingestManager.breadcrumbs.fleetEnrollmentTokensPageTitle', { + text: i18n.translate('xpack.ingestManager.breadcrumbs.enrollmentTokensPageTitle', { defaultMessage: 'Enrollment tokens', }), }, diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/default.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/default.tsx index 7da8330740532..5de47ee4f410b 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/default.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/layouts/default.tsx @@ -83,8 +83,8 @@ export const DefaultLayout: React.FunctionComponent = ({ disabled={!fleet?.enabled} > diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_policy/components/agent_policy_form.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_policy/components/agent_policy_form.tsx index b216270aa08f0..c716f7b12e78c 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_policy/components/agent_policy_form.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_policy/components/agent_policy_form.tsx @@ -28,7 +28,7 @@ import { isValidNamespace } from '../../../services'; import { AgentPolicyDeleteProvider } from './agent_policy_delete_provider'; interface ValidationResults { - [key: string]: JSX.Element[]; + [key: string]: Array; } const StyledEuiAccordion = styled(EuiAccordion)` @@ -41,6 +41,7 @@ export const agentPolicyFormValidation = ( agentPolicy: Partial ): ValidationResults => { const errors: ValidationResults = {}; + const namespaceValidation = isValidNamespace(agentPolicy.namespace || ''); if (!agentPolicy.name?.trim()) { errors.name = [ @@ -51,20 +52,8 @@ export const agentPolicyFormValidation = ( ]; } - if (!agentPolicy.namespace?.trim()) { - errors.namespace = [ - , - ]; - } else if (!isValidNamespace(agentPolicy.namespace)) { - errors.namespace = [ - , - ]; + if (!namespaceValidation.valid && namespaceValidation.error) { + errors.namespace = [namespaceValidation.error]; } return errors; diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_policy/create_package_policy_page/services/validate_package_policy.ts b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_policy/create_package_policy_page/services/validate_package_policy.ts index 2714f1fe2e6e5..03060c5dcb20e 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_policy/create_package_policy_page/services/validate_package_policy.ts +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/agent_policy/create_package_policy_page/services/validate_package_policy.ts @@ -50,6 +50,7 @@ export const validatePackagePolicy = ( namespace: null, inputs: {}, }; + const namespaceValidation = isValidNamespace(packagePolicy.namespace); if (!packagePolicy.name.trim()) { validationResults.name = [ @@ -59,18 +60,8 @@ export const validatePackagePolicy = ( ]; } - if (!packagePolicy.namespace.trim()) { - validationResults.namespace = [ - i18n.translate('xpack.ingestManager.packagePolicyValidation.namespaceRequiredErrorMessage', { - defaultMessage: 'Namespace is required', - }), - ]; - } else if (!isValidNamespace(packagePolicy.namespace)) { - validationResults.namespace = [ - i18n.translate('xpack.ingestManager.packagePolicyValidation.namespaceInvalidErrorMessage', { - defaultMessage: 'Namespace contains invalid characters', - }), - ]; + if (!namespaceValidation.valid && namespaceValidation.error) { + validationResults.namespace = [namespaceValidation.error]; } if ( diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/fleet/components/agent_enrollment_flyout/managed_instructions.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/fleet/components/agent_enrollment_flyout/managed_instructions.tsx index 04fef7f4b3f21..c840b487a3970 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/fleet/components/agent_enrollment_flyout/managed_instructions.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/fleet/components/agent_enrollment_flyout/managed_instructions.tsx @@ -74,14 +74,14 @@ export const ManagedInstructions = React.memo(({ agentPolicies }) => { ) : ( <> ), diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/fleet/components/list_layout.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/fleet/components/list_layout.tsx index b01dbbd57c16f..278beb5dfe35f 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/fleet/components/list_layout.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/fleet/components/list_layout.tsx @@ -126,7 +126,7 @@ export const ListLayout: React.FunctionComponent<{}> = ({ children }) => {

- +

@@ -134,7 +134,7 @@ export const ListLayout: React.FunctionComponent<{}> = ({ children }) => {

diff --git a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/overview/components/agent_section.tsx b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/overview/components/agent_section.tsx index d7b08bf5ffa3a..482105cdea300 100644 --- a/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/overview/components/agent_section.tsx +++ b/x-pack/plugins/ingest_manager/public/applications/ingest_manager/sections/overview/components/agent_section.tsx @@ -25,8 +25,8 @@ export const OverviewAgentSection = () => { return ( {

diff --git a/x-pack/plugins/ingest_manager/public/plugin.ts b/x-pack/plugins/ingest_manager/public/plugin.ts index 5f7bfe865e892..59741ce79dd8b 100644 --- a/x-pack/plugins/ingest_manager/public/plugin.ts +++ b/x-pack/plugins/ingest_manager/public/plugin.ts @@ -78,7 +78,7 @@ export class IngestManagerPlugin core.application.register({ id: PLUGIN_ID, category: DEFAULT_APP_CATEGORIES.management, - title: i18n.translate('xpack.ingestManager.appTitle', { defaultMessage: 'Ingest Manager' }), + title: i18n.translate('xpack.ingestManager.appTitle', { defaultMessage: 'Fleet' }), order: 9020, euiIconType: 'logoElastic', async mount(params: AppMountParameters) { diff --git a/x-pack/plugins/ingest_manager/server/routes/agent/acks_handlers.test.ts b/x-pack/plugins/ingest_manager/server/routes/agent/acks_handlers.test.ts index 33b9dc617075b..3d7f5c4a17adb 100644 --- a/x-pack/plugins/ingest_manager/server/routes/agent/acks_handlers.test.ts +++ b/x-pack/plugins/ingest_manager/server/routes/agent/acks_handlers.test.ts @@ -73,7 +73,7 @@ describe('test acks handlers', () => { const ackService: AcksService = { acknowledgeAgentActions: jest.fn().mockReturnValueOnce([ { - type: 'CONFIG_CHANGE', + type: 'POLICY_CHANGE', id: 'action1', }, ]), diff --git a/x-pack/plugins/ingest_manager/server/routes/agent/actions_handlers.test.ts b/x-pack/plugins/ingest_manager/server/routes/agent/actions_handlers.test.ts index 5445a46fbe2b4..4574bcc64d4ce 100644 --- a/x-pack/plugins/ingest_manager/server/routes/agent/actions_handlers.test.ts +++ b/x-pack/plugins/ingest_manager/server/routes/agent/actions_handlers.test.ts @@ -23,7 +23,7 @@ describe('test actions handlers schema', () => { it('validate that new agent actions schema is valid', async () => { expect( NewAgentActionSchema.validate({ - type: 'CONFIG_CHANGE', + type: 'POLICY_CHANGE', data: 'data', sent_at: '2020-03-14T19:45:02.620Z', }) @@ -53,7 +53,7 @@ describe('test actions handlers', () => { const postNewAgentActionRequest: PostNewAgentActionRequest = { body: { action: { - type: 'CONFIG_CHANGE', + type: 'POLICY_CHANGE', data: 'data', sent_at: '2020-03-14T19:45:02.620Z', }, @@ -66,7 +66,7 @@ describe('test actions handlers', () => { const mockRequest = httpServerMock.createKibanaRequest(postNewAgentActionRequest); const agentAction = ({ - type: 'CONFIG_CHANGE', + type: 'POLICY_CHANGE', id: 'action1', sent_at: '2020-03-14T19:45:02.620Z', timestamp: '2019-01-04T14:32:03.36764-05:00', diff --git a/x-pack/plugins/ingest_manager/server/saved_objects/index.ts b/x-pack/plugins/ingest_manager/server/saved_objects/index.ts index fd08b76a3916b..b3a8c7390176f 100644 --- a/x-pack/plugins/ingest_manager/server/saved_objects/index.ts +++ b/x-pack/plugins/ingest_manager/server/saved_objects/index.ts @@ -24,6 +24,7 @@ import { migrateEnrollmentApiKeysToV7100, migratePackagePolicyToV7100, migrateSettingsToV7100, + migrateAgentActionToV7100, } from './migrations/to_v7_10_0'; /* @@ -109,6 +110,9 @@ const savedObjectTypes: { [key: string]: SavedObjectsType } = { created_at: { type: 'date' }, }, }, + migrations: { + '7.10.0': migrateAgentActionToV7100, + }, }, [AGENT_EVENT_SAVED_OBJECT_TYPE]: { name: AGENT_EVENT_SAVED_OBJECT_TYPE, diff --git a/x-pack/plugins/ingest_manager/server/saved_objects/migrations/to_v7_10_0.ts b/x-pack/plugins/ingest_manager/server/saved_objects/migrations/to_v7_10_0.ts index 5e36ce46c099b..53af5ae42e410 100644 --- a/x-pack/plugins/ingest_manager/server/saved_objects/migrations/to_v7_10_0.ts +++ b/x-pack/plugins/ingest_manager/server/saved_objects/migrations/to_v7_10_0.ts @@ -12,6 +12,7 @@ import { PackagePolicy, EnrollmentAPIKey, Settings, + AgentAction, } from '../../types'; export const migrateAgentToV7100: SavedObjectMigrationFn< @@ -92,3 +93,18 @@ export const migrateSettingsToV7100: SavedObjectMigrationFn< return settingsDoc; }; + +export const migrateAgentActionToV7100: SavedObjectMigrationFn = ( + agentActionDoc +) => { + // @ts-expect-error + if (agentActionDoc.attributes.type === 'CONFIG_CHANGE') { + agentActionDoc.attributes.type = 'POLICY_CHANGE'; + if (agentActionDoc.attributes.data?.config) { + agentActionDoc.attributes.data.policy = agentActionDoc.attributes.data.config; + delete agentActionDoc.attributes.data.config; + } + } + + return agentActionDoc; +}; diff --git a/x-pack/plugins/ingest_manager/server/services/agent_policy.ts b/x-pack/plugins/ingest_manager/server/services/agent_policy.ts index 64b11512fae10..29821a530098c 100644 --- a/x-pack/plugins/ingest_manager/server/services/agent_policy.ts +++ b/x-pack/plugins/ingest_manager/server/services/agent_policy.ts @@ -399,8 +399,8 @@ class AgentPolicyService { }, []); await createAgentPolicyAction(soClient, { - type: 'CONFIG_CHANGE', - data: { config: policy } as any, + type: 'POLICY_CHANGE', + data: { policy }, ack_data: { packages }, created_at: new Date().toISOString(), policy_id: policy.id, diff --git a/x-pack/plugins/ingest_manager/server/services/agents/acks.test.ts b/x-pack/plugins/ingest_manager/server/services/agents/acks.test.ts index c7b4098803827..8bcf275fce6ac 100644 --- a/x-pack/plugins/ingest_manager/server/services/agents/acks.test.ts +++ b/x-pack/plugins/ingest_manager/server/services/agents/acks.test.ts @@ -28,7 +28,7 @@ describe('test agent acks services', () => { references: [], type: AGENT_ACTION_SAVED_OBJECT_TYPE, attributes: { - type: 'CONFIG_CHANGE', + type: 'POLICY_CHANGE', agent_id: 'id', sent_at: '2020-03-14T19:45:02.620Z', timestamp: '2019-01-04T14:32:03.36764-05:00', @@ -61,7 +61,7 @@ describe('test agent acks services', () => { const mockSavedObjectsClient = savedObjectsClientMock.create(); const actionAttributes = { - type: 'CONFIG_CHANGE', + type: 'POLICY_CHANGE', policy_id: 'policy1', policy_revision: 4, sent_at: '2020-03-14T19:45:02.620Z', @@ -120,7 +120,7 @@ describe('test agent acks services', () => { const mockSavedObjectsClient = savedObjectsClientMock.create(); const actionAttributes = { - type: 'CONFIG_CHANGE', + type: 'POLICY_CHANGE', policy_id: 'policy1', policy_revision: 4, sent_at: '2020-03-14T19:45:02.620Z', @@ -180,7 +180,7 @@ describe('test agent acks services', () => { const mockSavedObjectsClient = savedObjectsClientMock.create(); const actionAttributes = { - type: 'CONFIG_CHANGE', + type: 'POLICY_CHANGE', policy_id: 'policy1', policy_revision: 4, sent_at: '2020-03-14T19:45:02.620Z', @@ -235,7 +235,7 @@ describe('test agent acks services', () => { references: [], type: AGENT_ACTION_SAVED_OBJECT_TYPE, attributes: { - type: 'CONFIG_CHANGE', + type: 'POLICY_CHANGE', sent_at: '2020-03-14T19:45:02.620Z', timestamp: '2019-01-04T14:32:03.36764-05:00', created_at: '2020-03-14T19:45:02.620Z', @@ -319,7 +319,7 @@ describe('test agent acks services', () => { references: [], type: AGENT_ACTION_SAVED_OBJECT_TYPE, attributes: { - type: 'CONFIG_CHANGE', + type: 'POLICY_CHANGE', agent_id: 'id', sent_at: '2020-03-14T19:45:02.620Z', timestamp: '2019-01-04T14:32:03.36764-05:00', diff --git a/x-pack/plugins/ingest_manager/server/services/agents/acks.ts b/x-pack/plugins/ingest_manager/server/services/agents/acks.ts index e22ee4256b0e2..a552caa12b95e 100644 --- a/x-pack/plugins/ingest_manager/server/services/agents/acks.ts +++ b/x-pack/plugins/ingest_manager/server/services/agents/acks.ts @@ -16,6 +16,7 @@ import { Agent, AgentAction, AgentPolicyAction, + AgentPolicyActionV7_9, AgentEvent, AgentEventSOAttributes, AgentSOAttributes, @@ -132,18 +133,20 @@ async function fetchActionsUsingCache( return [...freshActions, ...actions]; } -function isAgentPolicyAction(action: AgentAction | AgentPolicyAction): action is AgentPolicyAction { +function isAgentPolicyAction( + action: AgentAction | AgentPolicyAction | AgentPolicyActionV7_9 +): action is AgentPolicyAction | AgentPolicyActionV7_9 { return (action as AgentPolicyAction).policy_id !== undefined; } function getLatestConfigChangePolicyActionIfUpdated( agent: Agent, - actions: Array -): AgentPolicyAction | null { - return actions.reduce((acc, action) => { + actions: Array +): AgentPolicyAction | AgentPolicyActionV7_9 | null { + return actions.reduce((acc, action) => { if ( !isAgentPolicyAction(action) || - action.type !== 'CONFIG_CHANGE' || + (action.type !== 'POLICY_CHANGE' && action.type !== 'CONFIG_CHANGE') || action.policy_id !== agent.policy_id || (action?.policy_revision ?? 0) < (agent.policy_revision || 0) ) { diff --git a/x-pack/plugins/ingest_manager/server/services/agents/actions.test.ts b/x-pack/plugins/ingest_manager/server/services/agents/actions.test.ts index bcb3fc7fdc7bd..8fde684aa38bf 100644 --- a/x-pack/plugins/ingest_manager/server/services/agents/actions.test.ts +++ b/x-pack/plugins/ingest_manager/server/services/agents/actions.test.ts @@ -15,7 +15,7 @@ describe('test agent actions services', () => { const newAgentAction: Omit = { agent_id: 'agentid', - type: 'CONFIG_CHANGE', + type: 'POLICY_CHANGE', data: { content: 'data' }, sent_at: '2020-03-14T19:45:02.620Z', created_at: '2020-03-14T19:45:02.620Z', @@ -24,7 +24,7 @@ describe('test agent actions services', () => { Promise.resolve({ attributes: { agent_id: 'agentid', - type: 'CONFIG_CHANGE', + type: 'POLICY_CHANGE', data: JSON.stringify({ content: 'data' }), sent_at: '2020-03-14T19:45:02.620Z', created_at: '2020-03-14T19:45:02.620Z', diff --git a/x-pack/plugins/ingest_manager/server/services/agents/checkin/state_new_actions.test.ts b/x-pack/plugins/ingest_manager/server/services/agents/checkin/state_new_actions.test.ts new file mode 100644 index 0000000000000..f4a2147131570 --- /dev/null +++ b/x-pack/plugins/ingest_manager/server/services/agents/checkin/state_new_actions.test.ts @@ -0,0 +1,164 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { savedObjectsClientMock } from 'src/core/server/mocks'; +import { createAgentActionFromPolicyAction } from './state_new_actions'; +import { OutputType, Agent, AgentPolicyAction } from '../../../types'; + +jest.mock('../../app_context', () => ({ + appContextService: { + getEncryptedSavedObjects: () => ({ + getDecryptedAsInternalUser: () => ({ + attributes: { + default_api_key: 'MOCK_API_KEY', + }, + }), + }), + }, +})); + +describe('test agent checkin new action services', () => { + describe('createAgentActionFromPolicyAction()', () => { + const mockSavedObjectsClient = savedObjectsClientMock.create(); + const mockAgent: Agent = { + id: 'agent1', + active: true, + type: 'PERMANENT', + local_metadata: { elastic: { agent: { version: '7.10.0' } } }, + user_provided_metadata: {}, + current_error_events: [], + packages: [], + enrolled_at: '2020-03-14T19:45:02.620Z', + }; + const mockPolicyAction: AgentPolicyAction = { + id: 'action1', + type: 'POLICY_CHANGE', + policy_id: 'policy1', + policy_revision: 1, + sent_at: '2020-03-14T19:45:02.620Z', + created_at: '2020-03-14T19:45:02.620Z', + data: { + policy: { + id: 'policy1', + outputs: { + default: { + type: OutputType.Elasticsearch, + hosts: [], + ca_sha256: undefined, + api_key: undefined, + }, + }, + inputs: [], + }, + }, + }; + + it('should return POLICY_CHANGE and data.policy for agent version >= 7.10', async () => { + const expectedResult = [ + { + agent_id: 'agent1', + created_at: '2020-03-14T19:45:02.620Z', + data: { + policy: { + id: 'policy1', + inputs: [], + outputs: { default: { api_key: 'MOCK_API_KEY', hosts: [], type: 'elasticsearch' } }, + }, + }, + id: 'action1', + sent_at: '2020-03-14T19:45:02.620Z', + type: 'POLICY_CHANGE', + }, + ]; + + expect( + await createAgentActionFromPolicyAction(mockSavedObjectsClient, mockAgent, mockPolicyAction) + ).toEqual(expectedResult); + + expect( + await createAgentActionFromPolicyAction( + mockSavedObjectsClient, + { ...mockAgent, local_metadata: { elastic: { agent: { version: '7.10.0-SNAPSHOT' } } } }, + mockPolicyAction + ) + ).toEqual(expectedResult); + + expect( + await createAgentActionFromPolicyAction( + mockSavedObjectsClient, + { ...mockAgent, local_metadata: { elastic: { agent: { version: '7.10.2' } } } }, + mockPolicyAction + ) + ).toEqual(expectedResult); + + expect( + await createAgentActionFromPolicyAction( + mockSavedObjectsClient, + { ...mockAgent, local_metadata: { elastic: { agent: { version: '8.0.0' } } } }, + mockPolicyAction + ) + ).toEqual(expectedResult); + + expect( + await createAgentActionFromPolicyAction( + mockSavedObjectsClient, + { ...mockAgent, local_metadata: { elastic: { agent: { version: '8.0.0-SNAPSHOT' } } } }, + mockPolicyAction + ) + ).toEqual(expectedResult); + }); + + it('should return CONNFIG_CHANGE and data.config for agent version <= 7.9', async () => { + const expectedResult = [ + { + agent_id: 'agent1', + created_at: '2020-03-14T19:45:02.620Z', + data: { + config: { + id: 'policy1', + inputs: [], + outputs: { default: { api_key: 'MOCK_API_KEY', hosts: [], type: 'elasticsearch' } }, + }, + }, + id: 'action1', + sent_at: '2020-03-14T19:45:02.620Z', + type: 'CONFIG_CHANGE', + }, + ]; + + expect( + await createAgentActionFromPolicyAction( + mockSavedObjectsClient, + { ...mockAgent, local_metadata: { elastic: { agent: { version: '7.9.0' } } } }, + mockPolicyAction + ) + ).toEqual(expectedResult); + + expect( + await createAgentActionFromPolicyAction( + mockSavedObjectsClient, + { ...mockAgent, local_metadata: { elastic: { agent: { version: '7.9.3' } } } }, + mockPolicyAction + ) + ).toEqual(expectedResult); + + expect( + await createAgentActionFromPolicyAction( + mockSavedObjectsClient, + { ...mockAgent, local_metadata: { elastic: { agent: { version: '7.9.1-SNAPSHOT' } } } }, + mockPolicyAction + ) + ).toEqual(expectedResult); + + expect( + await createAgentActionFromPolicyAction( + mockSavedObjectsClient, + { ...mockAgent, local_metadata: { elastic: { agent: { version: '7.8.2' } } } }, + mockPolicyAction + ) + ).toEqual(expectedResult); + }); + }); +}); diff --git a/x-pack/plugins/ingest_manager/server/services/agents/checkin/state_new_actions.ts b/x-pack/plugins/ingest_manager/server/services/agents/checkin/state_new_actions.ts index fbbed87b031e2..51ccdc8eb1c7c 100644 --- a/x-pack/plugins/ingest_manager/server/services/agents/checkin/state_new_actions.ts +++ b/x-pack/plugins/ingest_manager/server/services/agents/checkin/state_new_actions.ts @@ -3,7 +3,7 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ - +import semver from 'semver'; import { timer, from, Observable, TimeoutError } from 'rxjs'; import { omit } from 'lodash'; import { @@ -16,7 +16,13 @@ import { take, } from 'rxjs/operators'; import { SavedObjectsClientContract, KibanaRequest } from 'src/core/server'; -import { Agent, AgentAction, AgentPolicyAction, AgentSOAttributes } from '../../../types'; +import { + Agent, + AgentAction, + AgentPolicyAction, + AgentPolicyActionV7_9, + AgentSOAttributes, +} from '../../../types'; import * as APIKeysService from '../../api_keys'; import { AGENT_SAVED_OBJECT_TYPE, @@ -105,15 +111,40 @@ async function getOrCreateAgentDefaultOutputAPIKey( return outputAPIKey.key; } -async function createAgentActionFromPolicyAction( +export async function createAgentActionFromPolicyAction( soClient: SavedObjectsClientContract, agent: Agent, policyAction: AgentPolicyAction ) { + // Transform the policy action for agent version <= 7.9.x for BWC + const agentVersion = semver.parse((agent.local_metadata?.elastic as any)?.agent?.version); + const agentPolicyAction: AgentPolicyAction | AgentPolicyActionV7_9 = + agentVersion && + semver.lt( + agentVersion, + // A prerelease tag is added here so that agent versions with prerelease tags can be compared + // correctly using `semvar` + '7.10.0-SNAPSHOT', + // `@types/semvar` is out of date with the version of `semvar` we use and doesn't have a + // corresponding release version we can update the typing to :( so, the typing error is + // suppressed here even though it is supported by `semvar` + // @ts-expect-error + { includePrerelease: true } + ) + ? { + ...policyAction, + type: 'CONFIG_CHANGE', + data: { + config: policyAction.data.policy, + }, + } + : policyAction; + + // Create agent action const newAgentAction: AgentAction = Object.assign( omit( // Faster than clone - JSON.parse(JSON.stringify(policyAction)) as AgentPolicyAction, + JSON.parse(JSON.stringify(agentPolicyAction)) as AgentPolicyAction, 'policy_id', 'policy_revision' ), @@ -123,10 +154,14 @@ async function createAgentActionFromPolicyAction( ); // Mutate the policy to set the api token for this agent - newAgentAction.data.config.outputs.default.api_key = await getOrCreateAgentDefaultOutputAPIKey( - soClient, - agent - ); + const apiKey = await getOrCreateAgentDefaultOutputAPIKey(soClient, agent); + if (newAgentAction.data.policy) { + newAgentAction.data.policy.outputs.default.api_key = apiKey; + } + // BWC for agent <= 7.9 + else if (newAgentAction.data.config) { + newAgentAction.data.config.outputs.default.api_key = apiKey; + } return [newAgentAction]; } diff --git a/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/install.ts b/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/install.ts index dfa03ec9d527d..d8aff10492595 100644 --- a/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/install.ts +++ b/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/install.ts @@ -9,7 +9,6 @@ import { SavedObjectsClientContract } from 'kibana/server'; import { saveInstalledEsRefs } from '../../packages/install'; import * as Registry from '../../registry'; import { - Dataset, ElasticsearchAssetType, EsAssetReference, RegistryPackage, @@ -24,12 +23,7 @@ interface TransformInstallation { content: string; } -interface TransformPathDataset { - path: string; - dataset: Dataset; -} - -export const installTransformForDataset = async ( +export const installTransform = async ( registryPackage: RegistryPackage, paths: string[], callCluster: CallESAsCurrentUser, @@ -51,53 +45,32 @@ export const installTransformForDataset = async ( callCluster, previousInstalledTransformEsAssets.map((asset) => asset.id) ); - // install the latest dataset - const datasets = registryPackage.datasets; - if (!datasets?.length) return []; - const installNameSuffix = `${registryPackage.version}`; + const installNameSuffix = `${registryPackage.version}`; const transformPaths = paths.filter((path) => isTransform(path)); let installedTransforms: EsAssetReference[] = []; if (transformPaths.length > 0) { - const transformPathDatasets = datasets.reduce((acc, dataset) => { - transformPaths.forEach((path) => { - if (isDatasetTransform(path, dataset.path)) { - acc.push({ path, dataset }); - } + const transformRefs = transformPaths.reduce((acc, path) => { + acc.push({ + id: getTransformNameForInstallation(registryPackage, path, installNameSuffix), + type: ElasticsearchAssetType.transform, }); + return acc; }, []); - const transformRefs = transformPathDatasets.reduce( - (acc, transformPathDataset) => { - if (transformPathDataset) { - acc.push({ - id: getTransformNameForInstallation(transformPathDataset, installNameSuffix), - type: ElasticsearchAssetType.transform, - }); - } - return acc; - }, - [] - ); - // get and save transform refs before installing transforms await saveInstalledEsRefs(savedObjectsClient, registryPackage.name, transformRefs); - const transforms: TransformInstallation[] = transformPathDatasets.map( - (transformPathDataset: TransformPathDataset) => { - return { - installationName: getTransformNameForInstallation( - transformPathDataset, - installNameSuffix - ), - content: getAsset(transformPathDataset.path).toString('utf-8'), - }; - } - ); + const transforms: TransformInstallation[] = transformPaths.map((path: string) => { + return { + installationName: getTransformNameForInstallation(registryPackage, path, installNameSuffix), + content: getAsset(path).toString('utf-8'), + }; + }); const installationPromises = transforms.map(async (transform) => { - return installTransform({ callCluster, transform }); + return handleTransformInstall({ callCluster, transform }); }); installedTransforms = await Promise.all(installationPromises).then((results) => results.flat()); @@ -123,20 +96,10 @@ export const installTransformForDataset = async ( const isTransform = (path: string) => { const pathParts = Registry.pathParts(path); - return pathParts.type === ElasticsearchAssetType.transform; + return !path.endsWith('/') && pathParts.type === ElasticsearchAssetType.transform; }; -const isDatasetTransform = (path: string, datasetName: string) => { - const pathParts = Registry.pathParts(path); - return ( - !path.endsWith('/') && - pathParts.type === ElasticsearchAssetType.transform && - pathParts.dataset !== undefined && - datasetName === pathParts.dataset - ); -}; - -async function installTransform({ +async function handleTransformInstall({ callCluster, transform, }: { @@ -160,9 +123,12 @@ async function installTransform({ } const getTransformNameForInstallation = ( - transformDataset: TransformPathDataset, + registryPackage: RegistryPackage, + path: string, suffix: string ) => { - const filename = transformDataset?.path.split('/')?.pop()?.split('.')[0]; - return `${transformDataset.dataset.type}-${transformDataset.dataset.name}-${filename}-${suffix}`; + const pathPaths = path.split('/'); + const filename = pathPaths?.pop()?.split('.')[0]; + const folderName = pathPaths?.pop(); + return `${registryPackage.name}.${folderName}-${filename}-${suffix}`; }; diff --git a/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/remove.ts b/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/remove.ts index a527d05f1c49b..02d5dfc64d07d 100644 --- a/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/remove.ts +++ b/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/remove.ts @@ -25,6 +25,19 @@ export const deleteTransforms = async ( ) => { await Promise.all( transformIds.map(async (transformId) => { + // get the index the transform + const transformResponse: { + count: number; + transforms: Array<{ + dest: { + index: string; + }; + }>; + } = await callCluster('transport.request', { + method: 'GET', + path: `/_transform/${transformId}`, + }); + await stopTransforms([transformId], callCluster); await callCluster('transport.request', { method: 'DELETE', @@ -32,6 +45,15 @@ export const deleteTransforms = async ( path: `/_transform/${transformId}`, ignore: [404], }); + + // expect this to be 1 + for (const transform of transformResponse.transforms) { + await callCluster('transport.request', { + method: 'DELETE', + path: `/${transform?.dest?.index}`, + ignore: [404], + }); + } }) ); }; diff --git a/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/transform.test.ts b/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/transform.test.ts index c43a33df2db61..7cb507d15679e 100644 --- a/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/transform.test.ts +++ b/x-pack/plugins/ingest_manager/server/services/epm/elasticsearch/transform/transform.test.ts @@ -14,7 +14,7 @@ jest.mock('./common', () => { }; }); -import { installTransformForDataset } from './install'; +import { installTransform } from './install'; import { ILegacyScopedClusterClient, SavedObject, SavedObjectsClientContract } from 'kibana/server'; import { ElasticsearchAssetType, Installation, RegistryPackage } from '../../../../types'; import { getInstallation, getInstallationObject } from '../../packages'; @@ -47,7 +47,7 @@ describe('test transform install', () => { type: ElasticsearchAssetType.ingestPipeline, }, { - id: 'metrics-endpoint.metadata_current-default-0.15.0-dev.0', + id: 'endpoint.metadata_current-default-0.15.0-dev.0', type: ElasticsearchAssetType.transform, }, ], @@ -60,15 +60,15 @@ describe('test transform install', () => { type: ElasticsearchAssetType.ingestPipeline, }, { - id: 'metrics-endpoint.metadata_current-default-0.15.0-dev.0', + id: 'endpoint.metadata_current-default-0.15.0-dev.0', type: ElasticsearchAssetType.transform, }, { - id: 'metrics-endpoint.metadata_current-default-0.16.0-dev.0', + id: 'endpoint.metadata_current-default-0.16.0-dev.0', type: ElasticsearchAssetType.transform, }, { - id: 'metrics-endpoint.metadata-default-0.16.0-dev.0', + id: 'endpoint.metadata-default-0.16.0-dev.0', type: ElasticsearchAssetType.transform, }, ], @@ -91,7 +91,26 @@ describe('test transform install', () => { } as unknown) as SavedObject) ); - await installTransformForDataset( + legacyScopedClusterClient.callAsCurrentUser.mockReturnValueOnce( + Promise.resolve({ + count: 1, + transforms: [ + { + dest: { + index: 'index', + }, + }, + ], + } as { + count: number; + transforms: Array<{ + dest: { + index: string; + }; + }>; + }) + ); + await installTransform( ({ name: 'endpoint', version: '0.16.0-dev.0', @@ -128,18 +147,26 @@ describe('test transform install', () => { } as unknown) as RegistryPackage, [ 'endpoint-0.16.0-dev.0/dataset/policy/elasticsearch/ingest_pipeline/default.json', - 'endpoint-0.16.0-dev.0/dataset/metadata/elasticsearch/transform/default.json', - 'endpoint-0.16.0-dev.0/dataset/metadata_current/elasticsearch/transform/default.json', + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata/default.json', + 'endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/default.json', ], legacyScopedClusterClient.callAsCurrentUser, savedObjectsClient ); + expect(legacyScopedClusterClient.callAsCurrentUser.mock.calls).toEqual([ + [ + 'transport.request', + { + method: 'GET', + path: '/_transform/endpoint.metadata_current-default-0.15.0-dev.0', + }, + ], [ 'transport.request', { method: 'POST', - path: '/_transform/metrics-endpoint.metadata_current-default-0.15.0-dev.0/_stop', + path: '/_transform/endpoint.metadata_current-default-0.15.0-dev.0/_stop', query: 'force=true', ignore: [404], }, @@ -149,7 +176,15 @@ describe('test transform install', () => { { method: 'DELETE', query: 'force=true', - path: '/_transform/metrics-endpoint.metadata_current-default-0.15.0-dev.0', + path: '/_transform/endpoint.metadata_current-default-0.15.0-dev.0', + ignore: [404], + }, + ], + [ + 'transport.request', + { + method: 'DELETE', + path: '/index', ignore: [404], }, ], @@ -157,7 +192,7 @@ describe('test transform install', () => { 'transport.request', { method: 'PUT', - path: '/_transform/metrics-endpoint.metadata-default-0.16.0-dev.0', + path: '/_transform/endpoint.metadata-default-0.16.0-dev.0', query: 'defer_validation=true', body: '{"content": "data"}', }, @@ -166,7 +201,7 @@ describe('test transform install', () => { 'transport.request', { method: 'PUT', - path: '/_transform/metrics-endpoint.metadata_current-default-0.16.0-dev.0', + path: '/_transform/endpoint.metadata_current-default-0.16.0-dev.0', query: 'defer_validation=true', body: '{"content": "data"}', }, @@ -175,14 +210,14 @@ describe('test transform install', () => { 'transport.request', { method: 'POST', - path: '/_transform/metrics-endpoint.metadata-default-0.16.0-dev.0/_start', + path: '/_transform/endpoint.metadata-default-0.16.0-dev.0/_start', }, ], [ 'transport.request', { method: 'POST', - path: '/_transform/metrics-endpoint.metadata_current-default-0.16.0-dev.0/_start', + path: '/_transform/endpoint.metadata_current-default-0.16.0-dev.0/_start', }, ], ]); @@ -198,15 +233,15 @@ describe('test transform install', () => { type: 'ingest_pipeline', }, { - id: 'metrics-endpoint.metadata_current-default-0.15.0-dev.0', + id: 'endpoint.metadata_current-default-0.15.0-dev.0', type: 'transform', }, { - id: 'metrics-endpoint.metadata-default-0.16.0-dev.0', + id: 'endpoint.metadata-default-0.16.0-dev.0', type: 'transform', }, { - id: 'metrics-endpoint.metadata_current-default-0.16.0-dev.0', + id: 'endpoint.metadata_current-default-0.16.0-dev.0', type: 'transform', }, ], @@ -222,11 +257,11 @@ describe('test transform install', () => { type: 'ingest_pipeline', }, { - id: 'metrics-endpoint.metadata_current-default-0.16.0-dev.0', + id: 'endpoint.metadata_current-default-0.16.0-dev.0', type: 'transform', }, { - id: 'metrics-endpoint.metadata-default-0.16.0-dev.0', + id: 'endpoint.metadata-default-0.16.0-dev.0', type: 'transform', }, ], @@ -263,7 +298,7 @@ describe('test transform install', () => { >) ); legacyScopedClusterClient.callAsCurrentUser = jest.fn(); - await installTransformForDataset( + await installTransform( ({ name: 'endpoint', version: '0.16.0-dev.0', @@ -284,7 +319,7 @@ describe('test transform install', () => { }, ], } as unknown) as RegistryPackage, - ['endpoint-0.16.0-dev.0/dataset/metadata_current/elasticsearch/transform/default.json'], + ['endpoint-0.16.0-dev.0/elasticsearch/transform/metadata_current/default.json'], legacyScopedClusterClient.callAsCurrentUser, savedObjectsClient ); @@ -294,7 +329,7 @@ describe('test transform install', () => { 'transport.request', { method: 'PUT', - path: '/_transform/metrics-endpoint.metadata_current-default-0.16.0-dev.0', + path: '/_transform/endpoint.metadata_current-default-0.16.0-dev.0', query: 'defer_validation=true', body: '{"content": "data"}', }, @@ -303,7 +338,7 @@ describe('test transform install', () => { 'transport.request', { method: 'POST', - path: '/_transform/metrics-endpoint.metadata_current-default-0.16.0-dev.0/_start', + path: '/_transform/endpoint.metadata_current-default-0.16.0-dev.0/_start', }, ], ]); @@ -313,7 +348,7 @@ describe('test transform install', () => { 'endpoint', { installed_es: [ - { id: 'metrics-endpoint.metadata_current-default-0.16.0-dev.0', type: 'transform' }, + { id: 'endpoint.metadata_current-default-0.16.0-dev.0', type: 'transform' }, ], }, ], @@ -324,7 +359,7 @@ describe('test transform install', () => { const previousInstallation: Installation = ({ installed_es: [ { - id: 'metrics-endpoint.metadata-current-default-0.15.0-dev.0', + id: 'endpoint.metadata-current-default-0.15.0-dev.0', type: ElasticsearchAssetType.transform, }, ], @@ -346,7 +381,26 @@ describe('test transform install', () => { } as unknown) as SavedObject) ); - await installTransformForDataset( + legacyScopedClusterClient.callAsCurrentUser.mockReturnValueOnce( + Promise.resolve({ + count: 1, + transforms: [ + { + dest: { + index: 'index', + }, + }, + ], + } as { + count: number; + transforms: Array<{ + dest: { + index: string; + }; + }>; + }) + ); + await installTransform( ({ name: 'endpoint', version: '0.16.0-dev.0', @@ -387,11 +441,18 @@ describe('test transform install', () => { ); expect(legacyScopedClusterClient.callAsCurrentUser.mock.calls).toEqual([ + [ + 'transport.request', + { + method: 'GET', + path: '/_transform/endpoint.metadata-current-default-0.15.0-dev.0', + }, + ], [ 'transport.request', { method: 'POST', - path: '/_transform/metrics-endpoint.metadata-current-default-0.15.0-dev.0/_stop', + path: '/_transform/endpoint.metadata-current-default-0.15.0-dev.0/_stop', query: 'force=true', ignore: [404], }, @@ -401,7 +462,15 @@ describe('test transform install', () => { { method: 'DELETE', query: 'force=true', - path: '/_transform/metrics-endpoint.metadata-current-default-0.15.0-dev.0', + path: '/_transform/endpoint.metadata-current-default-0.15.0-dev.0', + ignore: [404], + }, + ], + [ + 'transport.request', + { + method: 'DELETE', + path: '/index', ignore: [404], }, ], diff --git a/x-pack/plugins/ingest_manager/server/services/epm/packages/install.ts b/x-pack/plugins/ingest_manager/server/services/epm/packages/install.ts index 6187f683a3a80..d501b05d96c1c 100644 --- a/x-pack/plugins/ingest_manager/server/services/epm/packages/install.ts +++ b/x-pack/plugins/ingest_manager/server/services/epm/packages/install.ts @@ -44,7 +44,7 @@ import { updateCurrentWriteIndices } from '../elasticsearch/template/template'; import { deleteKibanaSavedObjectsAssets, removeInstallation } from './remove'; import { IngestManagerError, PackageOutdatedError } from '../../../errors'; import { getPackageSavedObjects } from './get'; -import { installTransformForDataset } from '../elasticsearch/transform/install'; +import { installTransform } from '../elasticsearch/transform/install'; import { appContextService } from '../../app_context'; export async function installLatestPackage(options: { @@ -325,7 +325,7 @@ export async function installPackage({ // update current backing indices of each data stream await updateCurrentWriteIndices(callCluster, installedTemplates); - const installedTransforms = await installTransformForDataset( + const installedTransforms = await installTransform( registryPackageInfo, paths, callCluster, diff --git a/x-pack/plugins/ingest_manager/server/types/index.tsx b/x-pack/plugins/ingest_manager/server/types/index.tsx index d00491afef72b..b43d6355c479a 100644 --- a/x-pack/plugins/ingest_manager/server/types/index.tsx +++ b/x-pack/plugins/ingest_manager/server/types/index.tsx @@ -17,6 +17,7 @@ export { AgentEventSOAttributes, AgentAction, AgentPolicyAction, + AgentPolicyActionV7_9, BaseAgentActionSOAttributes, AgentActionSOAttributes, AgentPolicyActionSOAttributes, diff --git a/x-pack/plugins/ingest_manager/server/types/models/agent.ts b/x-pack/plugins/ingest_manager/server/types/models/agent.ts index 15004e60a6fa4..87e9257b7189c 100644 --- a/x-pack/plugins/ingest_manager/server/types/models/agent.ts +++ b/x-pack/plugins/ingest_manager/server/types/models/agent.ts @@ -63,7 +63,7 @@ export const AgentEventSchema = schema.object({ export const NewAgentActionSchema = schema.object({ type: schema.oneOf([ - schema.literal('CONFIG_CHANGE'), + schema.literal('POLICY_CHANGE'), schema.literal('UNENROLL'), schema.literal('UPGRADE'), ]), diff --git a/x-pack/plugins/ingest_manager/server/types/models/package_policy.ts b/x-pack/plugins/ingest_manager/server/types/models/package_policy.ts index c23918210114e..6673c12d51511 100644 --- a/x-pack/plugins/ingest_manager/server/types/models/package_policy.ts +++ b/x-pack/plugins/ingest_manager/server/types/models/package_policy.ts @@ -9,8 +9,9 @@ import { isValidNamespace } from '../../../common'; export const NamespaceSchema = schema.string({ minLength: 1, validate: (value) => { - if (!isValidNamespace(value)) { - return 'Namespace contains invalid characters'; + const namespaceValidation = isValidNamespace(value || ''); + if (!namespaceValidation.valid && namespaceValidation.error) { + return namespaceValidation.error; } }, }); diff --git a/x-pack/plugins/ingest_pipelines/README.md b/x-pack/plugins/ingest_pipelines/README.md index a469511bdbbd2..00d4f5a91863d 100644 --- a/x-pack/plugins/ingest_pipelines/README.md +++ b/x-pack/plugins/ingest_pipelines/README.md @@ -11,7 +11,7 @@ It requires a Basic license and the following cluster privileges: `manage_pipeli ## Development -A new app called Ingest Node Pipelines is registered in the Management section and follows a typical CRUD UI pattern. The client-side portion of this app lives in [public/application](public/application) and uses endpoints registered in [server/routes/api](server/routes/api). +A new app called Ingest Node Pipelines is registered in the Management section and follows a typical CRUD UI pattern. The client-side portion of this app lives in [public/application](public/application) and uses endpoints registered in [server/routes/api](server/routes/api). For more information on the pipeline processors editor component, check out the [component readme](public/application/components/pipeline_processors_editor/README.md). See the [kibana contributing guide](https://github.com/elastic/kibana/blob/master/CONTRIBUTING.md) for instructions on setting up your development environment. @@ -19,6 +19,83 @@ See the [kibana contributing guide](https://github.com/elastic/kibana/blob/maste The app has the following test coverage: -- Complete API integration tests +- API integration tests - Smoke-level functional test - Client-integration tests + +### Quick steps for manual testing + +You can run the following request in Console to create an ingest node pipeline: + +``` +PUT _ingest/pipeline/test_pipeline +{ + "description": "_description", + "processors": [ + { + "set": { + "field": "field1", + "value": "value1" + } + }, + { + "rename": { + "field": "dont_exist", + "target_field": "field1", + "ignore_failure": true + } + }, + { + "rename": { + "field": "foofield", + "target_field": "new_field", + "on_failure": [ + { + "set": { + "field": "field2", + "value": "value2" + } + } + ] + } + }, + { + "drop": { + "if": "false" + } + }, + { + "drop": { + "if": "true" + } + } + ] +} +``` + +Then, go to the Ingest Node Pipelines UI to edit, delete, clone, or view details of the pipeline. + +To simulate a pipeline, go to the "Edit" page of your pipeline. Click the "Add documents" link under the "Processors" section. You may add the following sample documents to test the pipeline: + +``` +// The first document in this example should trigger the on_failure processor in the pipeline, while the second one should succeed. +[ + { + "_index": "my_index", + "_id": "id1", + "_source": { + "foo": "bar" + } + }, + { + "_index": "my_index", + "_id": "id2", + "_source": { + "foo": "baz", + "foofield": "bar" + } + } +] +``` + +Alternatively, you can add a document from an existing index, or create some sample data of your own. Afterward, click the "Run the pipeline" button to view the output. diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/README.md b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/README.md index d29af67d3179c..4761bd9e6c70b 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/README.md +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/README.md @@ -7,18 +7,37 @@ pipeline. ## Editor components -The top-level API consists of 3 pieces that enable the maximum amount -of flexibility for consuming code to determine overall layout. +The top-level API consists of two pieces: -- PipelineProcessorsEditorContext -- ProcessorsEditor -- GlobalOnFailureProcessorsEditor +- ProcessorsEditorContextProvider +- PipelineProcessorsEditor -The editor components must be wrapped inside of the context component +The editor component must be wrapped inside of the context component as this is where the shared processors state is contained. -## Load JSON button +Example usage from the [PipelineFormFields](../pipeline_form/pipeline_form_fields.tsx) component: -This component is totally standalone. It gives users a button that +``` + + + +``` + +The editor has a dependency on `KibanaContextProvider`, which is defined in the main app's `index.tsx` file. Note that the editor also relies on imports from `public/shared_imports.ts` and `common/types.ts`. + +### ProcessorsEditorContextProvider +This component manages state for the processors, as well as state for the test pipeline functionality. + +### PipelineProcessorsEditor +This component is responsible for building the layout of the processors editor. + +It contains the processor and on-failure processor editors. It also includes the following capabilities that are rendered within the processors header: + +- **Load JSON button:** This component gives users a button that presents a modal for loading a pipeline. It does some basic validation on the JSON to ensure that it is correct. +- **Test pipeline actions:** This component presents users with a toolbar to test a pipeline. It includes a flyout where users can add sample documents. It issues a request to simulate the pipeline and displays the output. Once the request is successful, a user can use the documents dropdown to view the results for a particular document. diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/__jest__/test_pipeline.helpers.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/__jest__/test_pipeline.helpers.tsx index 215ef63d9782e..222e0a491e0d2 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/__jest__/test_pipeline.helpers.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/__jest__/test_pipeline.helpers.tsx @@ -25,13 +25,7 @@ import { apiService, } from '../../../services'; -import { - ProcessorsEditorContextProvider, - Props, - GlobalOnFailureProcessorsEditor, - ProcessorsEditor, -} from '../'; -import { TestPipelineActions } from '../'; +import { ProcessorsEditorContextProvider, Props, PipelineProcessorsEditor } from '../'; import { initHttpRequests } from './http_requests.helpers'; @@ -105,9 +99,7 @@ const testBedSetup = registerTestBed( (props: Props) => ( - - - + ), @@ -179,6 +171,41 @@ const createActions = (testBed: TestBed) => { }); }, + clickDocumentsDropdown() { + act(() => { + find('documentsDropdown.documentsButton').simulate('click'); + }); + component.update(); + }, + + clickEditDocumentsButton() { + act(() => { + find('editDocumentsButton').simulate('click'); + }); + component.update(); + }, + + clickClearAllButton() { + act(() => { + find('clearAllDocumentsButton').simulate('click'); + }); + component.update(); + }, + + async clickConfirmResetButton() { + const modal = document.body.querySelector( + '[data-test-subj="resetDocumentsConfirmationModal"]' + ); + const confirmButton: HTMLButtonElement | null = modal!.querySelector( + '[data-test-subj="confirmModalConfirmButton"]' + ); + + await act(async () => { + confirmButton!.click(); + }); + component.update(); + }, + async clickProcessor(processorSelector: string) { await act(async () => { find(`${processorSelector}.manageItemButton`).simulate('click'); @@ -230,6 +257,7 @@ type TestSubject = | 'addDocumentsButton' | 'testPipelineFlyout' | 'documentsDropdown' + | 'documentsDropdown.documentsButton' | 'outputTab' | 'documentsEditor' | 'runPipelineButton' @@ -248,6 +276,8 @@ type TestSubject = | 'configurationTab' | 'outputTab' | 'processorOutputTabContent' + | 'editDocumentsButton' + | 'clearAllDocumentsButton' | 'addDocumentsAccordion' | 'addDocumentButton' | 'addDocumentError' diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/__jest__/test_pipeline.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/__jest__/test_pipeline.test.tsx index 47f05602799e4..69a1b7c2c126d 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/__jest__/test_pipeline.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/__jest__/test_pipeline.test.tsx @@ -22,6 +22,27 @@ describe('Test pipeline', () => { const { server, httpRequestsMockHelpers } = setupEnvironment(); + // This is a hack + // We need to provide the processor id in the mocked output; + // this is generated dynamically + // As a workaround, the value is added as a data attribute in the UI + // and we retrieve it to generate the mocked output. + const addProcessorTagtoMockOutput = (output: VerboseTestOutput) => { + const { find } = testBed; + + const docs = output.docs.map((doc) => { + const results = doc.processor_results.map((result, index) => { + const tag = find(`processors>${index}`).props()['data-processor-id']; + return { + ...result, + tag, + }; + }); + return { processor_results: results }; + }); + return { docs }; + }; + beforeAll(() => { jest.useFakeTimers(); }); @@ -236,30 +257,77 @@ describe('Test pipeline', () => { expect(find('addDocumentError').text()).toContain(error.message); }); }); - }); - describe('Processors', () => { - // This is a hack - // We need to provide the processor id in the mocked output; - // this is generated dynamically and not something we can stub. - // As a workaround, the value is added as a data attribute in the UI - // and we retrieve it to generate the mocked output. - const addProcessorTagtoMockOutput = (output: VerboseTestOutput) => { - const { find } = testBed; + describe('Documents dropdown', () => { + beforeEach(async () => { + const { actions } = testBed; - const docs = output.docs.map((doc) => { - const results = doc.processor_results.map((result, index) => { - const tag = find(`processors>${index}`).props()['data-processor-id']; - return { - ...result, - tag, - }; - }); - return { processor_results: results }; + httpRequestsMockHelpers.setSimulatePipelineResponse( + addProcessorTagtoMockOutput(SIMULATE_RESPONSE) + ); + + // Open flyout + actions.clickAddDocumentsButton(); + // Add sample documents and click run + actions.addDocumentsJson(JSON.stringify(DOCUMENTS)); + await actions.clickRunPipelineButton(); + // Close flyout + actions.closeTestPipelineFlyout(); }); - return { docs }; - }; + it('should open flyout to edit documents', () => { + const { exists, actions } = testBed; + + // Dropdown should be visible + expect(exists('documentsDropdown')).toBe(true); + + // Open dropdown and edit documents + actions.clickDocumentsDropdown(); + actions.clickEditDocumentsButton(); + + // Flyout should be visible with "Documents" tab enabled + expect(exists('testPipelineFlyout')).toBe(true); + expect(exists('documentsTabContent')).toBe(true); + }); + + it('should clear all documents and stop pipeline simulation', async () => { + const { exists, actions, find } = testBed; + + // Dropdown should be visible and processor status should equal "success" + expect(exists('documentsDropdown')).toBe(true); + const initialProcessorStatusLabel = find('processors>0.processorStatusIcon').props()[ + 'aria-label' + ]; + expect(initialProcessorStatusLabel).toEqual('Success'); + + // Open flyout and click clear all button + actions.clickDocumentsDropdown(); + actions.clickEditDocumentsButton(); + actions.clickClearAllButton(); + + // Verify modal + const modal = document.body.querySelector( + '[data-test-subj="resetDocumentsConfirmationModal"]' + ); + + expect(modal).not.toBe(null); + expect(modal!.textContent).toContain('Clear documents'); + + // Confirm reset and close modal + await actions.clickConfirmResetButton(); + + // Verify documents and processors were reset + expect(exists('documentsDropdown')).toBe(false); + expect(exists('addDocumentsButton')).toBe(true); + const resetProcessorStatusIconLabel = find('processors>0.processorStatusIcon').props()[ + 'aria-label' + ]; + expect(resetProcessorStatusIconLabel).toEqual('Not run'); + }); + }); + }); + + describe('Processors', () => { it('should show "inactive" processor status by default', async () => { const { find } = testBed; diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/processor_form/edit_processor_form.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/processor_form/edit_processor_form.tsx index d9feaaffa5aec..3df73b54b8cce 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/processor_form/edit_processor_form.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/processor_form/edit_processor_form.tsx @@ -102,7 +102,7 @@ export const EditProcessorForm: FunctionComponent = ({ handleSubmit, resetProcessors, }) => { - const { testPipelineData, setCurrentTestPipelineData } = useTestPipelineContext(); + const { testPipelineData, testPipelineDataDispatch } = useTestPipelineContext(); const { testOutputPerProcessor, config: { selectedDocumentIndex, documents }, @@ -117,7 +117,7 @@ export const EditProcessorForm: FunctionComponent = ({ testOutputPerProcessor[selectedDocumentIndex][processor.id]; const updateSelectedDocument = (index: number) => { - setCurrentTestPipelineData({ + testPipelineDataDispatch({ type: 'updateActiveDocument', payload: { config: { diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/processor_form/processor_output/processor_output.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/processor_form/processor_output/processor_output.tsx index bd0ce6ca2cd52..f6b13c2ba7228 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/processor_form/processor_output/processor_output.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/processor_form/processor_output/processor_output.tsx @@ -32,8 +32,7 @@ export interface Props { const i18nTexts = { tabDescription: i18n.translate('xpack.ingestPipelines.processorOutput.descriptionText', { - defaultMessage: - 'View how the processor affects the ingest document as it passes through the pipeline.', + defaultMessage: 'Preview changes to the test document.', }), skippedCalloutTitle: i18n.translate('xpack.ingestPipelines.processorOutput.skippedCalloutTitle', { defaultMessage: 'The processor was not run.', @@ -68,7 +67,7 @@ const i18nTexts = { processorIgnoredErrorTitle: i18n.translate( 'xpack.ingestPipelines.processorOutput.ignoredErrorCodeBlockLabel', { - defaultMessage: 'There was an error that was ignored', + defaultMessage: 'There was an ignored error', } ), documentsDropdownLabel: i18n.translate( diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/processors_empty_prompt.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/processors_empty_prompt.tsx index 3750ddda25d10..58d2df518f547 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/processors_empty_prompt.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/processors_empty_prompt.tsx @@ -35,7 +35,7 @@ export const ProcessorsEmptyPrompt: FunctionComponent = ({ onLoadJson })

= ({ onLoadJson, hasProc = ({ > ({ key: index.toString(), + 'data-test-subj': 'documentListItem', checked: selectedDocumentIndex === index ? 'on' : undefined, label: i18n.translate('xpack.ingestPipelines.pipelineEditor.testPipeline.documentLabel', { defaultMessage: 'Document {documentNumber}', @@ -107,32 +106,27 @@ export const DocumentsDropdown: FunctionComponent = ({ setShowPopover(false); }} > - {(list, search) => ( -

+ {(list) => ( + <> {i18nTexts.popoverTitle} {list} -
+ )} - - - - - { - openFlyout('documents'); - setShowPopover(false); - }} - data-test-subj="addDocumentsButton" - > - {i18nTexts.addDocumentsButtonLabel} - - - - - + + { + openFlyout('documents'); + setShowPopover(false); + }} + data-test-subj="editDocumentsButton" + > + {i18nTexts.addDocumentsButtonLabel} + + ); }; diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_output_button.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_output_button.tsx index 9018042229590..d2fc9c51be699 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_output_button.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_output_button.tsx @@ -6,7 +6,7 @@ import { i18n } from '@kbn/i18n'; import React, { FunctionComponent } from 'react'; import { EuiButton } from '@elastic/eui'; -import { TestPipelineFlyoutTab } from './test_pipeline_flyout_tabs'; +import { TestPipelineFlyoutTab } from './test_pipeline_tabs'; const i18nTexts = { buttonLabel: i18n.translate( diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_actions.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_actions.tsx index cec02db26729d..83a9303859d2a 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_actions.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_actions.tsx @@ -9,7 +9,7 @@ import { EuiFlexGroup, EuiFlexItem, EuiText } from '@elastic/eui'; import { useTestPipelineContext, usePipelineProcessorsContext } from '../../context'; import { DocumentsDropdown } from './documents_dropdown'; -import { TestPipelineFlyoutTab } from './test_pipeline_flyout_tabs'; +import { TestPipelineFlyoutTab } from './test_pipeline_tabs'; import { AddDocumentsButton } from './add_documents_button'; import { TestOutputButton } from './test_output_button'; import { TestPipelineFlyout } from './test_pipeline_flyout.container'; @@ -24,7 +24,7 @@ const i18nTexts = { }; export const TestPipelineActions: FunctionComponent = () => { - const { testPipelineData, setCurrentTestPipelineData } = useTestPipelineContext(); + const { testPipelineData, testPipelineDataDispatch } = useTestPipelineContext(); const { state: { processors }, @@ -39,7 +39,7 @@ export const TestPipelineActions: FunctionComponent = () => { const [activeFlyoutTab, setActiveFlyoutTab] = useState('documents'); const updateSelectedDocument = (index: number) => { - setCurrentTestPipelineData({ + testPipelineDataDispatch({ type: 'updateActiveDocument', payload: { config: { diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout.container.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout.container.tsx index 23dda55db41f8..e7ccb9d17f2b1 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout.container.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout.container.tsx @@ -15,8 +15,7 @@ import { Document } from '../../types'; import { useIsMounted } from '../../use_is_mounted'; import { TestPipelineFlyout as ViewComponent } from './test_pipeline_flyout'; -import { TestPipelineFlyoutTab } from './test_pipeline_flyout_tabs'; -import { documentsSchema } from './test_pipeline_flyout_tabs/documents_schema'; +import { TestPipelineFlyoutTab } from './test_pipeline_tabs'; export interface Props { activeTab: TestPipelineFlyoutTab; @@ -39,7 +38,7 @@ export const TestPipelineFlyout: React.FunctionComponent = ({ const { testPipelineData, - setCurrentTestPipelineData, + testPipelineDataDispatch, updateTestOutputPerProcessor, } = useTestPipelineContext(); @@ -48,7 +47,6 @@ export const TestPipelineFlyout: React.FunctionComponent = ({ } = testPipelineData; const { form } = useForm({ - schema: documentsSchema, defaultValue: { documents: cachedDocuments || '', }, @@ -88,7 +86,7 @@ export const TestPipelineFlyout: React.FunctionComponent = ({ // reset the per-processor output // this is needed in the scenario where the pipeline has already executed, // but you modified the sample documents and there was an error on re-execution - setCurrentTestPipelineData({ + testPipelineDataDispatch({ type: 'updateOutputPerProcessor', payload: { isExecutingPipeline: false, @@ -99,7 +97,7 @@ export const TestPipelineFlyout: React.FunctionComponent = ({ return { isSuccessful: false }; } - setCurrentTestPipelineData({ + testPipelineDataDispatch({ type: 'updateConfig', payload: { config: { @@ -133,7 +131,7 @@ export const TestPipelineFlyout: React.FunctionComponent = ({ processors, services.api, services.notifications.toasts, - setCurrentTestPipelineData, + testPipelineDataDispatch, updateTestOutputPerProcessor, ] ); @@ -157,6 +155,12 @@ export const TestPipelineFlyout: React.FunctionComponent = ({ } }; + const resetTestOutput = () => { + testPipelineDataDispatch({ + type: 'reset', + }); + }; + useEffect(() => { if (cachedDocuments && activeTab === 'output') { handleTestPipeline({ documents: cachedDocuments, verbose: cachedVerbose }, true); @@ -169,6 +173,7 @@ export const TestPipelineFlyout: React.FunctionComponent = ({ return ( void; handleTestPipeline: ( @@ -31,11 +30,14 @@ export interface Props { cachedVerbose?: boolean; cachedDocuments?: Document[]; testOutput?: any; - form: FormHook; + form: FormHook<{ + documents: string | Document[]; + }>; validateAndTestPipeline: () => Promise; selectedTab: TestPipelineFlyoutTab; setSelectedTab: (selectedTa: TestPipelineFlyoutTab) => void; testingError: any; + resetTestOutput: () => void; } export interface TestPipelineConfig { @@ -45,6 +47,7 @@ export interface TestPipelineConfig { export const TestPipelineFlyout: React.FunctionComponent = ({ handleTestPipeline, + resetTestOutput, isRunningTest, cachedVerbose, cachedDocuments, @@ -75,6 +78,7 @@ export const TestPipelineFlyout: React.FunctionComponent = ({ form={form} validateAndTestPipeline={validateAndTestPipeline} isRunningTest={isRunningTest} + resetTestOutput={resetTestOutput} /> ); } diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/documents_schema.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/documents_schema.tsx deleted file mode 100644 index d0e0596375cb2..0000000000000 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/documents_schema.tsx +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ -import React from 'react'; - -import { FormattedMessage } from '@kbn/i18n/react'; -import { i18n } from '@kbn/i18n'; -import { EuiCode } from '@elastic/eui'; - -import { FormSchema, fieldValidators, ValidationFuncArg } from '../../../../../../shared_imports'; -import { parseJson, stringifyJson } from '../../../../../lib'; - -const { emptyField, isJsonField } = fieldValidators; - -export const documentsSchema: FormSchema = { - documents: { - label: i18n.translate( - 'xpack.ingestPipelines.testPipelineFlyout.documentsForm.documentsFieldLabel', - { - defaultMessage: 'Documents', - } - ), - helpText: ( - - {JSON.stringify([ - { - _index: 'index', - _id: 'id', - _source: { - foo: 'bar', - }, - }, - ])} - - ), - }} - /> - ), - serializer: parseJson, - deserializer: stringifyJson, - validations: [ - { - validator: emptyField( - i18n.translate( - 'xpack.ingestPipelines.testPipelineFlyout.documentsForm.noDocumentsError', - { - defaultMessage: 'Documents are required.', - } - ) - ), - }, - { - validator: isJsonField( - i18n.translate( - 'xpack.ingestPipelines.testPipelineFlyout.documentsForm.documentsJsonError', - { - defaultMessage: 'The documents JSON is not valid.', - } - ) - ), - }, - { - validator: ({ value }: ValidationFuncArg) => { - const parsedJSON = JSON.parse(value); - - if (!parsedJSON.length) { - return { - message: i18n.translate( - 'xpack.ingestPipelines.testPipelineFlyout.documentsForm.oneDocumentRequiredError', - { - defaultMessage: 'At least one document is required.', - } - ), - }; - } - }, - }, - { - validator: ({ value }: ValidationFuncArg) => { - const parsedJSON = JSON.parse(value); - - const isMissingSourceField = parsedJSON.find((document: { _source?: object }) => { - if (!document._source) { - return true; - } - - return false; - }); - - if (isMissingSourceField) { - return { - message: i18n.translate( - 'xpack.ingestPipelines.testPipelineFlyout.documentsForm.sourceFieldRequiredError', - { - defaultMessage: 'Documents require a _source field.', - } - ), - }; - } - }, - }, - ], - }, -}; diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/tab_documents.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/tab_documents.tsx deleted file mode 100644 index 6fd340054d2a4..0000000000000 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/tab_documents.tsx +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import React, { FunctionComponent, useCallback } from 'react'; -import { FormattedMessage } from '@kbn/i18n/react'; -import { i18n } from '@kbn/i18n'; - -import { EuiSpacer, EuiText, EuiButton, EuiLink } from '@elastic/eui'; - -import { - getUseField, - Field, - JsonEditorField, - useKibana, - useFormData, - FormHook, - Form, -} from '../../../../../../shared_imports'; - -import { AddDocumentsAccordion } from './add_documents_accordion'; - -const UseField = getUseField({ component: Field }); - -interface Props { - validateAndTestPipeline: () => Promise; - isRunningTest: boolean; - form: FormHook; -} - -export const DocumentsTab: FunctionComponent = ({ - validateAndTestPipeline, - isRunningTest, - form, -}) => { - const { services } = useKibana(); - - const [, formatData] = useFormData({ form }); - - const onAddDocumentHandler = useCallback( - (document) => { - const { documents: existingDocuments = [] } = formatData(); - - form.reset({ defaultValue: { documents: [...existingDocuments, document] } }); - }, - [form, formatData] - ); - - return ( - -
- -

- - {i18n.translate( - 'xpack.ingestPipelines.testPipelineFlyout.documentsTab.simulateDocumentionLink', - { - defaultMessage: 'Learn more.', - } - )} - - ), - }} - /> -

-
- - - - - - - - {/* Documents editor */} - - - - - - {isRunningTest ? ( - - ) : ( - - )} - -
- - ); -}; diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/index.ts b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/index.ts similarity index 100% rename from x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/index.ts rename to x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/index.ts diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/add_document_form.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_document_form.tsx similarity index 97% rename from x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/add_document_form.tsx rename to x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_document_form.tsx index 340cf1af92300..7bb860facfeb2 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/add_document_form.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_document_form.tsx @@ -25,9 +25,9 @@ import { TextField, fieldValidators, FieldConfig, -} from '../../../../../../shared_imports'; -import { useIsMounted } from '../../../use_is_mounted'; -import { Document } from '../../../types'; +} from '../../../../../../../shared_imports'; +import { useIsMounted } from '../../../../use_is_mounted'; +import { Document } from '../../../../types'; const UseField = getUseField({ component: Field }); diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/add_documents_accordion/add_documents_accordion.scss b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_documents_accordion/add_documents_accordion.scss similarity index 100% rename from x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/add_documents_accordion/add_documents_accordion.scss rename to x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_documents_accordion/add_documents_accordion.scss diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/add_documents_accordion/add_documents_accordion.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_documents_accordion/add_documents_accordion.tsx similarity index 87% rename from x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/add_documents_accordion/add_documents_accordion.tsx rename to x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_documents_accordion/add_documents_accordion.tsx index 88ced6e9e94dd..9519d849e5d90 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/add_documents_accordion/add_documents_accordion.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_documents_accordion/add_documents_accordion.tsx @@ -11,8 +11,8 @@ import { FormattedMessage } from '@kbn/i18n/react'; import { EuiAccordion, EuiText, EuiSpacer, EuiLink } from '@elastic/eui'; import { UrlGeneratorsDefinition } from 'src/plugins/share/public'; -import { useKibana } from '../../../../../../../shared_imports'; -import { useIsMounted } from '../../../../use_is_mounted'; +import { useKibana } from '../../../../../../../../shared_imports'; +import { useIsMounted } from '../../../../../use_is_mounted'; import { AddDocumentForm } from '../add_document_form'; import './add_documents_accordion.scss'; @@ -23,7 +23,13 @@ const i18nTexts = { addDocumentsButton: i18n.translate( 'xpack.ingestPipelines.pipelineEditor.addDocumentsAccordion.addDocumentsButtonLabel', { - defaultMessage: 'Add documents from index', + defaultMessage: 'Add a test document from an index', + } + ), + addDocumentsDescription: i18n.translate( + 'xpack.ingestPipelines.pipelineEditor.addDocumentsAccordion.contentDescriptionText', + { + defaultMessage: `Provide the document's index and document ID.`, } ), }; @@ -79,10 +85,7 @@ export const AddDocumentsAccordion: FunctionComponent = ({ onAddDocuments

- + {i18nTexts.addDocumentsDescription} {discoverLink && ( <> {' '} diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/add_documents_accordion/index.ts b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_documents_accordion/index.ts similarity index 100% rename from x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/add_documents_accordion/index.ts rename to x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/add_documents_accordion/index.ts diff --git a/x-pack/plugins/ml/public/application/overview/index.ts b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/index.ts similarity index 83% rename from x-pack/plugins/ml/public/application/overview/index.ts rename to x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/index.ts index 7d99bb1094015..1c3b6df577f4d 100644 --- a/x-pack/plugins/ml/public/application/overview/index.ts +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/index.ts @@ -4,4 +4,4 @@ * you may not use this file except in compliance with the Elastic License. */ -export { OverviewPage } from './overview_page'; +export { DocumentsTab } from './tab_documents'; diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/reset_documents_modal.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/reset_documents_modal.tsx new file mode 100644 index 0000000000000..2dbc6c56849dd --- /dev/null +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/reset_documents_modal.tsx @@ -0,0 +1,61 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { i18n } from '@kbn/i18n'; +import React, { FunctionComponent } from 'react'; +import { EuiConfirmModal, EuiOverlayMask } from '@elastic/eui'; + +interface Props { + confirmResetTestOutput: () => void; + closeModal: () => void; +} + +const i18nTexts = { + modalTitle: i18n.translate( + 'xpack.ingestPipelines.pipelineEditor.testPipeline.resetDocumentsModal.title', + { + defaultMessage: 'Clear documents', + } + ), + modalDescription: i18n.translate( + 'xpack.ingestPipelines.pipelineEditor.testPipeline.resetDocumentsModal.description', + { + defaultMessage: 'This will reset the output.', + } + ), + cancelButtonLabel: i18n.translate( + 'xpack.ingestPipelines.pipelineEditor.testPipeline.resetDocumentsModal.cancelButtonLabel', + { + defaultMessage: 'Cancel', + } + ), + resetButtonLabel: i18n.translate( + 'xpack.ingestPipelines.pipelineEditor.testPipeline.resetDocumentsModal.resetButtonLabel', + { + defaultMessage: 'Clear documents', + } + ), +}; + +export const ResetDocumentsModal: FunctionComponent = ({ + confirmResetTestOutput, + closeModal, +}) => { + return ( + + +

{i18nTexts.modalDescription}

+ + + ); +}; diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/tab_documents.scss b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/tab_documents.scss new file mode 100644 index 0000000000000..c07f58d280e2a --- /dev/null +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/tab_documents.scss @@ -0,0 +1,11 @@ +.documentsTab { + &__documentField { + position: relative; + + &__button { + position: absolute; + right: 0; + top: 0; + } + } +} diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/tab_documents.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/tab_documents.tsx new file mode 100644 index 0000000000000..ae784472ebbd9 --- /dev/null +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_documents/tab_documents.tsx @@ -0,0 +1,251 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { FunctionComponent, useCallback, useState } from 'react'; +import { FormattedMessage } from '@kbn/i18n/react'; +import { i18n } from '@kbn/i18n'; + +import { EuiSpacer, EuiText, EuiButton, EuiLink, EuiCode, EuiButtonEmpty } from '@elastic/eui'; + +import { parseJson, stringifyJson } from '../../../../../../lib'; +import { + getUseField, + Field, + JsonEditorField, + useKibana, + FieldConfig, + fieldValidators, + ValidationFuncArg, + FormHook, + Form, + useFormData, +} from '../../../../../../../shared_imports'; +import { Document } from '../../../../types'; +import { AddDocumentsAccordion } from './add_documents_accordion'; +import { ResetDocumentsModal } from './reset_documents_modal'; + +import './tab_documents.scss'; + +const UseField = getUseField({ component: Field }); + +const { emptyField, isJsonField } = fieldValidators; + +interface Props { + validateAndTestPipeline: () => Promise; + resetTestOutput: () => void; + isRunningTest: boolean; + form: FormHook<{ + documents: string | Document[]; + }>; +} + +const i18nTexts = { + learnMoreLink: i18n.translate( + 'xpack.ingestPipelines.testPipelineFlyout.documentsTab.simulateDocumentionLink', + { + defaultMessage: 'Learn more.', + } + ), + documentsEditorAriaLabel: i18n.translate( + 'xpack.ingestPipelines.testPipelineFlyout.documentsTab.editorFieldAriaLabel', + { + defaultMessage: 'Documents JSON editor', + } + ), + documentsEditorClearAllButton: i18n.translate( + 'xpack.ingestPipelines.testPipelineFlyout.documentsTab.editorFieldClearAllButtonLabel', + { + defaultMessage: 'Clear all', + } + ), + runButton: i18n.translate( + 'xpack.ingestPipelines.testPipelineFlyout.documentsTab.runButtonLabel', + { + defaultMessage: 'Run the pipeline', + } + ), + runningButton: i18n.translate( + 'xpack.ingestPipelines.testPipelineFlyout.documentsTab.runningButtonLabel', + { + defaultMessage: 'Running', + } + ), +}; + +const documentFieldConfig: FieldConfig = { + label: i18n.translate( + 'xpack.ingestPipelines.testPipelineFlyout.documentsForm.documentsFieldLabel', + { + defaultMessage: 'Documents', + } + ), + helpText: ( + + {JSON.stringify([ + { + _index: 'index', + _id: 'id', + _source: { + foo: 'bar', + }, + }, + ])} + + ), + }} + /> + ), + serializer: parseJson, + deserializer: stringifyJson, + validations: [ + { + validator: emptyField( + i18n.translate('xpack.ingestPipelines.testPipelineFlyout.documentsForm.noDocumentsError', { + defaultMessage: 'Documents are required.', + }) + ), + }, + { + validator: isJsonField( + i18n.translate( + 'xpack.ingestPipelines.testPipelineFlyout.documentsForm.documentsJsonError', + { + defaultMessage: 'The documents JSON is not valid.', + } + ) + ), + }, + { + validator: ({ value }: ValidationFuncArg) => { + const parsedJSON = JSON.parse(value); + + if (!parsedJSON.length) { + return { + message: i18n.translate( + 'xpack.ingestPipelines.testPipelineFlyout.documentsForm.oneDocumentRequiredError', + { + defaultMessage: 'At least one document is required.', + } + ), + }; + } + }, + }, + ], +}; + +export const DocumentsTab: FunctionComponent = ({ + validateAndTestPipeline, + isRunningTest, + form, + resetTestOutput, +}) => { + const { services } = useKibana(); + + const [, formatData] = useFormData({ form }); + + const onAddDocumentHandler = useCallback( + (document) => { + const { documents: existingDocuments = [] } = formatData(); + + form.reset({ defaultValue: { documents: [...existingDocuments, document] } }); + }, + [form, formatData] + ); + + const [showResetModal, setShowResetModal] = useState(false); + + return ( +
+
+ +

+ + {i18nTexts.learnMoreLink} + + ), + }} + /> +

+
+ + + + + + + + {/* Documents editor */} + + {(field) => ( +
+ setShowResetModal(true)} + data-test-subj="clearAllDocumentsButton" + className="documentsTab__documentField__button" + > + {i18nTexts.documentsEditorClearAllButton} + + +
+ )} +
+ + + + + {isRunningTest ? i18nTexts.runningButton : i18nTexts.runButton} + + + {showResetModal && ( + { + resetTestOutput(); + form.reset({ defaultValue: { documents: [] } }); + setShowResetModal(false); + }} + closeModal={() => setShowResetModal(false)} + /> + )} +
+
+ ); +}; diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/tab_output.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_output.tsx similarity index 100% rename from x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/tab_output.tsx rename to x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/tab_output.tsx diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/test_pipeline_tabs.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/test_pipeline_tabs.tsx similarity index 100% rename from x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_flyout_tabs/test_pipeline_tabs.tsx rename to x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/components/test_pipeline/test_pipeline_tabs/test_pipeline_tabs.tsx diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/context/test_pipeline_context.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/context/test_pipeline_context.tsx index 314964f808e44..a20cde5b1fb72 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/context/test_pipeline_context.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/context/test_pipeline_context.tsx @@ -51,11 +51,14 @@ type Action = | { type: 'updateIsExecutingPipeline'; payload: Pick; + } + | { + type: 'reset'; }; export interface TestPipelineContext { testPipelineData: TestPipelineData; - setCurrentTestPipelineData: (data: Action) => void; + testPipelineDataDispatch: (data: Action) => void; updateTestOutputPerProcessor: ( documents: Document[] | undefined, processors: DeserializeResult @@ -69,7 +72,7 @@ const DEFAULT_TEST_PIPELINE_CONTEXT = { }, isExecutingPipeline: false, }, - setCurrentTestPipelineData: () => {}, + testPipelineDataDispatch: () => {}, updateTestOutputPerProcessor: () => {}, }; @@ -122,6 +125,10 @@ export const reducer: Reducer = (state, action) => { }; } + if (action.type === 'reset') { + return DEFAULT_TEST_PIPELINE_CONTEXT.testPipelineData; + } + return state; }; @@ -193,7 +200,7 @@ export const TestPipelineContextProvider = ({ children }: { children: React.Reac diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/index.ts b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/index.ts index ca5184da25a07..ae3dd9d673ebe 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/index.ts +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_processors_editor/index.ts @@ -4,16 +4,12 @@ * you may not use this file except in compliance with the Elastic License. */ -export { PipelineProcessorsContextProvider, Props } from './context'; - -export { ProcessorsEditorContextProvider } from './context'; - -export { ProcessorsEditor, GlobalOnFailureProcessorsEditor } from './editors'; +export { Props, ProcessorsEditorContextProvider } from './context'; export { OnUpdateHandlerArg, OnUpdateHandler } from './types'; export { SerializeResult } from './serialize'; -export { LoadFromJsonButton, OnDoneLoadJsonHandler, TestPipelineActions } from './components'; +export { OnDoneLoadJsonHandler } from './components'; export { PipelineProcessorsEditor } from './pipeline_processors_editor'; diff --git a/x-pack/plugins/lens/public/app_plugin/_index.scss b/x-pack/plugins/lens/public/app_plugin/_index.scss deleted file mode 100644 index e72e824224956..0000000000000 --- a/x-pack/plugins/lens/public/app_plugin/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@import 'app'; diff --git a/x-pack/plugins/lens/public/app_plugin/_app.scss b/x-pack/plugins/lens/public/app_plugin/app.scss similarity index 100% rename from x-pack/plugins/lens/public/app_plugin/_app.scss rename to x-pack/plugins/lens/public/app_plugin/app.scss diff --git a/x-pack/plugins/lens/public/app_plugin/app.tsx b/x-pack/plugins/lens/public/app_plugin/app.tsx index d2ccbe0cb2fee..e4af2a33ec68b 100644 --- a/x-pack/plugins/lens/public/app_plugin/app.tsx +++ b/x-pack/plugins/lens/public/app_plugin/app.tsx @@ -4,6 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ +import './app.scss'; + import _ from 'lodash'; import React, { useState, useEffect, useCallback } from 'react'; import { i18n } from '@kbn/i18n'; diff --git a/x-pack/plugins/lens/public/async_services.ts b/x-pack/plugins/lens/public/async_services.ts new file mode 100644 index 0000000000000..5a88b47c0e894 --- /dev/null +++ b/x-pack/plugins/lens/public/async_services.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +/** + * This file re-exports all parts of visualizations and datasources which can be loaded lazily + * (to reduce page load bundle size) when Lens is actually accessed via editor or embeddable. + * + * It's also possible for each visualization and datasource to resolve this locally, but this causes + * a burst of bundles being loaded on Lens startup at once (and in some scenarios cascading bundle loads). + * This file causes all of them to be served in a single request. + */ + +export * from './datatable_visualization/datatable_visualization'; +export * from './metric_visualization/metric_visualization'; +export * from './pie_visualization/pie_visualization'; +export * from './xy_visualization/xy_visualization'; + +export * from './indexpattern_datasource/indexpattern'; + +export * from './editor_frame_service/editor_frame'; +export * from './app_plugin/mounter'; diff --git a/x-pack/plugins/lens/public/datatable_visualization/_index.scss b/x-pack/plugins/lens/public/datatable_visualization/_index.scss deleted file mode 100644 index 532e8106b023f..0000000000000 --- a/x-pack/plugins/lens/public/datatable_visualization/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@import 'visualization'; diff --git a/x-pack/plugins/lens/public/datatable_visualization/datatable_visualization.ts b/x-pack/plugins/lens/public/datatable_visualization/datatable_visualization.ts new file mode 100644 index 0000000000000..c6fe54a82e2d1 --- /dev/null +++ b/x-pack/plugins/lens/public/datatable_visualization/datatable_visualization.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export * from './expression'; +export * from './visualization'; diff --git a/x-pack/plugins/lens/public/datatable_visualization/_visualization.scss b/x-pack/plugins/lens/public/datatable_visualization/expression.scss similarity index 100% rename from x-pack/plugins/lens/public/datatable_visualization/_visualization.scss rename to x-pack/plugins/lens/public/datatable_visualization/expression.scss diff --git a/x-pack/plugins/lens/public/datatable_visualization/expression.tsx b/x-pack/plugins/lens/public/datatable_visualization/expression.tsx index dac3b23b98e3b..5ed693d2ead86 100644 --- a/x-pack/plugins/lens/public/datatable_visualization/expression.tsx +++ b/x-pack/plugins/lens/public/datatable_visualization/expression.tsx @@ -4,6 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ +import './expression.scss'; + import React, { useMemo } from 'react'; import ReactDOM from 'react-dom'; import { i18n } from '@kbn/i18n'; diff --git a/x-pack/plugins/lens/public/datatable_visualization/index.ts b/x-pack/plugins/lens/public/datatable_visualization/index.ts index 5cc3c40591c3f..5d9be46db7fb5 100644 --- a/x-pack/plugins/lens/public/datatable_visualization/index.ts +++ b/x-pack/plugins/lens/public/datatable_visualization/index.ts @@ -5,9 +5,7 @@ */ import { CoreSetup } from 'kibana/public'; -import { datatableVisualization } from './visualization'; import { ExpressionsSetup } from '../../../../../src/plugins/expressions/public'; -import { datatable, datatableColumns, getDatatableRenderer } from './expression'; import { EditorFrameSetup, FormatFactory } from '../types'; import { UiActionsStart } from '../../../../../src/plugins/ui_actions/public'; import { DataPublicPluginStart } from '../../../../../src/plugins/data/public'; @@ -29,16 +27,24 @@ export class DatatableVisualization { core: CoreSetup, { expressions, formatFactory, editorFrame }: DatatableVisualizationPluginSetupPlugins ) { - expressions.registerFunction(() => datatableColumns); - expressions.registerFunction(() => datatable); - expressions.registerRenderer(() => - getDatatableRenderer({ - formatFactory, - getType: core - .getStartServices() - .then(([_, { data: dataStart }]) => dataStart.search.aggs.types.get), - }) - ); - editorFrame.registerVisualization(datatableVisualization); + editorFrame.registerVisualization(async () => { + const { + datatable, + datatableColumns, + getDatatableRenderer, + datatableVisualization, + } = await import('../async_services'); + expressions.registerFunction(() => datatableColumns); + expressions.registerFunction(() => datatable); + expressions.registerRenderer(() => + getDatatableRenderer({ + formatFactory, + getType: core + .getStartServices() + .then(([_, { data: dataStart }]) => dataStart.search.aggs.types.get), + }) + ); + return datatableVisualization; + }); } } diff --git a/x-pack/plugins/lens/public/drag_drop/_index.scss b/x-pack/plugins/lens/public/drag_drop/_index.scss deleted file mode 100644 index ddf9b9aa3e429..0000000000000 --- a/x-pack/plugins/lens/public/drag_drop/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@import 'drag_drop'; diff --git a/x-pack/plugins/lens/public/drag_drop/_drag_drop.scss b/x-pack/plugins/lens/public/drag_drop/drag_drop.scss similarity index 100% rename from x-pack/plugins/lens/public/drag_drop/_drag_drop.scss rename to x-pack/plugins/lens/public/drag_drop/drag_drop.scss diff --git a/x-pack/plugins/lens/public/drag_drop/drag_drop.tsx b/x-pack/plugins/lens/public/drag_drop/drag_drop.tsx index 85bdd24bd4f80..6941974a63cd3 100644 --- a/x-pack/plugins/lens/public/drag_drop/drag_drop.tsx +++ b/x-pack/plugins/lens/public/drag_drop/drag_drop.tsx @@ -4,6 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ +import './drag_drop.scss'; + import React, { useState, useContext } from 'react'; import classNames from 'classnames'; import { DragContext } from './providers'; diff --git a/x-pack/plugins/lens/public/editor_frame_service/_index.scss b/x-pack/plugins/lens/public/editor_frame_service/_index.scss deleted file mode 100644 index 199cbe35e25fa..0000000000000 --- a/x-pack/plugins/lens/public/editor_frame_service/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@import 'editor_frame/index'; diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/_expression_renderer.scss b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/_expression_renderer.scss deleted file mode 100644 index 9519544ece575..0000000000000 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/_expression_renderer.scss +++ /dev/null @@ -1,12 +0,0 @@ -.lnsExpressionRenderer { - @include euiScrollBar; - position: relative; - width: 100%; - height: 100%; - display: flex; - overflow: auto; - - .lnsExpressionRenderer__component { - position: static; // Let the progress indicator position itself against the outer parent - } -} diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/_data_panel_wrapper.scss b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/data_panel_wrapper.scss similarity index 100% rename from x-pack/plugins/lens/public/editor_frame_service/editor_frame/_data_panel_wrapper.scss rename to x-pack/plugins/lens/public/editor_frame_service/editor_frame/data_panel_wrapper.scss diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/data_panel_wrapper.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/data_panel_wrapper.tsx index 5a92f7b5ed524..d00357058bb57 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/data_panel_wrapper.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/data_panel_wrapper.tsx @@ -4,6 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ +import './data_panel_wrapper.scss'; + import React, { useMemo, memo, useContext, useState } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiPopover, EuiButtonIcon, EuiContextMenuPanel, EuiContextMenuItem } from '@elastic/eui'; diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/_frame_layout.scss b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/frame_layout.scss similarity index 97% rename from x-pack/plugins/lens/public/editor_frame_service/editor_frame/_frame_layout.scss rename to x-pack/plugins/lens/public/editor_frame_service/editor_frame/frame_layout.scss index 9367e59b11717..bad0563f16f1f 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/_frame_layout.scss +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/frame_layout.scss @@ -1,3 +1,5 @@ +@import '../../variables'; + .lnsFrameLayout { padding: 0; position: absolute; diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/frame_layout.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/frame_layout.tsx index 56afe3ed69a73..6a0b2c3301119 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/frame_layout.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/frame_layout.tsx @@ -4,6 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ +import './frame_layout.scss'; + import React from 'react'; import { EuiPage, EuiPageSideBar, EuiPageBody } from '@elastic/eui'; diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/index.scss b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/index.scss deleted file mode 100644 index ea58a51073d53..0000000000000 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/index.scss +++ /dev/null @@ -1,5 +0,0 @@ -@import 'data_panel_wrapper'; -@import 'expression_renderer'; -@import 'frame_layout'; -@import 'suggestion_panel'; -@import 'workspace_panel_wrapper'; diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/_suggestion_panel.scss b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.scss similarity index 96% rename from x-pack/plugins/lens/public/editor_frame_service/editor_frame/_suggestion_panel.scss rename to x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.scss index 9d018076dc320..007d833e97e9d 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/_suggestion_panel.scss +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.scss @@ -1,3 +1,6 @@ +@import '../../mixins'; +@import '../../variables'; + .lnsSuggestionPanel__title { margin-left: $euiSizeXS / 2; } diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.tsx index e6503cb793a8e..5e5e9cda954ee 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/suggestion_panel.tsx @@ -4,6 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ +import './suggestion_panel.scss'; + import _, { camelCase } from 'lodash'; import React, { useState, useEffect, useMemo } from 'react'; import { FormattedMessage } from '@kbn/i18n/react'; diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/_workspace_panel_wrapper.scss b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.scss similarity index 100% rename from x-pack/plugins/lens/public/editor_frame_service/editor_frame/_workspace_panel_wrapper.scss rename to x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.scss diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.tsx index 8e7d504ff7677..fa63cd3c6f1e0 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/workspace_panel/workspace_panel_wrapper.tsx @@ -4,6 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ +import './workspace_panel_wrapper.scss'; + import React, { useCallback } from 'react'; import { i18n } from '@kbn/i18n'; import classNames from 'classnames'; diff --git a/x-pack/plugins/lens/public/editor_frame_service/service.tsx b/x-pack/plugins/lens/public/editor_frame_service/service.tsx index bebc3e6989902..8892217f5d51d 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/service.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/service.tsx @@ -22,7 +22,6 @@ import { EditorFrameStart, } from '../types'; import { Document } from '../persistence/saved_object_store'; -import { EditorFrame } from './editor_frame'; import { mergeTables } from './merge_tables'; import { formatColumn } from './format_column'; import { EmbeddableFactory, LensEmbeddableStartServices } from './embeddable/embeddable_factory'; @@ -47,9 +46,11 @@ export interface EditorFrameStartPlugins { } async function collectAsyncDefinitions( - definitions: Array> + definitions: Array Promise)> ) { - const resolvedDefinitions = await Promise.all(definitions); + const resolvedDefinitions = await Promise.all( + definitions.map((definition) => (typeof definition === 'function' ? definition() : definition)) + ); const definitionMap: Record = {}; resolvedDefinitions.forEach((definition) => { definitionMap[definition.id] = definition; @@ -61,8 +62,8 @@ async function collectAsyncDefinitions( export class EditorFrameService { constructor() {} - private readonly datasources: Array> = []; - private readonly visualizations: Array> = []; + private readonly datasources: Array Promise)> = []; + private readonly visualizations: Array Promise)> = []; /** * This method takes a Lens saved object as returned from the persistence helper, @@ -124,7 +125,7 @@ export class EditorFrameService { ]); return { - mount: ( + mount: async ( element, { doc, onError, dateRange, query, filters, savedQuery, onChange, showNoDataPopover } ) => { @@ -132,6 +133,8 @@ export class EditorFrameService { const firstDatasourceId = Object.keys(resolvedDatasources)[0]; const firstVisualizationId = Object.keys(resolvedVisualizations)[0]; + const { EditorFrame } = await import('../async_services'); + render( diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_editor.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_editor.tsx index 2572f732aa1b3..bd99bd16a63a8 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_editor.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_editor.tsx @@ -40,19 +40,6 @@ export interface DimensionEditorProps extends IndexPatternDimensionEditorProps { currentIndexPattern: IndexPattern; } -function asOperationOptions(operationTypes: OperationType[], compatibleWithCurrentField: boolean) { - return [...operationTypes] - .sort((opType1, opType2) => { - return operationPanels[opType1].displayName.localeCompare( - operationPanels[opType2].displayName - ); - }) - .map((operationType) => ({ - operationType, - compatibleWithCurrentField, - })); -} - const LabelInput = ({ value, onChange }: { value: string; onChange: (value: string) => void }) => { const [inputValue, setInputValue] = useState(value); @@ -98,7 +85,7 @@ export function DimensionEditor(props: DimensionEditorProps) { currentIndexPattern, hideGrouping, } = props; - const { operationByField, fieldByOperation } = operationSupportMatrix; + const { fieldByOperation, operationWithoutField } = operationSupportMatrix; const [ incompatibleSelectedOperationType, setInvalidOperationType, @@ -117,30 +104,35 @@ export function DimensionEditor(props: DimensionEditorProps) { return fields; }, [currentIndexPattern]); - function getOperationTypes() { - const possibleOperationTypes = Object.keys(fieldByOperation) as OperationType[]; - const validOperationTypes: OperationType[] = []; - - if (!selectedColumn) { - validOperationTypes.push(...(Object.keys(fieldByOperation) as OperationType[])); - } else if (hasField(selectedColumn) && operationByField[selectedColumn.sourceField]) { - validOperationTypes.push(...operationByField[selectedColumn.sourceField]!); - } + const possibleOperations = useMemo(() => { + return Object.values(operationDefinitionMap) + .sort((op1, op2) => { + return op1.displayName.localeCompare(op2.displayName); + }) + .map((def) => def.type) + .filter( + (type) => fieldByOperation[type]?.length || operationWithoutField.indexOf(type) !== -1 + ); + }, [fieldByOperation, operationWithoutField]); - return _.uniqBy( - [ - ...asOperationOptions(validOperationTypes, true), - ...asOperationOptions(possibleOperationTypes, false), - ...asOperationOptions( - operationSupportMatrix.operationWithoutField, - !selectedColumn || !hasField(selectedColumn) - ), - ], - 'operationType' - ); - } + // Operations are compatible if they match inputs. They are always compatible in + // the empty state. Field-based operations are not compatible with field-less operations. + const operationsWithCompatibility = [...possibleOperations].map((operationType) => { + const definition = operationDefinitionMap[operationType]; - const sideNavItems: EuiListGroupItemProps[] = getOperationTypes().map( + return { + operationType, + compatibleWithCurrentField: + !selectedColumn || + (selectedColumn && + hasField(selectedColumn) && + definition.input === 'field' && + fieldByOperation[operationType]?.indexOf(selectedColumn.sourceField) !== -1) || + (selectedColumn && !hasField(selectedColumn) && definition.input !== 'field'), + }; + }); + + const sideNavItems: EuiListGroupItemProps[] = operationsWithCompatibility.map( ({ operationType, compatibleWithCurrentField }) => { const isActive = Boolean( incompatibleSelectedOperationType === operationType || diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_panel.test.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_panel.test.tsx index 2d7539a9e3ee8..270f9d9f67063 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_panel.test.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/dimension_panel/dimension_panel.test.tsx @@ -960,12 +960,12 @@ describe('IndexPatternDimensionEditorPanel', () => { const items: EuiListGroupItemProps[] = wrapper.find(EuiListGroup).prop('listItems') || []; expect(items.map(({ label }: { label: React.ReactNode }) => label)).toEqual([ - 'Unique count', 'Average', 'Count', 'Maximum', 'Minimum', 'Sum', + 'Unique count', ]); }); diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/_field_item.scss b/x-pack/plugins/lens/public/indexpattern_datasource/field_item.scss similarity index 100% rename from x-pack/plugins/lens/public/indexpattern_datasource/_field_item.scss rename to x-pack/plugins/lens/public/indexpattern_datasource/field_item.scss diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/field_item.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/field_item.tsx index f141d3f8ecb9e..7377d15bca6d7 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/field_item.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/field_item.tsx @@ -4,6 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ +import './field_item.scss'; + import React, { useState } from 'react'; import DateMath from '@elastic/datemath'; import { diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/field_list.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/field_list.tsx index 4a9b3a0c63e3f..63809218a1dd0 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/field_list.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/field_list.tsx @@ -52,6 +52,7 @@ export function FieldList({ hasSyncedExistingFields, filter, currentIndexPatternId, + existFieldsInIndex, }: { exists: (field: IndexPatternField) => boolean; fieldGroups: FieldGroups; @@ -63,6 +64,7 @@ export function FieldList({ typeFilter: string[]; }; currentIndexPatternId: string; + existFieldsInIndex: boolean; }) { const [pageSize, setPageSize] = useState(PAGINATION_SIZE); const [scrollContainer, setScrollContainer] = useState(undefined); @@ -180,7 +182,7 @@ export function FieldList({ isAffectedByGlobalFilter={fieldGroup.isAffectedByGlobalFilter} isAffectedByFieldFilter={isAffectedByFieldFilter} isAffectedByTimerange={fieldGroup.isAffectedByTimeFilter} - existFieldsInIndex={!!fieldGroup.fieldCount} + existFieldsInIndex={!!existFieldsInIndex} /> } /> diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/index.ts b/x-pack/plugins/lens/public/indexpattern_datasource/index.ts index 45d0ee45fab4c..4fbed04112632 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/index.ts +++ b/x-pack/plugins/lens/public/indexpattern_datasource/index.ts @@ -6,8 +6,6 @@ import { CoreSetup } from 'kibana/public'; import { Storage } from '../../../../../src/plugins/kibana_utils/public'; -import { getIndexPatternDatasource } from './indexpattern'; -import { renameColumns } from './rename_columns'; import { ExpressionsSetup } from '../../../../../src/plugins/expressions/public'; import { ChartsPluginSetup } from '../../../../../src/plugins/charts/public'; import { @@ -34,17 +32,17 @@ export class IndexPatternDatasource { core: CoreSetup, { expressions, editorFrame, charts }: IndexPatternDatasourceSetupPlugins ) { - expressions.registerFunction(renameColumns); - - editorFrame.registerDatasource( - core.getStartServices().then(([coreStart, { data }]) => + editorFrame.registerDatasource(async () => { + const { getIndexPatternDatasource, renameColumns } = await import('../async_services'); + expressions.registerFunction(renameColumns); + return core.getStartServices().then(([coreStart, { data }]) => getIndexPatternDatasource({ core: coreStart, storage: new Storage(localStorage), data, charts, }) - ) as Promise - ); + ) as Promise; + }); } } diff --git a/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.tsx b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.tsx index 3b3750cf7c560..7f7eb0bc0fdac 100644 --- a/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.tsx +++ b/x-pack/plugins/lens/public/indexpattern_datasource/indexpattern.tsx @@ -104,6 +104,8 @@ export function uniqueLabels(layers: Record) { return columnLabelMap; } +export * from './rename_columns'; + export function getIndexPatternDatasource({ core, storage, diff --git a/x-pack/plugins/lens/public/metric_visualization/index.scss b/x-pack/plugins/lens/public/metric_visualization/expression.scss similarity index 100% rename from x-pack/plugins/lens/public/metric_visualization/index.scss rename to x-pack/plugins/lens/public/metric_visualization/expression.scss diff --git a/x-pack/plugins/lens/public/metric_visualization/metric_expression.test.tsx b/x-pack/plugins/lens/public/metric_visualization/expression.test.tsx similarity index 98% rename from x-pack/plugins/lens/public/metric_visualization/metric_expression.test.tsx rename to x-pack/plugins/lens/public/metric_visualization/expression.test.tsx index 27f971c2ba11a..0c92cdb2c31fc 100644 --- a/x-pack/plugins/lens/public/metric_visualization/metric_expression.test.tsx +++ b/x-pack/plugins/lens/public/metric_visualization/expression.test.tsx @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { metricChart, MetricChart } from './metric_expression'; +import { metricChart, MetricChart } from './expression'; import { LensMultiTable } from '../types'; import React from 'react'; import { shallow } from 'enzyme'; diff --git a/x-pack/plugins/lens/public/metric_visualization/metric_expression.tsx b/x-pack/plugins/lens/public/metric_visualization/expression.tsx similarity index 99% rename from x-pack/plugins/lens/public/metric_visualization/metric_expression.tsx rename to x-pack/plugins/lens/public/metric_visualization/expression.tsx index 3484837f65b43..7eeef13240f72 100644 --- a/x-pack/plugins/lens/public/metric_visualization/metric_expression.tsx +++ b/x-pack/plugins/lens/public/metric_visualization/expression.tsx @@ -4,6 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ +import './expression.scss'; + import React from 'react'; import ReactDOM from 'react-dom'; import { diff --git a/x-pack/plugins/lens/public/metric_visualization/index.ts b/x-pack/plugins/lens/public/metric_visualization/index.ts index 2960da52191e4..f6245669b9964 100644 --- a/x-pack/plugins/lens/public/metric_visualization/index.ts +++ b/x-pack/plugins/lens/public/metric_visualization/index.ts @@ -5,9 +5,7 @@ */ import { CoreSetup } from 'kibana/public'; -import { metricVisualization } from './metric_visualization'; import { ExpressionsSetup } from '../../../../../src/plugins/expressions/public'; -import { metricChart, getMetricChartRenderer } from './metric_expression'; import { EditorFrameSetup, FormatFactory } from '../types'; export interface MetricVisualizationPluginSetupPlugins { @@ -23,10 +21,15 @@ export class MetricVisualization { _core: CoreSetup | null, { expressions, formatFactory, editorFrame }: MetricVisualizationPluginSetupPlugins ) { - expressions.registerFunction(() => metricChart); + editorFrame.registerVisualization(async () => { + const { metricVisualization, metricChart, getMetricChartRenderer } = await import( + '../async_services' + ); - expressions.registerRenderer(() => getMetricChartRenderer(formatFactory)); + expressions.registerFunction(() => metricChart); - editorFrame.registerVisualization(metricVisualization); + expressions.registerRenderer(() => getMetricChartRenderer(formatFactory)); + return metricVisualization; + }); } } diff --git a/x-pack/plugins/lens/public/metric_visualization/metric_visualization.ts b/x-pack/plugins/lens/public/metric_visualization/metric_visualization.ts new file mode 100644 index 0000000000000..c6fe54a82e2d1 --- /dev/null +++ b/x-pack/plugins/lens/public/metric_visualization/metric_visualization.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export * from './expression'; +export * from './visualization'; diff --git a/x-pack/plugins/lens/public/metric_visualization/metric_visualization.test.ts b/x-pack/plugins/lens/public/metric_visualization/visualization.test.ts similarity index 98% rename from x-pack/plugins/lens/public/metric_visualization/metric_visualization.test.ts rename to x-pack/plugins/lens/public/metric_visualization/visualization.test.ts index f3c9a725ee2e2..aa3de93013e66 100644 --- a/x-pack/plugins/lens/public/metric_visualization/metric_visualization.test.ts +++ b/x-pack/plugins/lens/public/metric_visualization/visualization.test.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { metricVisualization } from './metric_visualization'; +import { metricVisualization } from './visualization'; import { State } from './types'; import { createMockDatasource, createMockFramePublicAPI } from '../editor_frame_service/mocks'; import { generateId } from '../id_generator'; diff --git a/x-pack/plugins/lens/public/metric_visualization/metric_visualization.tsx b/x-pack/plugins/lens/public/metric_visualization/visualization.tsx similarity index 100% rename from x-pack/plugins/lens/public/metric_visualization/metric_visualization.tsx rename to x-pack/plugins/lens/public/metric_visualization/visualization.tsx diff --git a/x-pack/plugins/lens/public/pie_visualization/register_expression.tsx b/x-pack/plugins/lens/public/pie_visualization/expression.tsx similarity index 100% rename from x-pack/plugins/lens/public/pie_visualization/register_expression.tsx rename to x-pack/plugins/lens/public/pie_visualization/expression.tsx diff --git a/x-pack/plugins/lens/public/pie_visualization/index.ts b/x-pack/plugins/lens/public/pie_visualization/index.ts index 401b6d634c696..36dd9b93c3e39 100644 --- a/x-pack/plugins/lens/public/pie_visualization/index.ts +++ b/x-pack/plugins/lens/public/pie_visualization/index.ts @@ -6,8 +6,6 @@ import { CoreSetup } from 'src/core/public'; import { ExpressionsSetup } from 'src/plugins/expressions/public'; -import { pieVisualization } from './pie_visualization'; -import { pie, getPieRenderer } from './register_expression'; import { EditorFrameSetup, FormatFactory } from '../types'; import { UiActionsStart } from '../../../../../src/plugins/ui_actions/public'; import { ChartsPluginSetup } from '../../../../../src/plugins/charts/public'; @@ -30,15 +28,18 @@ export class PieVisualization { core: CoreSetup, { expressions, formatFactory, editorFrame, charts }: PieVisualizationPluginSetupPlugins ) { - expressions.registerFunction(() => pie); + editorFrame.registerVisualization(async () => { + const { pieVisualization, pie, getPieRenderer } = await import('../async_services'); - expressions.registerRenderer( - getPieRenderer({ - formatFactory, - chartsThemeService: charts.theme, - }) - ); + expressions.registerFunction(() => pie); - editorFrame.registerVisualization(pieVisualization); + expressions.registerRenderer( + getPieRenderer({ + formatFactory, + chartsThemeService: charts.theme, + }) + ); + return pieVisualization; + }); } } diff --git a/x-pack/plugins/lens/public/pie_visualization/pie_visualization.ts b/x-pack/plugins/lens/public/pie_visualization/pie_visualization.ts new file mode 100644 index 0000000000000..c6fe54a82e2d1 --- /dev/null +++ b/x-pack/plugins/lens/public/pie_visualization/pie_visualization.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export * from './expression'; +export * from './visualization'; diff --git a/x-pack/plugins/lens/public/pie_visualization/pie_visualization.tsx b/x-pack/plugins/lens/public/pie_visualization/visualization.tsx similarity index 100% rename from x-pack/plugins/lens/public/pie_visualization/pie_visualization.tsx rename to x-pack/plugins/lens/public/pie_visualization/visualization.tsx diff --git a/x-pack/plugins/lens/public/plugin.ts b/x-pack/plugins/lens/public/plugin.ts index 1655a571721f5..38d256d2b3afd 100644 --- a/x-pack/plugins/lens/public/plugin.ts +++ b/x-pack/plugins/lens/public/plugin.ts @@ -35,7 +35,6 @@ import { EditorFrameStart } from './types'; import { getLensAliasConfig } from './vis_type_alias'; import { getSearchProvider } from './search_provider'; -import './index.scss'; import { getLensAttributeService, LensAttributeService } from './lens_attribute_service'; export interface LensPluginSetupDependencies { @@ -127,7 +126,7 @@ export class LensPlugin { title: NOT_INTERNATIONALIZED_PRODUCT_NAME, navLinkStatus: AppNavLinkStatus.hidden, mount: async (params: AppMountParameters) => { - const { mountApp } = await import('./app_plugin/mounter'); + const { mountApp } = await import('./async_services'); return mountApp(core, params, { createEditorFrame: this.createEditorFrame!, attributeService: this.attributeService!, diff --git a/x-pack/plugins/lens/public/types.ts b/x-pack/plugins/lens/public/types.ts index edb787d9ec1a1..e97e0d612a2ee 100644 --- a/x-pack/plugins/lens/public/types.ts +++ b/x-pack/plugins/lens/public/types.ts @@ -57,8 +57,12 @@ export interface EditorFrameInstance { export interface EditorFrameSetup { // generic type on the API functions to pull the "unknown vs. specific type" error into the implementation - registerDatasource: (datasource: Datasource | Promise>) => void; - registerVisualization: (visualization: Visualization | Promise>) => void; + registerDatasource: ( + datasource: Datasource | (() => Promise>) + ) => void; + registerVisualization: ( + visualization: Visualization | (() => Promise>) + ) => void; } export interface EditorFrameStart { diff --git a/x-pack/plugins/lens/public/visualization_container.scss b/x-pack/plugins/lens/public/visualization_container.scss index 59ddbf4bf6478..a67aa50127c81 100644 --- a/x-pack/plugins/lens/public/visualization_container.scss +++ b/x-pack/plugins/lens/public/visualization_container.scss @@ -2,3 +2,16 @@ @include euiScrollBar; overflow: auto; } + +.lnsExpressionRenderer { + @include euiScrollBar; + position: relative; + width: 100%; + height: 100%; + display: flex; + overflow: auto; + + .lnsExpressionRenderer__component { + position: static; // Let the progress indicator position itself against the outer parent + } +} diff --git a/x-pack/plugins/lens/public/visualization_container.tsx b/x-pack/plugins/lens/public/visualization_container.tsx index 3ca8d5de932d7..521d41b6f8d94 100644 --- a/x-pack/plugins/lens/public/visualization_container.tsx +++ b/x-pack/plugins/lens/public/visualization_container.tsx @@ -4,11 +4,11 @@ * you may not use this file except in compliance with the Elastic License. */ +import './visualization_container.scss'; + import React from 'react'; import classNames from 'classnames'; -import './visualization_container.scss'; - interface Props extends React.HTMLAttributes { isReady?: boolean; reportTitle?: string; diff --git a/x-pack/plugins/lens/public/xy_visualization/__snapshots__/xy_expression.test.tsx.snap b/x-pack/plugins/lens/public/xy_visualization/__snapshots__/expression.test.tsx.snap similarity index 100% rename from x-pack/plugins/lens/public/xy_visualization/__snapshots__/xy_expression.test.tsx.snap rename to x-pack/plugins/lens/public/xy_visualization/__snapshots__/expression.test.tsx.snap diff --git a/x-pack/plugins/lens/public/xy_visualization/_index.scss b/x-pack/plugins/lens/public/xy_visualization/_index.scss deleted file mode 100644 index 110a9589a6fb4..0000000000000 --- a/x-pack/plugins/lens/public/xy_visualization/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@import 'xy_expression'; diff --git a/x-pack/plugins/lens/public/xy_visualization/_xy_expression.scss b/x-pack/plugins/lens/public/xy_visualization/expression.scss similarity index 100% rename from x-pack/plugins/lens/public/xy_visualization/_xy_expression.scss rename to x-pack/plugins/lens/public/xy_visualization/expression.scss diff --git a/x-pack/plugins/lens/public/xy_visualization/xy_expression.test.tsx b/x-pack/plugins/lens/public/xy_visualization/expression.test.tsx similarity index 99% rename from x-pack/plugins/lens/public/xy_visualization/xy_expression.test.tsx rename to x-pack/plugins/lens/public/xy_visualization/expression.test.tsx index 1d809f222eb00..3bd6cc73d6320 100644 --- a/x-pack/plugins/lens/public/xy_visualization/xy_expression.test.tsx +++ b/x-pack/plugins/lens/public/xy_visualization/expression.test.tsx @@ -17,7 +17,7 @@ import { SeriesNameFn, Fit, } from '@elastic/charts'; -import { xyChart, XYChart } from './xy_expression'; +import { xyChart, XYChart } from './expression'; import { LensMultiTable } from '../types'; import { KibanaDatatable, KibanaDatatableRow } from '../../../../../src/plugins/expressions/public'; import React from 'react'; diff --git a/x-pack/plugins/lens/public/xy_visualization/xy_expression.tsx b/x-pack/plugins/lens/public/xy_visualization/expression.tsx similarity index 99% rename from x-pack/plugins/lens/public/xy_visualization/xy_expression.tsx rename to x-pack/plugins/lens/public/xy_visualization/expression.tsx index 24bf78dba2121..64e0a3670a9aa 100644 --- a/x-pack/plugins/lens/public/xy_visualization/xy_expression.tsx +++ b/x-pack/plugins/lens/public/xy_visualization/expression.tsx @@ -4,6 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ +import './expression.scss'; + import React, { useState, useEffect } from 'react'; import ReactDOM from 'react-dom'; import moment from 'moment'; diff --git a/x-pack/plugins/lens/public/xy_visualization/index.ts b/x-pack/plugins/lens/public/xy_visualization/index.ts index 470d197e847eb..259267236ec49 100644 --- a/x-pack/plugins/lens/public/xy_visualization/index.ts +++ b/x-pack/plugins/lens/public/xy_visualization/index.ts @@ -8,16 +8,6 @@ import { CoreSetup, IUiSettingsClient } from 'kibana/public'; import moment from 'moment-timezone'; import { ExpressionsSetup } from '../../../../../src/plugins/expressions/public'; import { UI_SETTINGS } from '../../../../../src/plugins/data/public'; -import { xyVisualization } from './xy_visualization'; -import { xyChart, getXyChartRenderer } from './xy_expression'; -import { - legendConfig, - layerConfig, - yAxisConfig, - tickLabelsConfig, - gridlinesConfig, - axisTitlesVisibilityConfig, -} from './types'; import { EditorFrameSetup, FormatFactory } from '../types'; import { ChartsPluginSetup } from '../../../../../src/plugins/charts/public'; @@ -44,23 +34,35 @@ export class XyVisualization { core: CoreSetup, { expressions, formatFactory, editorFrame, charts }: XyVisualizationPluginSetupPlugins ) { - expressions.registerFunction(() => legendConfig); - expressions.registerFunction(() => yAxisConfig); - expressions.registerFunction(() => tickLabelsConfig); - expressions.registerFunction(() => gridlinesConfig); - expressions.registerFunction(() => axisTitlesVisibilityConfig); - expressions.registerFunction(() => layerConfig); - expressions.registerFunction(() => xyChart); + editorFrame.registerVisualization(async () => { + const { + legendConfig, + yAxisConfig, + tickLabelsConfig, + gridlinesConfig, + axisTitlesVisibilityConfig, + layerConfig, + xyChart, + getXyChartRenderer, + xyVisualization, + } = await import('../async_services'); + expressions.registerFunction(() => legendConfig); + expressions.registerFunction(() => yAxisConfig); + expressions.registerFunction(() => tickLabelsConfig); + expressions.registerFunction(() => gridlinesConfig); + expressions.registerFunction(() => axisTitlesVisibilityConfig); + expressions.registerFunction(() => layerConfig); + expressions.registerFunction(() => xyChart); - expressions.registerRenderer( - getXyChartRenderer({ - formatFactory, - chartsThemeService: charts.theme, - timeZone: getTimeZone(core.uiSettings), - histogramBarTarget: core.uiSettings.get(UI_SETTINGS.HISTOGRAM_BAR_TARGET), - }) - ); - - editorFrame.registerVisualization(xyVisualization); + expressions.registerRenderer( + getXyChartRenderer({ + formatFactory, + chartsThemeService: charts.theme, + timeZone: getTimeZone(core.uiSettings), + histogramBarTarget: core.uiSettings.get(UI_SETTINGS.HISTOGRAM_BAR_TARGET), + }) + ); + return xyVisualization; + }); } } diff --git a/x-pack/plugins/lens/public/xy_visualization/xy_visualization.test.ts b/x-pack/plugins/lens/public/xy_visualization/visualization.test.ts similarity index 99% rename from x-pack/plugins/lens/public/xy_visualization/xy_visualization.test.ts rename to x-pack/plugins/lens/public/xy_visualization/visualization.test.ts index 7cf1830cdc2fa..621fd082faf2d 100644 --- a/x-pack/plugins/lens/public/xy_visualization/xy_visualization.test.ts +++ b/x-pack/plugins/lens/public/xy_visualization/visualization.test.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { xyVisualization } from './xy_visualization'; +import { xyVisualization } from './visualization'; import { Position } from '@elastic/charts'; import { Operation } from '../types'; import { State, SeriesType } from './types'; diff --git a/x-pack/plugins/lens/public/xy_visualization/xy_visualization.tsx b/x-pack/plugins/lens/public/xy_visualization/visualization.tsx similarity index 100% rename from x-pack/plugins/lens/public/xy_visualization/xy_visualization.tsx rename to x-pack/plugins/lens/public/xy_visualization/visualization.tsx diff --git a/x-pack/plugins/lens/public/xy_visualization/xy_visualization.ts b/x-pack/plugins/lens/public/xy_visualization/xy_visualization.ts new file mode 100644 index 0000000000000..35053bba738b9 --- /dev/null +++ b/x-pack/plugins/lens/public/xy_visualization/xy_visualization.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export * from './expression'; +export * from './types'; +export * from './visualization'; diff --git a/x-pack/plugins/lens/server/usage/visualization_counts.ts b/x-pack/plugins/lens/server/usage/visualization_counts.ts index c3c6b2b7e4cbd..c9cd4aff72b2b 100644 --- a/x-pack/plugins/lens/server/usage/visualization_counts.ts +++ b/x-pack/plugins/lens/server/usage/visualization_counts.ts @@ -11,37 +11,6 @@ export async function getVisualizationCounts( callCluster: LegacyAPICaller, kibanaIndex: string ): Promise { - const scriptedMetric = { - scripted_metric: { - // Each cluster collects its own type data in a key-value Map that looks like: - // { lnsDatatable: 5, area_stacked: 3 } - init_script: 'state.types = [:]', - // The map script relies on having flattened keyword mapping for the Lens saved object, - // without this kind of mapping we would not be able to access `lens.state` in painless - map_script: ` - String visType = doc['lens.visualizationType'].value; - String niceType = visType == 'lnsXY' ? doc['lens.state.visualization.preferredSeriesType'].value : visType; - state.types.put(niceType, state.types.containsKey(niceType) ? state.types.get(niceType) + 1 : 1); - `, - // Combine script is executed per cluster, but we already have a key-value pair per cluster. - // Despite docs that say this is optional, this script can't be blank. - combine_script: 'return state', - // Reduce script is executed across all clusters, so we need to add up all the total from each cluster - // This also needs to account for having no data - reduce_script: ` - Map result = [:]; - for (Map m : states.toArray()) { - if (m !== null) { - for (String k : m.keySet()) { - result.put(k, result.containsKey(k) ? result.get(k) + m.get(k) : m.get(k)); - } - } - } - return result; - `, - }, - }; - const results = await callCluster('search', { index: kibanaIndex, rest_total_hits_as_int: true, @@ -61,7 +30,18 @@ export async function getVisualizationCounts( }, }, aggs: { - byType: scriptedMetric, + byType: { + terms: { + // The script relies on having flattened keyword mapping for the Lens saved object, + // without this kind of mapping we would not be able to access `lens.state` in painless + script: ` + String visType = doc['lens.visualizationType'].value; + String niceType = visType == 'lnsXY' ? doc['lens.state.visualization.preferredSeriesType'].value : visType; + return niceType; + `, + size: 100, + }, + }, }, }, }, @@ -71,10 +51,19 @@ export async function getVisualizationCounts( const buckets = results.aggregations.groups.buckets; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + function bucketsToObject(arg: any) { + const obj: Record = {}; + arg.buckets.forEach((bucket: { key: string; doc_count: number }) => { + obj[bucket.key] = bucket.doc_count + (obj[bucket.key] ?? 0); + }); + return obj; + } + return { - saved_overall: buckets.overall.byType.value.types, - saved_30_days: buckets.last30.byType.value.types, - saved_90_days: buckets.last90.byType.value.types, + saved_overall: bucketsToObject(buckets.overall.byType), + saved_30_days: bucketsToObject(buckets.last30.byType), + saved_90_days: bucketsToObject(buckets.last90.byType), saved_overall_total: buckets.overall.doc_count, saved_30_days_total: buckets.last30.doc_count, saved_90_days_total: buckets.last90.doc_count, diff --git a/x-pack/plugins/licensing/public/services/feature_usage_service.ts b/x-pack/plugins/licensing/public/services/feature_usage_service.ts index d8fe892a2f684..461246844a33b 100644 --- a/x-pack/plugins/licensing/public/services/feature_usage_service.ts +++ b/x-pack/plugins/licensing/public/services/feature_usage_service.ts @@ -4,9 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import isDate from 'lodash/isDate'; +import { isDate } from 'lodash'; import type { HttpSetup, HttpStart } from 'src/core/public'; import { LicenseType } from '../../common/types'; diff --git a/x-pack/plugins/licensing/tsconfig.json b/x-pack/plugins/licensing/tsconfig.json new file mode 100644 index 0000000000000..9b8eb15dc4a9e --- /dev/null +++ b/x-pack/plugins/licensing/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "outDir": "./target/types", + "emitDeclarationOnly": true, + "declaration": true, + "declarationMap": true + }, + "include": [ + "public/**/*", + "server/**/*", + "common/**/*", + "../../../typings/**/*" + ], + "references": [ + { "path": "../../../src/core/tsconfig.json" }, + { "path": "../../../src/plugins/kibana_react/tsconfig.json" } + ] +} diff --git a/x-pack/plugins/maps/public/classes/_index.scss b/x-pack/plugins/maps/public/classes/_index.scss index 29a5761255278..3fc31b4b2f66a 100644 --- a/x-pack/plugins/maps/public/classes/_index.scss +++ b/x-pack/plugins/maps/public/classes/_index.scss @@ -1 +1,2 @@ @import 'styles/index'; +@import 'layers/index'; diff --git a/x-pack/plugins/maps/public/classes/layers/_index.scss b/x-pack/plugins/maps/public/classes/layers/_index.scss new file mode 100644 index 0000000000000..530ac2734855d --- /dev/null +++ b/x-pack/plugins/maps/public/classes/layers/_index.scss @@ -0,0 +1 @@ +@import 'layers'; diff --git a/x-pack/plugins/maps/public/classes/layers/_layers.scss b/x-pack/plugins/maps/public/classes/layers/_layers.scss new file mode 100644 index 0000000000000..54ab7d85ef170 --- /dev/null +++ b/x-pack/plugins/maps/public/classes/layers/_layers.scss @@ -0,0 +1,11 @@ +.mapLayersWizardIcon { + margin-top: $euiSizeS; + + &__highlight { + fill: $euiColorFullShade; + } + + &__background { + fill: $euiColorLightShade; + } +} diff --git a/x-pack/plugins/maps/public/classes/layers/choropleth_layer_wizard/choropleth_layer_wizard.tsx b/x-pack/plugins/maps/public/classes/layers/choropleth_layer_wizard/choropleth_layer_wizard.tsx index 6e806f4530df2..d87302a6a9f2e 100644 --- a/x-pack/plugins/maps/public/classes/layers/choropleth_layer_wizard/choropleth_layer_wizard.tsx +++ b/x-pack/plugins/maps/public/classes/layers/choropleth_layer_wizard/choropleth_layer_wizard.tsx @@ -9,13 +9,14 @@ import { i18n } from '@kbn/i18n'; import { LAYER_WIZARD_CATEGORY } from '../../../../common/constants'; import { LayerWizard, RenderWizardArguments } from '../layer_wizard_registry'; import { LayerTemplate } from './layer_template'; +import { ChoroplethLayerIcon } from './cloropleth_layer_icon'; export const choroplethLayerWizardConfig: LayerWizard = { categories: [LAYER_WIZARD_CATEGORY.ELASTICSEARCH], description: i18n.translate('xpack.maps.choropleth.desc', { defaultMessage: 'Shaded areas to compare statistics across boundaries', }), - icon: 'logoElasticsearch', + icon: ChoroplethLayerIcon, renderWizard: (renderWizardArguments: RenderWizardArguments) => { return ; }, diff --git a/x-pack/plugins/maps/public/classes/layers/choropleth_layer_wizard/cloropleth_layer_icon.tsx b/x-pack/plugins/maps/public/classes/layers/choropleth_layer_wizard/cloropleth_layer_icon.tsx new file mode 100644 index 0000000000000..e0a0d450dfbff --- /dev/null +++ b/x-pack/plugins/maps/public/classes/layers/choropleth_layer_wizard/cloropleth_layer_icon.tsx @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { FunctionComponent } from 'react'; + +export const ChoroplethLayerIcon: FunctionComponent = () => ( + + + + + + +); diff --git a/x-pack/plugins/maps/public/classes/layers/layer_wizard_registry.ts b/x-pack/plugins/maps/public/classes/layers/layer_wizard_registry.ts index 0eb1d2c3b222c..278a3c0388b01 100644 --- a/x-pack/plugins/maps/public/classes/layers/layer_wizard_registry.ts +++ b/x-pack/plugins/maps/public/classes/layers/layer_wizard_registry.ts @@ -5,7 +5,7 @@ */ /* eslint-disable @typescript-eslint/consistent-type-definitions */ -import { ReactElement } from 'react'; +import { ReactElement, FunctionComponent } from 'react'; import { LayerDescriptor } from '../../../common/descriptor_types'; import { LAYER_WIZARD_CATEGORY } from '../../../common/constants'; @@ -28,7 +28,7 @@ export type LayerWizard = { categories: LAYER_WIZARD_CATEGORY[]; checkVisibility?: () => Promise; description: string; - icon: string; + icon: string | FunctionComponent; prerequisiteSteps?: Array<{ id: string; label: string }>; renderWizard(renderWizardArguments: RenderWizardArguments): ReactElement; title: string; diff --git a/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/clusters_layer_icon.tsx b/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/clusters_layer_icon.tsx new file mode 100644 index 0000000000000..818ff789da19b --- /dev/null +++ b/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/clusters_layer_icon.tsx @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { FunctionComponent } from 'react'; + +export const ClustersLayerIcon: FunctionComponent = () => ( + + + + + + + + + + + + + + + + + + + + +); diff --git a/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/clusters_layer_wizard.tsx b/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/clusters_layer_wizard.tsx index ee97fdd0a2bf6..5d0a414cd0d18 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/clusters_layer_wizard.tsx +++ b/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/clusters_layer_wizard.tsx @@ -29,13 +29,14 @@ import { STYLE_TYPE, } from '../../../../common/constants'; import { NUMERICAL_COLOR_PALETTES } from '../../styles/color_palettes'; +import { ClustersLayerIcon } from './clusters_layer_icon'; export const clustersLayerWizardConfig: LayerWizard = { categories: [LAYER_WIZARD_CATEGORY.ELASTICSEARCH], description: i18n.translate('xpack.maps.source.esGridClustersDescription', { defaultMessage: 'Geospatial data grouped in grids with metrics for each gridded cell', }), - icon: 'logoElasticsearch', + icon: ClustersLayerIcon, renderWizard: ({ previewLayers }: RenderWizardArguments) => { const onSourceConfigChange = (sourceConfig: Partial) => { if (!sourceConfig) { diff --git a/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/heatmap_layer_icon.tsx b/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/heatmap_layer_icon.tsx new file mode 100644 index 0000000000000..5f4835e386911 --- /dev/null +++ b/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/heatmap_layer_icon.tsx @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { FunctionComponent } from 'react'; + +export const HeatmapLayerIcon: FunctionComponent = () => ( + + + + + +); diff --git a/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/heatmap_layer_wizard.tsx b/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/heatmap_layer_wizard.tsx index 92a0f1006ea43..652514a3b9d34 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/heatmap_layer_wizard.tsx +++ b/x-pack/plugins/maps/public/classes/sources/es_geo_grid_source/heatmap_layer_wizard.tsx @@ -15,13 +15,14 @@ import { LayerWizard, RenderWizardArguments } from '../../layers/layer_wizard_re import { HeatmapLayer } from '../../layers/heatmap_layer/heatmap_layer'; import { ESGeoGridSourceDescriptor } from '../../../../common/descriptor_types'; import { LAYER_WIZARD_CATEGORY, RENDER_AS } from '../../../../common/constants'; +import { HeatmapLayerIcon } from './heatmap_layer_icon'; export const heatmapLayerWizardConfig: LayerWizard = { categories: [LAYER_WIZARD_CATEGORY.ELASTICSEARCH], description: i18n.translate('xpack.maps.source.esGridHeatmapDescription', { defaultMessage: 'Geospatial data grouped in grids to show density', }), - icon: 'logoElasticsearch', + icon: HeatmapLayerIcon, renderWizard: ({ previewLayers }: RenderWizardArguments) => { const onSourceConfigChange = (sourceConfig: Partial) => { if (!sourceConfig) { diff --git a/x-pack/plugins/maps/public/classes/sources/es_pew_pew_source/point_2_point_layer_icon.tsx b/x-pack/plugins/maps/public/classes/sources/es_pew_pew_source/point_2_point_layer_icon.tsx new file mode 100644 index 0000000000000..ed5d38bba0fba --- /dev/null +++ b/x-pack/plugins/maps/public/classes/sources/es_pew_pew_source/point_2_point_layer_icon.tsx @@ -0,0 +1,129 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { FunctionComponent } from 'react'; + +export const Point2PointLayerIcon: FunctionComponent = () => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + +); diff --git a/x-pack/plugins/maps/public/classes/sources/es_pew_pew_source/point_2_point_layer_wizard.tsx b/x-pack/plugins/maps/public/classes/sources/es_pew_pew_source/point_2_point_layer_wizard.tsx index fee84d0208978..74e690d4d3204 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_pew_pew_source/point_2_point_layer_wizard.tsx +++ b/x-pack/plugins/maps/public/classes/sources/es_pew_pew_source/point_2_point_layer_wizard.tsx @@ -23,13 +23,14 @@ import { NUMERICAL_COLOR_PALETTES } from '../../styles/color_palettes'; import { CreateSourceEditor } from './create_source_editor'; import { LayerWizard, RenderWizardArguments } from '../../layers/layer_wizard_registry'; import { ColorDynamicOptions, SizeDynamicOptions } from '../../../../common/descriptor_types'; +import { Point2PointLayerIcon } from './point_2_point_layer_icon'; export const point2PointLayerWizardConfig: LayerWizard = { categories: [LAYER_WIZARD_CATEGORY.ELASTICSEARCH], description: i18n.translate('xpack.maps.source.pewPewDescription', { defaultMessage: 'Aggregated data paths between the source and destination', }), - icon: 'logoElasticsearch', + icon: Point2PointLayerIcon, renderWizard: ({ previewLayers }: RenderWizardArguments) => { const onSourceConfigChange = (sourceConfig: unknown) => { if (!sourceConfig) { diff --git a/x-pack/plugins/maps/public/classes/sources/es_search_source/es_documents_layer_icon.tsx b/x-pack/plugins/maps/public/classes/sources/es_search_source/es_documents_layer_icon.tsx new file mode 100644 index 0000000000000..dcd4985f44280 --- /dev/null +++ b/x-pack/plugins/maps/public/classes/sources/es_search_source/es_documents_layer_icon.tsx @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { FunctionComponent } from 'react'; + +export const EsDocumentsLayerIcon: FunctionComponent = () => ( + + + + + + + + + + + + + + + + + +); diff --git a/x-pack/plugins/maps/public/classes/sources/es_search_source/es_documents_layer_wizard.tsx b/x-pack/plugins/maps/public/classes/sources/es_search_source/es_documents_layer_wizard.tsx index 249b9a2454d7d..af2061d6c541f 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_search_source/es_documents_layer_wizard.tsx +++ b/x-pack/plugins/maps/public/classes/sources/es_search_source/es_documents_layer_wizard.tsx @@ -15,6 +15,7 @@ import { BlendedVectorLayer } from '../../layers/blended_vector_layer/blended_ve import { VectorLayer } from '../../layers/vector_layer/vector_layer'; import { LAYER_WIZARD_CATEGORY, SCALING_TYPES } from '../../../../common/constants'; import { TiledVectorLayer } from '../../layers/tiled_vector_layer/tiled_vector_layer'; +import { EsDocumentsLayerIcon } from './es_documents_layer_icon'; export function createDefaultLayerDescriptor(sourceConfig: unknown, mapColors: string[]) { const sourceDescriptor = ESSearchSource.createDescriptor(sourceConfig); @@ -33,7 +34,7 @@ export const esDocumentsLayerWizardConfig: LayerWizard = { description: i18n.translate('xpack.maps.source.esSearchDescription', { defaultMessage: 'Points, lines, and polygons from Elasticsearch', }), - icon: 'logoElasticsearch', + icon: EsDocumentsLayerIcon, renderWizard: ({ previewLayers, mapColors }: RenderWizardArguments) => { const onSourceConfigChange = (sourceConfig: unknown) => { if (!sourceConfig) { diff --git a/x-pack/plugins/ml/common/index.ts b/x-pack/plugins/ml/common/index.ts index 9a415ac0718b3..d808e4277f075 100644 --- a/x-pack/plugins/ml/common/index.ts +++ b/x-pack/plugins/ml/common/index.ts @@ -7,3 +7,4 @@ export { SearchResponse7 } from './types/es_client'; export { ANOMALY_SEVERITY, ANOMALY_THRESHOLD } from './constants/anomalies'; export { getSeverityColor, getSeverityType } from './util/anomaly_utils'; +export { composeValidators, patternValidator } from './util/validators'; diff --git a/x-pack/plugins/ml/common/types/modules.ts b/x-pack/plugins/ml/common/types/modules.ts index bfa7e38332c1b..38f0c8cb9c117 100644 --- a/x-pack/plugins/ml/common/types/modules.ts +++ b/x-pack/plugins/ml/common/types/modules.ts @@ -11,7 +11,7 @@ export interface ModuleJob { config: Omit; } -export interface ModuleDataFeed { +export interface ModuleDatafeed { id: string; config: Omit; } @@ -49,7 +49,7 @@ export interface Module { defaultIndexPattern: string; query: any; jobs: ModuleJob[]; - datafeeds: ModuleDataFeed[]; + datafeeds: ModuleDatafeed[]; kibana: KibanaObjects; } diff --git a/x-pack/plugins/ml/common/util/job_utils.ts b/x-pack/plugins/ml/common/util/job_utils.ts index 04a460251cb6f..878f5a2c71cb9 100644 --- a/x-pack/plugins/ml/common/util/job_utils.ts +++ b/x-pack/plugins/ml/common/util/job_utils.ts @@ -4,18 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import isEmpty from 'lodash/isEmpty'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import isEqual from 'lodash/isEqual'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import each from 'lodash/each'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import pick from 'lodash/pick'; +import { isEmpty, isEqual, each, pick } from 'lodash'; import semver from 'semver'; import moment, { Duration } from 'moment'; diff --git a/x-pack/plugins/ml/public/application/components/annotations/annotations_table/annotations_table.js b/x-pack/plugins/ml/public/application/components/annotations/annotations_table/annotations_table.js index 67db378fb7951..0527b8f6d9f60 100644 --- a/x-pack/plugins/ml/public/application/components/annotations/annotations_table/annotations_table.js +++ b/x-pack/plugins/ml/public/application/components/annotations/annotations_table/annotations_table.js @@ -10,9 +10,7 @@ * getting the annotations via props (used in Anomaly Explorer and Single Series Viewer). */ -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import uniq from 'lodash/uniq'; +import { uniq } from 'lodash'; import PropTypes from 'prop-types'; import React, { Component, Fragment } from 'react'; diff --git a/x-pack/plugins/ml/public/application/components/anomalies_table/anomalies_table.js b/x-pack/plugins/ml/public/application/components/anomalies_table/anomalies_table.js index d6eb0afed753d..0a2c67a3b0dcb 100644 --- a/x-pack/plugins/ml/public/application/components/anomalies_table/anomalies_table.js +++ b/x-pack/plugins/ml/public/application/components/anomalies_table/anomalies_table.js @@ -9,9 +9,7 @@ */ import PropTypes from 'prop-types'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import get from 'lodash/get'; +import { get } from 'lodash'; import React, { Component } from 'react'; diff --git a/x-pack/plugins/ml/public/application/components/anomalies_table/anomalies_table_columns.js b/x-pack/plugins/ml/public/application/components/anomalies_table/anomalies_table_columns.js index 299173fc4436d..1f8c8633afa47 100644 --- a/x-pack/plugins/ml/public/application/components/anomalies_table/anomalies_table_columns.js +++ b/x-pack/plugins/ml/public/application/components/anomalies_table/anomalies_table_columns.js @@ -7,9 +7,7 @@ import { EuiButtonIcon, EuiLink, EuiScreenReaderOnly } from '@elastic/eui'; import React from 'react'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import get from 'lodash/get'; +import { get } from 'lodash'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; diff --git a/x-pack/plugins/ml/public/application/components/anomalies_table/anomaly_details.js b/x-pack/plugins/ml/public/application/components/anomalies_table/anomaly_details.js index e0b20ab731749..cd3875f8cbd2a 100644 --- a/x-pack/plugins/ml/public/application/components/anomalies_table/anomaly_details.js +++ b/x-pack/plugins/ml/public/application/components/anomalies_table/anomaly_details.js @@ -11,12 +11,7 @@ import PropTypes from 'prop-types'; import React, { Component, Fragment } from 'react'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import get from 'lodash/get'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import pick from 'lodash/pick'; +import { get, pick } from 'lodash'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n/react'; diff --git a/x-pack/plugins/ml/public/application/components/anomalies_table/influencers_cell.js b/x-pack/plugins/ml/public/application/components/anomalies_table/influencers_cell.js index 505ccf46c5a62..a1ca22eb292ce 100644 --- a/x-pack/plugins/ml/public/application/components/anomalies_table/influencers_cell.js +++ b/x-pack/plugins/ml/public/application/components/anomalies_table/influencers_cell.js @@ -4,9 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import each from 'lodash/each'; +import { each } from 'lodash'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; diff --git a/x-pack/plugins/ml/public/application/components/anomalies_table/links_menu.js b/x-pack/plugins/ml/public/application/components/anomalies_table/links_menu.js index 114dc463fa3a6..d898734f34c93 100644 --- a/x-pack/plugins/ml/public/application/components/anomalies_table/links_menu.js +++ b/x-pack/plugins/ml/public/application/components/anomalies_table/links_menu.js @@ -4,9 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import cloneDeep from 'lodash/cloneDeep'; +import { cloneDeep } from 'lodash'; import moment from 'moment'; import rison from 'rison-node'; import PropTypes from 'prop-types'; diff --git a/x-pack/plugins/ml/public/application/components/model_snapshots/revert_model_snapshot_flyout/revert_model_snapshot_flyout.tsx b/x-pack/plugins/ml/public/application/components/model_snapshots/revert_model_snapshot_flyout/revert_model_snapshot_flyout.tsx index ad5915b39d521..e37efe60f8018 100644 --- a/x-pack/plugins/ml/public/application/components/model_snapshots/revert_model_snapshot_flyout/revert_model_snapshot_flyout.tsx +++ b/x-pack/plugins/ml/public/application/components/model_snapshots/revert_model_snapshot_flyout/revert_model_snapshot_flyout.tsx @@ -12,7 +12,6 @@ import React, { FC, useState, useCallback, useMemo, useEffect } from 'react'; import { i18n } from '@kbn/i18n'; -import {} from 'lodash'; import { FormattedMessage } from '@kbn/i18n/react'; import { EuiFlyout, diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/job_type.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/job_type.tsx index 1e6a616fedd64..31c7672ed4fcc 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/job_type.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/job_type.tsx @@ -4,11 +4,12 @@ * you may not use this file except in compliance with the Elastic License. */ -import React, { Fragment, FC } from 'react'; +import React, { FC, useState } from 'react'; import { i18n } from '@kbn/i18n'; -import { EuiFormRow, EuiSelect } from '@elastic/eui'; +import { EuiCard, EuiIcon, EuiFlexItem, EuiFlexGroup, EuiSpacer } from '@elastic/eui'; import { ANALYSIS_CONFIG_TYPE } from '../../../../../../../common/constants/data_frame_analytics'; +import { DataFrameAnalysisConfigType } from '../../../../../../../common/types/data_frame_analytics'; import { AnalyticsJobType } from '../../../analytics_management/hooks/use_create_analytics_form/state'; @@ -17,64 +18,81 @@ interface Props { setFormState: React.Dispatch>; } -export const JobType: FC = ({ type, setFormState }) => { - const outlierHelpText = i18n.translate( - 'xpack.ml.dataframe.analytics.create.outlierDetectionHelpText', - { - defaultMessage: 'Outlier detection identifies unusual data points in the data set.', - } - ); +interface Details { + helpText: string; + icon: string; + title: string; +} - const regressionHelpText = i18n.translate( - 'xpack.ml.dataframe.analytics.create.outlierRegressionHelpText', - { - defaultMessage: 'Regression predicts numerical values in the data set.', - } - ); +type JobDetails = Record; - const classificationHelpText = i18n.translate( - 'xpack.ml.dataframe.analytics.create.classificationHelpText', - { +const jobDetails: JobDetails = { + [ANALYSIS_CONFIG_TYPE.OUTLIER_DETECTION]: { + helpText: i18n.translate('xpack.ml.dataframe.analytics.create.outlierDetectionHelpText', { + defaultMessage: 'Outlier detection identifies unusual data points in the data set.', + }), + icon: 'outlierDetectionJob', + title: i18n.translate('xpack.ml.dataframe.analytics.create.outlierDetectionTitle', { + defaultMessage: 'Outlier detection', + }), + }, + [ANALYSIS_CONFIG_TYPE.REGRESSION]: { + helpText: i18n.translate('xpack.ml.dataframe.analytics.create.regressionHelpText', { + defaultMessage: 'Regression predicts numerical values in the data set.', + }), + icon: 'regressionJob', + title: i18n.translate('xpack.ml.dataframe.analytics.create.regressionTitle', { + defaultMessage: 'Regression', + }), + }, + [ANALYSIS_CONFIG_TYPE.CLASSIFICATION]: { + helpText: i18n.translate('xpack.ml.dataframe.analytics.create.classificationHelpText', { defaultMessage: 'Classification predicts labels of data points in the data set.', - } - ); + }), + icon: 'classificationJob', + title: i18n.translate('xpack.ml.dataframe.analytics.create.classificationTitle', { + defaultMessage: 'Classification', + }), + }, +}; - const helpText = { - [ANALYSIS_CONFIG_TYPE.REGRESSION]: regressionHelpText, - [ANALYSIS_CONFIG_TYPE.OUTLIER_DETECTION]: outlierHelpText, - [ANALYSIS_CONFIG_TYPE.CLASSIFICATION]: classificationHelpText, - }; +export const JobType: FC = ({ type, setFormState }) => { + const [selectedCard, setSelectedCard] = useState({}); return ( - - - ({ - value: jobType, - text: jobType.replace(/_/g, ' '), - 'data-test-subj': `mlAnalyticsCreation-${jobType}-option`, - }))} - value={type} - hasNoInitialSelection={true} - onChange={(e) => { - const value = e.target.value as AnalyticsJobType; - setFormState({ - previousJobType: type, - jobType: value, - includes: [], - requiredFieldsError: undefined, - }); - }} - data-test-subj="mlAnalyticsCreateJobWizardJobTypeSelect" - /> - - + <> + + {(Object.keys(jobDetails) as Array).map((jobType) => ( + + } + title={jobDetails[jobType].title} + description={jobDetails[jobType].helpText} + data-test-subj={`mlAnalyticsCreation-${jobType}-option${ + type === jobType ? ' selectedJobType' : '' + }`} + selectable={{ + onClick: () => { + // Only allow one job selected at a time and don't allow deselection + if (selectedCard[jobType] === true) { + return; + } + + setFormState({ + previousJobType: type, + jobType, + includes: [], + requiredFieldsError: undefined, + }); + setSelectedCard({ [jobType]: !selectedCard[jobType] }); + }, + isSelected: selectedCard[jobType] === true || type === jobType, + }} + /> + + ))} + + + ); }; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/exploration_query_bar/exploration_query_bar.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/exploration_query_bar/exploration_query_bar.tsx index 8ed732bf7da2b..c2f3e71e2e492 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/exploration_query_bar/exploration_query_bar.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/exploration_query_bar/exploration_query_bar.tsx @@ -6,10 +6,12 @@ import React, { Dispatch, FC, SetStateAction, useEffect, useState } from 'react'; -import { EuiCode, EuiInputPopover } from '@elastic/eui'; +import { EuiButtonGroup, EuiCode, EuiFlexGroup, EuiFlexItem, EuiInputPopover } from '@elastic/eui'; +import { EuiButtonGroupIdToSelectedMap } from '@elastic/eui/src/components/button/button_group/button_group'; import { i18n } from '@kbn/i18n'; +import { Dictionary } from '../../../../../../../common/types/common'; import { IIndexPattern } from '../../../../../../../../../../src/plugins/data/common/index_patterns'; import { esKuery, @@ -21,6 +23,7 @@ import { import { SEARCH_QUERY_LANGUAGE } from '../../../../../../../common/constants/search'; import { SavedSearchQuery } from '../../../../../contexts/ml'; +import { removeFilterFromQueryString } from '../../../../../explorer/explorer_utils'; interface ErrorMessage { query: string; @@ -32,6 +35,11 @@ interface ExplorationQueryBarProps { setSearchQuery: Dispatch>; includeQueryString?: boolean; defaultQueryString?: string; + filters?: { + options: Array<{ id: string; label: string }>; + columnId: string; + key: Dictionary; + }; } export const ExplorationQueryBar: FC = ({ @@ -39,12 +47,14 @@ export const ExplorationQueryBar: FC = ({ setSearchQuery, includeQueryString = false, defaultQueryString, + filters, }) => { // The internal state of the input query bar updated on every key stroke. const [searchInput, setSearchInput] = useState({ query: '', language: SEARCH_QUERY_LANGUAGE.KUERY, }); + const [idToSelectedMap, setIdToSelectedMap] = useState({}); const [errorMessage, setErrorMessage] = useState(undefined); @@ -55,7 +65,12 @@ export const ExplorationQueryBar: FC = ({ }, [defaultQueryString !== undefined]); const searchChangeHandler = (query: Query) => setSearchInput(query); - const searchSubmitHandler = (query: Query) => { + const searchSubmitHandler = (query: Query, filtering?: boolean) => { + // If moved to querying manually, clear filter selection. + if (filtering === undefined) { + setIdToSelectedMap({}); + } + try { switch (query.language) { case SEARCH_QUERY_LANGUAGE.KUERY: @@ -83,32 +98,93 @@ export const ExplorationQueryBar: FC = ({ } }; + const handleFilterUpdate = (optionId: string, currentIdToSelectedMap: any) => { + let newQuery = ''; + const filterValue = filters?.key[optionId]; + const filterQueryString = `${filters?.columnId}:${filterValue}`; + const regex = new RegExp(`${filters?.columnId}\s?:\s?(true|false)`, 'g'); + + // Toggling selected optionId to 'off' - remove column id query from filter + if (currentIdToSelectedMap[optionId] === false) { + newQuery = + searchInput.query !== '' + ? removeFilterFromQueryString( + searchInput.query as string, + filters?.columnId!, + String(filterValue) + ) + : ''; + } else if (currentIdToSelectedMap[optionId] === true) { + // Toggling selected optionId to 'on' + if (searchInput.query === '') { + newQuery = filterQueryString; + } else if (searchInput.query.match(regex) !== null) { + // If query already contains columnId filter - replace with incoming value from filter selection + newQuery = searchInput.query.replace(regex, filterQueryString); + } else { + // Otherwise just add filter query to the end of existing query + newQuery = `${searchInput.query} and ${filterQueryString}`; + } + } + // Add the filter query to the search input and setSearchQuery + const newSearchInput = { ...searchInput, query: newQuery }; + + setSearchInput(newSearchInput); + searchSubmitHandler(newSearchInput, true); + }; + return ( setErrorMessage(undefined)} input={ - + + + + + {filters && filters.options && ( + + { + const newIdToSelectedMap = { [optionId]: !idToSelectedMap[optionId] }; + setIdToSelectedMap(newIdToSelectedMap); + handleFilterUpdate(optionId, newIdToSelectedMap); + }} + /> + + )} + } isOpen={errorMessage?.query === searchInput.query && errorMessage?.message !== ''} > diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/exploration_results_table/exploration_results_table.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/exploration_results_table/exploration_results_table.tsx index ef014b07a937e..bd4079272c56e 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/exploration_results_table/exploration_results_table.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/exploration_results_table/exploration_results_table.tsx @@ -48,6 +48,25 @@ const showingFirstDocs = i18n.translate( } ); +const filters = { + options: [ + { + id: 'training', + label: i18n.translate('xpack.ml.dataframe.analytics.explorationResults.trainingSubsetLabel', { + defaultMessage: 'Training', + }), + }, + { + id: 'testing', + label: i18n.translate('xpack.ml.dataframe.analytics.explorationResults.testingSubsetLabel', { + defaultMessage: 'Testing', + }), + }, + ], + columnId: 'ml.is_training', + key: { training: true, testing: false }, +}; + interface Props { indexPattern: IndexPattern; jobConfig: DataFrameAnalyticsConfig; @@ -162,6 +181,7 @@ export const ExplorationResultsTable: FC = React.memo( indexPattern={indexPattern} setSearchQuery={setSearchQuery} defaultQueryString={defaultQueryString} + filters={filters} /> diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_clone/clone_action_name.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_clone/clone_action_name.tsx index ce24892c9de45..b4efca39e200c 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_clone/clone_action_name.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/action_clone/clone_action_name.tsx @@ -6,7 +6,7 @@ import { EuiToolTip } from '@elastic/eui'; import React, { FC } from 'react'; -import { isEqual, cloneDeep } from 'lodash'; +import { cloneDeep, isEqual } from 'lodash'; import { i18n } from '@kbn/i18n'; import { IIndexPattern } from 'src/plugins/data/common'; import { DeepReadonly } from '../../../../../../../common/types/common'; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/use_table_settings.ts b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/use_table_settings.ts index 71e503998ed47..c2018463fdf49 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/use_table_settings.ts +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/use_table_settings.ts @@ -6,12 +6,7 @@ import { useState } from 'react'; import { Direction, EuiBasicTableProps, EuiTableSortingType } from '@elastic/eui'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import sortBy from 'lodash/sortBy'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import get from 'lodash/get'; +import { sortBy, get } from 'lodash'; const PAGE_SIZE = 10; const PAGE_SIZE_OPTIONS = [10, 25, 50]; diff --git a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/combined_fields/geo_point.tsx b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/combined_fields/geo_point.tsx index 0f6ffe44cc9f8..78bf07435053d 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/combined_fields/geo_point.tsx +++ b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/combined_fields/geo_point.tsx @@ -5,9 +5,7 @@ */ import { i18n } from '@kbn/i18n'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import debounce from 'lodash/debounce'; +import { debounce } from 'lodash'; import { FormattedMessage } from '@kbn/i18n/react'; import React, { ChangeEvent, Component, Fragment } from 'react'; diff --git a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/combined_fields/utils.ts b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/combined_fields/utils.ts index 5e7de14f451c2..1cc513e778b2f 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/combined_fields/utils.ts +++ b/x-pack/plugins/ml/public/application/datavisualizer/file_based/components/combined_fields/utils.ts @@ -5,7 +5,7 @@ */ import { i18n } from '@kbn/i18n'; -import _ from 'lodash'; +import { cloneDeep } from 'lodash'; import uuid from 'uuid/v4'; import { CombinedField } from './types'; import { @@ -54,7 +54,7 @@ export function addCombinedFieldsToPipeline( pipeline: IngestPipeline, combinedFields: CombinedField[] ) { - const updatedPipeline = _.cloneDeep(pipeline); + const updatedPipeline = cloneDeep(pipeline); combinedFields.forEach((combinedField) => { updatedPipeline.processors.push({ set: { diff --git a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_charts_container_service.js b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_charts_container_service.js index 9ca1d935c6e1e..bf6b48fa18b47 100644 --- a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_charts_container_service.js +++ b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_charts_container_service.js @@ -11,24 +11,7 @@ * and manages the layout of the charts in the containing div. */ -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import get from 'lodash/get'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import each from 'lodash/each'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import find from 'lodash/find'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import sortBy from 'lodash/sortBy'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import map from 'lodash/map'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import reduce from 'lodash/reduce'; +import { get, each, find, sortBy, map, reduce } from 'lodash'; import { buildConfig } from './explorer_chart_config_builder'; import { chartLimits, getChartType } from '../../util/chart_utils'; diff --git a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_charts_container_service.test.js b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_charts_container_service.test.js index 8e9e8a03929c3..5e6901408422b 100644 --- a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_charts_container_service.test.js +++ b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_charts_container_service.test.js @@ -4,9 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import cloneDeep from 'lodash/cloneDeep'; +import { cloneDeep } from 'lodash'; import mockAnomalyChartRecords from './__mocks__/mock_anomaly_chart_records.json'; import mockDetectorsByJob from './__mocks__/mock_detectors_by_job.json'; diff --git a/x-pack/plugins/ml/public/application/explorer/explorer_swimlane.tsx b/x-pack/plugins/ml/public/application/explorer/explorer_swimlane.tsx index f464eaf362c3a..359dc11ca08d1 100644 --- a/x-pack/plugins/ml/public/application/explorer/explorer_swimlane.tsx +++ b/x-pack/plugins/ml/public/application/explorer/explorer_swimlane.tsx @@ -10,15 +10,7 @@ import React from 'react'; import './_explorer.scss'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import isEqual from 'lodash/isEqual'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import uniq from 'lodash/uniq'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import get from 'lodash/get'; +import { isEqual, uniq, get } from 'lodash'; import d3 from 'd3'; import moment from 'moment'; import DragSelect from 'dragselect'; diff --git a/x-pack/plugins/ml/public/application/explorer/explorer_utils.d.ts b/x-pack/plugins/ml/public/application/explorer/explorer_utils.d.ts index 81b5167cc00bd..94690b74a6f8f 100644 --- a/x-pack/plugins/ml/public/application/explorer/explorer_utils.d.ts +++ b/x-pack/plugins/ml/public/application/explorer/explorer_utils.d.ts @@ -190,3 +190,9 @@ export declare interface AppStateSelectedCells { showTopFieldValues?: boolean; viewByFieldName?: string; } + +export declare const removeFilterFromQueryString: ( + currentQueryString: string, + fieldName: string, + fieldValue: string +) => string; diff --git a/x-pack/plugins/ml/public/application/explorer/explorer_utils.js b/x-pack/plugins/ml/public/application/explorer/explorer_utils.js index 08830decc9449..c309e1f4ef8e8 100644 --- a/x-pack/plugins/ml/public/application/explorer/explorer_utils.js +++ b/x-pack/plugins/ml/public/application/explorer/explorer_utils.js @@ -8,7 +8,7 @@ * utils for Anomaly Explorer. */ -import { chain, get, union, uniq } from 'lodash'; +import { get, union, sortBy, uniq } from 'lodash'; import moment from 'moment-timezone'; import { @@ -279,17 +279,17 @@ export function getViewBySwimlaneOptions({ const selectedJobIds = selectedJobs.map((d) => d.id); // Unique influencers for the selected job(s). - const viewByOptions = chain( - mlJobService.jobs.reduce((reducedViewByOptions, job) => { - if (selectedJobIds.some((jobId) => jobId === job.job_id)) { - return reducedViewByOptions.concat(job.analysis_config.influencers || []); - } - return reducedViewByOptions; - }, []) - ) - .uniq() - .sortBy((fieldName) => fieldName.toLowerCase()) - .value(); + const viewByOptions = sortBy( + uniq( + mlJobService.jobs.reduce((reducedViewByOptions, job) => { + if (selectedJobIds.some((jobId) => jobId === job.job_id)) { + return reducedViewByOptions.concat(job.analysis_config.influencers || []); + } + return reducedViewByOptions; + }, []) + ), + (fieldName) => fieldName.toLowerCase() + ); viewByOptions.push(VIEW_BY_JOB_LABEL); let viewBySwimlaneOptions = viewByOptions; diff --git a/x-pack/plugins/ml/public/application/jobs/components/custom_url_editor/utils.js b/x-pack/plugins/ml/public/application/jobs/components/custom_url_editor/utils.js index 87c2219f4d441..a0e9c33e42dfa 100644 --- a/x-pack/plugins/ml/public/application/jobs/components/custom_url_editor/utils.js +++ b/x-pack/plugins/ml/public/application/jobs/components/custom_url_editor/utils.js @@ -296,11 +296,10 @@ export function getTestUrl(job, customUrl) { return new Promise((resolve, reject) => { ml.results .anomalySearch({ - rest_total_hits_as_int: true, body, }) .then((resp) => { - if (resp.hits.total > 0) { + if (resp.hits.total.value > 0) { const record = resp.hits.hits[0]._source; testUrl = replaceTokensInUrlValue(customUrl, bucketSpanSecs, record, 'timestamp'); resolve(testUrl); diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js index 558fe4c73c597..fb64d4767eac0 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list/jobs_list.js @@ -7,9 +7,7 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import sortBy from 'lodash/sortBy'; +import { sortBy } from 'lodash'; import moment from 'moment'; import { toLocaleString } from '../../../../util/string_utils'; diff --git a/x-pack/plugins/ml/public/application/management/index.ts b/x-pack/plugins/ml/public/application/management/index.ts index 72073dfd26a97..e633aef59297e 100644 --- a/x-pack/plugins/ml/public/application/management/index.ts +++ b/x-pack/plugins/ml/public/application/management/index.ts @@ -12,27 +12,25 @@ import { i18n } from '@kbn/i18n'; -import { CoreSetup } from 'kibana/public'; -import { ManagementSetup } from 'src/plugins/management/public'; -import { MlStartDependencies } from '../../plugin'; +import type { CoreSetup } from 'kibana/public'; +import type { ManagementSetup } from 'src/plugins/management/public'; +import type { MlStartDependencies } from '../../plugin'; -import { ManagementAppMountParams } from '../../../../../../src/plugins/management/public'; +import type { ManagementAppMountParams } from '../../../../../../src/plugins/management/public'; export function registerManagementSection( - management: ManagementSetup | undefined, + management: ManagementSetup, core: CoreSetup ) { - if (management !== undefined) { - return management.sections.section.insightsAndAlerting.registerApp({ - id: 'jobsListLink', - title: i18n.translate('xpack.ml.management.jobsListTitle', { - defaultMessage: 'Machine Learning Jobs', - }), - order: 2, - async mount(params: ManagementAppMountParams) { - const { mountApp } = await import('./jobs_list'); - return mountApp(core, params); - }, - }); - } + return management.sections.section.insightsAndAlerting.registerApp({ + id: 'jobsListLink', + title: i18n.translate('xpack.ml.management.jobsListTitle', { + defaultMessage: 'Machine Learning Jobs', + }), + order: 2, + async mount(params: ManagementAppMountParams) { + const { mountApp } = await import('./jobs_list'); + return mountApp(core, params); + }, + }); } diff --git a/x-pack/plugins/ml/public/application/overview/overview_page.tsx b/x-pack/plugins/ml/public/application/overview/overview_page.tsx index 9a852c491ee27..8219ba8731bd3 100644 --- a/x-pack/plugins/ml/public/application/overview/overview_page.tsx +++ b/x-pack/plugins/ml/public/application/overview/overview_page.tsx @@ -40,3 +40,7 @@ export const OverviewPage: FC = () => { ); }; + +// required for dynamic import using React.lazy() +// eslint-disable-next-line import/no-default-export +export default OverviewPage; diff --git a/x-pack/plugins/ml/public/application/routing/routes/overview.tsx b/x-pack/plugins/ml/public/application/routing/routes/overview.tsx index 0e07b0edfbe56..8ce51f4f5dea9 100644 --- a/x-pack/plugins/ml/public/application/routing/routes/overview.tsx +++ b/x-pack/plugins/ml/public/application/routing/routes/overview.tsx @@ -4,16 +4,15 @@ * you may not use this file except in compliance with the Elastic License. */ -import React, { FC } from 'react'; +import React, { FC, Suspense } from 'react'; import { i18n } from '@kbn/i18n'; import { Redirect } from 'react-router-dom'; -import { NavigateToPath } from '../../contexts/kibana'; +import type { NavigateToPath } from '../../contexts/kibana'; import { MlRoute, PageLoader, PageProps } from '../router'; import { useResolver } from '../use_resolver'; -import { OverviewPage } from '../../overview'; import { checkFullLicense } from '../../license'; import { checkGetJobsCapabilitiesResolver } from '../../capabilities/check_capabilities'; @@ -22,6 +21,8 @@ import { loadMlServerInfo } from '../../services/ml_server_info'; import { useTimefilter } from '../../contexts/kibana'; import { breadcrumbOnClickFactory, getBreadcrumbWithUrlForApp } from '../breadcrumbs'; +const OverviewPage = React.lazy(() => import('../../overview/overview_page')); + export const overviewRouteFactory = ( navigateToPath: NavigateToPath, basePath: string @@ -52,7 +53,10 @@ const PageWrapper: FC = ({ deps }) => { return ( - + {/* No fallback yet, we don't show a loading spinner on an outer level until context is available either. */} + + + ); }; diff --git a/x-pack/plugins/ml/public/application/services/forecast_service.js b/x-pack/plugins/ml/public/application/services/forecast_service.js index a99c82015df4d..36d676fe25b35 100644 --- a/x-pack/plugins/ml/public/application/services/forecast_service.js +++ b/x-pack/plugins/ml/public/application/services/forecast_service.js @@ -6,15 +6,7 @@ // Service for carrying out requests to run ML forecasts and to obtain // data on forecasts that have been performed. -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import get from 'lodash/get'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import find from 'lodash/find'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import each from 'lodash/each'; +import { get, find, each } from 'lodash'; import { map } from 'rxjs/operators'; import { ml } from './ml_api_service'; @@ -58,7 +50,6 @@ function getForecastsSummary(job, query, earliestMs, maxResults) { ml.results .anomalySearch({ size: maxResults, - rest_total_hits_as_int: true, body: { query: { bool: { @@ -69,7 +60,7 @@ function getForecastsSummary(job, query, earliestMs, maxResults) { }, }) .then((resp) => { - if (resp.hits.total !== 0) { + if (resp.hits.total.value > 0) { obj.forecasts = resp.hits.hits.map((hit) => hit._source); } @@ -352,7 +343,6 @@ function getForecastRequestStats(job, forecastId) { ml.results .anomalySearch({ size: 1, - rest_total_hits_as_int: true, body: { query: { bool: { @@ -362,7 +352,7 @@ function getForecastRequestStats(job, forecastId) { }, }) .then((resp) => { - if (resp.hits.total !== 0) { + if (resp.hits.total.value > 0) { obj.stats = resp.hits.hits[0]._source; } resolve(obj); diff --git a/x-pack/plugins/ml/public/application/services/job_service.js b/x-pack/plugins/ml/public/application/services/job_service.js index eef760fb5d017..939ad34e77a39 100644 --- a/x-pack/plugins/ml/public/application/services/job_service.js +++ b/x-pack/plugins/ml/public/application/services/job_service.js @@ -4,21 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import cloneDeep from 'lodash/cloneDeep'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import each from 'lodash/each'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import find from 'lodash/find'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import get from 'lodash/get'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import isNumber from 'lodash/isNumber'; +import { cloneDeep, each, find, get, isNumber } from 'lodash'; import moment from 'moment'; import { i18n } from '@kbn/i18n'; diff --git a/x-pack/plugins/ml/public/application/services/mapping_service.js b/x-pack/plugins/ml/public/application/services/mapping_service.js index 76ed494995477..b14456c4b229c 100644 --- a/x-pack/plugins/ml/public/application/services/mapping_service.js +++ b/x-pack/plugins/ml/public/application/services/mapping_service.js @@ -4,9 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import each from 'lodash/each'; +import { each } from 'lodash'; import { ml } from './ml_api_service'; diff --git a/x-pack/plugins/ml/public/application/services/results_service/result_service_rx.ts b/x-pack/plugins/ml/public/application/services/results_service/result_service_rx.ts index 8ba71ba948b15..e1c322910e237 100644 --- a/x-pack/plugins/ml/public/application/services/results_service/result_service_rx.ts +++ b/x-pack/plugins/ml/public/application/services/results_service/result_service_rx.ts @@ -13,12 +13,7 @@ // Returned response contains a results property containing the requested aggregation. import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import each from 'lodash/each'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import get from 'lodash/get'; +import { each, get } from 'lodash'; import { Dictionary } from '../../../../common/types/common'; import { ML_MEDIAN_PERCENTS } from '../../../../common/util/job_utils'; import { JobId } from '../../../../common/types/anomaly_detection_jobs'; @@ -407,7 +402,6 @@ export function resultsServiceRxProvider(mlApiServices: MlApiServices) { return mlApiServices.results .anomalySearch$({ index: ML_RESULTS_INDEX_PATTERN, - rest_total_hits_as_int: true, size: maxResults !== undefined ? maxResults : 100, body: { query: { @@ -432,7 +426,7 @@ export function resultsServiceRxProvider(mlApiServices: MlApiServices) { }) .pipe( map((resp) => { - if (resp.hits.total !== 0) { + if (resp.hits.total.value > 0) { each(resp.hits.hits, (hit: any) => { obj.records.push(hit._source); }); diff --git a/x-pack/plugins/ml/public/application/services/results_service/results_service.js b/x-pack/plugins/ml/public/application/services/results_service/results_service.js index fac1ee1480172..df993079c6771 100644 --- a/x-pack/plugins/ml/public/application/services/results_service/results_service.js +++ b/x-pack/plugins/ml/public/application/services/results_service/results_service.js @@ -4,12 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import each from 'lodash/each'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import get from 'lodash/get'; +import { each, get } from 'lodash'; import { ML_MEDIAN_PERCENTS } from '../../../../common/util/job_utils'; import { escapeForElasticsearchQuery } from '../../util/string_utils'; @@ -730,7 +725,6 @@ export function resultsServiceProvider(mlApiServices) { mlApiServices.results .anomalySearch({ size: maxResults !== undefined ? maxResults : 100, - rest_total_hits_as_int: true, body: { _source: ['job_id', 'detector_index', 'influencers', 'record_score'], query: { @@ -754,7 +748,7 @@ export function resultsServiceProvider(mlApiServices) { }, }) .then((resp) => { - if (resp.hits.total !== 0) { + if (resp.hits.total.value > 0) { each(resp.hits.hits, (hit) => { obj.records.push(hit._source); }); @@ -862,7 +856,6 @@ export function resultsServiceProvider(mlApiServices) { mlApiServices.results .anomalySearch({ size: maxResults !== undefined ? maxResults : 100, - rest_total_hits_as_int: true, body: { query: { bool: { @@ -885,7 +878,7 @@ export function resultsServiceProvider(mlApiServices) { }, }) .then((resp) => { - if (resp.hits.total !== 0) { + if (resp.hits.total.value > 0) { each(resp.hits.hits, (hit) => { obj.records.push(hit._source); }); @@ -987,7 +980,6 @@ export function resultsServiceProvider(mlApiServices) { mlApiServices.results .anomalySearch({ size: maxResults !== undefined ? maxResults : 100, - rest_total_hits_as_int: true, body: { query: { bool: { @@ -1010,7 +1002,7 @@ export function resultsServiceProvider(mlApiServices) { }, }) .then((resp) => { - if (resp.hits.total !== 0) { + if (resp.hits.total.value > 0) { each(resp.hits.hits, (hit) => { obj.records.push(hit._source); }); @@ -1063,7 +1055,6 @@ export function resultsServiceProvider(mlApiServices) { mlApiServices .esSearch({ index, - rest_total_hits_as_int: true, size: 0, body: { query: { @@ -1095,7 +1086,7 @@ export function resultsServiceProvider(mlApiServices) { const time = dataForTime.key; obj.results[time] = dataForTime.doc_count; }); - obj.total = resp.hits.total; + obj.total = resp.hits.total.value; resolve(obj); }) @@ -1232,13 +1223,13 @@ export function resultsServiceProvider(mlApiServices) { .esSearch({ index, body, - rest_total_hits_as_int: true, + track_total_hits: true, }) .then((resp) => { // Because of the sampling, results of metricFunctions which use sum or count // can be significantly skewed. Taking into account totalHits we calculate a // a factor to normalize results for these metricFunctions. - const totalHits = get(resp, ['hits', 'total'], 0); + const totalHits = resp.hits.total.value; const successfulShards = get(resp, ['_shards', 'successful'], 0); let normalizeFactor = 1; diff --git a/x-pack/plugins/ml/public/application/timeseriesexplorer/components/forecasting_modal/forecasting_modal.js b/x-pack/plugins/ml/public/application/timeseriesexplorer/components/forecasting_modal/forecasting_modal.js index 9f18eb1f4fed6..bf99320fdfd4a 100644 --- a/x-pack/plugins/ml/public/application/timeseriesexplorer/components/forecasting_modal/forecasting_modal.js +++ b/x-pack/plugins/ml/public/application/timeseriesexplorer/components/forecasting_modal/forecasting_modal.js @@ -9,9 +9,7 @@ */ import PropTypes from 'prop-types'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import get from 'lodash/get'; +import { get } from 'lodash'; import React, { Component } from 'react'; diff --git a/x-pack/plugins/ml/public/application/timeseriesexplorer/components/timeseries_chart/timeseries_chart.js b/x-pack/plugins/ml/public/application/timeseriesexplorer/components/timeseries_chart/timeseries_chart.js index 78583fc4872b2..1d166b7be9bc1 100644 --- a/x-pack/plugins/ml/public/application/timeseriesexplorer/components/timeseries_chart/timeseries_chart.js +++ b/x-pack/plugins/ml/public/application/timeseriesexplorer/components/timeseries_chart/timeseries_chart.js @@ -12,18 +12,7 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; import useObservable from 'react-use/lib/useObservable'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import isEqual from 'lodash/isEqual'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import reduce from 'lodash/reduce'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import each from 'lodash/each'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import get from 'lodash/get'; +import { isEqual, reduce, each, get } from 'lodash'; import d3 from 'd3'; import moment from 'moment'; import { i18n } from '@kbn/i18n'; diff --git a/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseries_search_service.ts b/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseries_search_service.ts index b8f5f08822766..e43ba8c87083a 100644 --- a/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseries_search_service.ts +++ b/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseries_search_service.ts @@ -4,18 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import each from 'lodash/each'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import find from 'lodash/find'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import get from 'lodash/get'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import filter from 'lodash/filter'; +import { each, find, get, filter } from 'lodash'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; @@ -29,7 +18,7 @@ import { buildConfigFromDetector } from '../util/chart_config_builder'; import { mlResultsService } from '../services/results_service'; import { ModelPlotOutput } from '../services/results_service/result_service_rx'; import { Job } from '../../../common/types/anomaly_detection_jobs'; -import { EntityField } from '../..'; +import { EntityField } from '../../../common/util/anomaly_utils'; function getMetricData( job: Job, diff --git a/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer_utils/timeseriesexplorer_utils.js b/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer_utils/timeseriesexplorer_utils.js index c8c1c98e758b8..d24794382128d 100644 --- a/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer_utils/timeseriesexplorer_utils.js +++ b/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer_utils/timeseriesexplorer_utils.js @@ -10,15 +10,7 @@ * Viewer dashboard. */ -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import each from 'lodash/each'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import get from 'lodash/get'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import find from 'lodash/find'; +import { each, get, find } from 'lodash'; import moment from 'moment-timezone'; import { isTimeSeriesViewJob } from '../../../../common/util/job_utils'; diff --git a/x-pack/plugins/ml/public/application/util/chart_config_builder.js b/x-pack/plugins/ml/public/application/util/chart_config_builder.js index 0c4aa4f717dbe..62e64b3d4092e 100644 --- a/x-pack/plugins/ml/public/application/util/chart_config_builder.js +++ b/x-pack/plugins/ml/public/application/util/chart_config_builder.js @@ -9,9 +9,7 @@ * in the source metric data. */ -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import get from 'lodash/get'; +import { get } from 'lodash'; import { mlFunctionToESAggregation } from '../../../common/util/job_utils'; diff --git a/x-pack/plugins/ml/public/application/util/dependency_cache.ts b/x-pack/plugins/ml/public/application/util/dependency_cache.ts index 2586dfe45345e..341f3a877dd86 100644 --- a/x-pack/plugins/ml/public/application/util/dependency_cache.ts +++ b/x-pack/plugins/ml/public/application/util/dependency_cache.ts @@ -4,25 +4,23 @@ * you may not use this file except in compliance with the Elastic License. */ -import { DataPublicPluginSetup } from 'src/plugins/data/public'; -import { +import type { DataPublicPluginSetup } from 'src/plugins/data/public'; +import type { IUiSettingsClient, ChromeStart, SavedObjectsClientContract, ApplicationStart, HttpStart, I18nStart, -} from 'kibana/public'; -import { IndexPatternsContract, DataPublicPluginStart } from 'src/plugins/data/public'; -import { DocLinksStart, ToastsStart, OverlayStart, ChromeRecentlyAccessed, IBasePath, } from 'kibana/public'; -import { SharePluginStart } from 'src/plugins/share/public'; -import { SecurityPluginSetup } from '../../../../security/public'; +import type { IndexPatternsContract, DataPublicPluginStart } from 'src/plugins/data/public'; +import type { SharePluginStart } from 'src/plugins/share/public'; +import type { SecurityPluginSetup } from '../../../../security/public'; export interface DependencyCache { timefilter: DataPublicPluginSetup['query']['timefilter'] | null; diff --git a/x-pack/plugins/ml/public/application/util/time_buckets.js b/x-pack/plugins/ml/public/application/util/time_buckets.js index f859b465f5de1..bfc7c8c84001a 100644 --- a/x-pack/plugins/ml/public/application/util/time_buckets.js +++ b/x-pack/plugins/ml/public/application/util/time_buckets.js @@ -4,21 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import isPlainObject from 'lodash/isPlainObject'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import isString from 'lodash/isString'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import ary from 'lodash/ary'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import sortBy from 'lodash/sortBy'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import assign from 'lodash/assign'; +import { isPlainObject, isString, ary, sortBy, assign } from 'lodash'; import moment from 'moment'; import dateMath from '@elastic/datemath'; diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable.tsx index e837cabf0b494..6e67ff1aef03d 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable.tsx @@ -4,15 +4,15 @@ * you may not use this file except in compliance with the Elastic License. */ -import React from 'react'; +import React, { Suspense } from 'react'; import ReactDOM from 'react-dom'; import { CoreStart } from 'kibana/public'; import { i18n } from '@kbn/i18n'; import { Subject } from 'rxjs'; import { Embeddable, IContainer } from '../../../../../../src/plugins/embeddable/public'; -import { EmbeddableSwimLaneContainer } from './embeddable_swim_lane_container'; -import { JobId } from '../../../common/types/anomaly_detection_jobs'; -import { MlDependencies } from '../../application/app'; +import { EmbeddableSwimLaneContainer } from './embeddable_swim_lane_container_lazy'; +import type { JobId } from '../../../common/types/anomaly_detection_jobs'; +import type { MlDependencies } from '../../application/app'; import { SWIM_LANE_SELECTION_TRIGGER } from '../../ui_actions'; import { ANOMALY_SWIMLANE_EMBEDDABLE_TYPE, @@ -59,15 +59,17 @@ export class AnomalySwimlaneEmbeddable extends Embeddable< ReactDOM.render( - + + + , node ); diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.ts b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.ts index 9d2fd07e11be5..8a977ed5820c1 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.ts +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.ts @@ -6,15 +6,15 @@ import { i18n } from '@kbn/i18n'; -import { StartServicesAccessor } from 'kibana/public'; +import type { StartServicesAccessor } from 'kibana/public'; -import { +import type { EmbeddableFactoryDefinition, IContainer, } from '../../../../../../src/plugins/embeddable/public'; import { HttpService } from '../../application/services/http_service'; -import { MlPluginStart, MlStartDependencies } from '../../plugin'; -import { MlDependencies } from '../../application/app'; +import type { MlPluginStart, MlStartDependencies } from '../../plugin'; +import type { MlDependencies } from '../../application/app'; import { ANOMALY_SWIMLANE_EMBEDDABLE_TYPE, AnomalySwimlaneEmbeddableInput, diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/embeddable_swim_lane_container.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/embeddable_swim_lane_container.tsx index 60681446ac7aa..0291fa1564a2d 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/embeddable_swim_lane_container.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/embeddable_swim_lane_container.tsx @@ -145,3 +145,7 @@ export const EmbeddableSwimLaneContainer: FC = (
); }; + +// required for dynamic import using React.lazy() +// eslint-disable-next-line import/no-default-export +export default EmbeddableSwimLaneContainer; diff --git a/x-pack/plugins/canvas/scripts/storybook_new.js b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/embeddable_swim_lane_container_lazy.tsx similarity index 56% rename from x-pack/plugins/canvas/scripts/storybook_new.js rename to x-pack/plugins/ml/public/embeddables/anomaly_swimlane/embeddable_swim_lane_container_lazy.tsx index 4871898b73a45..faeb9cbb3c8f2 100644 --- a/x-pack/plugins/canvas/scripts/storybook_new.js +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/embeddable_swim_lane_container_lazy.tsx @@ -4,10 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ -import { join } from 'path'; +import React from 'react'; -// eslint-disable-next-line -require('@kbn/storybook').runStorybookCli({ - name: 'canvas', - storyGlobs: [join(__dirname, '..', '**', '*.stories.tsx')], -}); +export const EmbeddableSwimLaneContainer = React.lazy( + () => import('./embeddable_swim_lane_container') +); diff --git a/x-pack/plugins/ml/public/embeddables/index.ts b/x-pack/plugins/ml/public/embeddables/index.ts index cc4bec0b67836..06cb5afa71cff 100644 --- a/x-pack/plugins/ml/public/embeddables/index.ts +++ b/x-pack/plugins/ml/public/embeddables/index.ts @@ -5,8 +5,8 @@ */ import { AnomalySwimlaneEmbeddableFactory } from './anomaly_swimlane'; -import { MlCoreSetup } from '../plugin'; -import { EmbeddableSetup } from '../../../../../src/plugins/embeddable/public'; +import type { MlCoreSetup } from '../plugin'; +import type { EmbeddableSetup } from '../../../../../src/plugins/embeddable/public'; export * from './constants'; export * from './types'; diff --git a/x-pack/plugins/ml/public/embeddables/types.ts b/x-pack/plugins/ml/public/embeddables/types.ts index 93ec79d9b8310..b2979e44d0927 100644 --- a/x-pack/plugins/ml/public/embeddables/types.ts +++ b/x-pack/plugins/ml/public/embeddables/types.ts @@ -4,20 +4,24 @@ * you may not use this file except in compliance with the Elastic License. */ -import { CoreStart } from 'kibana/public'; -import { JobId } from '../../common/types/anomaly_detection_jobs'; -import { SwimlaneType } from '../application/explorer/explorer_constants'; -import { Filter } from '../../../../../src/plugins/data/common/es_query/filters'; -import { Query, RefreshInterval, TimeRange } from '../../../../../src/plugins/data/common/query'; -import { +import type { CoreStart } from 'kibana/public'; +import type { JobId } from '../../common/types/anomaly_detection_jobs'; +import type { SwimlaneType } from '../application/explorer/explorer_constants'; +import type { Filter } from '../../../../../src/plugins/data/common/es_query/filters'; +import type { + Query, + RefreshInterval, + TimeRange, +} from '../../../../../src/plugins/data/common/query'; +import type { EmbeddableInput, EmbeddableOutput, IEmbeddable, } from '../../../../../src/plugins/embeddable/public'; -import { AnomalyDetectorService } from '../application/services/anomaly_detector_service'; -import { AnomalyTimelineService } from '../application/services/anomaly_timeline_service'; -import { MlDependencies } from '../application/app'; -import { AppStateSelectedCells } from '../application/explorer/explorer_utils'; +import type { AnomalyDetectorService } from '../application/services/anomaly_detector_service'; +import type { AnomalyTimelineService } from '../application/services/anomaly_timeline_service'; +import type { MlDependencies } from '../application/app'; +import type { AppStateSelectedCells } from '../application/explorer/explorer_utils'; export interface AnomalySwimlaneEmbeddableCustomInput { jobIds: JobId[]; diff --git a/x-pack/plugins/ml/public/index.ts b/x-pack/plugins/ml/public/index.ts index 80308977735d2..c43df1e1a3d2c 100755 --- a/x-pack/plugins/ml/public/index.ts +++ b/x-pack/plugins/ml/public/index.ts @@ -4,6 +4,10 @@ * you may not use this file except in compliance with the Elastic License. */ +// Be careful adding exports to this file, it may increase the bundle size of +// the ML plugin's page load bundle. You should either just export types or +// use `getMlSharedImports()` to export static code. + import { PluginInitializer, PluginInitializerContext } from 'kibana/public'; import { MlPlugin, @@ -20,5 +24,29 @@ export const plugin: PluginInitializer< MlStartDependencies > = (initializerContext: PluginInitializerContext) => new MlPlugin(initializerContext); -export { MlPluginSetup, MlPluginStart }; -export * from './shared'; +export type { MlPluginSetup, MlPluginStart }; +export type { + AnomaliesTableRecord, + DataRecognizerConfigResponse, + Influencer, + JobExistResult, + JobStat, + MlCapabilitiesResponse, + MlSummaryJob, + UseIndexDataReturnType, + EsSorting, + RenderCellValue, +} from './shared'; + +// Static exports +export { getSeverityColor, getSeverityType } from '../common/util/anomaly_utils'; +export { ANOMALY_SEVERITY } from '../common'; + +// Bundled shared exports +// Exported this way so the code doesn't end up in ML's page load bundle +export const getMlSharedImports = async () => { + return await import('./shared'); +}; +// Helper to get Type returned by getMlSharedImports. +type AwaitReturnType = T extends PromiseLike ? U : T; +export type GetMlSharedImportsReturnType = AwaitReturnType>; diff --git a/x-pack/plugins/ml/public/ml_url_generator/anomaly_detection_urls_generator.ts b/x-pack/plugins/ml/public/ml_url_generator/anomaly_detection_urls_generator.ts index 97ee083bedaa6..9a900c456d516 100644 --- a/x-pack/plugins/ml/public/ml_url_generator/anomaly_detection_urls_generator.ts +++ b/x-pack/plugins/ml/public/ml_url_generator/anomaly_detection_urls_generator.ts @@ -4,10 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import isEmpty from 'lodash/isEmpty'; -import { +import { isEmpty } from 'lodash'; +import type { AnomalyDetectionQueryState, AnomalyDetectionUrlState, ExplorerAppState, diff --git a/x-pack/plugins/ml/public/ml_url_generator/common.ts b/x-pack/plugins/ml/public/ml_url_generator/common.ts index 59dddeed29888..a03497092d3b3 100644 --- a/x-pack/plugins/ml/public/ml_url_generator/common.ts +++ b/x-pack/plugins/ml/public/ml_url_generator/common.ts @@ -4,9 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import isEmpty from 'lodash/isEmpty'; +import { isEmpty } from 'lodash'; import { MlGenericUrlState } from '../../common/types/ml_url_generator'; import { setStateToKbnUrl } from '../../../../../src/plugins/kibana_utils/public'; diff --git a/x-pack/plugins/ml/public/ml_url_generator/ml_url_generator.ts b/x-pack/plugins/ml/public/ml_url_generator/ml_url_generator.ts index abec5cc2b7d1e..704135f5546b1 100644 --- a/x-pack/plugins/ml/public/ml_url_generator/ml_url_generator.ts +++ b/x-pack/plugins/ml/public/ml_url_generator/ml_url_generator.ts @@ -4,15 +4,15 @@ * you may not use this file except in compliance with the Elastic License. */ -import { CoreSetup } from 'kibana/public'; -import { +import type { CoreSetup } from 'kibana/public'; +import type { SharePluginSetup, UrlGeneratorsDefinition, UrlGeneratorState, } from '../../../../../src/plugins/share/public'; -import { MlStartDependencies } from '../plugin'; +import type { MlStartDependencies } from '../plugin'; import { ML_PAGES, ML_APP_URL_GENERATOR } from '../../common/constants/ml_url_generator'; -import { MlUrlGeneratorState } from '../../common/types/ml_url_generator'; +import type { MlUrlGeneratorState } from '../../common/types/ml_url_generator'; import { createAnomalyDetectionJobManagementUrl, createAnomalyDetectionCreateJobSelectType, diff --git a/x-pack/plugins/ml/public/plugin.ts b/x-pack/plugins/ml/public/plugin.ts index 8feef489fdde1..034ed090e2212 100644 --- a/x-pack/plugins/ml/public/plugin.ts +++ b/x-pack/plugins/ml/public/plugin.ts @@ -5,7 +5,7 @@ */ import { i18n } from '@kbn/i18n'; -import { +import type { AppMountParameters, CoreSetup, CoreStart, @@ -14,29 +14,26 @@ import { } from 'kibana/public'; import { BehaviorSubject } from 'rxjs'; import { take } from 'rxjs/operators'; -import { ManagementSetup } from 'src/plugins/management/public'; -import { SharePluginSetup, SharePluginStart } from 'src/plugins/share/public'; -import { UsageCollectionSetup } from 'src/plugins/usage_collection/server'; - -import { DataPublicPluginStart } from 'src/plugins/data/public'; -import { HomePublicPluginSetup } from 'src/plugins/home/public'; -import { IndexPatternManagementSetup } from 'src/plugins/index_pattern_management/public'; -import { EmbeddableSetup } from 'src/plugins/embeddable/public'; + +import type { ManagementSetup } from 'src/plugins/management/public'; +import type { SharePluginSetup, SharePluginStart } from 'src/plugins/share/public'; +import type { UsageCollectionSetup } from 'src/plugins/usage_collection/server'; +import type { DataPublicPluginStart } from 'src/plugins/data/public'; +import type { HomePublicPluginSetup } from 'src/plugins/home/public'; +import type { IndexPatternManagementSetup } from 'src/plugins/index_pattern_management/public'; +import type { EmbeddableSetup } from 'src/plugins/embeddable/public'; + import { AppStatus, AppUpdater, DEFAULT_APP_CATEGORIES } from '../../../../src/core/public'; -import { MlCardState } from '../../../../src/plugins/index_pattern_management/public'; -import { SecurityPluginSetup } from '../../security/public'; -import { LicensingPluginSetup } from '../../licensing/public'; -import { registerManagementSection } from './application/management'; -import { LicenseManagementUIPluginSetup } from '../../license_management/public'; -import { setDependencyCache } from './application/util/dependency_cache'; +import type { UiActionsSetup, UiActionsStart } from '../../../../src/plugins/ui_actions/public'; +import type { KibanaLegacyStart } from '../../../../src/plugins/kibana_legacy/public'; + +import type { LicenseManagementUIPluginSetup } from '../../license_management/public'; +import type { LicensingPluginSetup } from '../../licensing/public'; +import type { SecurityPluginSetup } from '../../security/public'; + import { PLUGIN_ICON_SOLUTION, PLUGIN_ID } from '../common/constants/app'; -import { registerFeature } from './register_feature'; -import { UiActionsSetup, UiActionsStart } from '../../../../src/plugins/ui_actions/public'; -import { registerMlUiActions } from './ui_actions'; -import { KibanaLegacyStart } from '../../../../src/plugins/kibana_legacy/public'; -import { registerUrlGenerator } from './ml_url_generator'; -import { isFullLicense, isMlEnabled } from '../common/license'; -import { registerEmbeddables } from './embeddables'; + +import { setDependencyCache } from './application/util/dependency_cache'; export interface MlStartDependencies { data: DataPublicPluginStart; @@ -101,12 +98,21 @@ export class MlPlugin implements Plugin { }, }); - const managementApp = registerManagementSection(pluginsSetup.management, core); - const licensing = pluginsSetup.licensing.license$.pipe(take(1)); licensing.subscribe(async (license) => { const [coreStart] = await core.getStartServices(); + const { + isFullLicense, + isMlEnabled, + registerEmbeddables, + registerFeature, + registerManagementSection, + registerMlUiActions, + registerUrlGenerator, + MlCardState, + } = await import('./register_helper'); + if (isMlEnabled(license)) { // add ML to home page if (pluginsSetup.home) { @@ -129,22 +135,17 @@ export class MlPlugin implements Plugin { // register various ML plugin features which require a full license if (isFullLicense(license)) { - if (canManageMLJobs && managementApp) { - managementApp.enable(); + if (canManageMLJobs && pluginsSetup.management !== undefined) { + registerManagementSection(pluginsSetup.management, core).enable(); } registerEmbeddables(pluginsSetup.embeddable, core); registerMlUiActions(pluginsSetup.uiActions, core); - } else if (managementApp) { - managementApp.disable(); } } else { // if ml is disabled in elasticsearch, disable ML in kibana this.appUpdater.next(() => ({ status: AppStatus.inaccessible, })); - if (managementApp) { - managementApp.disable(); - } } }); diff --git a/x-pack/plugins/ml/public/register_helper.ts b/x-pack/plugins/ml/public/register_helper.ts new file mode 100644 index 0000000000000..97574e296d1eb --- /dev/null +++ b/x-pack/plugins/ml/public/register_helper.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +export { MlCardState } from '../../../../src/plugins/index_pattern_management/public'; + +export { isFullLicense, isMlEnabled } from '../common/license'; + +export { registerEmbeddables } from './embeddables'; +export { registerFeature } from './register_feature'; +export { registerManagementSection } from './application/management'; +export { registerMlUiActions } from './ui_actions'; +export { registerUrlGenerator } from './ml_url_generator'; diff --git a/x-pack/plugins/ml/server/index.ts b/x-pack/plugins/ml/server/index.ts index 4c27854ec719b..af77468fa57d7 100644 --- a/x-pack/plugins/ml/server/index.ts +++ b/x-pack/plugins/ml/server/index.ts @@ -6,7 +6,7 @@ import { PluginInitializerContext } from 'kibana/server'; import { MlServerPlugin } from './plugin'; -export { MlPluginSetup, MlPluginStart } from './plugin'; +export type { MlPluginSetup, MlPluginStart } from './plugin'; export * from './shared'; export const plugin = (ctx: PluginInitializerContext) => new MlServerPlugin(ctx); diff --git a/x-pack/plugins/ml/server/lib/telemetry/telemetry.ts b/x-pack/plugins/ml/server/lib/telemetry/telemetry.ts index d9ebccd554733..06577d6937101 100644 --- a/x-pack/plugins/ml/server/lib/telemetry/telemetry.ts +++ b/x-pack/plugins/ml/server/lib/telemetry/telemetry.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import isEmpty from 'lodash/isEmpty'; +import { isEmpty } from 'lodash'; import { ISavedObjectsRepository } from 'kibana/server'; import { getInternalRepository } from './internal_repository'; diff --git a/x-pack/plugins/ml/server/models/annotation_service/annotation.ts b/x-pack/plugins/ml/server/models/annotation_service/annotation.ts index 24f1d6951c940..d45532e956f42 100644 --- a/x-pack/plugins/ml/server/models/annotation_service/annotation.ts +++ b/x-pack/plugins/ml/server/models/annotation_service/annotation.ts @@ -5,8 +5,7 @@ */ import Boom from 'boom'; -import each from 'lodash/each'; -import get from 'lodash/get'; +import { each, get } from 'lodash'; import { IScopedClusterClient } from 'kibana/server'; import { ANNOTATION_EVENT_USER, ANNOTATION_TYPE } from '../../../common/constants/annotations'; diff --git a/x-pack/plugins/ml/server/models/bucket_span_estimator/bucket_span_estimator.js b/x-pack/plugins/ml/server/models/bucket_span_estimator/bucket_span_estimator.js index 1d59db8fa564f..3edc675c06c0e 100644 --- a/x-pack/plugins/ml/server/models/bucket_span_estimator/bucket_span_estimator.js +++ b/x-pack/plugins/ml/server/models/bucket_span_estimator/bucket_span_estimator.js @@ -4,11 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import cloneDeep from 'lodash/cloneDeep'; -import each from 'lodash/each'; -import remove from 'lodash/remove'; -import sortBy from 'lodash/sortBy'; -import get from 'lodash/get'; +import { cloneDeep, each, remove, sortBy, get } from 'lodash'; import { mlLog } from '../../client/log'; diff --git a/x-pack/plugins/ml/server/models/bucket_span_estimator/polled_data_checker.js b/x-pack/plugins/ml/server/models/bucket_span_estimator/polled_data_checker.js index 981ffe9618d9f..5ff71b61bec54 100644 --- a/x-pack/plugins/ml/server/models/bucket_span_estimator/polled_data_checker.js +++ b/x-pack/plugins/ml/server/models/bucket_span_estimator/polled_data_checker.js @@ -10,7 +10,7 @@ * And a minimum bucket span */ -import get from 'lodash/get'; +import { get } from 'lodash'; export function polledDataCheckerFactory({ asCurrentUser }) { class PolledDataChecker { diff --git a/x-pack/plugins/ml/server/models/data_frame_analytics/analytics_audit_messages.ts b/x-pack/plugins/ml/server/models/data_frame_analytics/analytics_audit_messages.ts index 0f4cac37d2e8f..ae42469cc1af2 100644 --- a/x-pack/plugins/ml/server/models/data_frame_analytics/analytics_audit_messages.ts +++ b/x-pack/plugins/ml/server/models/data_frame_analytics/analytics_audit_messages.ts @@ -71,7 +71,6 @@ export function analyticsAuditMessagesProvider({ asInternalUser }: IScopedCluste const { body } = await asInternalUser.search({ index: ML_NOTIFICATION_INDEX_PATTERN, ignore_unavailable: true, - rest_total_hits_as_int: true, size: SIZE, body: { sort: [{ timestamp: { order: 'desc' } }, { job_id: { order: 'asc' } }], @@ -80,7 +79,7 @@ export function analyticsAuditMessagesProvider({ asInternalUser }: IScopedCluste }); let messages = []; - if (body.hits.total !== 0) { + if (body.hits.total.value > 0) { messages = body.hits.hits.map((hit: Message) => hit._source); messages.reverse(); } diff --git a/x-pack/plugins/ml/server/models/data_recognizer/data_recognizer.ts b/x-pack/plugins/ml/server/models/data_recognizer/data_recognizer.ts index 820fcfa9253b6..96be6db03c52b 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/data_recognizer.ts +++ b/x-pack/plugins/ml/server/models/data_recognizer/data_recognizer.ts @@ -17,7 +17,7 @@ import { MlInfoResponse } from '../../../common/types/ml_server_info'; import { KibanaObjects, KibanaObjectConfig, - ModuleDataFeed, + ModuleDatafeed, ModuleJob, Module, JobOverride, @@ -248,12 +248,11 @@ export class DataRecognizer { const { body } = await this._asCurrentUser.search({ index, - rest_total_hits_as_int: true, size, body: searchBody, }); - return body.hits.total !== 0; + return body.hits.total.value > 0; } async listModules() { @@ -284,7 +283,7 @@ export class DataRecognizer { } const jobs: ModuleJob[] = []; - const datafeeds: ModuleDataFeed[] = []; + const datafeeds: ModuleDatafeed[] = []; const kibana: KibanaObjects = {}; // load all of the job configs await Promise.all( @@ -711,7 +710,7 @@ export class DataRecognizer { // save the datafeeds. // if any fail (e.g. it already exists), catch the error and mark the result // as success: false - async saveDatafeeds(datafeeds: ModuleDataFeed[]) { + async saveDatafeeds(datafeeds: ModuleDatafeed[]) { return await Promise.all( datafeeds.map(async (datafeed) => { try { @@ -724,7 +723,7 @@ export class DataRecognizer { ); } - async saveDatafeed(datafeed: ModuleDataFeed) { + async saveDatafeed(datafeed: ModuleDatafeed) { return this._asInternalUser.ml.putDatafeed( { datafeed_id: datafeed.id, @@ -735,7 +734,7 @@ export class DataRecognizer { } async startDatafeeds( - datafeeds: ModuleDataFeed[], + datafeeds: ModuleDatafeed[], start?: number, end?: number ): Promise<{ [key: string]: DatafeedResponse }> { @@ -747,7 +746,7 @@ export class DataRecognizer { } async startDatafeed( - datafeed: ModuleDataFeed, + datafeed: ModuleDatafeed, start: number | undefined, end: number | undefined ): Promise { @@ -1230,6 +1229,25 @@ export class DataRecognizer { const overrides = Array.isArray(datafeedOverrides) ? datafeedOverrides : [datafeedOverrides]; const { datafeeds } = moduleConfig; + // for some items in the datafeed, we should not merge. + // we should instead use the whole override object + function overwriteObjects(source: ModuleDatafeed['config'], update: DatafeedOverride) { + Object.entries(update).forEach(([key, val]) => { + if (typeof val === 'object') { + switch (key) { + case 'query': + case 'aggregations': + case 'aggs': + case 'script_fields': + source[key] = val as any; + break; + default: + break; + } + } + }); + } + // separate all the overrides. // the overrides which don't contain a datafeed id or a job id will be applied to all jobs in the module const generalOverrides: GeneralDatafeedsOverride[] = []; @@ -1245,6 +1263,7 @@ export class DataRecognizer { generalOverrides.forEach((o) => { datafeeds.forEach(({ config }) => { merge(config, o); + overwriteObjects(config, o); }); }); @@ -1260,6 +1279,7 @@ export class DataRecognizer { delete o.job_id; delete o.datafeed_id; merge(datafeed.config, o); + overwriteObjects(datafeed.config, o); } }); } diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/logs_ui_categories/ml/log_entry_categories_count.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/logs_ui_categories/ml/log_entry_categories_count.json index 40c47352371d4..ad7da3330bb6c 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/logs_ui_categories/ml/log_entry_categories_count.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/logs_ui_categories/ml/log_entry_categories_count.json @@ -1,7 +1,9 @@ { "job_type": "anomaly_detector", "description": "Logs UI: Detects anomalies in count of log entries by category", - "groups": ["logs-ui"], + "groups": [ + "logs-ui" + ], "analysis_config": { "bucket_span": "15m", "categorization_field_name": "message", @@ -14,7 +16,10 @@ "use_null": true } ], - "influencers": ["event.dataset", "mlcategory"], + "influencers": [ + "event.dataset", + "mlcategory" + ], "per_partition_categorization": { "enabled": true, "stop_on_warn": false diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/logo.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/logo.json index 04cfe48b16366..4b3e7343d6c0b 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/logo.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/logo.json @@ -1,3 +1,3 @@ { - "icon": "metricbeatApp" + "icon": "metricbeatApp" } diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/manifest.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/manifest.json index 499896ced7deb..6482fab429ecb 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/manifest.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/manifest.json @@ -8,7 +8,12 @@ "query": { "bool": { "filter": { - "terms" : { "event.dataset" : ["system.cpu", "system.filesystem"]} + "terms": { + "event.dataset": [ + "system.cpu", + "system.filesystem" + ] + } } } }, diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/datafeed_high_mean_cpu_iowait_ecs.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/datafeed_high_mean_cpu_iowait_ecs.json index fe87160142cff..b418f86296420 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/datafeed_high_mean_cpu_iowait_ecs.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/datafeed_high_mean_cpu_iowait_ecs.json @@ -6,10 +6,14 @@ "query": { "bool": { "filter": { - "term": { "event.dataset": "system.cpu" } + "term": { + "event.dataset": "system.cpu" + } }, "must": { - "exists": { "field": "system.cpu.iowait.pct" } + "exists": { + "field": "system.cpu.iowait.pct" + } } } } diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/datafeed_max_disk_utilization_ecs.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/datafeed_max_disk_utilization_ecs.json index 6ccbfe94c220c..94a89f3dd0078 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/datafeed_max_disk_utilization_ecs.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/datafeed_max_disk_utilization_ecs.json @@ -1,16 +1,20 @@ { - "job_id": "JOB_ID", - "indices": [ - "INDEX_PATTERN_NAME" - ], - "query": { - "bool": { - "filter": { - "term": { "event.dataset": "system.filesystem" } - }, - "must": { - "exists": { "field": "system.filesystem.used.pct" } + "job_id": "JOB_ID", + "indices": [ + "INDEX_PATTERN_NAME" + ], + "query": { + "bool": { + "filter": { + "term": { + "event.dataset": "system.filesystem" + } + }, + "must": { + "exists": { + "field": "system.filesystem.used.pct" } } } } +} diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/datafeed_metricbeat_outages_ecs.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/datafeed_metricbeat_outages_ecs.json index d6f33127dfc08..d257068182826 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/datafeed_metricbeat_outages_ecs.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/datafeed_metricbeat_outages_ecs.json @@ -1,13 +1,15 @@ { - "job_id": "JOB_ID", - "indices": [ - "INDEX_PATTERN_NAME" - ], - "query": { - "bool": { - "must": { - "exists": { "field": "event.dataset" } + "job_id": "JOB_ID", + "indices": [ + "INDEX_PATTERN_NAME" + ], + "query": { + "bool": { + "must": { + "exists": { + "field": "event.dataset" } } } } +} diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/high_mean_cpu_iowait_ecs.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/high_mean_cpu_iowait_ecs.json index b50338070d5cb..d6218acfae84f 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/high_mean_cpu_iowait_ecs.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/high_mean_cpu_iowait_ecs.json @@ -1,54 +1,56 @@ { - "job_type": "anomaly_detector", - "description": "Metricbeat CPU: Detect unusual increases in cpu time spent in iowait (ECS)", - "groups": ["metricbeat"], - "analysis_config": { - "bucket_span": "10m", - "detectors": [ - { - "detector_description": "high mean system.cpu.iowait.pct", - "function": "high_mean", - "field_name": "system.cpu.iowait.pct", - "partition_field_name": "host.name", - "custom_rules": [ - { - "actions": [ - "skip_result" - ], - "conditions": [ - { - "applies_to": "actual", - "operator": "lt", - "value": 0.25 - } - ] - } - ] - } - ], - "influencers": [ - "host.name" - ] - }, - "analysis_limits": { - "model_memory_limit": "25mb" - }, - "data_description": { - "time_field": "@timestamp", - "time_format": "epoch_ms" - }, - "custom_settings": { - "created_by": "ml-module-metricbeat-system", - "custom_urls": [ - { - "url_name": "Host overview", - "time_range": "3h", - "url_value": "dashboards#/view/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs?_g=(time:(from:\u0027$earliest$\u0027,mode:absolute,to:\u0027$latest$\u0027))&_a=(filters:!(),query:(language:kuery,query:\u0027host.name:\u0022$host.name$\u0022\u0027))" - }, - { - "url_name": "Raw data", - "url_value": "discover#/?_g=(refreshInterval:(pause:!t,value:0),time:(from:\u0027$earliest$\u0027,mode:absolute,to:\u0027$latest$\u0027))&_a=(columns:!(_source),index:\u0027INDEX_PATTERN_ID\u0027,interval:auto,query:(language:kuery,query:'event.dataset:\u0022system.cpu\u0022'),sort:!('@timestamp',desc))" - } - ] - } + "job_type": "anomaly_detector", + "description": "Metricbeat CPU: Detect unusual increases in cpu time spent in iowait (ECS)", + "groups": [ + "metricbeat" + ], + "analysis_config": { + "bucket_span": "10m", + "detectors": [ + { + "detector_description": "high mean system.cpu.iowait.pct", + "function": "high_mean", + "field_name": "system.cpu.iowait.pct", + "partition_field_name": "host.name", + "custom_rules": [ + { + "actions": [ + "skip_result" + ], + "conditions": [ + { + "applies_to": "actual", + "operator": "lt", + "value": 0.25 + } + ] + } + ] + } + ], + "influencers": [ + "host.name" + ] + }, + "analysis_limits": { + "model_memory_limit": "25mb" + }, + "data_description": { + "time_field": "@timestamp", + "time_format": "epoch_ms" + }, + "custom_settings": { + "created_by": "ml-module-metricbeat-system", + "custom_urls": [ + { + "url_name": "Host overview", + "time_range": "3h", + "url_value": "dashboards#/view/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs?_g=(time:(from:\u0027$earliest$\u0027,mode:absolute,to:\u0027$latest$\u0027))&_a=(filters:!(),query:(language:kuery,query:\u0027host.name:\u0022$host.name$\u0022\u0027))" + }, + { + "url_name": "Raw data", + "url_value": "discover#/?_g=(refreshInterval:(pause:!t,value:0),time:(from:\u0027$earliest$\u0027,mode:absolute,to:\u0027$latest$\u0027))&_a=(columns:!(_source),index:\u0027INDEX_PATTERN_ID\u0027,interval:auto,query:(language:kuery,query:'event.dataset:\u0022system.cpu\u0022'),sort:!('@timestamp',desc))" + } + ] } +} diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/max_disk_utilization_ecs.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/max_disk_utilization_ecs.json index 65e515c38acd6..dd502c1d6ae37 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/max_disk_utilization_ecs.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/max_disk_utilization_ecs.json @@ -1,54 +1,56 @@ { - "job_type": "anomaly_detector", - "description": "Metricbeat filesystem: Detect unusual increases in disk utilization (ECS)", - "groups": ["metricbeat"], - "analysis_config": { - "bucket_span": "10m", - "detectors": [ - { - "detector_description": "max disk utilization", - "function": "max", - "field_name": "system.filesystem.used.pct", - "partition_field_name": "host.name", - "custom_rules": [ - { - "actions": [ - "skip_result" - ], - "conditions": [ - { - "applies_to": "actual", - "operator": "lt", - "value": 0.75 - } - ] - } - ] - } - ], - "influencers": [ - "host.name" - ] - }, - "analysis_limits": { - "model_memory_limit": "25mb" - }, - "data_description": { - "time_field": "@timestamp", - "time_format": "epoch_ms" - }, - "custom_settings": { - "created_by": "ml-module-metricbeat-system", - "custom_urls": [ - { - "url_name": "Host overview", - "time_range": "3h", - "url_value": "dashboards#/view/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs?_g=(time:(from:\u0027$earliest$\u0027,mode:absolute,to:\u0027$latest$\u0027))&_a=(filters:!(),query:(language:kuery,query:\u0027host.name:\u0022$host.name$\u0022\u0027))" - }, - { - "url_name": "Raw data", - "url_value": "discover#/?_g=(refreshInterval:(pause:!t,value:0),time:(from:\u0027$earliest$\u0027,mode:absolute,to:\u0027$latest$\u0027))&_a=(columns:!(_source),index:\u0027INDEX_PATTERN_ID\u0027,interval:auto,query:(language:kuery,query:'event.dataset:\u0022system.filesystem\u0022'),sort:!('@timestamp',desc))" - } - ] - } + "job_type": "anomaly_detector", + "description": "Metricbeat filesystem: Detect unusual increases in disk utilization (ECS)", + "groups": [ + "metricbeat" + ], + "analysis_config": { + "bucket_span": "10m", + "detectors": [ + { + "detector_description": "max disk utilization", + "function": "max", + "field_name": "system.filesystem.used.pct", + "partition_field_name": "host.name", + "custom_rules": [ + { + "actions": [ + "skip_result" + ], + "conditions": [ + { + "applies_to": "actual", + "operator": "lt", + "value": 0.75 + } + ] + } + ] + } + ], + "influencers": [ + "host.name" + ] + }, + "analysis_limits": { + "model_memory_limit": "25mb" + }, + "data_description": { + "time_field": "@timestamp", + "time_format": "epoch_ms" + }, + "custom_settings": { + "created_by": "ml-module-metricbeat-system", + "custom_urls": [ + { + "url_name": "Host overview", + "time_range": "3h", + "url_value": "dashboards#/view/79ffd6e0-faa0-11e6-947f-177f697178b8-ecs?_g=(time:(from:\u0027$earliest$\u0027,mode:absolute,to:\u0027$latest$\u0027))&_a=(filters:!(),query:(language:kuery,query:\u0027host.name:\u0022$host.name$\u0022\u0027))" + }, + { + "url_name": "Raw data", + "url_value": "discover#/?_g=(refreshInterval:(pause:!t,value:0),time:(from:\u0027$earliest$\u0027,mode:absolute,to:\u0027$latest$\u0027))&_a=(columns:!(_source),index:\u0027INDEX_PATTERN_ID\u0027,interval:auto,query:(language:kuery,query:'event.dataset:\u0022system.filesystem\u0022'),sort:!('@timestamp',desc))" + } + ] } +} diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/metricbeat_outages_ecs.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/metricbeat_outages_ecs.json index f93419c68c67d..fb2838ac57856 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/metricbeat_outages_ecs.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metricbeat_system_ecs/ml/metricbeat_outages_ecs.json @@ -1,34 +1,36 @@ { - "job_type": "anomaly_detector", - "description": "Metricbeat outages: Detect unusual decreases in metricbeat documents (ECS)", - "groups": ["metricbeat"], - "analysis_config": { - "bucket_span": "10m", - "detectors": [ - { - "detector_description": "low_count", - "function": "low_count", - "partition_field_name": "event.dataset" - } - ], - "influencers": [ - "event.dataset" - ] - }, - "analysis_limits": { - "model_memory_limit": "15mb" - }, - "data_description": { - "time_field": "@timestamp", - "time_format": "epoch_ms" - }, - "custom_settings": { - "created_by": "ml-module-metricbeat-system", - "custom_urls": [ - { - "url_name": "Raw data", - "url_value": "discover#/?_g=(refreshInterval:(pause:!t,value:0),time:(from:\u0027$earliest$\u0027,mode:absolute,to:\u0027$latest$\u0027))&_a=(columns:!(_source),index:\u0027INDEX_PATTERN_ID\u0027,interval:auto,query:(language:kuery,query:''),sort:!('@timestamp',desc))" - } - ] - } + "job_type": "anomaly_detector", + "description": "Metricbeat outages: Detect unusual decreases in metricbeat documents (ECS)", + "groups": [ + "metricbeat" + ], + "analysis_config": { + "bucket_span": "10m", + "detectors": [ + { + "detector_description": "low_count", + "function": "low_count", + "partition_field_name": "event.dataset" + } + ], + "influencers": [ + "event.dataset" + ] + }, + "analysis_limits": { + "model_memory_limit": "15mb" + }, + "data_description": { + "time_field": "@timestamp", + "time_format": "epoch_ms" + }, + "custom_settings": { + "created_by": "ml-module-metricbeat-system", + "custom_urls": [ + { + "url_name": "Raw data", + "url_value": "discover#/?_g=(refreshInterval:(pause:!t,value:0),time:(from:\u0027$earliest$\u0027,mode:absolute,to:\u0027$latest$\u0027))&_a=(columns:!(_source),index:\u0027INDEX_PATTERN_ID\u0027,interval:auto,query:(language:kuery,query:''),sort:!('@timestamp',desc))" + } + ] } +} diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/logo.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/logo.json index 2e57038bbc639..206f34df4f50f 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/logo.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/logo.json @@ -1,3 +1,3 @@ { - "icon": "metricsApp" -} \ No newline at end of file + "icon": "metricsApp" +} diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/manifest.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/manifest.json index 29ac288c0649f..dd1e191fda47b 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/manifest.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/manifest.json @@ -1,38 +1,38 @@ { - "id": "metrics_ui_hosts", - "title": "Metrics Hosts", - "description": "Detect anomalous memory and network behavior on hosts.", - "type": "Metricbeat Data", - "logoFile": "logo.json", - "jobs": [ - { - "id": "hosts_memory_usage", - "file": "hosts_memory_usage.json" - }, - { - "id": "hosts_network_in", - "file": "hosts_network_in.json" - }, - { - "id": "hosts_network_out", - "file": "hosts_network_out.json" - } - ], - "datafeeds": [ - { - "id": "datafeed-hosts_memory_usage", - "file": "datafeed_hosts_memory_usage.json", - "job_id": "hosts_memory_usage" - }, - { - "id": "datafeed-hosts_network_in", - "file": "datafeed_hosts_network_in.json", - "job_id": "hosts_network_in" - }, - { - "id": "datafeed-hosts_network_out", - "file": "datafeed_hosts_network_out.json", - "job_id": "hosts_network_out" - } - ] -} \ No newline at end of file + "id": "metrics_ui_hosts", + "title": "Metrics Hosts", + "description": "Detect anomalous memory and network behavior on hosts.", + "type": "Metricbeat Data", + "logoFile": "logo.json", + "jobs": [ + { + "id": "hosts_memory_usage", + "file": "hosts_memory_usage.json" + }, + { + "id": "hosts_network_in", + "file": "hosts_network_in.json" + }, + { + "id": "hosts_network_out", + "file": "hosts_network_out.json" + } + ], + "datafeeds": [ + { + "id": "datafeed-hosts_memory_usage", + "file": "datafeed_hosts_memory_usage.json", + "job_id": "hosts_memory_usage" + }, + { + "id": "datafeed-hosts_network_in", + "file": "datafeed_hosts_network_in.json", + "job_id": "hosts_network_in" + }, + { + "id": "datafeed-hosts_network_out", + "file": "datafeed_hosts_network_out.json", + "job_id": "hosts_network_out" + } + ] +} diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/datafeed_hosts_memory_usage.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/datafeed_hosts_memory_usage.json index db883a6ce36f9..0fdede28563a3 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/datafeed_hosts_memory_usage.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/datafeed_hosts_memory_usage.json @@ -1,16 +1,20 @@ { - "job_id": "JOB_ID", - "indices": [ - "INDEX_PATTERN_NAME" - ], - "indices_options": { - "allow_no_indices": true - }, - "query": { - "bool": { - "must": [ - {"exists": {"field": "system.memory"}} - ] + "job_id": "JOB_ID", + "indices": [ + "INDEX_PATTERN_NAME" + ], + "indices_options": { + "allow_no_indices": true + }, + "query": { + "bool": { + "must": [ + { + "exists": { + "field": "system.memory" + } } + ] } -} \ No newline at end of file + } +} diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/datafeed_hosts_network_in.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/datafeed_hosts_network_in.json index 7eb430632a81f..d4cfbebe0a437 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/datafeed_hosts_network_in.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/datafeed_hosts_network_in.json @@ -1,40 +1,65 @@ { - "job_id": "JOB_ID", - "indices": [ - "INDEX_PATTERN_NAME" - ], - "indices_options": { - "allow_no_indices": true - }, - "query": { - "bool": { - "must": [ - {"exists": {"field": "system.network"}} - ] + "job_id": "JOB_ID", + "indices": [ + "INDEX_PATTERN_NAME" + ], + "indices_options": { + "allow_no_indices": true + }, + "query": { + "bool": { + "must": [ + { + "exists": { + "field": "system.network" + } } - }, - "chunking_config": { - "mode": "manual", - "time_span": "900s" - }, - "aggregations": { - "host.name": {"terms": {"field": "host.name", "size": 100}, - "aggregations": { - "buckets": { - "date_histogram": {"field": "@timestamp","fixed_interval": "5m"}, - "aggregations": { - "@timestamp": {"max": {"field": "@timestamp"}}, - "bytes_in_max": {"max": {"field": "system.network.in.bytes"}}, - "bytes_in_derivative": {"derivative": {"buckets_path": "bytes_in_max"}}, - "positive_only":{ - "bucket_script": { - "buckets_path": {"in_derivative": "bytes_in_derivative.value"}, - "script": "params.in_derivative > 0.0 ? params.in_derivative : 0.0" - } - } - } - } + ] + } + }, + "chunking_config": { + "mode": "manual", + "time_span": "900s" + }, + "aggregations": { + "host.name": { + "terms": { + "field": "host.name", + "size": 100 + }, + "aggregations": { + "buckets": { + "date_histogram": { + "field": "@timestamp", + "fixed_interval": "5m" + }, + "aggregations": { + "@timestamp": { + "max": { + "field": "@timestamp" + } + }, + "bytes_in_max": { + "max": { + "field": "system.network.in.bytes" + } + }, + "bytes_in_derivative": { + "derivative": { + "buckets_path": "bytes_in_max" + } + }, + "positive_only": { + "bucket_script": { + "buckets_path": { + "in_derivative": "bytes_in_derivative.value" + }, + "script": "params.in_derivative > 0.0 ? params.in_derivative : 0.0" + } } + } } + } } -} \ No newline at end of file + } +} diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/datafeed_hosts_network_out.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/datafeed_hosts_network_out.json index 427cb678ce663..903cf31416ef4 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/datafeed_hosts_network_out.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/datafeed_hosts_network_out.json @@ -1,40 +1,65 @@ { - "job_id": "JOB_ID", - "indices": [ - "INDEX_PATTERN_NAME" - ], - "indices_options": { - "allow_no_indices": true - }, - "query": { - "bool": { - "must": [ - {"exists": {"field": "system.network"}} - ] + "job_id": "JOB_ID", + "indices": [ + "INDEX_PATTERN_NAME" + ], + "indices_options": { + "allow_no_indices": true + }, + "query": { + "bool": { + "must": [ + { + "exists": { + "field": "system.network" + } } - }, - "chunking_config": { - "mode": "manual", - "time_span": "900s" - }, - "aggregations": { - "host.name": {"terms": {"field": "host.name", "size": 100}, - "aggregations": { - "buckets": { - "date_histogram": {"field": "@timestamp","fixed_interval": "5m"}, - "aggregations": { - "@timestamp": {"max": {"field": "@timestamp"}}, - "bytes_out_max": {"max": {"field": "system.network.out.bytes"}}, - "bytes_out_derivative": {"derivative": {"buckets_path": "bytes_out_max"}}, - "positive_only":{ - "bucket_script": { - "buckets_path": {"out_derivative": "bytes_out_derivative.value"}, - "script": "params.out_derivative > 0.0 ? params.out_derivative : 0.0" - } - } - } - } + ] + } + }, + "chunking_config": { + "mode": "manual", + "time_span": "900s" + }, + "aggregations": { + "host.name": { + "terms": { + "field": "host.name", + "size": 100 + }, + "aggregations": { + "buckets": { + "date_histogram": { + "field": "@timestamp", + "fixed_interval": "5m" + }, + "aggregations": { + "@timestamp": { + "max": { + "field": "@timestamp" + } + }, + "bytes_out_max": { + "max": { + "field": "system.network.out.bytes" + } + }, + "bytes_out_derivative": { + "derivative": { + "buckets_path": "bytes_out_max" + } + }, + "positive_only": { + "bucket_script": { + "buckets_path": { + "out_derivative": "bytes_out_derivative.value" + }, + "script": "params.out_derivative > 0.0 ? params.out_derivative : 0.0" + } } + } } + } } -} \ No newline at end of file + } +} diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_memory_usage.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_memory_usage.json index 186c9dcdb27e5..c5f62105613ba 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_memory_usage.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_memory_usage.json @@ -1,50 +1,50 @@ { - "job_type": "anomaly_detector", - "groups": [ - "hosts", - "metrics" - ], - "description": "Metrics: Hosts - Identify unusual spikes in memory usage across hosts.", - "analysis_config": { - "bucket_span": "15m", - "detectors": [ - { - "detector_description": "max('system.memory.actual.used.pct')", - "function": "max", - "field_name": "system.memory.actual.used.pct", - "custom_rules": [ - { - "actions": [ - "skip_result" - ], - "conditions": [ - { - "applies_to": "actual", - "operator": "lt", - "value": 0.1 - } - ] - } + "job_type": "anomaly_detector", + "groups": [ + "hosts", + "metrics" + ], + "description": "Metrics: Hosts - Identify unusual spikes in memory usage across hosts.", + "analysis_config": { + "bucket_span": "15m", + "detectors": [ + { + "detector_description": "max('system.memory.actual.used.pct')", + "function": "max", + "field_name": "system.memory.actual.used.pct", + "custom_rules": [ + { + "actions": [ + "skip_result" + ], + "conditions": [ + { + "applies_to": "actual", + "operator": "lt", + "value": 0.1 + } ] - } - ], - "influencers": [ - "host.name" - ] - }, - "data_description": { - "time_field": "@timestamp" - }, - "analysis_limits": { - "model_memory_limit": "64mb" - }, - "custom_settings": { - "created_by": "ml-module-metrics-ui-hosts", - "custom_urls": [ - { - "url_name": "Host Metrics", - "url_value": "metrics/detail/host/$host.name$?metricTime=(autoReload:!f,refreshInterval:5000,time:(from:%27$earliest$%27,interval:%3E%3D1m,to:%27$latest$%27))" - } - ] - } - } \ No newline at end of file + } + ] + } + ], + "influencers": [ + "host.name" + ] + }, + "data_description": { + "time_field": "@timestamp" + }, + "analysis_limits": { + "model_memory_limit": "64mb" + }, + "custom_settings": { + "created_by": "ml-module-metrics-ui-hosts", + "custom_urls": [ + { + "url_name": "Host Metrics", + "url_value": "metrics/detail/host/$host.name$?metricTime=(autoReload:!f,refreshInterval:5000,time:(from:%27$earliest$%27,interval:%3E%3D1m,to:%27$latest$%27))" + } + ] + } +} diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_network_in.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_network_in.json index 0054d90b1df33..258fb87f5260c 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_network_in.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_network_in.json @@ -1,37 +1,37 @@ { - "job_type": "anomaly_detector", - "description": "Metrics: Hosts - Identify unusual spikes in inbound traffic across hosts.", - "groups": [ - "hosts", - "metrics" + "job_type": "anomaly_detector", + "description": "Metrics: Hosts - Identify unusual spikes in inbound traffic across hosts.", + "groups": [ + "hosts", + "metrics" + ], + "analysis_config": { + "bucket_span": "15m", + "detectors": [ + { + "detector_description": "max(bytes_in_derivative)", + "function": "max", + "field_name": "bytes_in_derivative" + } ], - "analysis_config": { - "bucket_span": "15m", - "detectors": [ - { - "detector_description": "max(bytes_in_derivative)", - "function": "max", - "field_name": "bytes_in_derivative" - } - ], - "influencers": [ - "host.name" - ], - "summary_count_field_name": "doc_count" - }, - "data_description": { - "time_field": "@timestamp" - }, - "analysis_limits": { - "model_memory_limit": "32mb" - }, - "custom_settings": { - "created_by": "ml-module-metrics-ui-hosts", - "custom_urls": [ - { - "url_name": "Host Metrics", - "url_value": "metrics/detail/host/$host.name$?metricTime=(autoReload:!f,refreshInterval:5000,time:(from:%27$earliest$%27,interval:%3E%3D1m,to:%27$latest$%27))" - } - ] - } - } \ No newline at end of file + "influencers": [ + "host.name" + ], + "summary_count_field_name": "doc_count" + }, + "data_description": { + "time_field": "@timestamp" + }, + "analysis_limits": { + "model_memory_limit": "32mb" + }, + "custom_settings": { + "created_by": "ml-module-metrics-ui-hosts", + "custom_urls": [ + { + "url_name": "Host Metrics", + "url_value": "metrics/detail/host/$host.name$?metricTime=(autoReload:!f,refreshInterval:5000,time:(from:%27$earliest$%27,interval:%3E%3D1m,to:%27$latest$%27))" + } + ] + } +} diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_network_out.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_network_out.json index 601cc3807c441..381bc09bac46c 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_network_out.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_hosts/ml/hosts_network_out.json @@ -1,37 +1,37 @@ { - "job_type": "anomaly_detector", - "description": "Metrics: Hosts - Identify unusual spikes in outbound traffic across hosts.", - "groups": [ - "hosts", - "metrics" + "job_type": "anomaly_detector", + "description": "Metrics: Hosts - Identify unusual spikes in outbound traffic across hosts.", + "groups": [ + "hosts", + "metrics" + ], + "analysis_config": { + "bucket_span": "15m", + "detectors": [ + { + "detector_description": "max(bytes_out_derivative)", + "function": "max", + "field_name": "bytes_out_derivative" + } ], - "analysis_config": { - "bucket_span": "15m", - "detectors": [ - { - "detector_description": "max(bytes_out_derivative)", - "function": "max", - "field_name": "bytes_out_derivative" - } - ], - "influencers": [ - "host.name" - ], - "summary_count_field_name": "doc_count" - }, - "data_description": { - "time_field": "@timestamp" - }, - "analysis_limits": { - "model_memory_limit": "32mb" - }, - "custom_settings": { - "created_by": "ml-module-metrics-ui-hosts", - "custom_urls": [ - { - "url_name": "Host Metrics", - "url_value": "metrics/detail/host/$host.name$?metricTime=(autoReload:!f,refreshInterval:5000,time:(from:%27$earliest$%27,interval:%3E%3D1m,to:%27$latest$%27))" - } - ] - } - } \ No newline at end of file + "influencers": [ + "host.name" + ], + "summary_count_field_name": "doc_count" + }, + "data_description": { + "time_field": "@timestamp" + }, + "analysis_limits": { + "model_memory_limit": "32mb" + }, + "custom_settings": { + "created_by": "ml-module-metrics-ui-hosts", + "custom_urls": [ + { + "url_name": "Host Metrics", + "url_value": "metrics/detail/host/$host.name$?metricTime=(autoReload:!f,refreshInterval:5000,time:(from:%27$earliest$%27,interval:%3E%3D1m,to:%27$latest$%27))" + } + ] + } +} diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/logo.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/logo.json index 63105a28c0ab1..206f34df4f50f 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/logo.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/logo.json @@ -1,3 +1,3 @@ { - "icon": "metricsApp" -} \ No newline at end of file + "icon": "metricsApp" +} diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/manifest.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/manifest.json index 15336069e092b..e3a02120a4ac5 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/manifest.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/manifest.json @@ -1,38 +1,38 @@ { - "id": "metrics_ui_k8s", - "title": "Metrics Kubernetes", - "description": "Detect anomalous memory and network behavior on Kubernetes pods.", - "type": "Metricbeat Data", - "logoFile": "logo.json", - "jobs": [ - { - "id": "k8s_memory_usage", - "file": "k8s_memory_usage.json" - }, - { - "id": "k8s_network_in", - "file": "k8s_network_in.json" - }, - { - "id": "k8s_network_out", - "file": "k8s_network_out.json" - } - ], - "datafeeds": [ - { - "id": "datafeed-k8s_memory_usage", - "file": "datafeed_k8s_memory_usage.json", - "job_id": "k8s_memory_usage" - }, - { - "id": "datafeed-k8s_network_in", - "file": "datafeed_k8s_network_in.json", - "job_id": "k8s_network_in" - }, - { - "id": "datafeed-k8s_network_out", - "file": "datafeed_k8s_network_out.json", - "job_id": "k8s_network_out" - } - ] - } \ No newline at end of file + "id": "metrics_ui_k8s", + "title": "Metrics Kubernetes", + "description": "Detect anomalous memory and network behavior on Kubernetes pods.", + "type": "Metricbeat Data", + "logoFile": "logo.json", + "jobs": [ + { + "id": "k8s_memory_usage", + "file": "k8s_memory_usage.json" + }, + { + "id": "k8s_network_in", + "file": "k8s_network_in.json" + }, + { + "id": "k8s_network_out", + "file": "k8s_network_out.json" + } + ], + "datafeeds": [ + { + "id": "datafeed-k8s_memory_usage", + "file": "datafeed_k8s_memory_usage.json", + "job_id": "k8s_memory_usage" + }, + { + "id": "datafeed-k8s_network_in", + "file": "datafeed_k8s_network_in.json", + "job_id": "k8s_network_in" + }, + { + "id": "datafeed-k8s_network_out", + "file": "datafeed_k8s_network_out.json", + "job_id": "k8s_network_out" + } + ] +} diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/datafeed_k8s_memory_usage.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/datafeed_k8s_memory_usage.json index 14590f743528e..1a443dc6f3bb7 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/datafeed_k8s_memory_usage.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/datafeed_k8s_memory_usage.json @@ -1,17 +1,25 @@ { - "job_id": "JOB_ID", - "indices": [ - "INDEX_PATTERN_NAME" - ], - "indices_options": { - "allow_no_indices": true - }, - "query": { - "bool": { - "must": [ - {"exists": {"field": "kubernetes.pod.uid"}}, - {"exists": {"field": "kubernetes.pod.memory"}} - ] + "job_id": "JOB_ID", + "indices": [ + "INDEX_PATTERN_NAME" + ], + "indices_options": { + "allow_no_indices": true + }, + "query": { + "bool": { + "must": [ + { + "exists": { + "field": "kubernetes.pod.uid" + } + }, + { + "exists": { + "field": "kubernetes.pod.memory" + } } + ] } -} \ No newline at end of file + } +} diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/datafeed_k8s_network_in.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/datafeed_k8s_network_in.json index 4fa4c603ea049..18a48b300f202 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/datafeed_k8s_network_in.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/datafeed_k8s_network_in.json @@ -1,44 +1,73 @@ { - "job_id": "JOB_ID", - "indices": [ - "INDEX_PATTERN_NAME" - ], - "indices_options": { - "allow_no_indices": true - }, - "query": { - "bool": { - "must": [ - {"exists": {"field": "kubernetes.pod.network"}} - ] + "job_id": "JOB_ID", + "indices": [ + "INDEX_PATTERN_NAME" + ], + "indices_options": { + "allow_no_indices": true + }, + "query": { + "bool": { + "must": [ + { + "exists": { + "field": "kubernetes.pod.network" + } } - }, - "chunking_config": { - "mode": "manual", - "time_span": "900s" - }, - "aggregations": { - "kubernetes.namespace": {"terms": {"field": "kubernetes.namespace", "size": 25}, - "aggregations": { - "kubernetes.pod.uid": {"terms": {"field": "kubernetes.pod.uid", "size": 100}, - "aggregations": { - "buckets": { - "date_histogram": {"field": "@timestamp","fixed_interval": "5m"}, - "aggregations": { - "@timestamp": {"max": {"field": "@timestamp"}}, - "bytes_in_max": {"max": {"field": "kubernetes.pod.network.rx.bytes"}}, - "bytes_in_derivative": {"derivative": {"buckets_path": "bytes_in_max"}}, - "positive_only":{ - "bucket_script": { - "buckets_path": {"in_derivative": "bytes_in_derivative.value"}, - "script": "params.in_derivative > 0.0 ? params.in_derivative : 0.0" - } - } - } - } - } + ] + } + }, + "chunking_config": { + "mode": "manual", + "time_span": "900s" + }, + "aggregations": { + "kubernetes.namespace": { + "terms": { + "field": "kubernetes.namespace", + "size": 25 + }, + "aggregations": { + "kubernetes.pod.uid": { + "terms": { + "field": "kubernetes.pod.uid", + "size": 100 + }, + "aggregations": { + "buckets": { + "date_histogram": { + "field": "@timestamp", + "fixed_interval": "5m" + }, + "aggregations": { + "@timestamp": { + "max": { + "field": "@timestamp" + } + }, + "bytes_in_max": { + "max": { + "field": "kubernetes.pod.network.rx.bytes" + } + }, + "bytes_in_derivative": { + "derivative": { + "buckets_path": "bytes_in_max" + } + }, + "positive_only": { + "bucket_script": { + "buckets_path": { + "in_derivative": "bytes_in_derivative.value" + }, + "script": "params.in_derivative > 0.0 ? params.in_derivative : 0.0" + } } + } } + } } + } } + } } diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/datafeed_k8s_network_out.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/datafeed_k8s_network_out.json index 633dd6bf490e7..18a3f93195095 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/datafeed_k8s_network_out.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/datafeed_k8s_network_out.json @@ -1,44 +1,73 @@ { - "job_id": "JOB_ID", - "indices": [ - "INDEX_PATTERN_NAME" - ], - "indices_options": { - "allow_no_indices": true - }, - "query": { - "bool": { - "must": [ - {"exists": {"field": "kubernetes.pod.network"}} - ] + "job_id": "JOB_ID", + "indices": [ + "INDEX_PATTERN_NAME" + ], + "indices_options": { + "allow_no_indices": true + }, + "query": { + "bool": { + "must": [ + { + "exists": { + "field": "kubernetes.pod.network" + } } - }, - "chunking_config": { - "mode": "manual", - "time_span": "900s" - }, - "aggregations": { - "kubernetes.namespace": {"terms": {"field": "kubernetes.namespace", "size": 25}, - "aggregations": { - "kubernetes.pod.uid": {"terms": {"field": "kubernetes.pod.uid", "size": 100}, - "aggregations": { - "buckets": { - "date_histogram": {"field": "@timestamp","fixed_interval": "5m"}, - "aggregations": { - "@timestamp": {"max": {"field": "@timestamp"}}, - "bytes_out_max": {"max": {"field": "kubernetes.pod.network.tx.bytes"}}, - "bytes_out_derivative": {"derivative": {"buckets_path": "bytes_out_max"}}, - "positive_only":{ - "bucket_script": { - "buckets_path": {"pos_derivative": "bytes_out_derivative.value"}, - "script": "params.pos_derivative > 0.0 ? params.pos_derivative : 0.0" - } - } - } - } - } + ] + } + }, + "chunking_config": { + "mode": "manual", + "time_span": "900s" + }, + "aggregations": { + "kubernetes.namespace": { + "terms": { + "field": "kubernetes.namespace", + "size": 25 + }, + "aggregations": { + "kubernetes.pod.uid": { + "terms": { + "field": "kubernetes.pod.uid", + "size": 100 + }, + "aggregations": { + "buckets": { + "date_histogram": { + "field": "@timestamp", + "fixed_interval": "5m" + }, + "aggregations": { + "@timestamp": { + "max": { + "field": "@timestamp" + } + }, + "bytes_out_max": { + "max": { + "field": "kubernetes.pod.network.tx.bytes" + } + }, + "bytes_out_derivative": { + "derivative": { + "buckets_path": "bytes_out_max" + } + }, + "positive_only": { + "bucket_script": { + "buckets_path": { + "pos_derivative": "bytes_out_derivative.value" + }, + "script": "params.pos_derivative > 0.0 ? params.pos_derivative : 0.0" + } } + } } + } } + } } + } } diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_memory_usage.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_memory_usage.json index d3f58086e2fd5..ef57612e9f90e 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_memory_usage.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_memory_usage.json @@ -1,53 +1,53 @@ { - "job_type": "anomaly_detector", - "groups": [ - "k8s", - "metrics" + "job_type": "anomaly_detector", + "groups": [ + "k8s", + "metrics" + ], + "description": "Metrics: Kubernetes - Identify unusual spikes in memory usage across Kubernetes pods.", + "analysis_config": { + "bucket_span": "15m", + "detectors": [ + { + "detector_description": "max('kubernetes.pod.memory.usage.node.pct')", + "function": "max", + "field_name": "kubernetes.pod.memory.usage.node.pct", + "partition_field_name": "kubernetes.namespace", + "custom_rules": [ + { + "actions": [ + "skip_result" + ], + "conditions": [ + { + "applies_to": "actual", + "operator": "lt", + "value": 0.1 + } + ] + } + ] + } ], - "description": "Metrics: Kubernetes - Identify unusual spikes in memory usage across Kubernetes pods.", - "analysis_config": { - "bucket_span": "15m", - "detectors": [ - { - "detector_description": "max('kubernetes.pod.memory.usage.node.pct')", - "function": "max", - "field_name": "kubernetes.pod.memory.usage.node.pct", - "partition_field_name": "kubernetes.namespace", - "custom_rules": [ - { - "actions": [ - "skip_result" - ], - "conditions": [ - { - "applies_to": "actual", - "operator": "lt", - "value": 0.1 - } - ] - } - ] - } - ], - "influencers": [ - "kubernetes.namespace", - "kubernetes.node.name", - "kubernetes.pod.uid" - ] - }, - "data_description": { - "time_field": "@timestamp" - }, - "analysis_limits": { - "model_memory_limit": "64mb" - }, - "custom_settings": { - "created_by": "ml-module-metrics-ui-k8s", - "custom_urls": [ - { - "url_name": "Pod Metrics", - "url_value": "metrics/detail/pod/$kubernetes.pod.uid$?metricTime=(autoReload:!f,refreshInterval:5000,time:(from:%27$earliest$%27,interval:%3E%3D1m,to:%27$latest$%27))" - } - ] - } - } \ No newline at end of file + "influencers": [ + "kubernetes.namespace", + "kubernetes.node.name", + "kubernetes.pod.uid" + ] + }, + "data_description": { + "time_field": "@timestamp" + }, + "analysis_limits": { + "model_memory_limit": "64mb" + }, + "custom_settings": { + "created_by": "ml-module-metrics-ui-k8s", + "custom_urls": [ + { + "url_name": "Pod Metrics", + "url_value": "metrics/detail/pod/$kubernetes.pod.uid$?metricTime=(autoReload:!f,refreshInterval:5000,time:(from:%27$earliest$%27,interval:%3E%3D1m,to:%27$latest$%27))" + } + ] + } +} diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_network_in.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_network_in.json index 212b2681beb77..91f855a59add5 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_network_in.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_network_in.json @@ -18,7 +18,7 @@ "influencers": [ "kubernetes.namespace", "kubernetes.pod.uid" - ], + ], "summary_count_field_name": "doc_count" }, "data_description": { diff --git a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_network_out.json b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_network_out.json index b06b0ed5089ef..e68866a655acf 100644 --- a/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_network_out.json +++ b/x-pack/plugins/ml/server/models/data_recognizer/modules/metrics_ui_k8s/ml/k8s_network_out.json @@ -18,7 +18,7 @@ "influencers": [ "kubernetes.namespace", "kubernetes.pod.uid" - ], + ], "summary_count_field_name": "doc_count" }, "data_description": { diff --git a/x-pack/plugins/ml/server/models/data_visualizer/data_visualizer.ts b/x-pack/plugins/ml/server/models/data_visualizer/data_visualizer.ts index 95c4e79150059..1f59e990096a4 100644 --- a/x-pack/plugins/ml/server/models/data_visualizer/data_visualizer.ts +++ b/x-pack/plugins/ml/server/models/data_visualizer/data_visualizer.ts @@ -5,10 +5,7 @@ */ import { IScopedClusterClient } from 'kibana/server'; -import get from 'lodash/get'; -import each from 'lodash/each'; -import last from 'lodash/last'; -import find from 'lodash/find'; +import { get, each, last, find } from 'lodash'; import { KBN_FIELD_TYPES } from '../../../../../../src/plugins/data/server'; import { ML_JOB_FIELD_TYPES } from '../../../common/constants/field_types'; import { getSafeAggregationName } from '../../../common/util/job_utils'; @@ -630,12 +627,12 @@ export class DataVisualizer { const { body } = await this._asCurrentUser.search({ index, - rest_total_hits_as_int: true, + track_total_hits: true, size, body: searchBody, }); const aggregations = body.aggregations; - const totalCount = get(body, ['hits', 'total'], 0); + const totalCount = body.hits.total.value; const stats = { totalCount, aggregatableExistsFields: [] as FieldData[], @@ -697,11 +694,10 @@ export class DataVisualizer { const { body } = await this._asCurrentUser.search({ index, - rest_total_hits_as_int: true, size, body: searchBody, }); - return body.hits.total > 0; + return body.hits.total.value > 0; } async getDocumentCountStats( @@ -1167,7 +1163,6 @@ export class DataVisualizer { const { body } = await this._asCurrentUser.search({ index, - rest_total_hits_as_int: true, size, body: searchBody, }); @@ -1175,7 +1170,7 @@ export class DataVisualizer { fieldName: field, examples: [] as any[], }; - if (body.hits.total !== 0) { + if (body.hits.total.value > 0) { const hits = body.hits.hits; for (let i = 0; i < hits.length; i++) { // Look in the _source for the field value. diff --git a/x-pack/plugins/ml/server/models/job_audit_messages/job_audit_messages.js b/x-pack/plugins/ml/server/models/job_audit_messages/job_audit_messages.js index 3fd5ebf3f68f4..e8d21c7355ff7 100644 --- a/x-pack/plugins/ml/server/models/job_audit_messages/job_audit_messages.js +++ b/x-pack/plugins/ml/server/models/job_audit_messages/job_audit_messages.js @@ -102,7 +102,6 @@ export function jobAuditMessagesProvider({ asInternalUser }) { const { body } = await asInternalUser.search({ index: ML_NOTIFICATION_INDEX_PATTERN, ignore_unavailable: true, - rest_total_hits_as_int: true, size: SIZE, body: { sort: [{ timestamp: { order: 'desc' } }, { job_id: { order: 'asc' } }], @@ -111,7 +110,7 @@ export function jobAuditMessagesProvider({ asInternalUser }) { }); let messages = []; - if (body.hits.total !== 0) { + if (body.hits.total.value > 0) { messages = body.hits.hits.map((hit) => hit._source); } return messages; @@ -153,7 +152,6 @@ export function jobAuditMessagesProvider({ asInternalUser }) { const { body } = await asInternalUser.search({ index: ML_NOTIFICATION_INDEX_PATTERN, ignore_unavailable: true, - rest_total_hits_as_int: true, size: 0, body: { query, @@ -196,7 +194,7 @@ export function jobAuditMessagesProvider({ asInternalUser }) { let messagesPerJob = []; const jobMessages = []; if ( - body.hits.total !== 0 && + body.hits.total.value > 0 && body.aggregations && body.aggregations.levelsPerJob && body.aggregations.levelsPerJob.buckets && diff --git a/x-pack/plugins/ml/server/models/job_service/new_job/line_chart.ts b/x-pack/plugins/ml/server/models/job_service/new_job/line_chart.ts index 128b28a223445..93f7c81c10023 100644 --- a/x-pack/plugins/ml/server/models/job_service/new_job/line_chart.ts +++ b/x-pack/plugins/ml/server/models/job_service/new_job/line_chart.ts @@ -89,7 +89,7 @@ function processSearchResults(resp: any, fields: string[]): ProcessedResults { return { success: true, results: tempResults, - totalResults: resp.hits.total, + totalResults: resp.hits.total.value, }; } @@ -107,7 +107,7 @@ function getSearchJsonFromConfig( const json = { index: indexPatternTitle, size: 0, - rest_total_hits_as_int: true, + track_total_hits: true, body: { query: {}, aggs: { diff --git a/x-pack/plugins/ml/server/models/job_service/new_job/population_chart.ts b/x-pack/plugins/ml/server/models/job_service/new_job/population_chart.ts index 71e81158d8885..e614f887e29bc 100644 --- a/x-pack/plugins/ml/server/models/job_service/new_job/population_chart.ts +++ b/x-pack/plugins/ml/server/models/job_service/new_job/population_chart.ts @@ -118,7 +118,7 @@ function processSearchResults(resp: any, fields: string[]): ProcessedResults { return { success: true, results: tempResults, - totalResults: resp.hits.total, + totalResults: resp.hits.total.value, }; } @@ -135,7 +135,7 @@ function getPopulationSearchJsonFromConfig( const json = { index: indexPatternTitle, size: 0, - rest_total_hits_as_int: true, + track_total_hits: true, body: { query: {}, aggs: { diff --git a/x-pack/plugins/ml/server/models/job_validation/__mocks__/mock_farequote_cardinality.json b/x-pack/plugins/ml/server/models/job_validation/__mocks__/mock_farequote_cardinality.json index 8d408ff0310c9..8b9b1de453c11 100644 --- a/x-pack/plugins/ml/server/models/job_validation/__mocks__/mock_farequote_cardinality.json +++ b/x-pack/plugins/ml/server/models/job_validation/__mocks__/mock_farequote_cardinality.json @@ -2,6 +2,9 @@ "took": 0, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, - "hits": { "total": 86274, "max_score": 0, "hits": [] }, - "aggregations": { "airline_cardinality": { "value": 19 }, "airline_count": { "doc_count": 86274 } } + "hits": { "total": { "value": 86274, "relation": "eq" }, "max_score": 0, "hits": [] }, + "aggregations": { + "airline_cardinality": { "value": 19 }, + "airline_count": { "doc_count": 86274 } + } } diff --git a/x-pack/plugins/ml/server/models/job_validation/__mocks__/mock_farequote_search_response.json b/x-pack/plugins/ml/server/models/job_validation/__mocks__/mock_farequote_search_response.json index 7bb449921a101..72536f8fdc08b 100644 --- a/x-pack/plugins/ml/server/models/job_validation/__mocks__/mock_farequote_search_response.json +++ b/x-pack/plugins/ml/server/models/job_validation/__mocks__/mock_farequote_search_response.json @@ -1 +1 @@ -{"took":41,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":86274,"max_score":0,"hits":[]},"aggregations":{"non_empty_buckets":{"buckets":[{"key_as_string":"2017-02-07T00:00:00.000Z","key":1486425600000,"doc_count":23},{"key_as_string":"2017-02-07T00:01:00.000Z","key":1486425660000,"doc_count":10},{"key_as_string":"2017-02-07T00:02:00.000Z","key":1486425720000,"doc_count":6},{"key_as_string":"2017-02-07T00:03:00.000Z","key":1486425780000,"doc_count":11},{"key_as_string":"2017-02-07T00:04:00.000Z","key":1486425840000,"doc_count":11},{"key_as_string":"2017-02-07T00:05:00.000Z","key":1486425900000,"doc_count":11},{"key_as_string":"2017-02-07T00:06:00.000Z","key":1486425960000,"doc_count":11},{"key_as_string":"2017-02-07T00:07:00.000Z","key":1486426020000,"doc_count":11},{"key_as_string":"2017-02-07T00:08:00.000Z","key":1486426080000,"doc_count":8},{"key_as_string":"2017-02-07T00:09:00.000Z","key":1486426140000,"doc_count":11},{"key_as_string":"2017-02-07T00:10:00.000Z","key":1486426200000,"doc_count":10},{"key_as_string":"2017-02-07T00:11:00.000Z","key":1486426260000,"doc_count":9},{"key_as_string":"2017-02-07T00:12:00.000Z","key":1486426320000,"doc_count":12},{"key_as_string":"2017-02-07T00:13:00.000Z","key":1486426380000,"doc_count":9},{"key_as_string":"2017-02-07T00:14:00.000Z","key":1486426440000,"doc_count":8},{"key_as_string":"2017-02-07T00:15:00.000Z","key":1486426500000,"doc_count":14},{"key_as_string":"2017-02-07T00:16:00.000Z","key":1486426560000,"doc_count":9},{"key_as_string":"2017-02-07T00:17:00.000Z","key":1486426620000,"doc_count":8},{"key_as_string":"2017-02-07T00:18:00.000Z","key":1486426680000,"doc_count":13},{"key_as_string":"2017-02-07T00:19:00.000Z","key":1486426740000,"doc_count":9},{"key_as_string":"2017-02-07T00:20:00.000Z","key":1486426800000,"doc_count":11},{"key_as_string":"2017-02-07T00:21:00.000Z","key":1486426860000,"doc_count":9},{"key_as_string":"2017-02-07T00:22:00.000Z","key":1486426920000,"doc_count":9},{"key_as_string":"2017-02-07T00:23:00.000Z","key":1486426980000,"doc_count":12},{"key_as_string":"2017-02-07T00:24:00.000Z","key":1486427040000,"doc_count":11},{"key_as_string":"2017-02-07T00:25:00.000Z","key":1486427100000,"doc_count":11},{"key_as_string":"2017-02-07T00:26:00.000Z","key":1486427160000,"doc_count":8},{"key_as_string":"2017-02-07T00:27:00.000Z","key":1486427220000,"doc_count":12},{"key_as_string":"2017-02-07T00:28:00.000Z","key":1486427280000,"doc_count":7},{"key_as_string":"2017-02-07T00:29:00.000Z","key":1486427340000,"doc_count":12},{"key_as_string":"2017-02-07T00:30:00.000Z","key":1486427400000,"doc_count":13},{"key_as_string":"2017-02-07T00:31:00.000Z","key":1486427460000,"doc_count":10},{"key_as_string":"2017-02-07T00:32:00.000Z","key":1486427520000,"doc_count":13},{"key_as_string":"2017-02-07T00:33:00.000Z","key":1486427580000,"doc_count":13},{"key_as_string":"2017-02-07T00:34:00.000Z","key":1486427640000,"doc_count":11},{"key_as_string":"2017-02-07T00:35:00.000Z","key":1486427700000,"doc_count":9},{"key_as_string":"2017-02-07T00:36:00.000Z","key":1486427760000,"doc_count":11},{"key_as_string":"2017-02-07T00:37:00.000Z","key":1486427820000,"doc_count":15},{"key_as_string":"2017-02-07T00:38:00.000Z","key":1486427880000,"doc_count":7},{"key_as_string":"2017-02-07T00:39:00.000Z","key":1486427940000,"doc_count":13},{"key_as_string":"2017-02-07T00:40:00.000Z","key":1486428000000,"doc_count":9},{"key_as_string":"2017-02-07T00:41:00.000Z","key":1486428060000,"doc_count":12},{"key_as_string":"2017-02-07T00:42:00.000Z","key":1486428120000,"doc_count":16},{"key_as_string":"2017-02-07T00:43:00.000Z","key":1486428180000,"doc_count":7},{"key_as_string":"2017-02-07T00:44:00.000Z","key":1486428240000,"doc_count":6},{"key_as_string":"2017-02-07T00:45:00.000Z","key":1486428300000,"doc_count":12},{"key_as_string":"2017-02-07T00:46:00.000Z","key":1486428360000,"doc_count":11},{"key_as_string":"2017-02-07T00:47:00.000Z","key":1486428420000,"doc_count":12},{"key_as_string":"2017-02-07T00:48:00.000Z","key":1486428480000,"doc_count":13},{"key_as_string":"2017-02-07T00:49:00.000Z","key":1486428540000,"doc_count":10},{"key_as_string":"2017-02-07T00:50:00.000Z","key":1486428600000,"doc_count":13},{"key_as_string":"2017-02-07T00:51:00.000Z","key":1486428660000,"doc_count":7},{"key_as_string":"2017-02-07T00:52:00.000Z","key":1486428720000,"doc_count":11},{"key_as_string":"2017-02-07T00:53:00.000Z","key":1486428780000,"doc_count":12},{"key_as_string":"2017-02-07T00:54:00.000Z","key":1486428840000,"doc_count":16},{"key_as_string":"2017-02-07T00:55:00.000Z","key":1486428900000,"doc_count":8},{"key_as_string":"2017-02-07T00:56:00.000Z","key":1486428960000,"doc_count":12},{"key_as_string":"2017-02-07T00:57:00.000Z","key":1486429020000,"doc_count":12},{"key_as_string":"2017-02-07T00:58:00.000Z","key":1486429080000,"doc_count":8},{"key_as_string":"2017-02-07T00:59:00.000Z","key":1486429140000,"doc_count":11},{"key_as_string":"2017-02-07T01:00:00.000Z","key":1486429200000,"doc_count":8},{"key_as_string":"2017-02-07T01:01:00.000Z","key":1486429260000,"doc_count":7},{"key_as_string":"2017-02-07T01:02:00.000Z","key":1486429320000,"doc_count":6},{"key_as_string":"2017-02-07T01:03:00.000Z","key":1486429380000,"doc_count":15},{"key_as_string":"2017-02-07T01:04:00.000Z","key":1486429440000,"doc_count":12},{"key_as_string":"2017-02-07T01:05:00.000Z","key":1486429500000,"doc_count":5},{"key_as_string":"2017-02-07T01:06:00.000Z","key":1486429560000,"doc_count":11},{"key_as_string":"2017-02-07T01:07:00.000Z","key":1486429620000,"doc_count":15},{"key_as_string":"2017-02-07T01:08:00.000Z","key":1486429680000,"doc_count":8},{"key_as_string":"2017-02-07T01:09:00.000Z","key":1486429740000,"doc_count":14},{"key_as_string":"2017-02-07T01:10:00.000Z","key":1486429800000,"doc_count":8},{"key_as_string":"2017-02-07T01:11:00.000Z","key":1486429860000,"doc_count":6},{"key_as_string":"2017-02-07T01:12:00.000Z","key":1486429920000,"doc_count":16},{"key_as_string":"2017-02-07T01:13:00.000Z","key":1486429980000,"doc_count":10},{"key_as_string":"2017-02-07T01:14:00.000Z","key":1486430040000,"doc_count":8},{"key_as_string":"2017-02-07T01:15:00.000Z","key":1486430100000,"doc_count":12},{"key_as_string":"2017-02-07T01:16:00.000Z","key":1486430160000,"doc_count":13},{"key_as_string":"2017-02-07T01:17:00.000Z","key":1486430220000,"doc_count":10},{"key_as_string":"2017-02-07T01:18:00.000Z","key":1486430280000,"doc_count":11},{"key_as_string":"2017-02-07T01:19:00.000Z","key":1486430340000,"doc_count":12},{"key_as_string":"2017-02-07T01:20:00.000Z","key":1486430400000,"doc_count":12},{"key_as_string":"2017-02-07T01:21:00.000Z","key":1486430460000,"doc_count":12},{"key_as_string":"2017-02-07T01:22:00.000Z","key":1486430520000,"doc_count":7},{"key_as_string":"2017-02-07T01:23:00.000Z","key":1486430580000,"doc_count":13},{"key_as_string":"2017-02-07T01:24:00.000Z","key":1486430640000,"doc_count":5},{"key_as_string":"2017-02-07T01:25:00.000Z","key":1486430700000,"doc_count":11},{"key_as_string":"2017-02-07T01:26:00.000Z","key":1486430760000,"doc_count":11},{"key_as_string":"2017-02-07T01:27:00.000Z","key":1486430820000,"doc_count":9},{"key_as_string":"2017-02-07T01:28:00.000Z","key":1486430880000,"doc_count":11},{"key_as_string":"2017-02-07T01:29:00.000Z","key":1486430940000,"doc_count":10},{"key_as_string":"2017-02-07T01:30:00.000Z","key":1486431000000,"doc_count":10},{"key_as_string":"2017-02-07T01:31:00.000Z","key":1486431060000,"doc_count":12},{"key_as_string":"2017-02-07T01:32:00.000Z","key":1486431120000,"doc_count":12},{"key_as_string":"2017-02-07T01:33:00.000Z","key":1486431180000,"doc_count":10},{"key_as_string":"2017-02-07T01:34:00.000Z","key":1486431240000,"doc_count":10},{"key_as_string":"2017-02-07T01:35:00.000Z","key":1486431300000,"doc_count":10},{"key_as_string":"2017-02-07T01:36:00.000Z","key":1486431360000,"doc_count":14},{"key_as_string":"2017-02-07T01:37:00.000Z","key":1486431420000,"doc_count":9},{"key_as_string":"2017-02-07T01:38:00.000Z","key":1486431480000,"doc_count":8},{"key_as_string":"2017-02-07T01:39:00.000Z","key":1486431540000,"doc_count":16},{"key_as_string":"2017-02-07T01:40:00.000Z","key":1486431600000,"doc_count":8},{"key_as_string":"2017-02-07T01:41:00.000Z","key":1486431660000,"doc_count":11},{"key_as_string":"2017-02-07T01:42:00.000Z","key":1486431720000,"doc_count":12},{"key_as_string":"2017-02-07T01:43:00.000Z","key":1486431780000,"doc_count":10},{"key_as_string":"2017-02-07T01:44:00.000Z","key":1486431840000,"doc_count":16},{"key_as_string":"2017-02-07T01:45:00.000Z","key":1486431900000,"doc_count":10},{"key_as_string":"2017-02-07T01:46:00.000Z","key":1486431960000,"doc_count":7},{"key_as_string":"2017-02-07T01:47:00.000Z","key":1486432020000,"doc_count":10},{"key_as_string":"2017-02-07T01:48:00.000Z","key":1486432080000,"doc_count":5},{"key_as_string":"2017-02-07T01:49:00.000Z","key":1486432140000,"doc_count":11},{"key_as_string":"2017-02-07T01:50:00.000Z","key":1486432200000,"doc_count":7},{"key_as_string":"2017-02-07T01:51:00.000Z","key":1486432260000,"doc_count":16},{"key_as_string":"2017-02-07T01:52:00.000Z","key":1486432320000,"doc_count":8},{"key_as_string":"2017-02-07T01:53:00.000Z","key":1486432380000,"doc_count":14},{"key_as_string":"2017-02-07T01:54:00.000Z","key":1486432440000,"doc_count":10},{"key_as_string":"2017-02-07T01:55:00.000Z","key":1486432500000,"doc_count":8},{"key_as_string":"2017-02-07T01:56:00.000Z","key":1486432560000,"doc_count":12},{"key_as_string":"2017-02-07T01:57:00.000Z","key":1486432620000,"doc_count":14},{"key_as_string":"2017-02-07T01:58:00.000Z","key":1486432680000,"doc_count":9},{"key_as_string":"2017-02-07T01:59:00.000Z","key":1486432740000,"doc_count":10},{"key_as_string":"2017-02-07T02:00:00.000Z","key":1486432800000,"doc_count":9},{"key_as_string":"2017-02-07T02:01:00.000Z","key":1486432860000,"doc_count":14},{"key_as_string":"2017-02-07T02:02:00.000Z","key":1486432920000,"doc_count":10},{"key_as_string":"2017-02-07T02:03:00.000Z","key":1486432980000,"doc_count":7},{"key_as_string":"2017-02-07T02:04:00.000Z","key":1486433040000,"doc_count":8},{"key_as_string":"2017-02-07T02:05:00.000Z","key":1486433100000,"doc_count":8},{"key_as_string":"2017-02-07T02:06:00.000Z","key":1486433160000,"doc_count":14},{"key_as_string":"2017-02-07T02:07:00.000Z","key":1486433220000,"doc_count":10},{"key_as_string":"2017-02-07T02:08:00.000Z","key":1486433280000,"doc_count":7},{"key_as_string":"2017-02-07T02:09:00.000Z","key":1486433340000,"doc_count":11},{"key_as_string":"2017-02-07T02:10:00.000Z","key":1486433400000,"doc_count":6},{"key_as_string":"2017-02-07T02:11:00.000Z","key":1486433460000,"doc_count":8},{"key_as_string":"2017-02-07T02:12:00.000Z","key":1486433520000,"doc_count":7},{"key_as_string":"2017-02-07T02:13:00.000Z","key":1486433580000,"doc_count":15},{"key_as_string":"2017-02-07T02:14:00.000Z","key":1486433640000,"doc_count":8},{"key_as_string":"2017-02-07T02:15:00.000Z","key":1486433700000,"doc_count":14},{"key_as_string":"2017-02-07T02:16:00.000Z","key":1486433760000,"doc_count":5},{"key_as_string":"2017-02-07T02:17:00.000Z","key":1486433820000,"doc_count":9},{"key_as_string":"2017-02-07T02:18:00.000Z","key":1486433880000,"doc_count":7},{"key_as_string":"2017-02-07T02:19:00.000Z","key":1486433940000,"doc_count":8},{"key_as_string":"2017-02-07T02:20:00.000Z","key":1486434000000,"doc_count":13},{"key_as_string":"2017-02-07T02:21:00.000Z","key":1486434060000,"doc_count":13},{"key_as_string":"2017-02-07T02:22:00.000Z","key":1486434120000,"doc_count":13},{"key_as_string":"2017-02-07T02:23:00.000Z","key":1486434180000,"doc_count":8},{"key_as_string":"2017-02-07T02:24:00.000Z","key":1486434240000,"doc_count":11},{"key_as_string":"2017-02-07T02:25:00.000Z","key":1486434300000,"doc_count":9},{"key_as_string":"2017-02-07T02:26:00.000Z","key":1486434360000,"doc_count":11},{"key_as_string":"2017-02-07T02:27:00.000Z","key":1486434420000,"doc_count":14},{"key_as_string":"2017-02-07T02:28:00.000Z","key":1486434480000,"doc_count":9},{"key_as_string":"2017-02-07T02:29:00.000Z","key":1486434540000,"doc_count":15},{"key_as_string":"2017-02-07T02:30:00.000Z","key":1486434600000,"doc_count":13},{"key_as_string":"2017-02-07T02:31:00.000Z","key":1486434660000,"doc_count":6},{"key_as_string":"2017-02-07T02:32:00.000Z","key":1486434720000,"doc_count":16},{"key_as_string":"2017-02-07T02:33:00.000Z","key":1486434780000,"doc_count":11},{"key_as_string":"2017-02-07T02:34:00.000Z","key":1486434840000,"doc_count":9},{"key_as_string":"2017-02-07T02:35:00.000Z","key":1486434900000,"doc_count":11},{"key_as_string":"2017-02-07T02:36:00.000Z","key":1486434960000,"doc_count":15},{"key_as_string":"2017-02-07T02:37:00.000Z","key":1486435020000,"doc_count":6},{"key_as_string":"2017-02-07T02:38:00.000Z","key":1486435080000,"doc_count":11},{"key_as_string":"2017-02-07T02:39:00.000Z","key":1486435140000,"doc_count":5},{"key_as_string":"2017-02-07T02:40:00.000Z","key":1486435200000,"doc_count":14},{"key_as_string":"2017-02-07T02:41:00.000Z","key":1486435260000,"doc_count":9},{"key_as_string":"2017-02-07T02:42:00.000Z","key":1486435320000,"doc_count":9},{"key_as_string":"2017-02-07T02:43:00.000Z","key":1486435380000,"doc_count":9},{"key_as_string":"2017-02-07T02:44:00.000Z","key":1486435440000,"doc_count":16},{"key_as_string":"2017-02-07T02:45:00.000Z","key":1486435500000,"doc_count":10},{"key_as_string":"2017-02-07T02:46:00.000Z","key":1486435560000,"doc_count":8},{"key_as_string":"2017-02-07T02:47:00.000Z","key":1486435620000,"doc_count":10},{"key_as_string":"2017-02-07T02:48:00.000Z","key":1486435680000,"doc_count":11},{"key_as_string":"2017-02-07T02:49:00.000Z","key":1486435740000,"doc_count":13},{"key_as_string":"2017-02-07T02:50:00.000Z","key":1486435800000,"doc_count":9},{"key_as_string":"2017-02-07T02:51:00.000Z","key":1486435860000,"doc_count":14},{"key_as_string":"2017-02-07T02:52:00.000Z","key":1486435920000,"doc_count":17},{"key_as_string":"2017-02-07T02:53:00.000Z","key":1486435980000,"doc_count":10},{"key_as_string":"2017-02-07T02:54:00.000Z","key":1486436040000,"doc_count":8},{"key_as_string":"2017-02-07T02:55:00.000Z","key":1486436100000,"doc_count":10},{"key_as_string":"2017-02-07T02:56:00.000Z","key":1486436160000,"doc_count":9},{"key_as_string":"2017-02-07T02:57:00.000Z","key":1486436220000,"doc_count":9},{"key_as_string":"2017-02-07T02:58:00.000Z","key":1486436280000,"doc_count":12},{"key_as_string":"2017-02-07T02:59:00.000Z","key":1486436340000,"doc_count":8},{"key_as_string":"2017-02-07T03:00:00.000Z","key":1486436400000,"doc_count":11},{"key_as_string":"2017-02-07T03:01:00.000Z","key":1486436460000,"doc_count":12},{"key_as_string":"2017-02-07T03:02:00.000Z","key":1486436520000,"doc_count":7},{"key_as_string":"2017-02-07T03:03:00.000Z","key":1486436580000,"doc_count":16},{"key_as_string":"2017-02-07T03:04:00.000Z","key":1486436640000,"doc_count":13},{"key_as_string":"2017-02-07T03:05:00.000Z","key":1486436700000,"doc_count":10},{"key_as_string":"2017-02-07T03:06:00.000Z","key":1486436760000,"doc_count":11},{"key_as_string":"2017-02-07T03:07:00.000Z","key":1486436820000,"doc_count":6},{"key_as_string":"2017-02-07T03:08:00.000Z","key":1486436880000,"doc_count":9},{"key_as_string":"2017-02-07T03:09:00.000Z","key":1486436940000,"doc_count":7},{"key_as_string":"2017-02-07T03:10:00.000Z","key":1486437000000,"doc_count":14},{"key_as_string":"2017-02-07T03:11:00.000Z","key":1486437060000,"doc_count":9},{"key_as_string":"2017-02-07T03:12:00.000Z","key":1486437120000,"doc_count":12},{"key_as_string":"2017-02-07T03:13:00.000Z","key":1486437180000,"doc_count":10},{"key_as_string":"2017-02-07T03:14:00.000Z","key":1486437240000,"doc_count":9},{"key_as_string":"2017-02-07T03:15:00.000Z","key":1486437300000,"doc_count":12},{"key_as_string":"2017-02-07T03:16:00.000Z","key":1486437360000,"doc_count":12},{"key_as_string":"2017-02-07T03:17:00.000Z","key":1486437420000,"doc_count":8},{"key_as_string":"2017-02-07T03:18:00.000Z","key":1486437480000,"doc_count":13},{"key_as_string":"2017-02-07T03:19:00.000Z","key":1486437540000,"doc_count":12},{"key_as_string":"2017-02-07T03:20:00.000Z","key":1486437600000,"doc_count":8},{"key_as_string":"2017-02-07T03:21:00.000Z","key":1486437660000,"doc_count":20},{"key_as_string":"2017-02-07T03:22:00.000Z","key":1486437720000,"doc_count":8},{"key_as_string":"2017-02-07T03:23:00.000Z","key":1486437780000,"doc_count":9},{"key_as_string":"2017-02-07T03:24:00.000Z","key":1486437840000,"doc_count":12},{"key_as_string":"2017-02-07T03:25:00.000Z","key":1486437900000,"doc_count":9},{"key_as_string":"2017-02-07T03:26:00.000Z","key":1486437960000,"doc_count":9},{"key_as_string":"2017-02-07T03:27:00.000Z","key":1486438020000,"doc_count":12},{"key_as_string":"2017-02-07T03:28:00.000Z","key":1486438080000,"doc_count":12},{"key_as_string":"2017-02-07T03:29:00.000Z","key":1486438140000,"doc_count":7},{"key_as_string":"2017-02-07T03:30:00.000Z","key":1486438200000,"doc_count":12},{"key_as_string":"2017-02-07T03:31:00.000Z","key":1486438260000,"doc_count":15},{"key_as_string":"2017-02-07T03:32:00.000Z","key":1486438320000,"doc_count":12},{"key_as_string":"2017-02-07T03:33:00.000Z","key":1486438380000,"doc_count":9},{"key_as_string":"2017-02-07T03:34:00.000Z","key":1486438440000,"doc_count":9},{"key_as_string":"2017-02-07T03:35:00.000Z","key":1486438500000,"doc_count":12},{"key_as_string":"2017-02-07T03:36:00.000Z","key":1486438560000,"doc_count":8},{"key_as_string":"2017-02-07T03:37:00.000Z","key":1486438620000,"doc_count":12},{"key_as_string":"2017-02-07T03:38:00.000Z","key":1486438680000,"doc_count":13},{"key_as_string":"2017-02-07T03:39:00.000Z","key":1486438740000,"doc_count":10},{"key_as_string":"2017-02-07T03:40:00.000Z","key":1486438800000,"doc_count":8},{"key_as_string":"2017-02-07T03:41:00.000Z","key":1486438860000,"doc_count":10},{"key_as_string":"2017-02-07T03:42:00.000Z","key":1486438920000,"doc_count":12},{"key_as_string":"2017-02-07T03:43:00.000Z","key":1486438980000,"doc_count":9},{"key_as_string":"2017-02-07T03:44:00.000Z","key":1486439040000,"doc_count":13},{"key_as_string":"2017-02-07T03:45:00.000Z","key":1486439100000,"doc_count":11},{"key_as_string":"2017-02-07T03:46:00.000Z","key":1486439160000,"doc_count":16},{"key_as_string":"2017-02-07T03:47:00.000Z","key":1486439220000,"doc_count":10},{"key_as_string":"2017-02-07T03:48:00.000Z","key":1486439280000,"doc_count":10},{"key_as_string":"2017-02-07T03:49:00.000Z","key":1486439340000,"doc_count":10},{"key_as_string":"2017-02-07T03:50:00.000Z","key":1486439400000,"doc_count":10},{"key_as_string":"2017-02-07T03:51:00.000Z","key":1486439460000,"doc_count":8},{"key_as_string":"2017-02-07T03:52:00.000Z","key":1486439520000,"doc_count":8},{"key_as_string":"2017-02-07T03:53:00.000Z","key":1486439580000,"doc_count":14},{"key_as_string":"2017-02-07T03:54:00.000Z","key":1486439640000,"doc_count":12},{"key_as_string":"2017-02-07T03:55:00.000Z","key":1486439700000,"doc_count":9},{"key_as_string":"2017-02-07T03:56:00.000Z","key":1486439760000,"doc_count":10},{"key_as_string":"2017-02-07T03:57:00.000Z","key":1486439820000,"doc_count":15},{"key_as_string":"2017-02-07T03:58:00.000Z","key":1486439880000,"doc_count":8},{"key_as_string":"2017-02-07T03:59:00.000Z","key":1486439940000,"doc_count":13},{"key_as_string":"2017-02-07T04:00:00.000Z","key":1486440000000,"doc_count":9},{"key_as_string":"2017-02-07T04:01:00.000Z","key":1486440060000,"doc_count":13},{"key_as_string":"2017-02-07T04:02:00.000Z","key":1486440120000,"doc_count":7},{"key_as_string":"2017-02-07T04:03:00.000Z","key":1486440180000,"doc_count":10},{"key_as_string":"2017-02-07T04:04:00.000Z","key":1486440240000,"doc_count":15},{"key_as_string":"2017-02-07T04:05:00.000Z","key":1486440300000,"doc_count":12},{"key_as_string":"2017-02-07T04:06:00.000Z","key":1486440360000,"doc_count":10},{"key_as_string":"2017-02-07T04:07:00.000Z","key":1486440420000,"doc_count":9},{"key_as_string":"2017-02-07T04:08:00.000Z","key":1486440480000,"doc_count":8},{"key_as_string":"2017-02-07T04:09:00.000Z","key":1486440540000,"doc_count":12},{"key_as_string":"2017-02-07T04:10:00.000Z","key":1486440600000,"doc_count":10},{"key_as_string":"2017-02-07T04:11:00.000Z","key":1486440660000,"doc_count":11},{"key_as_string":"2017-02-07T04:12:00.000Z","key":1486440720000,"doc_count":9},{"key_as_string":"2017-02-07T04:13:00.000Z","key":1486440780000,"doc_count":14},{"key_as_string":"2017-02-07T04:14:00.000Z","key":1486440840000,"doc_count":16},{"key_as_string":"2017-02-07T04:15:00.000Z","key":1486440900000,"doc_count":12},{"key_as_string":"2017-02-07T04:16:00.000Z","key":1486440960000,"doc_count":12},{"key_as_string":"2017-02-07T04:17:00.000Z","key":1486441020000,"doc_count":12},{"key_as_string":"2017-02-07T04:18:00.000Z","key":1486441080000,"doc_count":10},{"key_as_string":"2017-02-07T04:19:00.000Z","key":1486441140000,"doc_count":14},{"key_as_string":"2017-02-07T04:20:00.000Z","key":1486441200000,"doc_count":10},{"key_as_string":"2017-02-07T04:21:00.000Z","key":1486441260000,"doc_count":13},{"key_as_string":"2017-02-07T04:22:00.000Z","key":1486441320000,"doc_count":13},{"key_as_string":"2017-02-07T04:23:00.000Z","key":1486441380000,"doc_count":8},{"key_as_string":"2017-02-07T04:24:00.000Z","key":1486441440000,"doc_count":10},{"key_as_string":"2017-02-07T04:25:00.000Z","key":1486441500000,"doc_count":14},{"key_as_string":"2017-02-07T04:26:00.000Z","key":1486441560000,"doc_count":6},{"key_as_string":"2017-02-07T04:27:00.000Z","key":1486441620000,"doc_count":15},{"key_as_string":"2017-02-07T04:28:00.000Z","key":1486441680000,"doc_count":12},{"key_as_string":"2017-02-07T04:29:00.000Z","key":1486441740000,"doc_count":11},{"key_as_string":"2017-02-07T04:30:00.000Z","key":1486441800000,"doc_count":8},{"key_as_string":"2017-02-07T04:31:00.000Z","key":1486441860000,"doc_count":8},{"key_as_string":"2017-02-07T04:32:00.000Z","key":1486441920000,"doc_count":14},{"key_as_string":"2017-02-07T04:33:00.000Z","key":1486441980000,"doc_count":10},{"key_as_string":"2017-02-07T04:34:00.000Z","key":1486442040000,"doc_count":12},{"key_as_string":"2017-02-07T04:35:00.000Z","key":1486442100000,"doc_count":13},{"key_as_string":"2017-02-07T04:36:00.000Z","key":1486442160000,"doc_count":7},{"key_as_string":"2017-02-07T04:37:00.000Z","key":1486442220000,"doc_count":11},{"key_as_string":"2017-02-07T04:38:00.000Z","key":1486442280000,"doc_count":10},{"key_as_string":"2017-02-07T04:39:00.000Z","key":1486442340000,"doc_count":13},{"key_as_string":"2017-02-07T04:40:00.000Z","key":1486442400000,"doc_count":10},{"key_as_string":"2017-02-07T04:41:00.000Z","key":1486442460000,"doc_count":17},{"key_as_string":"2017-02-07T04:42:00.000Z","key":1486442520000,"doc_count":9},{"key_as_string":"2017-02-07T04:43:00.000Z","key":1486442580000,"doc_count":14},{"key_as_string":"2017-02-07T04:44:00.000Z","key":1486442640000,"doc_count":11},{"key_as_string":"2017-02-07T04:45:00.000Z","key":1486442700000,"doc_count":12},{"key_as_string":"2017-02-07T04:46:00.000Z","key":1486442760000,"doc_count":10},{"key_as_string":"2017-02-07T04:47:00.000Z","key":1486442820000,"doc_count":17},{"key_as_string":"2017-02-07T04:48:00.000Z","key":1486442880000,"doc_count":7},{"key_as_string":"2017-02-07T04:49:00.000Z","key":1486442940000,"doc_count":12},{"key_as_string":"2017-02-07T04:50:00.000Z","key":1486443000000,"doc_count":7},{"key_as_string":"2017-02-07T04:51:00.000Z","key":1486443060000,"doc_count":12},{"key_as_string":"2017-02-07T04:52:00.000Z","key":1486443120000,"doc_count":14},{"key_as_string":"2017-02-07T04:53:00.000Z","key":1486443180000,"doc_count":6},{"key_as_string":"2017-02-07T04:54:00.000Z","key":1486443240000,"doc_count":10},{"key_as_string":"2017-02-07T04:55:00.000Z","key":1486443300000,"doc_count":16},{"key_as_string":"2017-02-07T04:56:00.000Z","key":1486443360000,"doc_count":7},{"key_as_string":"2017-02-07T04:57:00.000Z","key":1486443420000,"doc_count":6},{"key_as_string":"2017-02-07T04:58:00.000Z","key":1486443480000,"doc_count":11},{"key_as_string":"2017-02-07T04:59:00.000Z","key":1486443540000,"doc_count":14},{"key_as_string":"2017-02-07T05:00:00.000Z","key":1486443600000,"doc_count":10},{"key_as_string":"2017-02-07T05:01:00.000Z","key":1486443660000,"doc_count":9},{"key_as_string":"2017-02-07T05:02:00.000Z","key":1486443720000,"doc_count":6},{"key_as_string":"2017-02-07T05:03:00.000Z","key":1486443780000,"doc_count":11},{"key_as_string":"2017-02-07T05:04:00.000Z","key":1486443840000,"doc_count":14},{"key_as_string":"2017-02-07T05:05:00.000Z","key":1486443900000,"doc_count":12},{"key_as_string":"2017-02-07T05:06:00.000Z","key":1486443960000,"doc_count":7},{"key_as_string":"2017-02-07T05:07:00.000Z","key":1486444020000,"doc_count":15},{"key_as_string":"2017-02-07T05:08:00.000Z","key":1486444080000,"doc_count":12},{"key_as_string":"2017-02-07T05:09:00.000Z","key":1486444140000,"doc_count":7},{"key_as_string":"2017-02-07T05:10:00.000Z","key":1486444200000,"doc_count":14},{"key_as_string":"2017-02-07T05:11:00.000Z","key":1486444260000,"doc_count":10},{"key_as_string":"2017-02-07T05:12:00.000Z","key":1486444320000,"doc_count":12},{"key_as_string":"2017-02-07T05:13:00.000Z","key":1486444380000,"doc_count":12},{"key_as_string":"2017-02-07T05:14:00.000Z","key":1486444440000,"doc_count":12},{"key_as_string":"2017-02-07T05:15:00.000Z","key":1486444500000,"doc_count":11},{"key_as_string":"2017-02-07T05:16:00.000Z","key":1486444560000,"doc_count":10},{"key_as_string":"2017-02-07T05:17:00.000Z","key":1486444620000,"doc_count":12},{"key_as_string":"2017-02-07T05:18:00.000Z","key":1486444680000,"doc_count":9},{"key_as_string":"2017-02-07T05:19:00.000Z","key":1486444740000,"doc_count":14},{"key_as_string":"2017-02-07T05:20:00.000Z","key":1486444800000,"doc_count":7},{"key_as_string":"2017-02-07T05:21:00.000Z","key":1486444860000,"doc_count":12},{"key_as_string":"2017-02-07T05:22:00.000Z","key":1486444920000,"doc_count":10},{"key_as_string":"2017-02-07T05:23:00.000Z","key":1486444980000,"doc_count":14},{"key_as_string":"2017-02-07T05:24:00.000Z","key":1486445040000,"doc_count":14},{"key_as_string":"2017-02-07T05:25:00.000Z","key":1486445100000,"doc_count":5},{"key_as_string":"2017-02-07T05:26:00.000Z","key":1486445160000,"doc_count":10},{"key_as_string":"2017-02-07T05:27:00.000Z","key":1486445220000,"doc_count":10},{"key_as_string":"2017-02-07T05:28:00.000Z","key":1486445280000,"doc_count":13},{"key_as_string":"2017-02-07T05:29:00.000Z","key":1486445340000,"doc_count":12},{"key_as_string":"2017-02-07T05:30:00.000Z","key":1486445400000,"doc_count":13},{"key_as_string":"2017-02-07T05:31:00.000Z","key":1486445460000,"doc_count":13},{"key_as_string":"2017-02-07T05:32:00.000Z","key":1486445520000,"doc_count":13},{"key_as_string":"2017-02-07T05:33:00.000Z","key":1486445580000,"doc_count":16},{"key_as_string":"2017-02-07T05:34:00.000Z","key":1486445640000,"doc_count":10},{"key_as_string":"2017-02-07T05:35:00.000Z","key":1486445700000,"doc_count":16},{"key_as_string":"2017-02-07T05:36:00.000Z","key":1486445760000,"doc_count":14},{"key_as_string":"2017-02-07T05:37:00.000Z","key":1486445820000,"doc_count":10},{"key_as_string":"2017-02-07T05:38:00.000Z","key":1486445880000,"doc_count":11},{"key_as_string":"2017-02-07T05:39:00.000Z","key":1486445940000,"doc_count":13},{"key_as_string":"2017-02-07T05:40:00.000Z","key":1486446000000,"doc_count":16},{"key_as_string":"2017-02-07T05:41:00.000Z","key":1486446060000,"doc_count":9},{"key_as_string":"2017-02-07T05:42:00.000Z","key":1486446120000,"doc_count":10},{"key_as_string":"2017-02-07T05:43:00.000Z","key":1486446180000,"doc_count":16},{"key_as_string":"2017-02-07T05:44:00.000Z","key":1486446240000,"doc_count":18},{"key_as_string":"2017-02-07T05:45:00.000Z","key":1486446300000,"doc_count":10},{"key_as_string":"2017-02-07T05:46:00.000Z","key":1486446360000,"doc_count":9},{"key_as_string":"2017-02-07T05:47:00.000Z","key":1486446420000,"doc_count":7},{"key_as_string":"2017-02-07T05:48:00.000Z","key":1486446480000,"doc_count":10},{"key_as_string":"2017-02-07T05:49:00.000Z","key":1486446540000,"doc_count":17},{"key_as_string":"2017-02-07T05:50:00.000Z","key":1486446600000,"doc_count":8},{"key_as_string":"2017-02-07T05:51:00.000Z","key":1486446660000,"doc_count":10},{"key_as_string":"2017-02-07T05:52:00.000Z","key":1486446720000,"doc_count":10},{"key_as_string":"2017-02-07T05:53:00.000Z","key":1486446780000,"doc_count":13},{"key_as_string":"2017-02-07T05:54:00.000Z","key":1486446840000,"doc_count":9},{"key_as_string":"2017-02-07T05:55:00.000Z","key":1486446900000,"doc_count":11},{"key_as_string":"2017-02-07T05:56:00.000Z","key":1486446960000,"doc_count":14},{"key_as_string":"2017-02-07T05:57:00.000Z","key":1486447020000,"doc_count":15},{"key_as_string":"2017-02-07T05:58:00.000Z","key":1486447080000,"doc_count":14},{"key_as_string":"2017-02-07T05:59:00.000Z","key":1486447140000,"doc_count":6},{"key_as_string":"2017-02-07T06:00:00.000Z","key":1486447200000,"doc_count":14},{"key_as_string":"2017-02-07T06:01:00.000Z","key":1486447260000,"doc_count":18},{"key_as_string":"2017-02-07T06:02:00.000Z","key":1486447320000,"doc_count":9},{"key_as_string":"2017-02-07T06:03:00.000Z","key":1486447380000,"doc_count":14},{"key_as_string":"2017-02-07T06:04:00.000Z","key":1486447440000,"doc_count":12},{"key_as_string":"2017-02-07T06:05:00.000Z","key":1486447500000,"doc_count":14},{"key_as_string":"2017-02-07T06:06:00.000Z","key":1486447560000,"doc_count":11},{"key_as_string":"2017-02-07T06:07:00.000Z","key":1486447620000,"doc_count":12},{"key_as_string":"2017-02-07T06:08:00.000Z","key":1486447680000,"doc_count":20},{"key_as_string":"2017-02-07T06:09:00.000Z","key":1486447740000,"doc_count":9},{"key_as_string":"2017-02-07T06:10:00.000Z","key":1486447800000,"doc_count":10},{"key_as_string":"2017-02-07T06:11:00.000Z","key":1486447860000,"doc_count":13},{"key_as_string":"2017-02-07T06:12:00.000Z","key":1486447920000,"doc_count":10},{"key_as_string":"2017-02-07T06:13:00.000Z","key":1486447980000,"doc_count":13},{"key_as_string":"2017-02-07T06:14:00.000Z","key":1486448040000,"doc_count":10},{"key_as_string":"2017-02-07T06:15:00.000Z","key":1486448100000,"doc_count":17},{"key_as_string":"2017-02-07T06:16:00.000Z","key":1486448160000,"doc_count":7},{"key_as_string":"2017-02-07T06:17:00.000Z","key":1486448220000,"doc_count":9},{"key_as_string":"2017-02-07T06:18:00.000Z","key":1486448280000,"doc_count":12},{"key_as_string":"2017-02-07T06:19:00.000Z","key":1486448340000,"doc_count":8},{"key_as_string":"2017-02-07T06:20:00.000Z","key":1486448400000,"doc_count":21},{"key_as_string":"2017-02-07T06:21:00.000Z","key":1486448460000,"doc_count":10},{"key_as_string":"2017-02-07T06:22:00.000Z","key":1486448520000,"doc_count":13},{"key_as_string":"2017-02-07T06:23:00.000Z","key":1486448580000,"doc_count":12},{"key_as_string":"2017-02-07T06:24:00.000Z","key":1486448640000,"doc_count":13},{"key_as_string":"2017-02-07T06:25:00.000Z","key":1486448700000,"doc_count":11},{"key_as_string":"2017-02-07T06:26:00.000Z","key":1486448760000,"doc_count":16},{"key_as_string":"2017-02-07T06:27:00.000Z","key":1486448820000,"doc_count":5},{"key_as_string":"2017-02-07T06:28:00.000Z","key":1486448880000,"doc_count":11},{"key_as_string":"2017-02-07T06:29:00.000Z","key":1486448940000,"doc_count":14},{"key_as_string":"2017-02-07T06:30:00.000Z","key":1486449000000,"doc_count":8},{"key_as_string":"2017-02-07T06:31:00.000Z","key":1486449060000,"doc_count":13},{"key_as_string":"2017-02-07T06:32:00.000Z","key":1486449120000,"doc_count":17},{"key_as_string":"2017-02-07T06:33:00.000Z","key":1486449180000,"doc_count":15},{"key_as_string":"2017-02-07T06:34:00.000Z","key":1486449240000,"doc_count":6},{"key_as_string":"2017-02-07T06:35:00.000Z","key":1486449300000,"doc_count":13},{"key_as_string":"2017-02-07T06:36:00.000Z","key":1486449360000,"doc_count":8},{"key_as_string":"2017-02-07T06:37:00.000Z","key":1486449420000,"doc_count":12},{"key_as_string":"2017-02-07T06:38:00.000Z","key":1486449480000,"doc_count":13},{"key_as_string":"2017-02-07T06:39:00.000Z","key":1486449540000,"doc_count":12},{"key_as_string":"2017-02-07T06:40:00.000Z","key":1486449600000,"doc_count":11},{"key_as_string":"2017-02-07T06:41:00.000Z","key":1486449660000,"doc_count":14},{"key_as_string":"2017-02-07T06:42:00.000Z","key":1486449720000,"doc_count":6},{"key_as_string":"2017-02-07T06:43:00.000Z","key":1486449780000,"doc_count":13},{"key_as_string":"2017-02-07T06:44:00.000Z","key":1486449840000,"doc_count":11},{"key_as_string":"2017-02-07T06:45:00.000Z","key":1486449900000,"doc_count":11},{"key_as_string":"2017-02-07T06:46:00.000Z","key":1486449960000,"doc_count":21},{"key_as_string":"2017-02-07T06:47:00.000Z","key":1486450020000,"doc_count":9},{"key_as_string":"2017-02-07T06:48:00.000Z","key":1486450080000,"doc_count":11},{"key_as_string":"2017-02-07T06:49:00.000Z","key":1486450140000,"doc_count":10},{"key_as_string":"2017-02-07T06:50:00.000Z","key":1486450200000,"doc_count":11},{"key_as_string":"2017-02-07T06:51:00.000Z","key":1486450260000,"doc_count":11},{"key_as_string":"2017-02-07T06:52:00.000Z","key":1486450320000,"doc_count":12},{"key_as_string":"2017-02-07T06:53:00.000Z","key":1486450380000,"doc_count":8},{"key_as_string":"2017-02-07T06:54:00.000Z","key":1486450440000,"doc_count":13},{"key_as_string":"2017-02-07T06:55:00.000Z","key":1486450500000,"doc_count":7},{"key_as_string":"2017-02-07T06:56:00.000Z","key":1486450560000,"doc_count":9},{"key_as_string":"2017-02-07T06:57:00.000Z","key":1486450620000,"doc_count":7},{"key_as_string":"2017-02-07T06:58:00.000Z","key":1486450680000,"doc_count":10},{"key_as_string":"2017-02-07T06:59:00.000Z","key":1486450740000,"doc_count":19},{"key_as_string":"2017-02-07T07:00:00.000Z","key":1486450800000,"doc_count":11},{"key_as_string":"2017-02-07T07:01:00.000Z","key":1486450860000,"doc_count":9},{"key_as_string":"2017-02-07T07:02:00.000Z","key":1486450920000,"doc_count":14},{"key_as_string":"2017-02-07T07:03:00.000Z","key":1486450980000,"doc_count":13},{"key_as_string":"2017-02-07T07:04:00.000Z","key":1486451040000,"doc_count":14},{"key_as_string":"2017-02-07T07:05:00.000Z","key":1486451100000,"doc_count":10},{"key_as_string":"2017-02-07T07:06:00.000Z","key":1486451160000,"doc_count":14},{"key_as_string":"2017-02-07T07:07:00.000Z","key":1486451220000,"doc_count":8},{"key_as_string":"2017-02-07T07:08:00.000Z","key":1486451280000,"doc_count":10},{"key_as_string":"2017-02-07T07:09:00.000Z","key":1486451340000,"doc_count":15},{"key_as_string":"2017-02-07T07:10:00.000Z","key":1486451400000,"doc_count":17},{"key_as_string":"2017-02-07T07:11:00.000Z","key":1486451460000,"doc_count":10},{"key_as_string":"2017-02-07T07:12:00.000Z","key":1486451520000,"doc_count":10},{"key_as_string":"2017-02-07T07:13:00.000Z","key":1486451580000,"doc_count":10},{"key_as_string":"2017-02-07T07:14:00.000Z","key":1486451640000,"doc_count":10},{"key_as_string":"2017-02-07T07:15:00.000Z","key":1486451700000,"doc_count":12},{"key_as_string":"2017-02-07T07:16:00.000Z","key":1486451760000,"doc_count":12},{"key_as_string":"2017-02-07T07:17:00.000Z","key":1486451820000,"doc_count":17},{"key_as_string":"2017-02-07T07:18:00.000Z","key":1486451880000,"doc_count":10},{"key_as_string":"2017-02-07T07:19:00.000Z","key":1486451940000,"doc_count":13},{"key_as_string":"2017-02-07T07:20:00.000Z","key":1486452000000,"doc_count":12},{"key_as_string":"2017-02-07T07:21:00.000Z","key":1486452060000,"doc_count":13},{"key_as_string":"2017-02-07T07:22:00.000Z","key":1486452120000,"doc_count":15},{"key_as_string":"2017-02-07T07:23:00.000Z","key":1486452180000,"doc_count":13},{"key_as_string":"2017-02-07T07:24:00.000Z","key":1486452240000,"doc_count":12},{"key_as_string":"2017-02-07T07:25:00.000Z","key":1486452300000,"doc_count":12},{"key_as_string":"2017-02-07T07:26:00.000Z","key":1486452360000,"doc_count":11},{"key_as_string":"2017-02-07T07:27:00.000Z","key":1486452420000,"doc_count":11},{"key_as_string":"2017-02-07T07:28:00.000Z","key":1486452480000,"doc_count":14},{"key_as_string":"2017-02-07T07:29:00.000Z","key":1486452540000,"doc_count":16},{"key_as_string":"2017-02-07T07:30:00.000Z","key":1486452600000,"doc_count":9},{"key_as_string":"2017-02-07T07:31:00.000Z","key":1486452660000,"doc_count":12},{"key_as_string":"2017-02-07T07:32:00.000Z","key":1486452720000,"doc_count":17},{"key_as_string":"2017-02-07T07:33:00.000Z","key":1486452780000,"doc_count":9},{"key_as_string":"2017-02-07T07:34:00.000Z","key":1486452840000,"doc_count":15},{"key_as_string":"2017-02-07T07:35:00.000Z","key":1486452900000,"doc_count":13},{"key_as_string":"2017-02-07T07:36:00.000Z","key":1486452960000,"doc_count":14},{"key_as_string":"2017-02-07T07:37:00.000Z","key":1486453020000,"doc_count":14},{"key_as_string":"2017-02-07T07:38:00.000Z","key":1486453080000,"doc_count":9},{"key_as_string":"2017-02-07T07:39:00.000Z","key":1486453140000,"doc_count":10},{"key_as_string":"2017-02-07T07:40:00.000Z","key":1486453200000,"doc_count":12},{"key_as_string":"2017-02-07T07:41:00.000Z","key":1486453260000,"doc_count":11},{"key_as_string":"2017-02-07T07:42:00.000Z","key":1486453320000,"doc_count":18},{"key_as_string":"2017-02-07T07:43:00.000Z","key":1486453380000,"doc_count":7},{"key_as_string":"2017-02-07T07:44:00.000Z","key":1486453440000,"doc_count":13},{"key_as_string":"2017-02-07T07:45:00.000Z","key":1486453500000,"doc_count":14},{"key_as_string":"2017-02-07T07:46:00.000Z","key":1486453560000,"doc_count":13},{"key_as_string":"2017-02-07T07:47:00.000Z","key":1486453620000,"doc_count":15},{"key_as_string":"2017-02-07T07:48:00.000Z","key":1486453680000,"doc_count":13},{"key_as_string":"2017-02-07T07:49:00.000Z","key":1486453740000,"doc_count":15},{"key_as_string":"2017-02-07T07:50:00.000Z","key":1486453800000,"doc_count":12},{"key_as_string":"2017-02-07T07:51:00.000Z","key":1486453860000,"doc_count":15},{"key_as_string":"2017-02-07T07:52:00.000Z","key":1486453920000,"doc_count":12},{"key_as_string":"2017-02-07T07:53:00.000Z","key":1486453980000,"doc_count":9},{"key_as_string":"2017-02-07T07:54:00.000Z","key":1486454040000,"doc_count":12},{"key_as_string":"2017-02-07T07:55:00.000Z","key":1486454100000,"doc_count":13},{"key_as_string":"2017-02-07T07:56:00.000Z","key":1486454160000,"doc_count":12},{"key_as_string":"2017-02-07T07:57:00.000Z","key":1486454220000,"doc_count":9},{"key_as_string":"2017-02-07T07:58:00.000Z","key":1486454280000,"doc_count":12},{"key_as_string":"2017-02-07T07:59:00.000Z","key":1486454340000,"doc_count":12},{"key_as_string":"2017-02-07T08:00:00.000Z","key":1486454400000,"doc_count":14},{"key_as_string":"2017-02-07T08:01:00.000Z","key":1486454460000,"doc_count":13},{"key_as_string":"2017-02-07T08:02:00.000Z","key":1486454520000,"doc_count":11},{"key_as_string":"2017-02-07T08:03:00.000Z","key":1486454580000,"doc_count":14},{"key_as_string":"2017-02-07T08:04:00.000Z","key":1486454640000,"doc_count":6},{"key_as_string":"2017-02-07T08:05:00.000Z","key":1486454700000,"doc_count":13},{"key_as_string":"2017-02-07T08:06:00.000Z","key":1486454760000,"doc_count":11},{"key_as_string":"2017-02-07T08:07:00.000Z","key":1486454820000,"doc_count":14},{"key_as_string":"2017-02-07T08:08:00.000Z","key":1486454880000,"doc_count":14},{"key_as_string":"2017-02-07T08:09:00.000Z","key":1486454940000,"doc_count":9},{"key_as_string":"2017-02-07T08:10:00.000Z","key":1486455000000,"doc_count":11},{"key_as_string":"2017-02-07T08:11:00.000Z","key":1486455060000,"doc_count":8},{"key_as_string":"2017-02-07T08:12:00.000Z","key":1486455120000,"doc_count":14},{"key_as_string":"2017-02-07T08:13:00.000Z","key":1486455180000,"doc_count":9},{"key_as_string":"2017-02-07T08:14:00.000Z","key":1486455240000,"doc_count":10},{"key_as_string":"2017-02-07T08:15:00.000Z","key":1486455300000,"doc_count":14},{"key_as_string":"2017-02-07T08:16:00.000Z","key":1486455360000,"doc_count":12},{"key_as_string":"2017-02-07T08:17:00.000Z","key":1486455420000,"doc_count":11},{"key_as_string":"2017-02-07T08:18:00.000Z","key":1486455480000,"doc_count":18},{"key_as_string":"2017-02-07T08:19:00.000Z","key":1486455540000,"doc_count":13},{"key_as_string":"2017-02-07T08:20:00.000Z","key":1486455600000,"doc_count":13},{"key_as_string":"2017-02-07T08:21:00.000Z","key":1486455660000,"doc_count":10},{"key_as_string":"2017-02-07T08:22:00.000Z","key":1486455720000,"doc_count":10},{"key_as_string":"2017-02-07T08:23:00.000Z","key":1486455780000,"doc_count":13},{"key_as_string":"2017-02-07T08:24:00.000Z","key":1486455840000,"doc_count":11},{"key_as_string":"2017-02-07T08:25:00.000Z","key":1486455900000,"doc_count":12},{"key_as_string":"2017-02-07T08:26:00.000Z","key":1486455960000,"doc_count":20},{"key_as_string":"2017-02-07T08:27:00.000Z","key":1486456020000,"doc_count":15},{"key_as_string":"2017-02-07T08:28:00.000Z","key":1486456080000,"doc_count":12},{"key_as_string":"2017-02-07T08:29:00.000Z","key":1486456140000,"doc_count":14},{"key_as_string":"2017-02-07T08:30:00.000Z","key":1486456200000,"doc_count":9},{"key_as_string":"2017-02-07T08:31:00.000Z","key":1486456260000,"doc_count":17},{"key_as_string":"2017-02-07T08:32:00.000Z","key":1486456320000,"doc_count":11},{"key_as_string":"2017-02-07T08:33:00.000Z","key":1486456380000,"doc_count":15},{"key_as_string":"2017-02-07T08:34:00.000Z","key":1486456440000,"doc_count":11},{"key_as_string":"2017-02-07T08:35:00.000Z","key":1486456500000,"doc_count":15},{"key_as_string":"2017-02-07T08:36:00.000Z","key":1486456560000,"doc_count":17},{"key_as_string":"2017-02-07T08:37:00.000Z","key":1486456620000,"doc_count":8},{"key_as_string":"2017-02-07T08:38:00.000Z","key":1486456680000,"doc_count":13},{"key_as_string":"2017-02-07T08:39:00.000Z","key":1486456740000,"doc_count":10},{"key_as_string":"2017-02-07T08:40:00.000Z","key":1486456800000,"doc_count":11},{"key_as_string":"2017-02-07T08:41:00.000Z","key":1486456860000,"doc_count":12},{"key_as_string":"2017-02-07T08:42:00.000Z","key":1486456920000,"doc_count":15},{"key_as_string":"2017-02-07T08:43:00.000Z","key":1486456980000,"doc_count":12},{"key_as_string":"2017-02-07T08:44:00.000Z","key":1486457040000,"doc_count":14},{"key_as_string":"2017-02-07T08:45:00.000Z","key":1486457100000,"doc_count":14},{"key_as_string":"2017-02-07T08:46:00.000Z","key":1486457160000,"doc_count":15},{"key_as_string":"2017-02-07T08:47:00.000Z","key":1486457220000,"doc_count":13},{"key_as_string":"2017-02-07T08:48:00.000Z","key":1486457280000,"doc_count":10},{"key_as_string":"2017-02-07T08:49:00.000Z","key":1486457340000,"doc_count":12},{"key_as_string":"2017-02-07T08:50:00.000Z","key":1486457400000,"doc_count":14},{"key_as_string":"2017-02-07T08:51:00.000Z","key":1486457460000,"doc_count":13},{"key_as_string":"2017-02-07T08:52:00.000Z","key":1486457520000,"doc_count":11},{"key_as_string":"2017-02-07T08:53:00.000Z","key":1486457580000,"doc_count":14},{"key_as_string":"2017-02-07T08:54:00.000Z","key":1486457640000,"doc_count":14},{"key_as_string":"2017-02-07T08:55:00.000Z","key":1486457700000,"doc_count":9},{"key_as_string":"2017-02-07T08:56:00.000Z","key":1486457760000,"doc_count":13},{"key_as_string":"2017-02-07T08:57:00.000Z","key":1486457820000,"doc_count":16},{"key_as_string":"2017-02-07T08:58:00.000Z","key":1486457880000,"doc_count":14},{"key_as_string":"2017-02-07T08:59:00.000Z","key":1486457940000,"doc_count":9},{"key_as_string":"2017-02-07T09:00:00.000Z","key":1486458000000,"doc_count":15},{"key_as_string":"2017-02-07T09:01:00.000Z","key":1486458060000,"doc_count":13},{"key_as_string":"2017-02-07T09:02:00.000Z","key":1486458120000,"doc_count":11},{"key_as_string":"2017-02-07T09:03:00.000Z","key":1486458180000,"doc_count":23},{"key_as_string":"2017-02-07T09:04:00.000Z","key":1486458240000,"doc_count":14},{"key_as_string":"2017-02-07T09:05:00.000Z","key":1486458300000,"doc_count":6},{"key_as_string":"2017-02-07T09:06:00.000Z","key":1486458360000,"doc_count":14},{"key_as_string":"2017-02-07T09:07:00.000Z","key":1486458420000,"doc_count":15},{"key_as_string":"2017-02-07T09:08:00.000Z","key":1486458480000,"doc_count":15},{"key_as_string":"2017-02-07T09:09:00.000Z","key":1486458540000,"doc_count":11},{"key_as_string":"2017-02-07T09:10:00.000Z","key":1486458600000,"doc_count":17},{"key_as_string":"2017-02-07T09:11:00.000Z","key":1486458660000,"doc_count":16},{"key_as_string":"2017-02-07T09:12:00.000Z","key":1486458720000,"doc_count":15},{"key_as_string":"2017-02-07T09:13:00.000Z","key":1486458780000,"doc_count":15},{"key_as_string":"2017-02-07T09:14:00.000Z","key":1486458840000,"doc_count":18},{"key_as_string":"2017-02-07T09:15:00.000Z","key":1486458900000,"doc_count":13},{"key_as_string":"2017-02-07T09:16:00.000Z","key":1486458960000,"doc_count":9},{"key_as_string":"2017-02-07T09:17:00.000Z","key":1486459020000,"doc_count":19},{"key_as_string":"2017-02-07T09:18:00.000Z","key":1486459080000,"doc_count":11},{"key_as_string":"2017-02-07T09:19:00.000Z","key":1486459140000,"doc_count":8},{"key_as_string":"2017-02-07T09:20:00.000Z","key":1486459200000,"doc_count":18},{"key_as_string":"2017-02-07T09:21:00.000Z","key":1486459260000,"doc_count":16},{"key_as_string":"2017-02-07T09:22:00.000Z","key":1486459320000,"doc_count":13},{"key_as_string":"2017-02-07T09:23:00.000Z","key":1486459380000,"doc_count":14},{"key_as_string":"2017-02-07T09:24:00.000Z","key":1486459440000,"doc_count":16},{"key_as_string":"2017-02-07T09:25:00.000Z","key":1486459500000,"doc_count":13},{"key_as_string":"2017-02-07T09:26:00.000Z","key":1486459560000,"doc_count":13},{"key_as_string":"2017-02-07T09:27:00.000Z","key":1486459620000,"doc_count":16},{"key_as_string":"2017-02-07T09:28:00.000Z","key":1486459680000,"doc_count":13},{"key_as_string":"2017-02-07T09:29:00.000Z","key":1486459740000,"doc_count":14},{"key_as_string":"2017-02-07T09:30:00.000Z","key":1486459800000,"doc_count":13},{"key_as_string":"2017-02-07T09:31:00.000Z","key":1486459860000,"doc_count":16},{"key_as_string":"2017-02-07T09:32:00.000Z","key":1486459920000,"doc_count":18},{"key_as_string":"2017-02-07T09:33:00.000Z","key":1486459980000,"doc_count":7},{"key_as_string":"2017-02-07T09:34:00.000Z","key":1486460040000,"doc_count":14},{"key_as_string":"2017-02-07T09:35:00.000Z","key":1486460100000,"doc_count":15},{"key_as_string":"2017-02-07T09:36:00.000Z","key":1486460160000,"doc_count":13},{"key_as_string":"2017-02-07T09:37:00.000Z","key":1486460220000,"doc_count":16},{"key_as_string":"2017-02-07T09:38:00.000Z","key":1486460280000,"doc_count":15},{"key_as_string":"2017-02-07T09:39:00.000Z","key":1486460340000,"doc_count":12},{"key_as_string":"2017-02-07T09:40:00.000Z","key":1486460400000,"doc_count":15},{"key_as_string":"2017-02-07T09:41:00.000Z","key":1486460460000,"doc_count":13},{"key_as_string":"2017-02-07T09:42:00.000Z","key":1486460520000,"doc_count":10},{"key_as_string":"2017-02-07T09:43:00.000Z","key":1486460580000,"doc_count":17},{"key_as_string":"2017-02-07T09:44:00.000Z","key":1486460640000,"doc_count":16},{"key_as_string":"2017-02-07T09:45:00.000Z","key":1486460700000,"doc_count":16},{"key_as_string":"2017-02-07T09:46:00.000Z","key":1486460760000,"doc_count":12},{"key_as_string":"2017-02-07T09:47:00.000Z","key":1486460820000,"doc_count":14},{"key_as_string":"2017-02-07T09:48:00.000Z","key":1486460880000,"doc_count":14},{"key_as_string":"2017-02-07T09:49:00.000Z","key":1486460940000,"doc_count":10},{"key_as_string":"2017-02-07T09:50:00.000Z","key":1486461000000,"doc_count":14},{"key_as_string":"2017-02-07T09:51:00.000Z","key":1486461060000,"doc_count":16},{"key_as_string":"2017-02-07T09:52:00.000Z","key":1486461120000,"doc_count":14},{"key_as_string":"2017-02-07T09:53:00.000Z","key":1486461180000,"doc_count":11},{"key_as_string":"2017-02-07T09:54:00.000Z","key":1486461240000,"doc_count":11},{"key_as_string":"2017-02-07T09:55:00.000Z","key":1486461300000,"doc_count":14},{"key_as_string":"2017-02-07T09:56:00.000Z","key":1486461360000,"doc_count":14},{"key_as_string":"2017-02-07T09:57:00.000Z","key":1486461420000,"doc_count":13},{"key_as_string":"2017-02-07T09:58:00.000Z","key":1486461480000,"doc_count":14},{"key_as_string":"2017-02-07T09:59:00.000Z","key":1486461540000,"doc_count":13},{"key_as_string":"2017-02-07T10:00:00.000Z","key":1486461600000,"doc_count":17},{"key_as_string":"2017-02-07T10:01:00.000Z","key":1486461660000,"doc_count":17},{"key_as_string":"2017-02-07T10:02:00.000Z","key":1486461720000,"doc_count":6},{"key_as_string":"2017-02-07T10:03:00.000Z","key":1486461780000,"doc_count":13},{"key_as_string":"2017-02-07T10:04:00.000Z","key":1486461840000,"doc_count":15},{"key_as_string":"2017-02-07T10:05:00.000Z","key":1486461900000,"doc_count":10},{"key_as_string":"2017-02-07T10:06:00.000Z","key":1486461960000,"doc_count":11},{"key_as_string":"2017-02-07T10:07:00.000Z","key":1486462020000,"doc_count":15},{"key_as_string":"2017-02-07T10:08:00.000Z","key":1486462080000,"doc_count":14},{"key_as_string":"2017-02-07T10:09:00.000Z","key":1486462140000,"doc_count":11},{"key_as_string":"2017-02-07T10:10:00.000Z","key":1486462200000,"doc_count":19},{"key_as_string":"2017-02-07T10:11:00.000Z","key":1486462260000,"doc_count":10},{"key_as_string":"2017-02-07T10:12:00.000Z","key":1486462320000,"doc_count":12},{"key_as_string":"2017-02-07T10:13:00.000Z","key":1486462380000,"doc_count":12},{"key_as_string":"2017-02-07T10:14:00.000Z","key":1486462440000,"doc_count":20},{"key_as_string":"2017-02-07T10:15:00.000Z","key":1486462500000,"doc_count":15},{"key_as_string":"2017-02-07T10:16:00.000Z","key":1486462560000,"doc_count":13},{"key_as_string":"2017-02-07T10:17:00.000Z","key":1486462620000,"doc_count":16},{"key_as_string":"2017-02-07T10:18:00.000Z","key":1486462680000,"doc_count":14},{"key_as_string":"2017-02-07T10:19:00.000Z","key":1486462740000,"doc_count":11},{"key_as_string":"2017-02-07T10:20:00.000Z","key":1486462800000,"doc_count":15},{"key_as_string":"2017-02-07T10:21:00.000Z","key":1486462860000,"doc_count":14},{"key_as_string":"2017-02-07T10:22:00.000Z","key":1486462920000,"doc_count":11},{"key_as_string":"2017-02-07T10:23:00.000Z","key":1486462980000,"doc_count":12},{"key_as_string":"2017-02-07T10:24:00.000Z","key":1486463040000,"doc_count":16},{"key_as_string":"2017-02-07T10:25:00.000Z","key":1486463100000,"doc_count":14},{"key_as_string":"2017-02-07T10:26:00.000Z","key":1486463160000,"doc_count":18},{"key_as_string":"2017-02-07T10:27:00.000Z","key":1486463220000,"doc_count":13},{"key_as_string":"2017-02-07T10:28:00.000Z","key":1486463280000,"doc_count":18},{"key_as_string":"2017-02-07T10:29:00.000Z","key":1486463340000,"doc_count":14},{"key_as_string":"2017-02-07T10:30:00.000Z","key":1486463400000,"doc_count":15},{"key_as_string":"2017-02-07T10:31:00.000Z","key":1486463460000,"doc_count":16},{"key_as_string":"2017-02-07T10:32:00.000Z","key":1486463520000,"doc_count":16},{"key_as_string":"2017-02-07T10:33:00.000Z","key":1486463580000,"doc_count":16},{"key_as_string":"2017-02-07T10:34:00.000Z","key":1486463640000,"doc_count":9},{"key_as_string":"2017-02-07T10:35:00.000Z","key":1486463700000,"doc_count":13},{"key_as_string":"2017-02-07T10:36:00.000Z","key":1486463760000,"doc_count":16},{"key_as_string":"2017-02-07T10:37:00.000Z","key":1486463820000,"doc_count":14},{"key_as_string":"2017-02-07T10:38:00.000Z","key":1486463880000,"doc_count":14},{"key_as_string":"2017-02-07T10:39:00.000Z","key":1486463940000,"doc_count":12},{"key_as_string":"2017-02-07T10:40:00.000Z","key":1486464000000,"doc_count":12},{"key_as_string":"2017-02-07T10:41:00.000Z","key":1486464060000,"doc_count":15},{"key_as_string":"2017-02-07T10:42:00.000Z","key":1486464120000,"doc_count":10},{"key_as_string":"2017-02-07T10:43:00.000Z","key":1486464180000,"doc_count":11},{"key_as_string":"2017-02-07T10:44:00.000Z","key":1486464240000,"doc_count":14},{"key_as_string":"2017-02-07T10:45:00.000Z","key":1486464300000,"doc_count":11},{"key_as_string":"2017-02-07T10:46:00.000Z","key":1486464360000,"doc_count":16},{"key_as_string":"2017-02-07T10:47:00.000Z","key":1486464420000,"doc_count":17},{"key_as_string":"2017-02-07T10:48:00.000Z","key":1486464480000,"doc_count":14},{"key_as_string":"2017-02-07T10:49:00.000Z","key":1486464540000,"doc_count":17},{"key_as_string":"2017-02-07T10:50:00.000Z","key":1486464600000,"doc_count":14},{"key_as_string":"2017-02-07T10:51:00.000Z","key":1486464660000,"doc_count":14},{"key_as_string":"2017-02-07T10:52:00.000Z","key":1486464720000,"doc_count":13},{"key_as_string":"2017-02-07T10:53:00.000Z","key":1486464780000,"doc_count":14},{"key_as_string":"2017-02-07T10:54:00.000Z","key":1486464840000,"doc_count":13},{"key_as_string":"2017-02-07T10:55:00.000Z","key":1486464900000,"doc_count":10},{"key_as_string":"2017-02-07T10:56:00.000Z","key":1486464960000,"doc_count":14},{"key_as_string":"2017-02-07T10:57:00.000Z","key":1486465020000,"doc_count":9},{"key_as_string":"2017-02-07T10:58:00.000Z","key":1486465080000,"doc_count":19},{"key_as_string":"2017-02-07T10:59:00.000Z","key":1486465140000,"doc_count":12},{"key_as_string":"2017-02-07T11:00:00.000Z","key":1486465200000,"doc_count":20},{"key_as_string":"2017-02-07T11:01:00.000Z","key":1486465260000,"doc_count":11},{"key_as_string":"2017-02-07T11:02:00.000Z","key":1486465320000,"doc_count":16},{"key_as_string":"2017-02-07T11:03:00.000Z","key":1486465380000,"doc_count":14},{"key_as_string":"2017-02-07T11:04:00.000Z","key":1486465440000,"doc_count":14},{"key_as_string":"2017-02-07T11:05:00.000Z","key":1486465500000,"doc_count":11},{"key_as_string":"2017-02-07T11:06:00.000Z","key":1486465560000,"doc_count":11},{"key_as_string":"2017-02-07T11:07:00.000Z","key":1486465620000,"doc_count":18},{"key_as_string":"2017-02-07T11:08:00.000Z","key":1486465680000,"doc_count":14},{"key_as_string":"2017-02-07T11:09:00.000Z","key":1486465740000,"doc_count":14},{"key_as_string":"2017-02-07T11:10:00.000Z","key":1486465800000,"doc_count":9},{"key_as_string":"2017-02-07T11:11:00.000Z","key":1486465860000,"doc_count":18},{"key_as_string":"2017-02-07T11:12:00.000Z","key":1486465920000,"doc_count":18},{"key_as_string":"2017-02-07T11:13:00.000Z","key":1486465980000,"doc_count":10},{"key_as_string":"2017-02-07T11:14:00.000Z","key":1486466040000,"doc_count":10},{"key_as_string":"2017-02-07T11:15:00.000Z","key":1486466100000,"doc_count":17},{"key_as_string":"2017-02-07T11:16:00.000Z","key":1486466160000,"doc_count":16},{"key_as_string":"2017-02-07T11:17:00.000Z","key":1486466220000,"doc_count":15},{"key_as_string":"2017-02-07T11:18:00.000Z","key":1486466280000,"doc_count":17},{"key_as_string":"2017-02-07T11:19:00.000Z","key":1486466340000,"doc_count":18},{"key_as_string":"2017-02-07T11:20:00.000Z","key":1486466400000,"doc_count":11},{"key_as_string":"2017-02-07T11:21:00.000Z","key":1486466460000,"doc_count":18},{"key_as_string":"2017-02-07T11:22:00.000Z","key":1486466520000,"doc_count":13},{"key_as_string":"2017-02-07T11:23:00.000Z","key":1486466580000,"doc_count":10},{"key_as_string":"2017-02-07T11:24:00.000Z","key":1486466640000,"doc_count":12},{"key_as_string":"2017-02-07T11:25:00.000Z","key":1486466700000,"doc_count":13},{"key_as_string":"2017-02-07T11:26:00.000Z","key":1486466760000,"doc_count":16},{"key_as_string":"2017-02-07T11:27:00.000Z","key":1486466820000,"doc_count":12},{"key_as_string":"2017-02-07T11:28:00.000Z","key":1486466880000,"doc_count":12},{"key_as_string":"2017-02-07T11:29:00.000Z","key":1486466940000,"doc_count":18},{"key_as_string":"2017-02-07T11:30:00.000Z","key":1486467000000,"doc_count":11},{"key_as_string":"2017-02-07T11:31:00.000Z","key":1486467060000,"doc_count":13},{"key_as_string":"2017-02-07T11:32:00.000Z","key":1486467120000,"doc_count":13},{"key_as_string":"2017-02-07T11:33:00.000Z","key":1486467180000,"doc_count":24},{"key_as_string":"2017-02-07T11:34:00.000Z","key":1486467240000,"doc_count":12},{"key_as_string":"2017-02-07T11:35:00.000Z","key":1486467300000,"doc_count":13},{"key_as_string":"2017-02-07T11:36:00.000Z","key":1486467360000,"doc_count":16},{"key_as_string":"2017-02-07T11:37:00.000Z","key":1486467420000,"doc_count":16},{"key_as_string":"2017-02-07T11:38:00.000Z","key":1486467480000,"doc_count":14},{"key_as_string":"2017-02-07T11:39:00.000Z","key":1486467540000,"doc_count":12},{"key_as_string":"2017-02-07T11:40:00.000Z","key":1486467600000,"doc_count":14},{"key_as_string":"2017-02-07T11:41:00.000Z","key":1486467660000,"doc_count":14},{"key_as_string":"2017-02-07T11:42:00.000Z","key":1486467720000,"doc_count":16},{"key_as_string":"2017-02-07T11:43:00.000Z","key":1486467780000,"doc_count":19},{"key_as_string":"2017-02-07T11:44:00.000Z","key":1486467840000,"doc_count":9},{"key_as_string":"2017-02-07T11:45:00.000Z","key":1486467900000,"doc_count":14},{"key_as_string":"2017-02-07T11:46:00.000Z","key":1486467960000,"doc_count":8},{"key_as_string":"2017-02-07T11:47:00.000Z","key":1486468020000,"doc_count":14},{"key_as_string":"2017-02-07T11:48:00.000Z","key":1486468080000,"doc_count":11},{"key_as_string":"2017-02-07T11:49:00.000Z","key":1486468140000,"doc_count":10},{"key_as_string":"2017-02-07T11:50:00.000Z","key":1486468200000,"doc_count":13},{"key_as_string":"2017-02-07T11:51:00.000Z","key":1486468260000,"doc_count":14},{"key_as_string":"2017-02-07T11:52:00.000Z","key":1486468320000,"doc_count":13},{"key_as_string":"2017-02-07T11:53:00.000Z","key":1486468380000,"doc_count":15},{"key_as_string":"2017-02-07T11:54:00.000Z","key":1486468440000,"doc_count":11},{"key_as_string":"2017-02-07T11:55:00.000Z","key":1486468500000,"doc_count":11},{"key_as_string":"2017-02-07T11:56:00.000Z","key":1486468560000,"doc_count":13},{"key_as_string":"2017-02-07T11:57:00.000Z","key":1486468620000,"doc_count":17},{"key_as_string":"2017-02-07T11:58:00.000Z","key":1486468680000,"doc_count":19},{"key_as_string":"2017-02-07T11:59:00.000Z","key":1486468740000,"doc_count":15},{"key_as_string":"2017-02-07T12:00:00.000Z","key":1486468800000,"doc_count":14},{"key_as_string":"2017-02-07T12:01:00.000Z","key":1486468860000,"doc_count":14},{"key_as_string":"2017-02-07T12:02:00.000Z","key":1486468920000,"doc_count":19},{"key_as_string":"2017-02-07T12:03:00.000Z","key":1486468980000,"doc_count":16},{"key_as_string":"2017-02-07T12:04:00.000Z","key":1486469040000,"doc_count":13},{"key_as_string":"2017-02-07T12:05:00.000Z","key":1486469100000,"doc_count":20},{"key_as_string":"2017-02-07T12:06:00.000Z","key":1486469160000,"doc_count":9},{"key_as_string":"2017-02-07T12:07:00.000Z","key":1486469220000,"doc_count":12},{"key_as_string":"2017-02-07T12:08:00.000Z","key":1486469280000,"doc_count":14},{"key_as_string":"2017-02-07T12:09:00.000Z","key":1486469340000,"doc_count":18},{"key_as_string":"2017-02-07T12:10:00.000Z","key":1486469400000,"doc_count":10},{"key_as_string":"2017-02-07T12:11:00.000Z","key":1486469460000,"doc_count":11},{"key_as_string":"2017-02-07T12:12:00.000Z","key":1486469520000,"doc_count":15},{"key_as_string":"2017-02-07T12:13:00.000Z","key":1486469580000,"doc_count":10},{"key_as_string":"2017-02-07T12:14:00.000Z","key":1486469640000,"doc_count":14},{"key_as_string":"2017-02-07T12:15:00.000Z","key":1486469700000,"doc_count":18},{"key_as_string":"2017-02-07T12:16:00.000Z","key":1486469760000,"doc_count":15},{"key_as_string":"2017-02-07T12:17:00.000Z","key":1486469820000,"doc_count":12},{"key_as_string":"2017-02-07T12:18:00.000Z","key":1486469880000,"doc_count":7},{"key_as_string":"2017-02-07T12:19:00.000Z","key":1486469940000,"doc_count":17},{"key_as_string":"2017-02-07T12:20:00.000Z","key":1486470000000,"doc_count":14},{"key_as_string":"2017-02-07T12:21:00.000Z","key":1486470060000,"doc_count":15},{"key_as_string":"2017-02-07T12:22:00.000Z","key":1486470120000,"doc_count":17},{"key_as_string":"2017-02-07T12:23:00.000Z","key":1486470180000,"doc_count":17},{"key_as_string":"2017-02-07T12:24:00.000Z","key":1486470240000,"doc_count":12},{"key_as_string":"2017-02-07T12:25:00.000Z","key":1486470300000,"doc_count":15},{"key_as_string":"2017-02-07T12:26:00.000Z","key":1486470360000,"doc_count":8},{"key_as_string":"2017-02-07T12:27:00.000Z","key":1486470420000,"doc_count":19},{"key_as_string":"2017-02-07T12:28:00.000Z","key":1486470480000,"doc_count":10},{"key_as_string":"2017-02-07T12:29:00.000Z","key":1486470540000,"doc_count":13},{"key_as_string":"2017-02-07T12:30:00.000Z","key":1486470600000,"doc_count":14},{"key_as_string":"2017-02-07T12:31:00.000Z","key":1486470660000,"doc_count":17},{"key_as_string":"2017-02-07T12:32:00.000Z","key":1486470720000,"doc_count":12},{"key_as_string":"2017-02-07T12:33:00.000Z","key":1486470780000,"doc_count":11},{"key_as_string":"2017-02-07T12:34:00.000Z","key":1486470840000,"doc_count":18},{"key_as_string":"2017-02-07T12:35:00.000Z","key":1486470900000,"doc_count":16},{"key_as_string":"2017-02-07T12:36:00.000Z","key":1486470960000,"doc_count":17},{"key_as_string":"2017-02-07T12:37:00.000Z","key":1486471020000,"doc_count":18},{"key_as_string":"2017-02-07T12:38:00.000Z","key":1486471080000,"doc_count":16},{"key_as_string":"2017-02-07T12:39:00.000Z","key":1486471140000,"doc_count":15},{"key_as_string":"2017-02-07T12:40:00.000Z","key":1486471200000,"doc_count":16},{"key_as_string":"2017-02-07T12:41:00.000Z","key":1486471260000,"doc_count":22},{"key_as_string":"2017-02-07T12:42:00.000Z","key":1486471320000,"doc_count":14},{"key_as_string":"2017-02-07T12:43:00.000Z","key":1486471380000,"doc_count":13},{"key_as_string":"2017-02-07T12:44:00.000Z","key":1486471440000,"doc_count":10},{"key_as_string":"2017-02-07T12:45:00.000Z","key":1486471500000,"doc_count":13},{"key_as_string":"2017-02-07T12:46:00.000Z","key":1486471560000,"doc_count":19},{"key_as_string":"2017-02-07T12:47:00.000Z","key":1486471620000,"doc_count":12},{"key_as_string":"2017-02-07T12:48:00.000Z","key":1486471680000,"doc_count":12},{"key_as_string":"2017-02-07T12:49:00.000Z","key":1486471740000,"doc_count":14},{"key_as_string":"2017-02-07T12:50:00.000Z","key":1486471800000,"doc_count":17},{"key_as_string":"2017-02-07T12:51:00.000Z","key":1486471860000,"doc_count":14},{"key_as_string":"2017-02-07T12:52:00.000Z","key":1486471920000,"doc_count":9},{"key_as_string":"2017-02-07T12:53:00.000Z","key":1486471980000,"doc_count":21},{"key_as_string":"2017-02-07T12:54:00.000Z","key":1486472040000,"doc_count":14},{"key_as_string":"2017-02-07T12:55:00.000Z","key":1486472100000,"doc_count":11},{"key_as_string":"2017-02-07T12:56:00.000Z","key":1486472160000,"doc_count":13},{"key_as_string":"2017-02-07T12:57:00.000Z","key":1486472220000,"doc_count":13},{"key_as_string":"2017-02-07T12:58:00.000Z","key":1486472280000,"doc_count":12},{"key_as_string":"2017-02-07T12:59:00.000Z","key":1486472340000,"doc_count":19},{"key_as_string":"2017-02-07T13:00:00.000Z","key":1486472400000,"doc_count":10},{"key_as_string":"2017-02-07T13:01:00.000Z","key":1486472460000,"doc_count":13},{"key_as_string":"2017-02-07T13:02:00.000Z","key":1486472520000,"doc_count":12},{"key_as_string":"2017-02-07T13:03:00.000Z","key":1486472580000,"doc_count":9},{"key_as_string":"2017-02-07T13:04:00.000Z","key":1486472640000,"doc_count":17},{"key_as_string":"2017-02-07T13:05:00.000Z","key":1486472700000,"doc_count":14},{"key_as_string":"2017-02-07T13:06:00.000Z","key":1486472760000,"doc_count":13},{"key_as_string":"2017-02-07T13:07:00.000Z","key":1486472820000,"doc_count":18},{"key_as_string":"2017-02-07T13:08:00.000Z","key":1486472880000,"doc_count":16},{"key_as_string":"2017-02-07T13:09:00.000Z","key":1486472940000,"doc_count":11},{"key_as_string":"2017-02-07T13:10:00.000Z","key":1486473000000,"doc_count":9},{"key_as_string":"2017-02-07T13:11:00.000Z","key":1486473060000,"doc_count":14},{"key_as_string":"2017-02-07T13:12:00.000Z","key":1486473120000,"doc_count":11},{"key_as_string":"2017-02-07T13:13:00.000Z","key":1486473180000,"doc_count":17},{"key_as_string":"2017-02-07T13:14:00.000Z","key":1486473240000,"doc_count":14},{"key_as_string":"2017-02-07T13:15:00.000Z","key":1486473300000,"doc_count":17},{"key_as_string":"2017-02-07T13:16:00.000Z","key":1486473360000,"doc_count":14},{"key_as_string":"2017-02-07T13:17:00.000Z","key":1486473420000,"doc_count":18},{"key_as_string":"2017-02-07T13:18:00.000Z","key":1486473480000,"doc_count":13},{"key_as_string":"2017-02-07T13:19:00.000Z","key":1486473540000,"doc_count":24},{"key_as_string":"2017-02-07T13:20:00.000Z","key":1486473600000,"doc_count":6},{"key_as_string":"2017-02-07T13:21:00.000Z","key":1486473660000,"doc_count":16},{"key_as_string":"2017-02-07T13:22:00.000Z","key":1486473720000,"doc_count":19},{"key_as_string":"2017-02-07T13:23:00.000Z","key":1486473780000,"doc_count":12},{"key_as_string":"2017-02-07T13:24:00.000Z","key":1486473840000,"doc_count":18},{"key_as_string":"2017-02-07T13:25:00.000Z","key":1486473900000,"doc_count":11},{"key_as_string":"2017-02-07T13:26:00.000Z","key":1486473960000,"doc_count":14},{"key_as_string":"2017-02-07T13:27:00.000Z","key":1486474020000,"doc_count":13},{"key_as_string":"2017-02-07T13:28:00.000Z","key":1486474080000,"doc_count":13},{"key_as_string":"2017-02-07T13:29:00.000Z","key":1486474140000,"doc_count":12},{"key_as_string":"2017-02-07T13:30:00.000Z","key":1486474200000,"doc_count":12},{"key_as_string":"2017-02-07T13:31:00.000Z","key":1486474260000,"doc_count":10},{"key_as_string":"2017-02-07T13:32:00.000Z","key":1486474320000,"doc_count":15},{"key_as_string":"2017-02-07T13:33:00.000Z","key":1486474380000,"doc_count":11},{"key_as_string":"2017-02-07T13:34:00.000Z","key":1486474440000,"doc_count":15},{"key_as_string":"2017-02-07T13:35:00.000Z","key":1486474500000,"doc_count":6},{"key_as_string":"2017-02-07T13:36:00.000Z","key":1486474560000,"doc_count":20},{"key_as_string":"2017-02-07T13:37:00.000Z","key":1486474620000,"doc_count":9},{"key_as_string":"2017-02-07T13:38:00.000Z","key":1486474680000,"doc_count":15},{"key_as_string":"2017-02-07T13:39:00.000Z","key":1486474740000,"doc_count":18},{"key_as_string":"2017-02-07T13:40:00.000Z","key":1486474800000,"doc_count":14},{"key_as_string":"2017-02-07T13:41:00.000Z","key":1486474860000,"doc_count":11},{"key_as_string":"2017-02-07T13:42:00.000Z","key":1486474920000,"doc_count":15},{"key_as_string":"2017-02-07T13:43:00.000Z","key":1486474980000,"doc_count":10},{"key_as_string":"2017-02-07T13:44:00.000Z","key":1486475040000,"doc_count":14},{"key_as_string":"2017-02-07T13:45:00.000Z","key":1486475100000,"doc_count":13},{"key_as_string":"2017-02-07T13:46:00.000Z","key":1486475160000,"doc_count":16},{"key_as_string":"2017-02-07T13:47:00.000Z","key":1486475220000,"doc_count":10},{"key_as_string":"2017-02-07T13:48:00.000Z","key":1486475280000,"doc_count":13},{"key_as_string":"2017-02-07T13:49:00.000Z","key":1486475340000,"doc_count":14},{"key_as_string":"2017-02-07T13:50:00.000Z","key":1486475400000,"doc_count":12},{"key_as_string":"2017-02-07T13:51:00.000Z","key":1486475460000,"doc_count":12},{"key_as_string":"2017-02-07T13:52:00.000Z","key":1486475520000,"doc_count":11},{"key_as_string":"2017-02-07T13:53:00.000Z","key":1486475580000,"doc_count":15},{"key_as_string":"2017-02-07T13:54:00.000Z","key":1486475640000,"doc_count":13},{"key_as_string":"2017-02-07T13:55:00.000Z","key":1486475700000,"doc_count":14},{"key_as_string":"2017-02-07T13:56:00.000Z","key":1486475760000,"doc_count":18},{"key_as_string":"2017-02-07T13:57:00.000Z","key":1486475820000,"doc_count":6},{"key_as_string":"2017-02-07T13:58:00.000Z","key":1486475880000,"doc_count":19},{"key_as_string":"2017-02-07T13:59:00.000Z","key":1486475940000,"doc_count":13},{"key_as_string":"2017-02-07T14:00:00.000Z","key":1486476000000,"doc_count":9},{"key_as_string":"2017-02-07T14:01:00.000Z","key":1486476060000,"doc_count":10},{"key_as_string":"2017-02-07T14:02:00.000Z","key":1486476120000,"doc_count":14},{"key_as_string":"2017-02-07T14:03:00.000Z","key":1486476180000,"doc_count":13},{"key_as_string":"2017-02-07T14:04:00.000Z","key":1486476240000,"doc_count":19},{"key_as_string":"2017-02-07T14:05:00.000Z","key":1486476300000,"doc_count":15},{"key_as_string":"2017-02-07T14:06:00.000Z","key":1486476360000,"doc_count":12},{"key_as_string":"2017-02-07T14:07:00.000Z","key":1486476420000,"doc_count":11},{"key_as_string":"2017-02-07T14:08:00.000Z","key":1486476480000,"doc_count":15},{"key_as_string":"2017-02-07T14:09:00.000Z","key":1486476540000,"doc_count":10},{"key_as_string":"2017-02-07T14:10:00.000Z","key":1486476600000,"doc_count":13},{"key_as_string":"2017-02-07T14:11:00.000Z","key":1486476660000,"doc_count":18},{"key_as_string":"2017-02-07T14:12:00.000Z","key":1486476720000,"doc_count":10},{"key_as_string":"2017-02-07T14:13:00.000Z","key":1486476780000,"doc_count":13},{"key_as_string":"2017-02-07T14:14:00.000Z","key":1486476840000,"doc_count":15},{"key_as_string":"2017-02-07T14:15:00.000Z","key":1486476900000,"doc_count":18},{"key_as_string":"2017-02-07T14:16:00.000Z","key":1486476960000,"doc_count":14},{"key_as_string":"2017-02-07T14:17:00.000Z","key":1486477020000,"doc_count":13},{"key_as_string":"2017-02-07T14:18:00.000Z","key":1486477080000,"doc_count":12},{"key_as_string":"2017-02-07T14:19:00.000Z","key":1486477140000,"doc_count":18},{"key_as_string":"2017-02-07T14:20:00.000Z","key":1486477200000,"doc_count":13},{"key_as_string":"2017-02-07T14:21:00.000Z","key":1486477260000,"doc_count":14},{"key_as_string":"2017-02-07T14:22:00.000Z","key":1486477320000,"doc_count":8},{"key_as_string":"2017-02-07T14:23:00.000Z","key":1486477380000,"doc_count":16},{"key_as_string":"2017-02-07T14:24:00.000Z","key":1486477440000,"doc_count":12},{"key_as_string":"2017-02-07T14:25:00.000Z","key":1486477500000,"doc_count":17},{"key_as_string":"2017-02-07T14:26:00.000Z","key":1486477560000,"doc_count":11},{"key_as_string":"2017-02-07T14:27:00.000Z","key":1486477620000,"doc_count":17},{"key_as_string":"2017-02-07T14:28:00.000Z","key":1486477680000,"doc_count":17},{"key_as_string":"2017-02-07T14:29:00.000Z","key":1486477740000,"doc_count":14},{"key_as_string":"2017-02-07T14:30:00.000Z","key":1486477800000,"doc_count":15},{"key_as_string":"2017-02-07T14:31:00.000Z","key":1486477860000,"doc_count":13},{"key_as_string":"2017-02-07T14:32:00.000Z","key":1486477920000,"doc_count":9},{"key_as_string":"2017-02-07T14:33:00.000Z","key":1486477980000,"doc_count":17},{"key_as_string":"2017-02-07T14:34:00.000Z","key":1486478040000,"doc_count":12},{"key_as_string":"2017-02-07T14:35:00.000Z","key":1486478100000,"doc_count":14},{"key_as_string":"2017-02-07T14:36:00.000Z","key":1486478160000,"doc_count":14},{"key_as_string":"2017-02-07T14:37:00.000Z","key":1486478220000,"doc_count":13},{"key_as_string":"2017-02-07T14:38:00.000Z","key":1486478280000,"doc_count":13},{"key_as_string":"2017-02-07T14:39:00.000Z","key":1486478340000,"doc_count":11},{"key_as_string":"2017-02-07T14:40:00.000Z","key":1486478400000,"doc_count":20},{"key_as_string":"2017-02-07T14:41:00.000Z","key":1486478460000,"doc_count":12},{"key_as_string":"2017-02-07T14:42:00.000Z","key":1486478520000,"doc_count":14},{"key_as_string":"2017-02-07T14:43:00.000Z","key":1486478580000,"doc_count":14},{"key_as_string":"2017-02-07T14:44:00.000Z","key":1486478640000,"doc_count":13},{"key_as_string":"2017-02-07T14:45:00.000Z","key":1486478700000,"doc_count":16},{"key_as_string":"2017-02-07T14:46:00.000Z","key":1486478760000,"doc_count":16},{"key_as_string":"2017-02-07T14:47:00.000Z","key":1486478820000,"doc_count":12},{"key_as_string":"2017-02-07T14:48:00.000Z","key":1486478880000,"doc_count":11},{"key_as_string":"2017-02-07T14:49:00.000Z","key":1486478940000,"doc_count":16},{"key_as_string":"2017-02-07T14:50:00.000Z","key":1486479000000,"doc_count":12},{"key_as_string":"2017-02-07T14:51:00.000Z","key":1486479060000,"doc_count":9},{"key_as_string":"2017-02-07T14:52:00.000Z","key":1486479120000,"doc_count":13},{"key_as_string":"2017-02-07T14:53:00.000Z","key":1486479180000,"doc_count":12},{"key_as_string":"2017-02-07T14:54:00.000Z","key":1486479240000,"doc_count":19},{"key_as_string":"2017-02-07T14:55:00.000Z","key":1486479300000,"doc_count":10},{"key_as_string":"2017-02-07T14:56:00.000Z","key":1486479360000,"doc_count":15},{"key_as_string":"2017-02-07T14:57:00.000Z","key":1486479420000,"doc_count":16},{"key_as_string":"2017-02-07T14:58:00.000Z","key":1486479480000,"doc_count":14},{"key_as_string":"2017-02-07T14:59:00.000Z","key":1486479540000,"doc_count":12},{"key_as_string":"2017-02-07T15:00:00.000Z","key":1486479600000,"doc_count":14},{"key_as_string":"2017-02-07T15:01:00.000Z","key":1486479660000,"doc_count":12},{"key_as_string":"2017-02-07T15:02:00.000Z","key":1486479720000,"doc_count":11},{"key_as_string":"2017-02-07T15:03:00.000Z","key":1486479780000,"doc_count":13},{"key_as_string":"2017-02-07T15:04:00.000Z","key":1486479840000,"doc_count":14},{"key_as_string":"2017-02-07T15:05:00.000Z","key":1486479900000,"doc_count":10},{"key_as_string":"2017-02-07T15:06:00.000Z","key":1486479960000,"doc_count":9},{"key_as_string":"2017-02-07T15:07:00.000Z","key":1486480020000,"doc_count":10},{"key_as_string":"2017-02-07T15:08:00.000Z","key":1486480080000,"doc_count":15},{"key_as_string":"2017-02-07T15:09:00.000Z","key":1486480140000,"doc_count":13},{"key_as_string":"2017-02-07T15:10:00.000Z","key":1486480200000,"doc_count":12},{"key_as_string":"2017-02-07T15:11:00.000Z","key":1486480260000,"doc_count":13},{"key_as_string":"2017-02-07T15:12:00.000Z","key":1486480320000,"doc_count":12},{"key_as_string":"2017-02-07T15:13:00.000Z","key":1486480380000,"doc_count":13},{"key_as_string":"2017-02-07T15:14:00.000Z","key":1486480440000,"doc_count":15},{"key_as_string":"2017-02-07T15:15:00.000Z","key":1486480500000,"doc_count":15},{"key_as_string":"2017-02-07T15:16:00.000Z","key":1486480560000,"doc_count":14},{"key_as_string":"2017-02-07T15:17:00.000Z","key":1486480620000,"doc_count":7},{"key_as_string":"2017-02-07T15:18:00.000Z","key":1486480680000,"doc_count":16},{"key_as_string":"2017-02-07T15:19:00.000Z","key":1486480740000,"doc_count":13},{"key_as_string":"2017-02-07T15:20:00.000Z","key":1486480800000,"doc_count":14},{"key_as_string":"2017-02-07T15:21:00.000Z","key":1486480860000,"doc_count":13},{"key_as_string":"2017-02-07T15:22:00.000Z","key":1486480920000,"doc_count":12},{"key_as_string":"2017-02-07T15:23:00.000Z","key":1486480980000,"doc_count":16},{"key_as_string":"2017-02-07T15:24:00.000Z","key":1486481040000,"doc_count":15},{"key_as_string":"2017-02-07T15:25:00.000Z","key":1486481100000,"doc_count":8},{"key_as_string":"2017-02-07T15:26:00.000Z","key":1486481160000,"doc_count":15},{"key_as_string":"2017-02-07T15:27:00.000Z","key":1486481220000,"doc_count":11},{"key_as_string":"2017-02-07T15:28:00.000Z","key":1486481280000,"doc_count":14},{"key_as_string":"2017-02-07T15:29:00.000Z","key":1486481340000,"doc_count":14},{"key_as_string":"2017-02-07T15:30:00.000Z","key":1486481400000,"doc_count":12},{"key_as_string":"2017-02-07T15:31:00.000Z","key":1486481460000,"doc_count":19},{"key_as_string":"2017-02-07T15:32:00.000Z","key":1486481520000,"doc_count":15},{"key_as_string":"2017-02-07T15:33:00.000Z","key":1486481580000,"doc_count":15},{"key_as_string":"2017-02-07T15:34:00.000Z","key":1486481640000,"doc_count":11},{"key_as_string":"2017-02-07T15:35:00.000Z","key":1486481700000,"doc_count":14},{"key_as_string":"2017-02-07T15:36:00.000Z","key":1486481760000,"doc_count":13},{"key_as_string":"2017-02-07T15:37:00.000Z","key":1486481820000,"doc_count":18},{"key_as_string":"2017-02-07T15:38:00.000Z","key":1486481880000,"doc_count":8},{"key_as_string":"2017-02-07T15:39:00.000Z","key":1486481940000,"doc_count":14},{"key_as_string":"2017-02-07T15:40:00.000Z","key":1486482000000,"doc_count":11},{"key_as_string":"2017-02-07T15:41:00.000Z","key":1486482060000,"doc_count":10},{"key_as_string":"2017-02-07T15:42:00.000Z","key":1486482120000,"doc_count":10},{"key_as_string":"2017-02-07T15:43:00.000Z","key":1486482180000,"doc_count":14},{"key_as_string":"2017-02-07T15:44:00.000Z","key":1486482240000,"doc_count":10},{"key_as_string":"2017-02-07T15:45:00.000Z","key":1486482300000,"doc_count":13},{"key_as_string":"2017-02-07T15:46:00.000Z","key":1486482360000,"doc_count":15},{"key_as_string":"2017-02-07T15:47:00.000Z","key":1486482420000,"doc_count":11},{"key_as_string":"2017-02-07T15:48:00.000Z","key":1486482480000,"doc_count":13},{"key_as_string":"2017-02-07T15:49:00.000Z","key":1486482540000,"doc_count":10},{"key_as_string":"2017-02-07T15:50:00.000Z","key":1486482600000,"doc_count":17},{"key_as_string":"2017-02-07T15:51:00.000Z","key":1486482660000,"doc_count":11},{"key_as_string":"2017-02-07T15:52:00.000Z","key":1486482720000,"doc_count":15},{"key_as_string":"2017-02-07T15:53:00.000Z","key":1486482780000,"doc_count":10},{"key_as_string":"2017-02-07T15:54:00.000Z","key":1486482840000,"doc_count":11},{"key_as_string":"2017-02-07T15:55:00.000Z","key":1486482900000,"doc_count":14},{"key_as_string":"2017-02-07T15:56:00.000Z","key":1486482960000,"doc_count":16},{"key_as_string":"2017-02-07T15:57:00.000Z","key":1486483020000,"doc_count":15},{"key_as_string":"2017-02-07T15:58:00.000Z","key":1486483080000,"doc_count":13},{"key_as_string":"2017-02-07T15:59:00.000Z","key":1486483140000,"doc_count":10},{"key_as_string":"2017-02-07T16:00:00.000Z","key":1486483200000,"doc_count":18},{"key_as_string":"2017-02-07T16:01:00.000Z","key":1486483260000,"doc_count":11},{"key_as_string":"2017-02-07T16:02:00.000Z","key":1486483320000,"doc_count":14},{"key_as_string":"2017-02-07T16:03:00.000Z","key":1486483380000,"doc_count":16},{"key_as_string":"2017-02-07T16:04:00.000Z","key":1486483440000,"doc_count":10},{"key_as_string":"2017-02-07T16:05:00.000Z","key":1486483500000,"doc_count":12},{"key_as_string":"2017-02-07T16:06:00.000Z","key":1486483560000,"doc_count":11},{"key_as_string":"2017-02-07T16:07:00.000Z","key":1486483620000,"doc_count":14},{"key_as_string":"2017-02-07T16:08:00.000Z","key":1486483680000,"doc_count":12},{"key_as_string":"2017-02-07T16:09:00.000Z","key":1486483740000,"doc_count":8},{"key_as_string":"2017-02-07T16:10:00.000Z","key":1486483800000,"doc_count":13},{"key_as_string":"2017-02-07T16:11:00.000Z","key":1486483860000,"doc_count":15},{"key_as_string":"2017-02-07T16:12:00.000Z","key":1486483920000,"doc_count":9},{"key_as_string":"2017-02-07T16:13:00.000Z","key":1486483980000,"doc_count":14},{"key_as_string":"2017-02-07T16:14:00.000Z","key":1486484040000,"doc_count":11},{"key_as_string":"2017-02-07T16:15:00.000Z","key":1486484100000,"doc_count":10},{"key_as_string":"2017-02-07T16:16:00.000Z","key":1486484160000,"doc_count":14},{"key_as_string":"2017-02-07T16:17:00.000Z","key":1486484220000,"doc_count":10},{"key_as_string":"2017-02-07T16:18:00.000Z","key":1486484280000,"doc_count":10},{"key_as_string":"2017-02-07T16:19:00.000Z","key":1486484340000,"doc_count":17},{"key_as_string":"2017-02-07T16:20:00.000Z","key":1486484400000,"doc_count":11},{"key_as_string":"2017-02-07T16:21:00.000Z","key":1486484460000,"doc_count":14},{"key_as_string":"2017-02-07T16:22:00.000Z","key":1486484520000,"doc_count":15},{"key_as_string":"2017-02-07T16:23:00.000Z","key":1486484580000,"doc_count":8},{"key_as_string":"2017-02-07T16:24:00.000Z","key":1486484640000,"doc_count":14},{"key_as_string":"2017-02-07T16:25:00.000Z","key":1486484700000,"doc_count":10},{"key_as_string":"2017-02-07T16:26:00.000Z","key":1486484760000,"doc_count":10},{"key_as_string":"2017-02-07T16:27:00.000Z","key":1486484820000,"doc_count":14},{"key_as_string":"2017-02-07T16:28:00.000Z","key":1486484880000,"doc_count":19},{"key_as_string":"2017-02-07T16:29:00.000Z","key":1486484940000,"doc_count":9},{"key_as_string":"2017-02-07T16:30:00.000Z","key":1486485000000,"doc_count":15},{"key_as_string":"2017-02-07T16:31:00.000Z","key":1486485060000,"doc_count":13},{"key_as_string":"2017-02-07T16:32:00.000Z","key":1486485120000,"doc_count":10},{"key_as_string":"2017-02-07T16:33:00.000Z","key":1486485180000,"doc_count":12},{"key_as_string":"2017-02-07T16:34:00.000Z","key":1486485240000,"doc_count":12},{"key_as_string":"2017-02-07T16:35:00.000Z","key":1486485300000,"doc_count":17},{"key_as_string":"2017-02-07T16:36:00.000Z","key":1486485360000,"doc_count":8},{"key_as_string":"2017-02-07T16:37:00.000Z","key":1486485420000,"doc_count":17},{"key_as_string":"2017-02-07T16:38:00.000Z","key":1486485480000,"doc_count":13},{"key_as_string":"2017-02-07T16:39:00.000Z","key":1486485540000,"doc_count":7},{"key_as_string":"2017-02-07T16:40:00.000Z","key":1486485600000,"doc_count":11},{"key_as_string":"2017-02-07T16:41:00.000Z","key":1486485660000,"doc_count":14},{"key_as_string":"2017-02-07T16:42:00.000Z","key":1486485720000,"doc_count":16},{"key_as_string":"2017-02-07T16:43:00.000Z","key":1486485780000,"doc_count":11},{"key_as_string":"2017-02-07T16:44:00.000Z","key":1486485840000,"doc_count":15},{"key_as_string":"2017-02-07T16:45:00.000Z","key":1486485900000,"doc_count":15},{"key_as_string":"2017-02-07T16:46:00.000Z","key":1486485960000,"doc_count":11},{"key_as_string":"2017-02-07T16:47:00.000Z","key":1486486020000,"doc_count":11},{"key_as_string":"2017-02-07T16:48:00.000Z","key":1486486080000,"doc_count":12},{"key_as_string":"2017-02-07T16:49:00.000Z","key":1486486140000,"doc_count":12},{"key_as_string":"2017-02-07T16:50:00.000Z","key":1486486200000,"doc_count":11},{"key_as_string":"2017-02-07T16:51:00.000Z","key":1486486260000,"doc_count":12},{"key_as_string":"2017-02-07T16:52:00.000Z","key":1486486320000,"doc_count":12},{"key_as_string":"2017-02-07T16:53:00.000Z","key":1486486380000,"doc_count":14},{"key_as_string":"2017-02-07T16:54:00.000Z","key":1486486440000,"doc_count":10},{"key_as_string":"2017-02-07T16:55:00.000Z","key":1486486500000,"doc_count":12},{"key_as_string":"2017-02-07T16:56:00.000Z","key":1486486560000,"doc_count":15},{"key_as_string":"2017-02-07T16:57:00.000Z","key":1486486620000,"doc_count":14},{"key_as_string":"2017-02-07T16:58:00.000Z","key":1486486680000,"doc_count":9},{"key_as_string":"2017-02-07T16:59:00.000Z","key":1486486740000,"doc_count":15},{"key_as_string":"2017-02-07T17:00:00.000Z","key":1486486800000,"doc_count":10},{"key_as_string":"2017-02-07T17:01:00.000Z","key":1486486860000,"doc_count":9},{"key_as_string":"2017-02-07T17:02:00.000Z","key":1486486920000,"doc_count":15},{"key_as_string":"2017-02-07T17:03:00.000Z","key":1486486980000,"doc_count":11},{"key_as_string":"2017-02-07T17:04:00.000Z","key":1486487040000,"doc_count":11},{"key_as_string":"2017-02-07T17:05:00.000Z","key":1486487100000,"doc_count":6},{"key_as_string":"2017-02-07T17:06:00.000Z","key":1486487160000,"doc_count":20},{"key_as_string":"2017-02-07T17:07:00.000Z","key":1486487220000,"doc_count":12},{"key_as_string":"2017-02-07T17:08:00.000Z","key":1486487280000,"doc_count":10},{"key_as_string":"2017-02-07T17:09:00.000Z","key":1486487340000,"doc_count":15},{"key_as_string":"2017-02-07T17:10:00.000Z","key":1486487400000,"doc_count":15},{"key_as_string":"2017-02-07T17:11:00.000Z","key":1486487460000,"doc_count":12},{"key_as_string":"2017-02-07T17:12:00.000Z","key":1486487520000,"doc_count":10},{"key_as_string":"2017-02-07T17:13:00.000Z","key":1486487580000,"doc_count":14},{"key_as_string":"2017-02-07T17:14:00.000Z","key":1486487640000,"doc_count":11},{"key_as_string":"2017-02-07T17:15:00.000Z","key":1486487700000,"doc_count":15},{"key_as_string":"2017-02-07T17:16:00.000Z","key":1486487760000,"doc_count":9},{"key_as_string":"2017-02-07T17:17:00.000Z","key":1486487820000,"doc_count":15},{"key_as_string":"2017-02-07T17:18:00.000Z","key":1486487880000,"doc_count":10},{"key_as_string":"2017-02-07T17:19:00.000Z","key":1486487940000,"doc_count":15},{"key_as_string":"2017-02-07T17:20:00.000Z","key":1486488000000,"doc_count":8},{"key_as_string":"2017-02-07T17:21:00.000Z","key":1486488060000,"doc_count":9},{"key_as_string":"2017-02-07T17:22:00.000Z","key":1486488120000,"doc_count":13},{"key_as_string":"2017-02-07T17:23:00.000Z","key":1486488180000,"doc_count":12},{"key_as_string":"2017-02-07T17:24:00.000Z","key":1486488240000,"doc_count":12},{"key_as_string":"2017-02-07T17:25:00.000Z","key":1486488300000,"doc_count":13},{"key_as_string":"2017-02-07T17:26:00.000Z","key":1486488360000,"doc_count":12},{"key_as_string":"2017-02-07T17:27:00.000Z","key":1486488420000,"doc_count":13},{"key_as_string":"2017-02-07T17:28:00.000Z","key":1486488480000,"doc_count":13},{"key_as_string":"2017-02-07T17:29:00.000Z","key":1486488540000,"doc_count":13},{"key_as_string":"2017-02-07T17:30:00.000Z","key":1486488600000,"doc_count":15},{"key_as_string":"2017-02-07T17:31:00.000Z","key":1486488660000,"doc_count":11},{"key_as_string":"2017-02-07T17:32:00.000Z","key":1486488720000,"doc_count":10},{"key_as_string":"2017-02-07T17:33:00.000Z","key":1486488780000,"doc_count":10},{"key_as_string":"2017-02-07T17:34:00.000Z","key":1486488840000,"doc_count":10},{"key_as_string":"2017-02-07T17:35:00.000Z","key":1486488900000,"doc_count":12},{"key_as_string":"2017-02-07T17:36:00.000Z","key":1486488960000,"doc_count":15},{"key_as_string":"2017-02-07T17:37:00.000Z","key":1486489020000,"doc_count":8},{"key_as_string":"2017-02-07T17:38:00.000Z","key":1486489080000,"doc_count":15},{"key_as_string":"2017-02-07T17:39:00.000Z","key":1486489140000,"doc_count":11},{"key_as_string":"2017-02-07T17:40:00.000Z","key":1486489200000,"doc_count":8},{"key_as_string":"2017-02-07T17:41:00.000Z","key":1486489260000,"doc_count":17},{"key_as_string":"2017-02-07T17:42:00.000Z","key":1486489320000,"doc_count":16},{"key_as_string":"2017-02-07T17:43:00.000Z","key":1486489380000,"doc_count":12},{"key_as_string":"2017-02-07T17:44:00.000Z","key":1486489440000,"doc_count":8},{"key_as_string":"2017-02-07T17:45:00.000Z","key":1486489500000,"doc_count":12},{"key_as_string":"2017-02-07T17:46:00.000Z","key":1486489560000,"doc_count":13},{"key_as_string":"2017-02-07T17:47:00.000Z","key":1486489620000,"doc_count":8},{"key_as_string":"2017-02-07T17:48:00.000Z","key":1486489680000,"doc_count":7},{"key_as_string":"2017-02-07T17:49:00.000Z","key":1486489740000,"doc_count":16},{"key_as_string":"2017-02-07T17:50:00.000Z","key":1486489800000,"doc_count":13},{"key_as_string":"2017-02-07T17:51:00.000Z","key":1486489860000,"doc_count":11},{"key_as_string":"2017-02-07T17:52:00.000Z","key":1486489920000,"doc_count":14},{"key_as_string":"2017-02-07T17:53:00.000Z","key":1486489980000,"doc_count":8},{"key_as_string":"2017-02-07T17:54:00.000Z","key":1486490040000,"doc_count":10},{"key_as_string":"2017-02-07T17:55:00.000Z","key":1486490100000,"doc_count":12},{"key_as_string":"2017-02-07T17:56:00.000Z","key":1486490160000,"doc_count":11},{"key_as_string":"2017-02-07T17:57:00.000Z","key":1486490220000,"doc_count":9},{"key_as_string":"2017-02-07T17:58:00.000Z","key":1486490280000,"doc_count":10},{"key_as_string":"2017-02-07T17:59:00.000Z","key":1486490340000,"doc_count":11},{"key_as_string":"2017-02-07T18:00:00.000Z","key":1486490400000,"doc_count":8},{"key_as_string":"2017-02-07T18:01:00.000Z","key":1486490460000,"doc_count":13},{"key_as_string":"2017-02-07T18:02:00.000Z","key":1486490520000,"doc_count":19},{"key_as_string":"2017-02-07T18:03:00.000Z","key":1486490580000,"doc_count":7},{"key_as_string":"2017-02-07T18:04:00.000Z","key":1486490640000,"doc_count":11},{"key_as_string":"2017-02-07T18:05:00.000Z","key":1486490700000,"doc_count":11},{"key_as_string":"2017-02-07T18:06:00.000Z","key":1486490760000,"doc_count":9},{"key_as_string":"2017-02-07T18:07:00.000Z","key":1486490820000,"doc_count":16},{"key_as_string":"2017-02-07T18:08:00.000Z","key":1486490880000,"doc_count":13},{"key_as_string":"2017-02-07T18:09:00.000Z","key":1486490940000,"doc_count":9},{"key_as_string":"2017-02-07T18:10:00.000Z","key":1486491000000,"doc_count":14},{"key_as_string":"2017-02-07T18:11:00.000Z","key":1486491060000,"doc_count":9},{"key_as_string":"2017-02-07T18:12:00.000Z","key":1486491120000,"doc_count":12},{"key_as_string":"2017-02-07T18:13:00.000Z","key":1486491180000,"doc_count":12},{"key_as_string":"2017-02-07T18:14:00.000Z","key":1486491240000,"doc_count":10},{"key_as_string":"2017-02-07T18:15:00.000Z","key":1486491300000,"doc_count":13},{"key_as_string":"2017-02-07T18:16:00.000Z","key":1486491360000,"doc_count":11},{"key_as_string":"2017-02-07T18:17:00.000Z","key":1486491420000,"doc_count":13},{"key_as_string":"2017-02-07T18:18:00.000Z","key":1486491480000,"doc_count":10},{"key_as_string":"2017-02-07T18:19:00.000Z","key":1486491540000,"doc_count":10},{"key_as_string":"2017-02-07T18:20:00.000Z","key":1486491600000,"doc_count":8},{"key_as_string":"2017-02-07T18:21:00.000Z","key":1486491660000,"doc_count":15},{"key_as_string":"2017-02-07T18:22:00.000Z","key":1486491720000,"doc_count":16},{"key_as_string":"2017-02-07T18:23:00.000Z","key":1486491780000,"doc_count":14},{"key_as_string":"2017-02-07T18:24:00.000Z","key":1486491840000,"doc_count":17},{"key_as_string":"2017-02-07T18:25:00.000Z","key":1486491900000,"doc_count":11},{"key_as_string":"2017-02-07T18:26:00.000Z","key":1486491960000,"doc_count":13},{"key_as_string":"2017-02-07T18:27:00.000Z","key":1486492020000,"doc_count":15},{"key_as_string":"2017-02-07T18:28:00.000Z","key":1486492080000,"doc_count":13},{"key_as_string":"2017-02-07T18:29:00.000Z","key":1486492140000,"doc_count":13},{"key_as_string":"2017-02-07T18:30:00.000Z","key":1486492200000,"doc_count":12},{"key_as_string":"2017-02-07T18:31:00.000Z","key":1486492260000,"doc_count":14},{"key_as_string":"2017-02-07T18:32:00.000Z","key":1486492320000,"doc_count":13},{"key_as_string":"2017-02-07T18:33:00.000Z","key":1486492380000,"doc_count":6},{"key_as_string":"2017-02-07T18:34:00.000Z","key":1486492440000,"doc_count":14},{"key_as_string":"2017-02-07T18:35:00.000Z","key":1486492500000,"doc_count":14},{"key_as_string":"2017-02-07T18:36:00.000Z","key":1486492560000,"doc_count":9},{"key_as_string":"2017-02-07T18:37:00.000Z","key":1486492620000,"doc_count":12},{"key_as_string":"2017-02-07T18:38:00.000Z","key":1486492680000,"doc_count":8},{"key_as_string":"2017-02-07T18:39:00.000Z","key":1486492740000,"doc_count":13},{"key_as_string":"2017-02-07T18:40:00.000Z","key":1486492800000,"doc_count":6},{"key_as_string":"2017-02-07T18:41:00.000Z","key":1486492860000,"doc_count":16},{"key_as_string":"2017-02-07T18:42:00.000Z","key":1486492920000,"doc_count":12},{"key_as_string":"2017-02-07T18:43:00.000Z","key":1486492980000,"doc_count":9},{"key_as_string":"2017-02-07T18:44:00.000Z","key":1486493040000,"doc_count":14},{"key_as_string":"2017-02-07T18:45:00.000Z","key":1486493100000,"doc_count":14},{"key_as_string":"2017-02-07T18:46:00.000Z","key":1486493160000,"doc_count":8},{"key_as_string":"2017-02-07T18:47:00.000Z","key":1486493220000,"doc_count":12},{"key_as_string":"2017-02-07T18:48:00.000Z","key":1486493280000,"doc_count":11},{"key_as_string":"2017-02-07T18:49:00.000Z","key":1486493340000,"doc_count":14},{"key_as_string":"2017-02-07T18:50:00.000Z","key":1486493400000,"doc_count":10},{"key_as_string":"2017-02-07T18:51:00.000Z","key":1486493460000,"doc_count":11},{"key_as_string":"2017-02-07T18:52:00.000Z","key":1486493520000,"doc_count":17},{"key_as_string":"2017-02-07T18:53:00.000Z","key":1486493580000,"doc_count":11},{"key_as_string":"2017-02-07T18:54:00.000Z","key":1486493640000,"doc_count":12},{"key_as_string":"2017-02-07T18:55:00.000Z","key":1486493700000,"doc_count":10},{"key_as_string":"2017-02-07T18:56:00.000Z","key":1486493760000,"doc_count":10},{"key_as_string":"2017-02-07T18:57:00.000Z","key":1486493820000,"doc_count":11},{"key_as_string":"2017-02-07T18:58:00.000Z","key":1486493880000,"doc_count":11},{"key_as_string":"2017-02-07T18:59:00.000Z","key":1486493940000,"doc_count":13},{"key_as_string":"2017-02-07T19:00:00.000Z","key":1486494000000,"doc_count":9},{"key_as_string":"2017-02-07T19:01:00.000Z","key":1486494060000,"doc_count":15},{"key_as_string":"2017-02-07T19:02:00.000Z","key":1486494120000,"doc_count":10},{"key_as_string":"2017-02-07T19:03:00.000Z","key":1486494180000,"doc_count":11},{"key_as_string":"2017-02-07T19:04:00.000Z","key":1486494240000,"doc_count":10},{"key_as_string":"2017-02-07T19:05:00.000Z","key":1486494300000,"doc_count":10},{"key_as_string":"2017-02-07T19:06:00.000Z","key":1486494360000,"doc_count":15},{"key_as_string":"2017-02-07T19:07:00.000Z","key":1486494420000,"doc_count":14},{"key_as_string":"2017-02-07T19:08:00.000Z","key":1486494480000,"doc_count":7},{"key_as_string":"2017-02-07T19:09:00.000Z","key":1486494540000,"doc_count":14},{"key_as_string":"2017-02-07T19:10:00.000Z","key":1486494600000,"doc_count":8},{"key_as_string":"2017-02-07T19:11:00.000Z","key":1486494660000,"doc_count":11},{"key_as_string":"2017-02-07T19:12:00.000Z","key":1486494720000,"doc_count":10},{"key_as_string":"2017-02-07T19:13:00.000Z","key":1486494780000,"doc_count":11},{"key_as_string":"2017-02-07T19:14:00.000Z","key":1486494840000,"doc_count":13},{"key_as_string":"2017-02-07T19:15:00.000Z","key":1486494900000,"doc_count":16},{"key_as_string":"2017-02-07T19:16:00.000Z","key":1486494960000,"doc_count":5},{"key_as_string":"2017-02-07T19:17:00.000Z","key":1486495020000,"doc_count":14},{"key_as_string":"2017-02-07T19:18:00.000Z","key":1486495080000,"doc_count":13},{"key_as_string":"2017-02-07T19:19:00.000Z","key":1486495140000,"doc_count":10},{"key_as_string":"2017-02-07T19:20:00.000Z","key":1486495200000,"doc_count":13},{"key_as_string":"2017-02-07T19:21:00.000Z","key":1486495260000,"doc_count":10},{"key_as_string":"2017-02-07T19:22:00.000Z","key":1486495320000,"doc_count":12},{"key_as_string":"2017-02-07T19:23:00.000Z","key":1486495380000,"doc_count":13},{"key_as_string":"2017-02-07T19:24:00.000Z","key":1486495440000,"doc_count":10},{"key_as_string":"2017-02-07T19:25:00.000Z","key":1486495500000,"doc_count":10},{"key_as_string":"2017-02-07T19:26:00.000Z","key":1486495560000,"doc_count":11},{"key_as_string":"2017-02-07T19:27:00.000Z","key":1486495620000,"doc_count":9},{"key_as_string":"2017-02-07T19:28:00.000Z","key":1486495680000,"doc_count":10},{"key_as_string":"2017-02-07T19:29:00.000Z","key":1486495740000,"doc_count":14},{"key_as_string":"2017-02-07T19:30:00.000Z","key":1486495800000,"doc_count":14},{"key_as_string":"2017-02-07T19:31:00.000Z","key":1486495860000,"doc_count":12},{"key_as_string":"2017-02-07T19:32:00.000Z","key":1486495920000,"doc_count":6},{"key_as_string":"2017-02-07T19:33:00.000Z","key":1486495980000,"doc_count":11},{"key_as_string":"2017-02-07T19:34:00.000Z","key":1486496040000,"doc_count":12},{"key_as_string":"2017-02-07T19:35:00.000Z","key":1486496100000,"doc_count":9},{"key_as_string":"2017-02-07T19:36:00.000Z","key":1486496160000,"doc_count":11},{"key_as_string":"2017-02-07T19:37:00.000Z","key":1486496220000,"doc_count":14},{"key_as_string":"2017-02-07T19:38:00.000Z","key":1486496280000,"doc_count":9},{"key_as_string":"2017-02-07T19:39:00.000Z","key":1486496340000,"doc_count":10},{"key_as_string":"2017-02-07T19:40:00.000Z","key":1486496400000,"doc_count":10},{"key_as_string":"2017-02-07T19:41:00.000Z","key":1486496460000,"doc_count":9},{"key_as_string":"2017-02-07T19:42:00.000Z","key":1486496520000,"doc_count":12},{"key_as_string":"2017-02-07T19:43:00.000Z","key":1486496580000,"doc_count":10},{"key_as_string":"2017-02-07T19:44:00.000Z","key":1486496640000,"doc_count":10},{"key_as_string":"2017-02-07T19:45:00.000Z","key":1486496700000,"doc_count":14},{"key_as_string":"2017-02-07T19:46:00.000Z","key":1486496760000,"doc_count":7},{"key_as_string":"2017-02-07T19:47:00.000Z","key":1486496820000,"doc_count":14},{"key_as_string":"2017-02-07T19:48:00.000Z","key":1486496880000,"doc_count":12},{"key_as_string":"2017-02-07T19:49:00.000Z","key":1486496940000,"doc_count":8},{"key_as_string":"2017-02-07T19:50:00.000Z","key":1486497000000,"doc_count":14},{"key_as_string":"2017-02-07T19:51:00.000Z","key":1486497060000,"doc_count":7},{"key_as_string":"2017-02-07T19:52:00.000Z","key":1486497120000,"doc_count":14},{"key_as_string":"2017-02-07T19:53:00.000Z","key":1486497180000,"doc_count":10},{"key_as_string":"2017-02-07T19:54:00.000Z","key":1486497240000,"doc_count":9},{"key_as_string":"2017-02-07T19:55:00.000Z","key":1486497300000,"doc_count":13},{"key_as_string":"2017-02-07T19:56:00.000Z","key":1486497360000,"doc_count":6},{"key_as_string":"2017-02-07T19:57:00.000Z","key":1486497420000,"doc_count":7},{"key_as_string":"2017-02-07T19:58:00.000Z","key":1486497480000,"doc_count":13},{"key_as_string":"2017-02-07T19:59:00.000Z","key":1486497540000,"doc_count":14},{"key_as_string":"2017-02-07T20:00:00.000Z","key":1486497600000,"doc_count":9},{"key_as_string":"2017-02-07T20:01:00.000Z","key":1486497660000,"doc_count":12},{"key_as_string":"2017-02-07T20:02:00.000Z","key":1486497720000,"doc_count":9},{"key_as_string":"2017-02-07T20:03:00.000Z","key":1486497780000,"doc_count":11},{"key_as_string":"2017-02-07T20:04:00.000Z","key":1486497840000,"doc_count":12},{"key_as_string":"2017-02-07T20:05:00.000Z","key":1486497900000,"doc_count":15},{"key_as_string":"2017-02-07T20:06:00.000Z","key":1486497960000,"doc_count":8},{"key_as_string":"2017-02-07T20:07:00.000Z","key":1486498020000,"doc_count":3},{"key_as_string":"2017-02-07T20:08:00.000Z","key":1486498080000,"doc_count":12},{"key_as_string":"2017-02-07T20:09:00.000Z","key":1486498140000,"doc_count":12},{"key_as_string":"2017-02-07T20:10:00.000Z","key":1486498200000,"doc_count":10},{"key_as_string":"2017-02-07T20:11:00.000Z","key":1486498260000,"doc_count":16},{"key_as_string":"2017-02-07T20:12:00.000Z","key":1486498320000,"doc_count":12},{"key_as_string":"2017-02-07T20:13:00.000Z","key":1486498380000,"doc_count":6},{"key_as_string":"2017-02-07T20:14:00.000Z","key":1486498440000,"doc_count":12},{"key_as_string":"2017-02-07T20:15:00.000Z","key":1486498500000,"doc_count":7},{"key_as_string":"2017-02-07T20:16:00.000Z","key":1486498560000,"doc_count":12},{"key_as_string":"2017-02-07T20:17:00.000Z","key":1486498620000,"doc_count":9},{"key_as_string":"2017-02-07T20:18:00.000Z","key":1486498680000,"doc_count":13},{"key_as_string":"2017-02-07T20:19:00.000Z","key":1486498740000,"doc_count":11},{"key_as_string":"2017-02-07T20:20:00.000Z","key":1486498800000,"doc_count":8},{"key_as_string":"2017-02-07T20:21:00.000Z","key":1486498860000,"doc_count":11},{"key_as_string":"2017-02-07T20:22:00.000Z","key":1486498920000,"doc_count":7},{"key_as_string":"2017-02-07T20:23:00.000Z","key":1486498980000,"doc_count":11},{"key_as_string":"2017-02-07T20:24:00.000Z","key":1486499040000,"doc_count":11},{"key_as_string":"2017-02-07T20:25:00.000Z","key":1486499100000,"doc_count":7},{"key_as_string":"2017-02-07T20:26:00.000Z","key":1486499160000,"doc_count":11},{"key_as_string":"2017-02-07T20:27:00.000Z","key":1486499220000,"doc_count":12},{"key_as_string":"2017-02-07T20:28:00.000Z","key":1486499280000,"doc_count":13},{"key_as_string":"2017-02-07T20:29:00.000Z","key":1486499340000,"doc_count":11},{"key_as_string":"2017-02-07T20:30:00.000Z","key":1486499400000,"doc_count":6},{"key_as_string":"2017-02-07T20:31:00.000Z","key":1486499460000,"doc_count":12},{"key_as_string":"2017-02-07T20:32:00.000Z","key":1486499520000,"doc_count":9},{"key_as_string":"2017-02-07T20:33:00.000Z","key":1486499580000,"doc_count":13},{"key_as_string":"2017-02-07T20:34:00.000Z","key":1486499640000,"doc_count":11},{"key_as_string":"2017-02-07T20:35:00.000Z","key":1486499700000,"doc_count":16},{"key_as_string":"2017-02-07T20:36:00.000Z","key":1486499760000,"doc_count":9},{"key_as_string":"2017-02-07T20:37:00.000Z","key":1486499820000,"doc_count":7},{"key_as_string":"2017-02-07T20:38:00.000Z","key":1486499880000,"doc_count":14},{"key_as_string":"2017-02-07T20:39:00.000Z","key":1486499940000,"doc_count":10},{"key_as_string":"2017-02-07T20:40:00.000Z","key":1486500000000,"doc_count":9},{"key_as_string":"2017-02-07T20:41:00.000Z","key":1486500060000,"doc_count":11},{"key_as_string":"2017-02-07T20:42:00.000Z","key":1486500120000,"doc_count":15},{"key_as_string":"2017-02-07T20:43:00.000Z","key":1486500180000,"doc_count":8},{"key_as_string":"2017-02-07T20:44:00.000Z","key":1486500240000,"doc_count":16},{"key_as_string":"2017-02-07T20:45:00.000Z","key":1486500300000,"doc_count":8},{"key_as_string":"2017-02-07T20:46:00.000Z","key":1486500360000,"doc_count":12},{"key_as_string":"2017-02-07T20:47:00.000Z","key":1486500420000,"doc_count":11},{"key_as_string":"2017-02-07T20:48:00.000Z","key":1486500480000,"doc_count":6},{"key_as_string":"2017-02-07T20:49:00.000Z","key":1486500540000,"doc_count":10},{"key_as_string":"2017-02-07T20:50:00.000Z","key":1486500600000,"doc_count":8},{"key_as_string":"2017-02-07T20:51:00.000Z","key":1486500660000,"doc_count":15},{"key_as_string":"2017-02-07T20:52:00.000Z","key":1486500720000,"doc_count":9},{"key_as_string":"2017-02-07T20:53:00.000Z","key":1486500780000,"doc_count":11},{"key_as_string":"2017-02-07T20:54:00.000Z","key":1486500840000,"doc_count":13},{"key_as_string":"2017-02-07T20:55:00.000Z","key":1486500900000,"doc_count":9},{"key_as_string":"2017-02-07T20:56:00.000Z","key":1486500960000,"doc_count":5},{"key_as_string":"2017-02-07T20:57:00.000Z","key":1486501020000,"doc_count":10},{"key_as_string":"2017-02-07T20:58:00.000Z","key":1486501080000,"doc_count":13},{"key_as_string":"2017-02-07T20:59:00.000Z","key":1486501140000,"doc_count":14},{"key_as_string":"2017-02-07T21:00:00.000Z","key":1486501200000,"doc_count":13},{"key_as_string":"2017-02-07T21:01:00.000Z","key":1486501260000,"doc_count":8},{"key_as_string":"2017-02-07T21:02:00.000Z","key":1486501320000,"doc_count":11},{"key_as_string":"2017-02-07T21:03:00.000Z","key":1486501380000,"doc_count":9},{"key_as_string":"2017-02-07T21:04:00.000Z","key":1486501440000,"doc_count":16},{"key_as_string":"2017-02-07T21:05:00.000Z","key":1486501500000,"doc_count":10},{"key_as_string":"2017-02-07T21:06:00.000Z","key":1486501560000,"doc_count":8},{"key_as_string":"2017-02-07T21:07:00.000Z","key":1486501620000,"doc_count":16},{"key_as_string":"2017-02-07T21:08:00.000Z","key":1486501680000,"doc_count":13},{"key_as_string":"2017-02-07T21:09:00.000Z","key":1486501740000,"doc_count":10},{"key_as_string":"2017-02-07T21:10:00.000Z","key":1486501800000,"doc_count":11},{"key_as_string":"2017-02-07T21:11:00.000Z","key":1486501860000,"doc_count":8},{"key_as_string":"2017-02-07T21:12:00.000Z","key":1486501920000,"doc_count":12},{"key_as_string":"2017-02-07T21:13:00.000Z","key":1486501980000,"doc_count":17},{"key_as_string":"2017-02-07T21:14:00.000Z","key":1486502040000,"doc_count":6},{"key_as_string":"2017-02-07T21:15:00.000Z","key":1486502100000,"doc_count":12},{"key_as_string":"2017-02-07T21:16:00.000Z","key":1486502160000,"doc_count":9},{"key_as_string":"2017-02-07T21:17:00.000Z","key":1486502220000,"doc_count":8},{"key_as_string":"2017-02-07T21:18:00.000Z","key":1486502280000,"doc_count":8},{"key_as_string":"2017-02-07T21:19:00.000Z","key":1486502340000,"doc_count":11},{"key_as_string":"2017-02-07T21:20:00.000Z","key":1486502400000,"doc_count":11},{"key_as_string":"2017-02-07T21:21:00.000Z","key":1486502460000,"doc_count":10},{"key_as_string":"2017-02-07T21:22:00.000Z","key":1486502520000,"doc_count":10},{"key_as_string":"2017-02-07T21:23:00.000Z","key":1486502580000,"doc_count":13},{"key_as_string":"2017-02-07T21:24:00.000Z","key":1486502640000,"doc_count":10},{"key_as_string":"2017-02-07T21:25:00.000Z","key":1486502700000,"doc_count":11},{"key_as_string":"2017-02-07T21:26:00.000Z","key":1486502760000,"doc_count":7},{"key_as_string":"2017-02-07T21:27:00.000Z","key":1486502820000,"doc_count":15},{"key_as_string":"2017-02-07T21:28:00.000Z","key":1486502880000,"doc_count":14},{"key_as_string":"2017-02-07T21:29:00.000Z","key":1486502940000,"doc_count":8},{"key_as_string":"2017-02-07T21:30:00.000Z","key":1486503000000,"doc_count":7},{"key_as_string":"2017-02-07T21:31:00.000Z","key":1486503060000,"doc_count":12},{"key_as_string":"2017-02-07T21:32:00.000Z","key":1486503120000,"doc_count":10},{"key_as_string":"2017-02-07T21:33:00.000Z","key":1486503180000,"doc_count":10},{"key_as_string":"2017-02-07T21:34:00.000Z","key":1486503240000,"doc_count":14},{"key_as_string":"2017-02-07T21:35:00.000Z","key":1486503300000,"doc_count":9},{"key_as_string":"2017-02-07T21:36:00.000Z","key":1486503360000,"doc_count":9},{"key_as_string":"2017-02-07T21:37:00.000Z","key":1486503420000,"doc_count":13},{"key_as_string":"2017-02-07T21:38:00.000Z","key":1486503480000,"doc_count":7},{"key_as_string":"2017-02-07T21:39:00.000Z","key":1486503540000,"doc_count":6},{"key_as_string":"2017-02-07T21:40:00.000Z","key":1486503600000,"doc_count":16},{"key_as_string":"2017-02-07T21:41:00.000Z","key":1486503660000,"doc_count":13},{"key_as_string":"2017-02-07T21:42:00.000Z","key":1486503720000,"doc_count":9},{"key_as_string":"2017-02-07T21:43:00.000Z","key":1486503780000,"doc_count":10},{"key_as_string":"2017-02-07T21:44:00.000Z","key":1486503840000,"doc_count":9},{"key_as_string":"2017-02-07T21:45:00.000Z","key":1486503900000,"doc_count":10},{"key_as_string":"2017-02-07T21:46:00.000Z","key":1486503960000,"doc_count":13},{"key_as_string":"2017-02-07T21:47:00.000Z","key":1486504020000,"doc_count":11},{"key_as_string":"2017-02-07T21:48:00.000Z","key":1486504080000,"doc_count":8},{"key_as_string":"2017-02-07T21:49:00.000Z","key":1486504140000,"doc_count":11},{"key_as_string":"2017-02-07T21:50:00.000Z","key":1486504200000,"doc_count":14},{"key_as_string":"2017-02-07T21:51:00.000Z","key":1486504260000,"doc_count":7},{"key_as_string":"2017-02-07T21:52:00.000Z","key":1486504320000,"doc_count":11},{"key_as_string":"2017-02-07T21:53:00.000Z","key":1486504380000,"doc_count":9},{"key_as_string":"2017-02-07T21:54:00.000Z","key":1486504440000,"doc_count":10},{"key_as_string":"2017-02-07T21:55:00.000Z","key":1486504500000,"doc_count":11},{"key_as_string":"2017-02-07T21:56:00.000Z","key":1486504560000,"doc_count":12},{"key_as_string":"2017-02-07T21:57:00.000Z","key":1486504620000,"doc_count":14},{"key_as_string":"2017-02-07T21:58:00.000Z","key":1486504680000,"doc_count":9},{"key_as_string":"2017-02-07T21:59:00.000Z","key":1486504740000,"doc_count":7},{"key_as_string":"2017-02-07T22:00:00.000Z","key":1486504800000,"doc_count":14},{"key_as_string":"2017-02-07T22:01:00.000Z","key":1486504860000,"doc_count":12},{"key_as_string":"2017-02-07T22:02:00.000Z","key":1486504920000,"doc_count":7},{"key_as_string":"2017-02-07T22:03:00.000Z","key":1486504980000,"doc_count":16},{"key_as_string":"2017-02-07T22:04:00.000Z","key":1486505040000,"doc_count":9},{"key_as_string":"2017-02-07T22:05:00.000Z","key":1486505100000,"doc_count":10},{"key_as_string":"2017-02-07T22:06:00.000Z","key":1486505160000,"doc_count":11},{"key_as_string":"2017-02-07T22:07:00.000Z","key":1486505220000,"doc_count":16},{"key_as_string":"2017-02-07T22:08:00.000Z","key":1486505280000,"doc_count":9},{"key_as_string":"2017-02-07T22:09:00.000Z","key":1486505340000,"doc_count":7},{"key_as_string":"2017-02-07T22:10:00.000Z","key":1486505400000,"doc_count":15},{"key_as_string":"2017-02-07T22:11:00.000Z","key":1486505460000,"doc_count":12},{"key_as_string":"2017-02-07T22:12:00.000Z","key":1486505520000,"doc_count":8},{"key_as_string":"2017-02-07T22:13:00.000Z","key":1486505580000,"doc_count":12},{"key_as_string":"2017-02-07T22:14:00.000Z","key":1486505640000,"doc_count":15},{"key_as_string":"2017-02-07T22:15:00.000Z","key":1486505700000,"doc_count":10},{"key_as_string":"2017-02-07T22:16:00.000Z","key":1486505760000,"doc_count":11},{"key_as_string":"2017-02-07T22:17:00.000Z","key":1486505820000,"doc_count":6},{"key_as_string":"2017-02-07T22:18:00.000Z","key":1486505880000,"doc_count":13},{"key_as_string":"2017-02-07T22:19:00.000Z","key":1486505940000,"doc_count":8},{"key_as_string":"2017-02-07T22:20:00.000Z","key":1486506000000,"doc_count":5},{"key_as_string":"2017-02-07T22:21:00.000Z","key":1486506060000,"doc_count":15},{"key_as_string":"2017-02-07T22:22:00.000Z","key":1486506120000,"doc_count":10},{"key_as_string":"2017-02-07T22:23:00.000Z","key":1486506180000,"doc_count":10},{"key_as_string":"2017-02-07T22:24:00.000Z","key":1486506240000,"doc_count":14},{"key_as_string":"2017-02-07T22:25:00.000Z","key":1486506300000,"doc_count":8},{"key_as_string":"2017-02-07T22:26:00.000Z","key":1486506360000,"doc_count":12},{"key_as_string":"2017-02-07T22:27:00.000Z","key":1486506420000,"doc_count":6},{"key_as_string":"2017-02-07T22:28:00.000Z","key":1486506480000,"doc_count":12},{"key_as_string":"2017-02-07T22:29:00.000Z","key":1486506540000,"doc_count":14},{"key_as_string":"2017-02-07T22:30:00.000Z","key":1486506600000,"doc_count":8},{"key_as_string":"2017-02-07T22:31:00.000Z","key":1486506660000,"doc_count":10},{"key_as_string":"2017-02-07T22:32:00.000Z","key":1486506720000,"doc_count":15},{"key_as_string":"2017-02-07T22:33:00.000Z","key":1486506780000,"doc_count":9},{"key_as_string":"2017-02-07T22:34:00.000Z","key":1486506840000,"doc_count":7},{"key_as_string":"2017-02-07T22:35:00.000Z","key":1486506900000,"doc_count":12},{"key_as_string":"2017-02-07T22:36:00.000Z","key":1486506960000,"doc_count":9},{"key_as_string":"2017-02-07T22:37:00.000Z","key":1486507020000,"doc_count":15},{"key_as_string":"2017-02-07T22:38:00.000Z","key":1486507080000,"doc_count":6},{"key_as_string":"2017-02-07T22:39:00.000Z","key":1486507140000,"doc_count":12},{"key_as_string":"2017-02-07T22:40:00.000Z","key":1486507200000,"doc_count":13},{"key_as_string":"2017-02-07T22:41:00.000Z","key":1486507260000,"doc_count":8},{"key_as_string":"2017-02-07T22:42:00.000Z","key":1486507320000,"doc_count":13},{"key_as_string":"2017-02-07T22:43:00.000Z","key":1486507380000,"doc_count":7},{"key_as_string":"2017-02-07T22:44:00.000Z","key":1486507440000,"doc_count":10},{"key_as_string":"2017-02-07T22:45:00.000Z","key":1486507500000,"doc_count":7},{"key_as_string":"2017-02-07T22:46:00.000Z","key":1486507560000,"doc_count":9},{"key_as_string":"2017-02-07T22:47:00.000Z","key":1486507620000,"doc_count":12},{"key_as_string":"2017-02-07T22:48:00.000Z","key":1486507680000,"doc_count":9},{"key_as_string":"2017-02-07T22:49:00.000Z","key":1486507740000,"doc_count":6},{"key_as_string":"2017-02-07T22:50:00.000Z","key":1486507800000,"doc_count":12},{"key_as_string":"2017-02-07T22:51:00.000Z","key":1486507860000,"doc_count":12},{"key_as_string":"2017-02-07T22:52:00.000Z","key":1486507920000,"doc_count":9},{"key_as_string":"2017-02-07T22:53:00.000Z","key":1486507980000,"doc_count":10},{"key_as_string":"2017-02-07T22:54:00.000Z","key":1486508040000,"doc_count":12},{"key_as_string":"2017-02-07T22:55:00.000Z","key":1486508100000,"doc_count":8},{"key_as_string":"2017-02-07T22:56:00.000Z","key":1486508160000,"doc_count":9},{"key_as_string":"2017-02-07T22:57:00.000Z","key":1486508220000,"doc_count":10},{"key_as_string":"2017-02-07T22:58:00.000Z","key":1486508280000,"doc_count":13},{"key_as_string":"2017-02-07T22:59:00.000Z","key":1486508340000,"doc_count":12},{"key_as_string":"2017-02-07T23:00:00.000Z","key":1486508400000,"doc_count":9},{"key_as_string":"2017-02-07T23:01:00.000Z","key":1486508460000,"doc_count":9},{"key_as_string":"2017-02-07T23:02:00.000Z","key":1486508520000,"doc_count":10},{"key_as_string":"2017-02-07T23:03:00.000Z","key":1486508580000,"doc_count":14},{"key_as_string":"2017-02-07T23:04:00.000Z","key":1486508640000,"doc_count":9},{"key_as_string":"2017-02-07T23:05:00.000Z","key":1486508700000,"doc_count":11},{"key_as_string":"2017-02-07T23:06:00.000Z","key":1486508760000,"doc_count":10},{"key_as_string":"2017-02-07T23:07:00.000Z","key":1486508820000,"doc_count":16},{"key_as_string":"2017-02-07T23:08:00.000Z","key":1486508880000,"doc_count":12},{"key_as_string":"2017-02-07T23:09:00.000Z","key":1486508940000,"doc_count":11},{"key_as_string":"2017-02-07T23:10:00.000Z","key":1486509000000,"doc_count":9},{"key_as_string":"2017-02-07T23:11:00.000Z","key":1486509060000,"doc_count":13},{"key_as_string":"2017-02-07T23:12:00.000Z","key":1486509120000,"doc_count":5},{"key_as_string":"2017-02-07T23:13:00.000Z","key":1486509180000,"doc_count":9},{"key_as_string":"2017-02-07T23:14:00.000Z","key":1486509240000,"doc_count":11},{"key_as_string":"2017-02-07T23:15:00.000Z","key":1486509300000,"doc_count":14},{"key_as_string":"2017-02-07T23:16:00.000Z","key":1486509360000,"doc_count":11},{"key_as_string":"2017-02-07T23:17:00.000Z","key":1486509420000,"doc_count":8},{"key_as_string":"2017-02-07T23:18:00.000Z","key":1486509480000,"doc_count":12},{"key_as_string":"2017-02-07T23:19:00.000Z","key":1486509540000,"doc_count":8},{"key_as_string":"2017-02-07T23:20:00.000Z","key":1486509600000,"doc_count":7},{"key_as_string":"2017-02-07T23:21:00.000Z","key":1486509660000,"doc_count":13},{"key_as_string":"2017-02-07T23:22:00.000Z","key":1486509720000,"doc_count":13},{"key_as_string":"2017-02-07T23:23:00.000Z","key":1486509780000,"doc_count":5},{"key_as_string":"2017-02-07T23:24:00.000Z","key":1486509840000,"doc_count":13},{"key_as_string":"2017-02-07T23:25:00.000Z","key":1486509900000,"doc_count":5},{"key_as_string":"2017-02-07T23:26:00.000Z","key":1486509960000,"doc_count":11},{"key_as_string":"2017-02-07T23:27:00.000Z","key":1486510020000,"doc_count":11},{"key_as_string":"2017-02-07T23:28:00.000Z","key":1486510080000,"doc_count":12},{"key_as_string":"2017-02-07T23:29:00.000Z","key":1486510140000,"doc_count":5},{"key_as_string":"2017-02-07T23:30:00.000Z","key":1486510200000,"doc_count":11},{"key_as_string":"2017-02-07T23:31:00.000Z","key":1486510260000,"doc_count":6},{"key_as_string":"2017-02-07T23:32:00.000Z","key":1486510320000,"doc_count":15},{"key_as_string":"2017-02-07T23:33:00.000Z","key":1486510380000,"doc_count":13},{"key_as_string":"2017-02-07T23:34:00.000Z","key":1486510440000,"doc_count":15},{"key_as_string":"2017-02-07T23:35:00.000Z","key":1486510500000,"doc_count":8},{"key_as_string":"2017-02-07T23:36:00.000Z","key":1486510560000,"doc_count":11},{"key_as_string":"2017-02-07T23:37:00.000Z","key":1486510620000,"doc_count":15},{"key_as_string":"2017-02-07T23:38:00.000Z","key":1486510680000,"doc_count":7},{"key_as_string":"2017-02-07T23:39:00.000Z","key":1486510740000,"doc_count":11},{"key_as_string":"2017-02-07T23:40:00.000Z","key":1486510800000,"doc_count":7},{"key_as_string":"2017-02-07T23:41:00.000Z","key":1486510860000,"doc_count":9},{"key_as_string":"2017-02-07T23:42:00.000Z","key":1486510920000,"doc_count":11},{"key_as_string":"2017-02-07T23:43:00.000Z","key":1486510980000,"doc_count":12},{"key_as_string":"2017-02-07T23:44:00.000Z","key":1486511040000,"doc_count":19},{"key_as_string":"2017-02-07T23:45:00.000Z","key":1486511100000,"doc_count":6},{"key_as_string":"2017-02-07T23:46:00.000Z","key":1486511160000,"doc_count":12},{"key_as_string":"2017-02-07T23:47:00.000Z","key":1486511220000,"doc_count":7},{"key_as_string":"2017-02-07T23:48:00.000Z","key":1486511280000,"doc_count":19},{"key_as_string":"2017-02-07T23:49:00.000Z","key":1486511340000,"doc_count":4},{"key_as_string":"2017-02-07T23:50:00.000Z","key":1486511400000,"doc_count":15},{"key_as_string":"2017-02-07T23:51:00.000Z","key":1486511460000,"doc_count":9},{"key_as_string":"2017-02-07T23:52:00.000Z","key":1486511520000,"doc_count":7},{"key_as_string":"2017-02-07T23:53:00.000Z","key":1486511580000,"doc_count":11},{"key_as_string":"2017-02-07T23:54:00.000Z","key":1486511640000,"doc_count":11},{"key_as_string":"2017-02-07T23:55:00.000Z","key":1486511700000,"doc_count":10},{"key_as_string":"2017-02-07T23:56:00.000Z","key":1486511760000,"doc_count":7},{"key_as_string":"2017-02-07T23:57:00.000Z","key":1486511820000,"doc_count":16},{"key_as_string":"2017-02-07T23:58:00.000Z","key":1486511880000,"doc_count":9},{"key_as_string":"2017-02-07T23:59:00.000Z","key":1486511940000,"doc_count":13},{"key_as_string":"2017-02-08T00:00:00.000Z","key":1486512000000,"doc_count":11},{"key_as_string":"2017-02-08T00:01:00.000Z","key":1486512060000,"doc_count":8},{"key_as_string":"2017-02-08T00:02:00.000Z","key":1486512120000,"doc_count":11},{"key_as_string":"2017-02-08T00:03:00.000Z","key":1486512180000,"doc_count":11},{"key_as_string":"2017-02-08T00:04:00.000Z","key":1486512240000,"doc_count":10},{"key_as_string":"2017-02-08T00:05:00.000Z","key":1486512300000,"doc_count":11},{"key_as_string":"2017-02-08T00:06:00.000Z","key":1486512360000,"doc_count":9},{"key_as_string":"2017-02-08T00:07:00.000Z","key":1486512420000,"doc_count":10},{"key_as_string":"2017-02-08T00:08:00.000Z","key":1486512480000,"doc_count":9},{"key_as_string":"2017-02-08T00:09:00.000Z","key":1486512540000,"doc_count":12},{"key_as_string":"2017-02-08T00:10:00.000Z","key":1486512600000,"doc_count":7},{"key_as_string":"2017-02-08T00:11:00.000Z","key":1486512660000,"doc_count":14},{"key_as_string":"2017-02-08T00:12:00.000Z","key":1486512720000,"doc_count":10},{"key_as_string":"2017-02-08T00:13:00.000Z","key":1486512780000,"doc_count":8},{"key_as_string":"2017-02-08T00:14:00.000Z","key":1486512840000,"doc_count":7},{"key_as_string":"2017-02-08T00:15:00.000Z","key":1486512900000,"doc_count":10},{"key_as_string":"2017-02-08T00:16:00.000Z","key":1486512960000,"doc_count":12},{"key_as_string":"2017-02-08T00:17:00.000Z","key":1486513020000,"doc_count":13},{"key_as_string":"2017-02-08T00:18:00.000Z","key":1486513080000,"doc_count":7},{"key_as_string":"2017-02-08T00:19:00.000Z","key":1486513140000,"doc_count":7},{"key_as_string":"2017-02-08T00:20:00.000Z","key":1486513200000,"doc_count":7},{"key_as_string":"2017-02-08T00:21:00.000Z","key":1486513260000,"doc_count":9},{"key_as_string":"2017-02-08T00:22:00.000Z","key":1486513320000,"doc_count":13},{"key_as_string":"2017-02-08T00:23:00.000Z","key":1486513380000,"doc_count":10},{"key_as_string":"2017-02-08T00:24:00.000Z","key":1486513440000,"doc_count":8},{"key_as_string":"2017-02-08T00:25:00.000Z","key":1486513500000,"doc_count":13},{"key_as_string":"2017-02-08T00:26:00.000Z","key":1486513560000,"doc_count":10},{"key_as_string":"2017-02-08T00:27:00.000Z","key":1486513620000,"doc_count":8},{"key_as_string":"2017-02-08T00:28:00.000Z","key":1486513680000,"doc_count":15},{"key_as_string":"2017-02-08T00:29:00.000Z","key":1486513740000,"doc_count":7},{"key_as_string":"2017-02-08T00:30:00.000Z","key":1486513800000,"doc_count":9},{"key_as_string":"2017-02-08T00:31:00.000Z","key":1486513860000,"doc_count":13},{"key_as_string":"2017-02-08T00:32:00.000Z","key":1486513920000,"doc_count":8},{"key_as_string":"2017-02-08T00:33:00.000Z","key":1486513980000,"doc_count":12},{"key_as_string":"2017-02-08T00:34:00.000Z","key":1486514040000,"doc_count":13},{"key_as_string":"2017-02-08T00:35:00.000Z","key":1486514100000,"doc_count":9},{"key_as_string":"2017-02-08T00:36:00.000Z","key":1486514160000,"doc_count":12},{"key_as_string":"2017-02-08T00:37:00.000Z","key":1486514220000,"doc_count":9},{"key_as_string":"2017-02-08T00:38:00.000Z","key":1486514280000,"doc_count":9},{"key_as_string":"2017-02-08T00:39:00.000Z","key":1486514340000,"doc_count":16},{"key_as_string":"2017-02-08T00:40:00.000Z","key":1486514400000,"doc_count":10},{"key_as_string":"2017-02-08T00:41:00.000Z","key":1486514460000,"doc_count":13},{"key_as_string":"2017-02-08T00:42:00.000Z","key":1486514520000,"doc_count":6},{"key_as_string":"2017-02-08T00:43:00.000Z","key":1486514580000,"doc_count":16},{"key_as_string":"2017-02-08T00:44:00.000Z","key":1486514640000,"doc_count":16},{"key_as_string":"2017-02-08T00:45:00.000Z","key":1486514700000,"doc_count":6},{"key_as_string":"2017-02-08T00:46:00.000Z","key":1486514760000,"doc_count":11},{"key_as_string":"2017-02-08T00:47:00.000Z","key":1486514820000,"doc_count":11},{"key_as_string":"2017-02-08T00:48:00.000Z","key":1486514880000,"doc_count":9},{"key_as_string":"2017-02-08T00:49:00.000Z","key":1486514940000,"doc_count":11},{"key_as_string":"2017-02-08T00:50:00.000Z","key":1486515000000,"doc_count":9},{"key_as_string":"2017-02-08T00:51:00.000Z","key":1486515060000,"doc_count":12},{"key_as_string":"2017-02-08T00:52:00.000Z","key":1486515120000,"doc_count":10},{"key_as_string":"2017-02-08T00:53:00.000Z","key":1486515180000,"doc_count":13},{"key_as_string":"2017-02-08T00:54:00.000Z","key":1486515240000,"doc_count":9},{"key_as_string":"2017-02-08T00:55:00.000Z","key":1486515300000,"doc_count":15},{"key_as_string":"2017-02-08T00:56:00.000Z","key":1486515360000,"doc_count":11},{"key_as_string":"2017-02-08T00:57:00.000Z","key":1486515420000,"doc_count":12},{"key_as_string":"2017-02-08T00:58:00.000Z","key":1486515480000,"doc_count":17},{"key_as_string":"2017-02-08T00:59:00.000Z","key":1486515540000,"doc_count":11},{"key_as_string":"2017-02-08T01:00:00.000Z","key":1486515600000,"doc_count":14},{"key_as_string":"2017-02-08T01:01:00.000Z","key":1486515660000,"doc_count":12},{"key_as_string":"2017-02-08T01:02:00.000Z","key":1486515720000,"doc_count":8},{"key_as_string":"2017-02-08T01:03:00.000Z","key":1486515780000,"doc_count":12},{"key_as_string":"2017-02-08T01:04:00.000Z","key":1486515840000,"doc_count":8},{"key_as_string":"2017-02-08T01:05:00.000Z","key":1486515900000,"doc_count":13},{"key_as_string":"2017-02-08T01:06:00.000Z","key":1486515960000,"doc_count":9},{"key_as_string":"2017-02-08T01:07:00.000Z","key":1486516020000,"doc_count":7},{"key_as_string":"2017-02-08T01:08:00.000Z","key":1486516080000,"doc_count":14},{"key_as_string":"2017-02-08T01:09:00.000Z","key":1486516140000,"doc_count":9},{"key_as_string":"2017-02-08T01:10:00.000Z","key":1486516200000,"doc_count":10},{"key_as_string":"2017-02-08T01:11:00.000Z","key":1486516260000,"doc_count":12},{"key_as_string":"2017-02-08T01:12:00.000Z","key":1486516320000,"doc_count":8},{"key_as_string":"2017-02-08T01:13:00.000Z","key":1486516380000,"doc_count":9},{"key_as_string":"2017-02-08T01:14:00.000Z","key":1486516440000,"doc_count":11},{"key_as_string":"2017-02-08T01:15:00.000Z","key":1486516500000,"doc_count":10},{"key_as_string":"2017-02-08T01:16:00.000Z","key":1486516560000,"doc_count":16},{"key_as_string":"2017-02-08T01:17:00.000Z","key":1486516620000,"doc_count":12},{"key_as_string":"2017-02-08T01:18:00.000Z","key":1486516680000,"doc_count":7},{"key_as_string":"2017-02-08T01:19:00.000Z","key":1486516740000,"doc_count":7},{"key_as_string":"2017-02-08T01:20:00.000Z","key":1486516800000,"doc_count":12},{"key_as_string":"2017-02-08T01:21:00.000Z","key":1486516860000,"doc_count":10},{"key_as_string":"2017-02-08T01:22:00.000Z","key":1486516920000,"doc_count":15},{"key_as_string":"2017-02-08T01:23:00.000Z","key":1486516980000,"doc_count":9},{"key_as_string":"2017-02-08T01:24:00.000Z","key":1486517040000,"doc_count":15},{"key_as_string":"2017-02-08T01:25:00.000Z","key":1486517100000,"doc_count":9},{"key_as_string":"2017-02-08T01:26:00.000Z","key":1486517160000,"doc_count":15},{"key_as_string":"2017-02-08T01:27:00.000Z","key":1486517220000,"doc_count":11},{"key_as_string":"2017-02-08T01:28:00.000Z","key":1486517280000,"doc_count":15},{"key_as_string":"2017-02-08T01:29:00.000Z","key":1486517340000,"doc_count":17},{"key_as_string":"2017-02-08T01:30:00.000Z","key":1486517400000,"doc_count":5},{"key_as_string":"2017-02-08T01:31:00.000Z","key":1486517460000,"doc_count":10},{"key_as_string":"2017-02-08T01:32:00.000Z","key":1486517520000,"doc_count":9},{"key_as_string":"2017-02-08T01:33:00.000Z","key":1486517580000,"doc_count":13},{"key_as_string":"2017-02-08T01:34:00.000Z","key":1486517640000,"doc_count":17},{"key_as_string":"2017-02-08T01:35:00.000Z","key":1486517700000,"doc_count":8},{"key_as_string":"2017-02-08T01:36:00.000Z","key":1486517760000,"doc_count":7},{"key_as_string":"2017-02-08T01:37:00.000Z","key":1486517820000,"doc_count":14},{"key_as_string":"2017-02-08T01:38:00.000Z","key":1486517880000,"doc_count":11},{"key_as_string":"2017-02-08T01:39:00.000Z","key":1486517940000,"doc_count":4},{"key_as_string":"2017-02-08T01:40:00.000Z","key":1486518000000,"doc_count":13},{"key_as_string":"2017-02-08T01:41:00.000Z","key":1486518060000,"doc_count":13},{"key_as_string":"2017-02-08T01:42:00.000Z","key":1486518120000,"doc_count":6},{"key_as_string":"2017-02-08T01:43:00.000Z","key":1486518180000,"doc_count":12},{"key_as_string":"2017-02-08T01:44:00.000Z","key":1486518240000,"doc_count":13},{"key_as_string":"2017-02-08T01:45:00.000Z","key":1486518300000,"doc_count":9},{"key_as_string":"2017-02-08T01:46:00.000Z","key":1486518360000,"doc_count":15},{"key_as_string":"2017-02-08T01:47:00.000Z","key":1486518420000,"doc_count":14},{"key_as_string":"2017-02-08T01:48:00.000Z","key":1486518480000,"doc_count":7},{"key_as_string":"2017-02-08T01:49:00.000Z","key":1486518540000,"doc_count":15},{"key_as_string":"2017-02-08T01:50:00.000Z","key":1486518600000,"doc_count":10},{"key_as_string":"2017-02-08T01:51:00.000Z","key":1486518660000,"doc_count":9},{"key_as_string":"2017-02-08T01:52:00.000Z","key":1486518720000,"doc_count":7},{"key_as_string":"2017-02-08T01:53:00.000Z","key":1486518780000,"doc_count":14},{"key_as_string":"2017-02-08T01:54:00.000Z","key":1486518840000,"doc_count":10},{"key_as_string":"2017-02-08T01:55:00.000Z","key":1486518900000,"doc_count":9},{"key_as_string":"2017-02-08T01:56:00.000Z","key":1486518960000,"doc_count":11},{"key_as_string":"2017-02-08T01:57:00.000Z","key":1486519020000,"doc_count":7},{"key_as_string":"2017-02-08T01:58:00.000Z","key":1486519080000,"doc_count":12},{"key_as_string":"2017-02-08T01:59:00.000Z","key":1486519140000,"doc_count":7},{"key_as_string":"2017-02-08T02:00:00.000Z","key":1486519200000,"doc_count":16},{"key_as_string":"2017-02-08T02:01:00.000Z","key":1486519260000,"doc_count":8},{"key_as_string":"2017-02-08T02:02:00.000Z","key":1486519320000,"doc_count":5},{"key_as_string":"2017-02-08T02:03:00.000Z","key":1486519380000,"doc_count":12},{"key_as_string":"2017-02-08T02:04:00.000Z","key":1486519440000,"doc_count":11},{"key_as_string":"2017-02-08T02:05:00.000Z","key":1486519500000,"doc_count":12},{"key_as_string":"2017-02-08T02:06:00.000Z","key":1486519560000,"doc_count":12},{"key_as_string":"2017-02-08T02:07:00.000Z","key":1486519620000,"doc_count":9},{"key_as_string":"2017-02-08T02:08:00.000Z","key":1486519680000,"doc_count":11},{"key_as_string":"2017-02-08T02:09:00.000Z","key":1486519740000,"doc_count":16},{"key_as_string":"2017-02-08T02:10:00.000Z","key":1486519800000,"doc_count":9},{"key_as_string":"2017-02-08T02:11:00.000Z","key":1486519860000,"doc_count":8},{"key_as_string":"2017-02-08T02:12:00.000Z","key":1486519920000,"doc_count":9},{"key_as_string":"2017-02-08T02:13:00.000Z","key":1486519980000,"doc_count":8},{"key_as_string":"2017-02-08T02:14:00.000Z","key":1486520040000,"doc_count":12},{"key_as_string":"2017-02-08T02:15:00.000Z","key":1486520100000,"doc_count":8},{"key_as_string":"2017-02-08T02:16:00.000Z","key":1486520160000,"doc_count":9},{"key_as_string":"2017-02-08T02:17:00.000Z","key":1486520220000,"doc_count":11},{"key_as_string":"2017-02-08T02:18:00.000Z","key":1486520280000,"doc_count":8},{"key_as_string":"2017-02-08T02:19:00.000Z","key":1486520340000,"doc_count":9},{"key_as_string":"2017-02-08T02:20:00.000Z","key":1486520400000,"doc_count":7},{"key_as_string":"2017-02-08T02:21:00.000Z","key":1486520460000,"doc_count":15},{"key_as_string":"2017-02-08T02:22:00.000Z","key":1486520520000,"doc_count":6},{"key_as_string":"2017-02-08T02:23:00.000Z","key":1486520580000,"doc_count":11},{"key_as_string":"2017-02-08T02:24:00.000Z","key":1486520640000,"doc_count":14},{"key_as_string":"2017-02-08T02:25:00.000Z","key":1486520700000,"doc_count":8},{"key_as_string":"2017-02-08T02:26:00.000Z","key":1486520760000,"doc_count":11},{"key_as_string":"2017-02-08T02:27:00.000Z","key":1486520820000,"doc_count":15},{"key_as_string":"2017-02-08T02:28:00.000Z","key":1486520880000,"doc_count":6},{"key_as_string":"2017-02-08T02:29:00.000Z","key":1486520940000,"doc_count":5},{"key_as_string":"2017-02-08T02:30:00.000Z","key":1486521000000,"doc_count":18},{"key_as_string":"2017-02-08T02:31:00.000Z","key":1486521060000,"doc_count":7},{"key_as_string":"2017-02-08T02:32:00.000Z","key":1486521120000,"doc_count":6},{"key_as_string":"2017-02-08T02:33:00.000Z","key":1486521180000,"doc_count":15},{"key_as_string":"2017-02-08T02:34:00.000Z","key":1486521240000,"doc_count":11},{"key_as_string":"2017-02-08T02:35:00.000Z","key":1486521300000,"doc_count":13},{"key_as_string":"2017-02-08T02:36:00.000Z","key":1486521360000,"doc_count":12},{"key_as_string":"2017-02-08T02:37:00.000Z","key":1486521420000,"doc_count":9},{"key_as_string":"2017-02-08T02:38:00.000Z","key":1486521480000,"doc_count":14},{"key_as_string":"2017-02-08T02:39:00.000Z","key":1486521540000,"doc_count":9},{"key_as_string":"2017-02-08T02:40:00.000Z","key":1486521600000,"doc_count":12},{"key_as_string":"2017-02-08T02:41:00.000Z","key":1486521660000,"doc_count":10},{"key_as_string":"2017-02-08T02:42:00.000Z","key":1486521720000,"doc_count":12},{"key_as_string":"2017-02-08T02:43:00.000Z","key":1486521780000,"doc_count":8},{"key_as_string":"2017-02-08T02:44:00.000Z","key":1486521840000,"doc_count":15},{"key_as_string":"2017-02-08T02:45:00.000Z","key":1486521900000,"doc_count":6},{"key_as_string":"2017-02-08T02:46:00.000Z","key":1486521960000,"doc_count":12},{"key_as_string":"2017-02-08T02:47:00.000Z","key":1486522020000,"doc_count":10},{"key_as_string":"2017-02-08T02:48:00.000Z","key":1486522080000,"doc_count":13},{"key_as_string":"2017-02-08T02:49:00.000Z","key":1486522140000,"doc_count":14},{"key_as_string":"2017-02-08T02:50:00.000Z","key":1486522200000,"doc_count":8},{"key_as_string":"2017-02-08T02:51:00.000Z","key":1486522260000,"doc_count":12},{"key_as_string":"2017-02-08T02:52:00.000Z","key":1486522320000,"doc_count":6},{"key_as_string":"2017-02-08T02:53:00.000Z","key":1486522380000,"doc_count":14},{"key_as_string":"2017-02-08T02:54:00.000Z","key":1486522440000,"doc_count":12},{"key_as_string":"2017-02-08T02:55:00.000Z","key":1486522500000,"doc_count":11},{"key_as_string":"2017-02-08T02:56:00.000Z","key":1486522560000,"doc_count":14},{"key_as_string":"2017-02-08T02:57:00.000Z","key":1486522620000,"doc_count":13},{"key_as_string":"2017-02-08T02:58:00.000Z","key":1486522680000,"doc_count":7},{"key_as_string":"2017-02-08T02:59:00.000Z","key":1486522740000,"doc_count":9},{"key_as_string":"2017-02-08T03:00:00.000Z","key":1486522800000,"doc_count":9},{"key_as_string":"2017-02-08T03:01:00.000Z","key":1486522860000,"doc_count":13},{"key_as_string":"2017-02-08T03:02:00.000Z","key":1486522920000,"doc_count":10},{"key_as_string":"2017-02-08T03:03:00.000Z","key":1486522980000,"doc_count":12},{"key_as_string":"2017-02-08T03:04:00.000Z","key":1486523040000,"doc_count":4},{"key_as_string":"2017-02-08T03:05:00.000Z","key":1486523100000,"doc_count":12},{"key_as_string":"2017-02-08T03:06:00.000Z","key":1486523160000,"doc_count":10},{"key_as_string":"2017-02-08T03:07:00.000Z","key":1486523220000,"doc_count":8},{"key_as_string":"2017-02-08T03:08:00.000Z","key":1486523280000,"doc_count":12},{"key_as_string":"2017-02-08T03:09:00.000Z","key":1486523340000,"doc_count":12},{"key_as_string":"2017-02-08T03:10:00.000Z","key":1486523400000,"doc_count":9},{"key_as_string":"2017-02-08T03:11:00.000Z","key":1486523460000,"doc_count":12},{"key_as_string":"2017-02-08T03:12:00.000Z","key":1486523520000,"doc_count":6},{"key_as_string":"2017-02-08T03:13:00.000Z","key":1486523580000,"doc_count":11},{"key_as_string":"2017-02-08T03:14:00.000Z","key":1486523640000,"doc_count":8},{"key_as_string":"2017-02-08T03:15:00.000Z","key":1486523700000,"doc_count":11},{"key_as_string":"2017-02-08T03:16:00.000Z","key":1486523760000,"doc_count":9},{"key_as_string":"2017-02-08T03:17:00.000Z","key":1486523820000,"doc_count":9},{"key_as_string":"2017-02-08T03:18:00.000Z","key":1486523880000,"doc_count":16},{"key_as_string":"2017-02-08T03:19:00.000Z","key":1486523940000,"doc_count":6},{"key_as_string":"2017-02-08T03:20:00.000Z","key":1486524000000,"doc_count":10},{"key_as_string":"2017-02-08T03:21:00.000Z","key":1486524060000,"doc_count":14},{"key_as_string":"2017-02-08T03:22:00.000Z","key":1486524120000,"doc_count":3},{"key_as_string":"2017-02-08T03:23:00.000Z","key":1486524180000,"doc_count":11},{"key_as_string":"2017-02-08T03:24:00.000Z","key":1486524240000,"doc_count":13},{"key_as_string":"2017-02-08T03:25:00.000Z","key":1486524300000,"doc_count":11},{"key_as_string":"2017-02-08T03:26:00.000Z","key":1486524360000,"doc_count":18},{"key_as_string":"2017-02-08T03:27:00.000Z","key":1486524420000,"doc_count":12},{"key_as_string":"2017-02-08T03:28:00.000Z","key":1486524480000,"doc_count":11},{"key_as_string":"2017-02-08T03:29:00.000Z","key":1486524540000,"doc_count":8},{"key_as_string":"2017-02-08T03:30:00.000Z","key":1486524600000,"doc_count":18},{"key_as_string":"2017-02-08T03:31:00.000Z","key":1486524660000,"doc_count":12},{"key_as_string":"2017-02-08T03:32:00.000Z","key":1486524720000,"doc_count":13},{"key_as_string":"2017-02-08T03:33:00.000Z","key":1486524780000,"doc_count":12},{"key_as_string":"2017-02-08T03:34:00.000Z","key":1486524840000,"doc_count":10},{"key_as_string":"2017-02-08T03:35:00.000Z","key":1486524900000,"doc_count":10},{"key_as_string":"2017-02-08T03:36:00.000Z","key":1486524960000,"doc_count":10},{"key_as_string":"2017-02-08T03:37:00.000Z","key":1486525020000,"doc_count":9},{"key_as_string":"2017-02-08T03:38:00.000Z","key":1486525080000,"doc_count":20},{"key_as_string":"2017-02-08T03:39:00.000Z","key":1486525140000,"doc_count":8},{"key_as_string":"2017-02-08T03:40:00.000Z","key":1486525200000,"doc_count":7},{"key_as_string":"2017-02-08T03:41:00.000Z","key":1486525260000,"doc_count":10},{"key_as_string":"2017-02-08T03:42:00.000Z","key":1486525320000,"doc_count":12},{"key_as_string":"2017-02-08T03:43:00.000Z","key":1486525380000,"doc_count":9},{"key_as_string":"2017-02-08T03:44:00.000Z","key":1486525440000,"doc_count":7},{"key_as_string":"2017-02-08T03:45:00.000Z","key":1486525500000,"doc_count":8},{"key_as_string":"2017-02-08T03:46:00.000Z","key":1486525560000,"doc_count":10},{"key_as_string":"2017-02-08T03:47:00.000Z","key":1486525620000,"doc_count":10},{"key_as_string":"2017-02-08T03:48:00.000Z","key":1486525680000,"doc_count":7},{"key_as_string":"2017-02-08T03:49:00.000Z","key":1486525740000,"doc_count":9},{"key_as_string":"2017-02-08T03:50:00.000Z","key":1486525800000,"doc_count":11},{"key_as_string":"2017-02-08T03:51:00.000Z","key":1486525860000,"doc_count":8},{"key_as_string":"2017-02-08T03:52:00.000Z","key":1486525920000,"doc_count":10},{"key_as_string":"2017-02-08T03:53:00.000Z","key":1486525980000,"doc_count":12},{"key_as_string":"2017-02-08T03:54:00.000Z","key":1486526040000,"doc_count":14},{"key_as_string":"2017-02-08T03:55:00.000Z","key":1486526100000,"doc_count":9},{"key_as_string":"2017-02-08T03:56:00.000Z","key":1486526160000,"doc_count":11},{"key_as_string":"2017-02-08T03:57:00.000Z","key":1486526220000,"doc_count":7},{"key_as_string":"2017-02-08T03:58:00.000Z","key":1486526280000,"doc_count":11},{"key_as_string":"2017-02-08T03:59:00.000Z","key":1486526340000,"doc_count":14},{"key_as_string":"2017-02-08T04:00:00.000Z","key":1486526400000,"doc_count":10},{"key_as_string":"2017-02-08T04:01:00.000Z","key":1486526460000,"doc_count":11},{"key_as_string":"2017-02-08T04:02:00.000Z","key":1486526520000,"doc_count":12},{"key_as_string":"2017-02-08T04:03:00.000Z","key":1486526580000,"doc_count":8},{"key_as_string":"2017-02-08T04:04:00.000Z","key":1486526640000,"doc_count":11},{"key_as_string":"2017-02-08T04:05:00.000Z","key":1486526700000,"doc_count":15},{"key_as_string":"2017-02-08T04:06:00.000Z","key":1486526760000,"doc_count":8},{"key_as_string":"2017-02-08T04:07:00.000Z","key":1486526820000,"doc_count":13},{"key_as_string":"2017-02-08T04:08:00.000Z","key":1486526880000,"doc_count":12},{"key_as_string":"2017-02-08T04:09:00.000Z","key":1486526940000,"doc_count":11},{"key_as_string":"2017-02-08T04:10:00.000Z","key":1486527000000,"doc_count":12},{"key_as_string":"2017-02-08T04:11:00.000Z","key":1486527060000,"doc_count":10},{"key_as_string":"2017-02-08T04:12:00.000Z","key":1486527120000,"doc_count":13},{"key_as_string":"2017-02-08T04:13:00.000Z","key":1486527180000,"doc_count":5},{"key_as_string":"2017-02-08T04:14:00.000Z","key":1486527240000,"doc_count":6},{"key_as_string":"2017-02-08T04:15:00.000Z","key":1486527300000,"doc_count":16},{"key_as_string":"2017-02-08T04:16:00.000Z","key":1486527360000,"doc_count":12},{"key_as_string":"2017-02-08T04:17:00.000Z","key":1486527420000,"doc_count":17},{"key_as_string":"2017-02-08T04:18:00.000Z","key":1486527480000,"doc_count":11},{"key_as_string":"2017-02-08T04:19:00.000Z","key":1486527540000,"doc_count":16},{"key_as_string":"2017-02-08T04:20:00.000Z","key":1486527600000,"doc_count":8},{"key_as_string":"2017-02-08T04:21:00.000Z","key":1486527660000,"doc_count":10},{"key_as_string":"2017-02-08T04:22:00.000Z","key":1486527720000,"doc_count":14},{"key_as_string":"2017-02-08T04:23:00.000Z","key":1486527780000,"doc_count":10},{"key_as_string":"2017-02-08T04:24:00.000Z","key":1486527840000,"doc_count":9},{"key_as_string":"2017-02-08T04:25:00.000Z","key":1486527900000,"doc_count":13},{"key_as_string":"2017-02-08T04:26:00.000Z","key":1486527960000,"doc_count":8},{"key_as_string":"2017-02-08T04:27:00.000Z","key":1486528020000,"doc_count":13},{"key_as_string":"2017-02-08T04:28:00.000Z","key":1486528080000,"doc_count":16},{"key_as_string":"2017-02-08T04:29:00.000Z","key":1486528140000,"doc_count":8},{"key_as_string":"2017-02-08T04:30:00.000Z","key":1486528200000,"doc_count":13},{"key_as_string":"2017-02-08T04:31:00.000Z","key":1486528260000,"doc_count":12},{"key_as_string":"2017-02-08T04:32:00.000Z","key":1486528320000,"doc_count":9},{"key_as_string":"2017-02-08T04:33:00.000Z","key":1486528380000,"doc_count":14},{"key_as_string":"2017-02-08T04:34:00.000Z","key":1486528440000,"doc_count":8},{"key_as_string":"2017-02-08T04:35:00.000Z","key":1486528500000,"doc_count":9},{"key_as_string":"2017-02-08T04:36:00.000Z","key":1486528560000,"doc_count":19},{"key_as_string":"2017-02-08T04:37:00.000Z","key":1486528620000,"doc_count":8},{"key_as_string":"2017-02-08T04:38:00.000Z","key":1486528680000,"doc_count":12},{"key_as_string":"2017-02-08T04:39:00.000Z","key":1486528740000,"doc_count":13},{"key_as_string":"2017-02-08T04:40:00.000Z","key":1486528800000,"doc_count":13},{"key_as_string":"2017-02-08T04:41:00.000Z","key":1486528860000,"doc_count":9},{"key_as_string":"2017-02-08T04:42:00.000Z","key":1486528920000,"doc_count":8},{"key_as_string":"2017-02-08T04:43:00.000Z","key":1486528980000,"doc_count":8},{"key_as_string":"2017-02-08T04:44:00.000Z","key":1486529040000,"doc_count":11},{"key_as_string":"2017-02-08T04:45:00.000Z","key":1486529100000,"doc_count":11},{"key_as_string":"2017-02-08T04:46:00.000Z","key":1486529160000,"doc_count":14},{"key_as_string":"2017-02-08T04:47:00.000Z","key":1486529220000,"doc_count":9},{"key_as_string":"2017-02-08T04:48:00.000Z","key":1486529280000,"doc_count":11},{"key_as_string":"2017-02-08T04:49:00.000Z","key":1486529340000,"doc_count":16},{"key_as_string":"2017-02-08T04:50:00.000Z","key":1486529400000,"doc_count":6},{"key_as_string":"2017-02-08T04:51:00.000Z","key":1486529460000,"doc_count":14},{"key_as_string":"2017-02-08T04:52:00.000Z","key":1486529520000,"doc_count":12},{"key_as_string":"2017-02-08T04:53:00.000Z","key":1486529580000,"doc_count":13},{"key_as_string":"2017-02-08T04:54:00.000Z","key":1486529640000,"doc_count":12},{"key_as_string":"2017-02-08T04:55:00.000Z","key":1486529700000,"doc_count":12},{"key_as_string":"2017-02-08T04:56:00.000Z","key":1486529760000,"doc_count":15},{"key_as_string":"2017-02-08T04:57:00.000Z","key":1486529820000,"doc_count":12},{"key_as_string":"2017-02-08T04:58:00.000Z","key":1486529880000,"doc_count":11},{"key_as_string":"2017-02-08T04:59:00.000Z","key":1486529940000,"doc_count":7},{"key_as_string":"2017-02-08T05:00:00.000Z","key":1486530000000,"doc_count":10},{"key_as_string":"2017-02-08T05:01:00.000Z","key":1486530060000,"doc_count":15},{"key_as_string":"2017-02-08T05:02:00.000Z","key":1486530120000,"doc_count":15},{"key_as_string":"2017-02-08T05:03:00.000Z","key":1486530180000,"doc_count":11},{"key_as_string":"2017-02-08T05:04:00.000Z","key":1486530240000,"doc_count":11},{"key_as_string":"2017-02-08T05:05:00.000Z","key":1486530300000,"doc_count":14},{"key_as_string":"2017-02-08T05:06:00.000Z","key":1486530360000,"doc_count":9},{"key_as_string":"2017-02-08T05:07:00.000Z","key":1486530420000,"doc_count":15},{"key_as_string":"2017-02-08T05:08:00.000Z","key":1486530480000,"doc_count":8},{"key_as_string":"2017-02-08T05:09:00.000Z","key":1486530540000,"doc_count":13},{"key_as_string":"2017-02-08T05:10:00.000Z","key":1486530600000,"doc_count":12},{"key_as_string":"2017-02-08T05:11:00.000Z","key":1486530660000,"doc_count":7},{"key_as_string":"2017-02-08T05:12:00.000Z","key":1486530720000,"doc_count":9},{"key_as_string":"2017-02-08T05:13:00.000Z","key":1486530780000,"doc_count":12},{"key_as_string":"2017-02-08T05:14:00.000Z","key":1486530840000,"doc_count":14},{"key_as_string":"2017-02-08T05:15:00.000Z","key":1486530900000,"doc_count":15},{"key_as_string":"2017-02-08T05:16:00.000Z","key":1486530960000,"doc_count":7},{"key_as_string":"2017-02-08T05:17:00.000Z","key":1486531020000,"doc_count":10},{"key_as_string":"2017-02-08T05:18:00.000Z","key":1486531080000,"doc_count":10},{"key_as_string":"2017-02-08T05:19:00.000Z","key":1486531140000,"doc_count":12},{"key_as_string":"2017-02-08T05:20:00.000Z","key":1486531200000,"doc_count":7},{"key_as_string":"2017-02-08T05:21:00.000Z","key":1486531260000,"doc_count":9},{"key_as_string":"2017-02-08T05:22:00.000Z","key":1486531320000,"doc_count":13},{"key_as_string":"2017-02-08T05:23:00.000Z","key":1486531380000,"doc_count":9},{"key_as_string":"2017-02-08T05:24:00.000Z","key":1486531440000,"doc_count":10},{"key_as_string":"2017-02-08T05:25:00.000Z","key":1486531500000,"doc_count":12},{"key_as_string":"2017-02-08T05:26:00.000Z","key":1486531560000,"doc_count":7},{"key_as_string":"2017-02-08T05:27:00.000Z","key":1486531620000,"doc_count":16},{"key_as_string":"2017-02-08T05:28:00.000Z","key":1486531680000,"doc_count":12},{"key_as_string":"2017-02-08T05:29:00.000Z","key":1486531740000,"doc_count":13},{"key_as_string":"2017-02-08T05:30:00.000Z","key":1486531800000,"doc_count":10},{"key_as_string":"2017-02-08T05:31:00.000Z","key":1486531860000,"doc_count":12},{"key_as_string":"2017-02-08T05:32:00.000Z","key":1486531920000,"doc_count":6},{"key_as_string":"2017-02-08T05:33:00.000Z","key":1486531980000,"doc_count":16},{"key_as_string":"2017-02-08T05:34:00.000Z","key":1486532040000,"doc_count":11},{"key_as_string":"2017-02-08T05:35:00.000Z","key":1486532100000,"doc_count":13},{"key_as_string":"2017-02-08T05:36:00.000Z","key":1486532160000,"doc_count":12},{"key_as_string":"2017-02-08T05:37:00.000Z","key":1486532220000,"doc_count":14},{"key_as_string":"2017-02-08T05:38:00.000Z","key":1486532280000,"doc_count":9},{"key_as_string":"2017-02-08T05:39:00.000Z","key":1486532340000,"doc_count":9},{"key_as_string":"2017-02-08T05:40:00.000Z","key":1486532400000,"doc_count":11},{"key_as_string":"2017-02-08T05:41:00.000Z","key":1486532460000,"doc_count":17},{"key_as_string":"2017-02-08T05:42:00.000Z","key":1486532520000,"doc_count":13},{"key_as_string":"2017-02-08T05:43:00.000Z","key":1486532580000,"doc_count":10},{"key_as_string":"2017-02-08T05:44:00.000Z","key":1486532640000,"doc_count":12},{"key_as_string":"2017-02-08T05:45:00.000Z","key":1486532700000,"doc_count":17},{"key_as_string":"2017-02-08T05:46:00.000Z","key":1486532760000,"doc_count":7},{"key_as_string":"2017-02-08T05:47:00.000Z","key":1486532820000,"doc_count":11},{"key_as_string":"2017-02-08T05:48:00.000Z","key":1486532880000,"doc_count":10},{"key_as_string":"2017-02-08T05:49:00.000Z","key":1486532940000,"doc_count":7},{"key_as_string":"2017-02-08T05:50:00.000Z","key":1486533000000,"doc_count":12},{"key_as_string":"2017-02-08T05:51:00.000Z","key":1486533060000,"doc_count":12},{"key_as_string":"2017-02-08T05:52:00.000Z","key":1486533120000,"doc_count":6},{"key_as_string":"2017-02-08T05:53:00.000Z","key":1486533180000,"doc_count":11},{"key_as_string":"2017-02-08T05:54:00.000Z","key":1486533240000,"doc_count":14},{"key_as_string":"2017-02-08T05:55:00.000Z","key":1486533300000,"doc_count":10},{"key_as_string":"2017-02-08T05:56:00.000Z","key":1486533360000,"doc_count":11},{"key_as_string":"2017-02-08T05:57:00.000Z","key":1486533420000,"doc_count":14},{"key_as_string":"2017-02-08T05:58:00.000Z","key":1486533480000,"doc_count":5},{"key_as_string":"2017-02-08T05:59:00.000Z","key":1486533540000,"doc_count":16},{"key_as_string":"2017-02-08T06:00:00.000Z","key":1486533600000,"doc_count":9},{"key_as_string":"2017-02-08T06:01:00.000Z","key":1486533660000,"doc_count":12},{"key_as_string":"2017-02-08T06:02:00.000Z","key":1486533720000,"doc_count":10},{"key_as_string":"2017-02-08T06:03:00.000Z","key":1486533780000,"doc_count":13},{"key_as_string":"2017-02-08T06:04:00.000Z","key":1486533840000,"doc_count":14},{"key_as_string":"2017-02-08T06:05:00.000Z","key":1486533900000,"doc_count":11},{"key_as_string":"2017-02-08T06:06:00.000Z","key":1486533960000,"doc_count":9},{"key_as_string":"2017-02-08T06:07:00.000Z","key":1486534020000,"doc_count":10},{"key_as_string":"2017-02-08T06:08:00.000Z","key":1486534080000,"doc_count":7},{"key_as_string":"2017-02-08T06:09:00.000Z","key":1486534140000,"doc_count":14},{"key_as_string":"2017-02-08T06:10:00.000Z","key":1486534200000,"doc_count":13},{"key_as_string":"2017-02-08T06:11:00.000Z","key":1486534260000,"doc_count":15},{"key_as_string":"2017-02-08T06:12:00.000Z","key":1486534320000,"doc_count":9},{"key_as_string":"2017-02-08T06:13:00.000Z","key":1486534380000,"doc_count":8},{"key_as_string":"2017-02-08T06:14:00.000Z","key":1486534440000,"doc_count":7},{"key_as_string":"2017-02-08T06:15:00.000Z","key":1486534500000,"doc_count":15},{"key_as_string":"2017-02-08T06:16:00.000Z","key":1486534560000,"doc_count":11},{"key_as_string":"2017-02-08T06:17:00.000Z","key":1486534620000,"doc_count":15},{"key_as_string":"2017-02-08T06:18:00.000Z","key":1486534680000,"doc_count":14},{"key_as_string":"2017-02-08T06:19:00.000Z","key":1486534740000,"doc_count":12},{"key_as_string":"2017-02-08T06:20:00.000Z","key":1486534800000,"doc_count":15},{"key_as_string":"2017-02-08T06:21:00.000Z","key":1486534860000,"doc_count":13},{"key_as_string":"2017-02-08T06:22:00.000Z","key":1486534920000,"doc_count":10},{"key_as_string":"2017-02-08T06:23:00.000Z","key":1486534980000,"doc_count":14},{"key_as_string":"2017-02-08T06:24:00.000Z","key":1486535040000,"doc_count":15},{"key_as_string":"2017-02-08T06:25:00.000Z","key":1486535100000,"doc_count":14},{"key_as_string":"2017-02-08T06:26:00.000Z","key":1486535160000,"doc_count":11},{"key_as_string":"2017-02-08T06:27:00.000Z","key":1486535220000,"doc_count":13},{"key_as_string":"2017-02-08T06:28:00.000Z","key":1486535280000,"doc_count":11},{"key_as_string":"2017-02-08T06:29:00.000Z","key":1486535340000,"doc_count":16},{"key_as_string":"2017-02-08T06:30:00.000Z","key":1486535400000,"doc_count":12},{"key_as_string":"2017-02-08T06:31:00.000Z","key":1486535460000,"doc_count":11},{"key_as_string":"2017-02-08T06:32:00.000Z","key":1486535520000,"doc_count":10},{"key_as_string":"2017-02-08T06:33:00.000Z","key":1486535580000,"doc_count":8},{"key_as_string":"2017-02-08T06:34:00.000Z","key":1486535640000,"doc_count":14},{"key_as_string":"2017-02-08T06:35:00.000Z","key":1486535700000,"doc_count":9},{"key_as_string":"2017-02-08T06:36:00.000Z","key":1486535760000,"doc_count":16},{"key_as_string":"2017-02-08T06:37:00.000Z","key":1486535820000,"doc_count":13},{"key_as_string":"2017-02-08T06:38:00.000Z","key":1486535880000,"doc_count":10},{"key_as_string":"2017-02-08T06:39:00.000Z","key":1486535940000,"doc_count":13},{"key_as_string":"2017-02-08T06:40:00.000Z","key":1486536000000,"doc_count":13},{"key_as_string":"2017-02-08T06:41:00.000Z","key":1486536060000,"doc_count":10},{"key_as_string":"2017-02-08T06:42:00.000Z","key":1486536120000,"doc_count":12},{"key_as_string":"2017-02-08T06:43:00.000Z","key":1486536180000,"doc_count":10},{"key_as_string":"2017-02-08T06:44:00.000Z","key":1486536240000,"doc_count":15},{"key_as_string":"2017-02-08T06:45:00.000Z","key":1486536300000,"doc_count":10},{"key_as_string":"2017-02-08T06:46:00.000Z","key":1486536360000,"doc_count":8},{"key_as_string":"2017-02-08T06:47:00.000Z","key":1486536420000,"doc_count":15},{"key_as_string":"2017-02-08T06:48:00.000Z","key":1486536480000,"doc_count":14},{"key_as_string":"2017-02-08T06:49:00.000Z","key":1486536540000,"doc_count":8},{"key_as_string":"2017-02-08T06:50:00.000Z","key":1486536600000,"doc_count":10},{"key_as_string":"2017-02-08T06:51:00.000Z","key":1486536660000,"doc_count":12},{"key_as_string":"2017-02-08T06:52:00.000Z","key":1486536720000,"doc_count":19},{"key_as_string":"2017-02-08T06:53:00.000Z","key":1486536780000,"doc_count":10},{"key_as_string":"2017-02-08T06:54:00.000Z","key":1486536840000,"doc_count":12},{"key_as_string":"2017-02-08T06:55:00.000Z","key":1486536900000,"doc_count":13},{"key_as_string":"2017-02-08T06:56:00.000Z","key":1486536960000,"doc_count":12},{"key_as_string":"2017-02-08T06:57:00.000Z","key":1486537020000,"doc_count":10},{"key_as_string":"2017-02-08T06:58:00.000Z","key":1486537080000,"doc_count":13},{"key_as_string":"2017-02-08T06:59:00.000Z","key":1486537140000,"doc_count":9},{"key_as_string":"2017-02-08T07:00:00.000Z","key":1486537200000,"doc_count":17},{"key_as_string":"2017-02-08T07:01:00.000Z","key":1486537260000,"doc_count":14},{"key_as_string":"2017-02-08T07:02:00.000Z","key":1486537320000,"doc_count":11},{"key_as_string":"2017-02-08T07:03:00.000Z","key":1486537380000,"doc_count":13},{"key_as_string":"2017-02-08T07:04:00.000Z","key":1486537440000,"doc_count":15},{"key_as_string":"2017-02-08T07:05:00.000Z","key":1486537500000,"doc_count":16},{"key_as_string":"2017-02-08T07:06:00.000Z","key":1486537560000,"doc_count":11},{"key_as_string":"2017-02-08T07:07:00.000Z","key":1486537620000,"doc_count":7},{"key_as_string":"2017-02-08T07:08:00.000Z","key":1486537680000,"doc_count":12},{"key_as_string":"2017-02-08T07:09:00.000Z","key":1486537740000,"doc_count":14},{"key_as_string":"2017-02-08T07:10:00.000Z","key":1486537800000,"doc_count":9},{"key_as_string":"2017-02-08T07:11:00.000Z","key":1486537860000,"doc_count":11},{"key_as_string":"2017-02-08T07:12:00.000Z","key":1486537920000,"doc_count":12},{"key_as_string":"2017-02-08T07:13:00.000Z","key":1486537980000,"doc_count":7},{"key_as_string":"2017-02-08T07:14:00.000Z","key":1486538040000,"doc_count":15},{"key_as_string":"2017-02-08T07:15:00.000Z","key":1486538100000,"doc_count":13},{"key_as_string":"2017-02-08T07:16:00.000Z","key":1486538160000,"doc_count":10},{"key_as_string":"2017-02-08T07:17:00.000Z","key":1486538220000,"doc_count":8},{"key_as_string":"2017-02-08T07:18:00.000Z","key":1486538280000,"doc_count":16},{"key_as_string":"2017-02-08T07:19:00.000Z","key":1486538340000,"doc_count":12},{"key_as_string":"2017-02-08T07:20:00.000Z","key":1486538400000,"doc_count":13},{"key_as_string":"2017-02-08T07:21:00.000Z","key":1486538460000,"doc_count":15},{"key_as_string":"2017-02-08T07:22:00.000Z","key":1486538520000,"doc_count":12},{"key_as_string":"2017-02-08T07:23:00.000Z","key":1486538580000,"doc_count":17},{"key_as_string":"2017-02-08T07:24:00.000Z","key":1486538640000,"doc_count":10},{"key_as_string":"2017-02-08T07:25:00.000Z","key":1486538700000,"doc_count":11},{"key_as_string":"2017-02-08T07:26:00.000Z","key":1486538760000,"doc_count":11},{"key_as_string":"2017-02-08T07:27:00.000Z","key":1486538820000,"doc_count":13},{"key_as_string":"2017-02-08T07:28:00.000Z","key":1486538880000,"doc_count":10},{"key_as_string":"2017-02-08T07:29:00.000Z","key":1486538940000,"doc_count":13},{"key_as_string":"2017-02-08T07:30:00.000Z","key":1486539000000,"doc_count":11},{"key_as_string":"2017-02-08T07:31:00.000Z","key":1486539060000,"doc_count":17},{"key_as_string":"2017-02-08T07:32:00.000Z","key":1486539120000,"doc_count":12},{"key_as_string":"2017-02-08T07:33:00.000Z","key":1486539180000,"doc_count":11},{"key_as_string":"2017-02-08T07:34:00.000Z","key":1486539240000,"doc_count":11},{"key_as_string":"2017-02-08T07:35:00.000Z","key":1486539300000,"doc_count":17},{"key_as_string":"2017-02-08T07:36:00.000Z","key":1486539360000,"doc_count":12},{"key_as_string":"2017-02-08T07:37:00.000Z","key":1486539420000,"doc_count":15},{"key_as_string":"2017-02-08T07:38:00.000Z","key":1486539480000,"doc_count":12},{"key_as_string":"2017-02-08T07:39:00.000Z","key":1486539540000,"doc_count":19},{"key_as_string":"2017-02-08T07:40:00.000Z","key":1486539600000,"doc_count":10},{"key_as_string":"2017-02-08T07:41:00.000Z","key":1486539660000,"doc_count":10},{"key_as_string":"2017-02-08T07:42:00.000Z","key":1486539720000,"doc_count":13},{"key_as_string":"2017-02-08T07:43:00.000Z","key":1486539780000,"doc_count":17},{"key_as_string":"2017-02-08T07:44:00.000Z","key":1486539840000,"doc_count":15},{"key_as_string":"2017-02-08T07:45:00.000Z","key":1486539900000,"doc_count":8},{"key_as_string":"2017-02-08T07:46:00.000Z","key":1486539960000,"doc_count":13},{"key_as_string":"2017-02-08T07:47:00.000Z","key":1486540020000,"doc_count":9},{"key_as_string":"2017-02-08T07:48:00.000Z","key":1486540080000,"doc_count":10},{"key_as_string":"2017-02-08T07:49:00.000Z","key":1486540140000,"doc_count":10},{"key_as_string":"2017-02-08T07:50:00.000Z","key":1486540200000,"doc_count":15},{"key_as_string":"2017-02-08T07:51:00.000Z","key":1486540260000,"doc_count":13},{"key_as_string":"2017-02-08T07:52:00.000Z","key":1486540320000,"doc_count":14},{"key_as_string":"2017-02-08T07:53:00.000Z","key":1486540380000,"doc_count":13},{"key_as_string":"2017-02-08T07:54:00.000Z","key":1486540440000,"doc_count":14},{"key_as_string":"2017-02-08T07:55:00.000Z","key":1486540500000,"doc_count":11},{"key_as_string":"2017-02-08T07:56:00.000Z","key":1486540560000,"doc_count":10},{"key_as_string":"2017-02-08T07:57:00.000Z","key":1486540620000,"doc_count":9},{"key_as_string":"2017-02-08T07:58:00.000Z","key":1486540680000,"doc_count":16},{"key_as_string":"2017-02-08T07:59:00.000Z","key":1486540740000,"doc_count":17},{"key_as_string":"2017-02-08T08:00:00.000Z","key":1486540800000,"doc_count":14},{"key_as_string":"2017-02-08T08:01:00.000Z","key":1486540860000,"doc_count":12},{"key_as_string":"2017-02-08T08:02:00.000Z","key":1486540920000,"doc_count":15},{"key_as_string":"2017-02-08T08:03:00.000Z","key":1486540980000,"doc_count":15},{"key_as_string":"2017-02-08T08:04:00.000Z","key":1486541040000,"doc_count":10},{"key_as_string":"2017-02-08T08:05:00.000Z","key":1486541100000,"doc_count":12},{"key_as_string":"2017-02-08T08:06:00.000Z","key":1486541160000,"doc_count":6},{"key_as_string":"2017-02-08T08:07:00.000Z","key":1486541220000,"doc_count":17},{"key_as_string":"2017-02-08T08:08:00.000Z","key":1486541280000,"doc_count":15},{"key_as_string":"2017-02-08T08:09:00.000Z","key":1486541340000,"doc_count":14},{"key_as_string":"2017-02-08T08:10:00.000Z","key":1486541400000,"doc_count":12},{"key_as_string":"2017-02-08T08:11:00.000Z","key":1486541460000,"doc_count":18},{"key_as_string":"2017-02-08T08:12:00.000Z","key":1486541520000,"doc_count":9},{"key_as_string":"2017-02-08T08:13:00.000Z","key":1486541580000,"doc_count":12},{"key_as_string":"2017-02-08T08:14:00.000Z","key":1486541640000,"doc_count":11},{"key_as_string":"2017-02-08T08:15:00.000Z","key":1486541700000,"doc_count":19},{"key_as_string":"2017-02-08T08:16:00.000Z","key":1486541760000,"doc_count":12},{"key_as_string":"2017-02-08T08:17:00.000Z","key":1486541820000,"doc_count":10},{"key_as_string":"2017-02-08T08:18:00.000Z","key":1486541880000,"doc_count":16},{"key_as_string":"2017-02-08T08:19:00.000Z","key":1486541940000,"doc_count":12},{"key_as_string":"2017-02-08T08:20:00.000Z","key":1486542000000,"doc_count":15},{"key_as_string":"2017-02-08T08:21:00.000Z","key":1486542060000,"doc_count":14},{"key_as_string":"2017-02-08T08:22:00.000Z","key":1486542120000,"doc_count":15},{"key_as_string":"2017-02-08T08:23:00.000Z","key":1486542180000,"doc_count":12},{"key_as_string":"2017-02-08T08:24:00.000Z","key":1486542240000,"doc_count":15},{"key_as_string":"2017-02-08T08:25:00.000Z","key":1486542300000,"doc_count":7},{"key_as_string":"2017-02-08T08:26:00.000Z","key":1486542360000,"doc_count":10},{"key_as_string":"2017-02-08T08:27:00.000Z","key":1486542420000,"doc_count":12},{"key_as_string":"2017-02-08T08:28:00.000Z","key":1486542480000,"doc_count":10},{"key_as_string":"2017-02-08T08:29:00.000Z","key":1486542540000,"doc_count":12},{"key_as_string":"2017-02-08T08:30:00.000Z","key":1486542600000,"doc_count":17},{"key_as_string":"2017-02-08T08:31:00.000Z","key":1486542660000,"doc_count":13},{"key_as_string":"2017-02-08T08:32:00.000Z","key":1486542720000,"doc_count":14},{"key_as_string":"2017-02-08T08:33:00.000Z","key":1486542780000,"doc_count":10},{"key_as_string":"2017-02-08T08:34:00.000Z","key":1486542840000,"doc_count":12},{"key_as_string":"2017-02-08T08:35:00.000Z","key":1486542900000,"doc_count":14},{"key_as_string":"2017-02-08T08:36:00.000Z","key":1486542960000,"doc_count":11},{"key_as_string":"2017-02-08T08:37:00.000Z","key":1486543020000,"doc_count":16},{"key_as_string":"2017-02-08T08:38:00.000Z","key":1486543080000,"doc_count":13},{"key_as_string":"2017-02-08T08:39:00.000Z","key":1486543140000,"doc_count":11},{"key_as_string":"2017-02-08T08:40:00.000Z","key":1486543200000,"doc_count":9},{"key_as_string":"2017-02-08T08:41:00.000Z","key":1486543260000,"doc_count":15},{"key_as_string":"2017-02-08T08:42:00.000Z","key":1486543320000,"doc_count":12},{"key_as_string":"2017-02-08T08:43:00.000Z","key":1486543380000,"doc_count":9},{"key_as_string":"2017-02-08T08:44:00.000Z","key":1486543440000,"doc_count":15},{"key_as_string":"2017-02-08T08:45:00.000Z","key":1486543500000,"doc_count":17},{"key_as_string":"2017-02-08T08:46:00.000Z","key":1486543560000,"doc_count":5},{"key_as_string":"2017-02-08T08:47:00.000Z","key":1486543620000,"doc_count":19},{"key_as_string":"2017-02-08T08:48:00.000Z","key":1486543680000,"doc_count":14},{"key_as_string":"2017-02-08T08:49:00.000Z","key":1486543740000,"doc_count":13},{"key_as_string":"2017-02-08T08:50:00.000Z","key":1486543800000,"doc_count":16},{"key_as_string":"2017-02-08T08:51:00.000Z","key":1486543860000,"doc_count":14},{"key_as_string":"2017-02-08T08:52:00.000Z","key":1486543920000,"doc_count":17},{"key_as_string":"2017-02-08T08:53:00.000Z","key":1486543980000,"doc_count":12},{"key_as_string":"2017-02-08T08:54:00.000Z","key":1486544040000,"doc_count":13},{"key_as_string":"2017-02-08T08:55:00.000Z","key":1486544100000,"doc_count":17},{"key_as_string":"2017-02-08T08:56:00.000Z","key":1486544160000,"doc_count":11},{"key_as_string":"2017-02-08T08:57:00.000Z","key":1486544220000,"doc_count":10},{"key_as_string":"2017-02-08T08:58:00.000Z","key":1486544280000,"doc_count":13},{"key_as_string":"2017-02-08T08:59:00.000Z","key":1486544340000,"doc_count":11},{"key_as_string":"2017-02-08T09:00:00.000Z","key":1486544400000,"doc_count":12},{"key_as_string":"2017-02-08T09:01:00.000Z","key":1486544460000,"doc_count":15},{"key_as_string":"2017-02-08T09:02:00.000Z","key":1486544520000,"doc_count":8},{"key_as_string":"2017-02-08T09:03:00.000Z","key":1486544580000,"doc_count":14},{"key_as_string":"2017-02-08T09:04:00.000Z","key":1486544640000,"doc_count":13},{"key_as_string":"2017-02-08T09:05:00.000Z","key":1486544700000,"doc_count":12},{"key_as_string":"2017-02-08T09:06:00.000Z","key":1486544760000,"doc_count":15},{"key_as_string":"2017-02-08T09:07:00.000Z","key":1486544820000,"doc_count":13},{"key_as_string":"2017-02-08T09:08:00.000Z","key":1486544880000,"doc_count":19},{"key_as_string":"2017-02-08T09:09:00.000Z","key":1486544940000,"doc_count":14},{"key_as_string":"2017-02-08T09:10:00.000Z","key":1486545000000,"doc_count":11},{"key_as_string":"2017-02-08T09:11:00.000Z","key":1486545060000,"doc_count":15},{"key_as_string":"2017-02-08T09:12:00.000Z","key":1486545120000,"doc_count":15},{"key_as_string":"2017-02-08T09:13:00.000Z","key":1486545180000,"doc_count":10},{"key_as_string":"2017-02-08T09:14:00.000Z","key":1486545240000,"doc_count":17},{"key_as_string":"2017-02-08T09:15:00.000Z","key":1486545300000,"doc_count":18},{"key_as_string":"2017-02-08T09:16:00.000Z","key":1486545360000,"doc_count":15},{"key_as_string":"2017-02-08T09:17:00.000Z","key":1486545420000,"doc_count":13},{"key_as_string":"2017-02-08T09:18:00.000Z","key":1486545480000,"doc_count":9},{"key_as_string":"2017-02-08T09:19:00.000Z","key":1486545540000,"doc_count":15},{"key_as_string":"2017-02-08T09:20:00.000Z","key":1486545600000,"doc_count":10},{"key_as_string":"2017-02-08T09:21:00.000Z","key":1486545660000,"doc_count":9},{"key_as_string":"2017-02-08T09:22:00.000Z","key":1486545720000,"doc_count":13},{"key_as_string":"2017-02-08T09:23:00.000Z","key":1486545780000,"doc_count":18},{"key_as_string":"2017-02-08T09:24:00.000Z","key":1486545840000,"doc_count":12},{"key_as_string":"2017-02-08T09:25:00.000Z","key":1486545900000,"doc_count":15},{"key_as_string":"2017-02-08T09:26:00.000Z","key":1486545960000,"doc_count":10},{"key_as_string":"2017-02-08T09:27:00.000Z","key":1486546020000,"doc_count":16},{"key_as_string":"2017-02-08T09:28:00.000Z","key":1486546080000,"doc_count":17},{"key_as_string":"2017-02-08T09:29:00.000Z","key":1486546140000,"doc_count":14},{"key_as_string":"2017-02-08T09:30:00.000Z","key":1486546200000,"doc_count":13},{"key_as_string":"2017-02-08T09:31:00.000Z","key":1486546260000,"doc_count":14},{"key_as_string":"2017-02-08T09:32:00.000Z","key":1486546320000,"doc_count":11},{"key_as_string":"2017-02-08T09:33:00.000Z","key":1486546380000,"doc_count":13},{"key_as_string":"2017-02-08T09:34:00.000Z","key":1486546440000,"doc_count":10},{"key_as_string":"2017-02-08T09:35:00.000Z","key":1486546500000,"doc_count":15},{"key_as_string":"2017-02-08T09:36:00.000Z","key":1486546560000,"doc_count":15},{"key_as_string":"2017-02-08T09:37:00.000Z","key":1486546620000,"doc_count":11},{"key_as_string":"2017-02-08T09:38:00.000Z","key":1486546680000,"doc_count":13},{"key_as_string":"2017-02-08T09:39:00.000Z","key":1486546740000,"doc_count":12},{"key_as_string":"2017-02-08T09:40:00.000Z","key":1486546800000,"doc_count":12},{"key_as_string":"2017-02-08T09:41:00.000Z","key":1486546860000,"doc_count":11},{"key_as_string":"2017-02-08T09:42:00.000Z","key":1486546920000,"doc_count":10},{"key_as_string":"2017-02-08T09:43:00.000Z","key":1486546980000,"doc_count":15},{"key_as_string":"2017-02-08T09:44:00.000Z","key":1486547040000,"doc_count":12},{"key_as_string":"2017-02-08T09:45:00.000Z","key":1486547100000,"doc_count":11},{"key_as_string":"2017-02-08T09:46:00.000Z","key":1486547160000,"doc_count":12},{"key_as_string":"2017-02-08T09:47:00.000Z","key":1486547220000,"doc_count":12},{"key_as_string":"2017-02-08T09:48:00.000Z","key":1486547280000,"doc_count":10},{"key_as_string":"2017-02-08T09:49:00.000Z","key":1486547340000,"doc_count":18},{"key_as_string":"2017-02-08T09:50:00.000Z","key":1486547400000,"doc_count":16},{"key_as_string":"2017-02-08T09:51:00.000Z","key":1486547460000,"doc_count":20},{"key_as_string":"2017-02-08T09:52:00.000Z","key":1486547520000,"doc_count":12},{"key_as_string":"2017-02-08T09:53:00.000Z","key":1486547580000,"doc_count":13},{"key_as_string":"2017-02-08T09:54:00.000Z","key":1486547640000,"doc_count":16},{"key_as_string":"2017-02-08T09:55:00.000Z","key":1486547700000,"doc_count":14},{"key_as_string":"2017-02-08T09:56:00.000Z","key":1486547760000,"doc_count":12},{"key_as_string":"2017-02-08T09:57:00.000Z","key":1486547820000,"doc_count":18},{"key_as_string":"2017-02-08T09:58:00.000Z","key":1486547880000,"doc_count":11},{"key_as_string":"2017-02-08T09:59:00.000Z","key":1486547940000,"doc_count":17},{"key_as_string":"2017-02-08T10:00:00.000Z","key":1486548000000,"doc_count":12},{"key_as_string":"2017-02-08T10:01:00.000Z","key":1486548060000,"doc_count":13},{"key_as_string":"2017-02-08T10:02:00.000Z","key":1486548120000,"doc_count":21},{"key_as_string":"2017-02-08T10:03:00.000Z","key":1486548180000,"doc_count":17},{"key_as_string":"2017-02-08T10:04:00.000Z","key":1486548240000,"doc_count":16},{"key_as_string":"2017-02-08T10:05:00.000Z","key":1486548300000,"doc_count":11},{"key_as_string":"2017-02-08T10:06:00.000Z","key":1486548360000,"doc_count":16},{"key_as_string":"2017-02-08T10:07:00.000Z","key":1486548420000,"doc_count":11},{"key_as_string":"2017-02-08T10:08:00.000Z","key":1486548480000,"doc_count":15},{"key_as_string":"2017-02-08T10:09:00.000Z","key":1486548540000,"doc_count":12},{"key_as_string":"2017-02-08T10:10:00.000Z","key":1486548600000,"doc_count":14},{"key_as_string":"2017-02-08T10:11:00.000Z","key":1486548660000,"doc_count":11},{"key_as_string":"2017-02-08T10:12:00.000Z","key":1486548720000,"doc_count":19},{"key_as_string":"2017-02-08T10:13:00.000Z","key":1486548780000,"doc_count":13},{"key_as_string":"2017-02-08T10:14:00.000Z","key":1486548840000,"doc_count":16},{"key_as_string":"2017-02-08T10:15:00.000Z","key":1486548900000,"doc_count":10},{"key_as_string":"2017-02-08T10:16:00.000Z","key":1486548960000,"doc_count":13},{"key_as_string":"2017-02-08T10:17:00.000Z","key":1486549020000,"doc_count":8},{"key_as_string":"2017-02-08T10:18:00.000Z","key":1486549080000,"doc_count":15},{"key_as_string":"2017-02-08T10:19:00.000Z","key":1486549140000,"doc_count":14},{"key_as_string":"2017-02-08T10:20:00.000Z","key":1486549200000,"doc_count":14},{"key_as_string":"2017-02-08T10:21:00.000Z","key":1486549260000,"doc_count":10},{"key_as_string":"2017-02-08T10:22:00.000Z","key":1486549320000,"doc_count":15},{"key_as_string":"2017-02-08T10:23:00.000Z","key":1486549380000,"doc_count":10},{"key_as_string":"2017-02-08T10:24:00.000Z","key":1486549440000,"doc_count":13},{"key_as_string":"2017-02-08T10:25:00.000Z","key":1486549500000,"doc_count":14},{"key_as_string":"2017-02-08T10:26:00.000Z","key":1486549560000,"doc_count":14},{"key_as_string":"2017-02-08T10:27:00.000Z","key":1486549620000,"doc_count":17},{"key_as_string":"2017-02-08T10:28:00.000Z","key":1486549680000,"doc_count":10},{"key_as_string":"2017-02-08T10:29:00.000Z","key":1486549740000,"doc_count":13},{"key_as_string":"2017-02-08T10:30:00.000Z","key":1486549800000,"doc_count":16},{"key_as_string":"2017-02-08T10:31:00.000Z","key":1486549860000,"doc_count":14},{"key_as_string":"2017-02-08T10:32:00.000Z","key":1486549920000,"doc_count":16},{"key_as_string":"2017-02-08T10:33:00.000Z","key":1486549980000,"doc_count":15},{"key_as_string":"2017-02-08T10:34:00.000Z","key":1486550040000,"doc_count":15},{"key_as_string":"2017-02-08T10:35:00.000Z","key":1486550100000,"doc_count":15},{"key_as_string":"2017-02-08T10:36:00.000Z","key":1486550160000,"doc_count":10},{"key_as_string":"2017-02-08T10:37:00.000Z","key":1486550220000,"doc_count":15},{"key_as_string":"2017-02-08T10:38:00.000Z","key":1486550280000,"doc_count":14},{"key_as_string":"2017-02-08T10:39:00.000Z","key":1486550340000,"doc_count":17},{"key_as_string":"2017-02-08T10:40:00.000Z","key":1486550400000,"doc_count":15},{"key_as_string":"2017-02-08T10:41:00.000Z","key":1486550460000,"doc_count":19},{"key_as_string":"2017-02-08T10:42:00.000Z","key":1486550520000,"doc_count":9},{"key_as_string":"2017-02-08T10:43:00.000Z","key":1486550580000,"doc_count":14},{"key_as_string":"2017-02-08T10:44:00.000Z","key":1486550640000,"doc_count":10},{"key_as_string":"2017-02-08T10:45:00.000Z","key":1486550700000,"doc_count":20},{"key_as_string":"2017-02-08T10:46:00.000Z","key":1486550760000,"doc_count":10},{"key_as_string":"2017-02-08T10:47:00.000Z","key":1486550820000,"doc_count":16},{"key_as_string":"2017-02-08T10:48:00.000Z","key":1486550880000,"doc_count":13},{"key_as_string":"2017-02-08T10:49:00.000Z","key":1486550940000,"doc_count":14},{"key_as_string":"2017-02-08T10:50:00.000Z","key":1486551000000,"doc_count":10},{"key_as_string":"2017-02-08T10:51:00.000Z","key":1486551060000,"doc_count":17},{"key_as_string":"2017-02-08T10:52:00.000Z","key":1486551120000,"doc_count":16},{"key_as_string":"2017-02-08T10:53:00.000Z","key":1486551180000,"doc_count":9},{"key_as_string":"2017-02-08T10:54:00.000Z","key":1486551240000,"doc_count":15},{"key_as_string":"2017-02-08T10:55:00.000Z","key":1486551300000,"doc_count":16},{"key_as_string":"2017-02-08T10:56:00.000Z","key":1486551360000,"doc_count":5},{"key_as_string":"2017-02-08T10:57:00.000Z","key":1486551420000,"doc_count":15},{"key_as_string":"2017-02-08T10:58:00.000Z","key":1486551480000,"doc_count":9},{"key_as_string":"2017-02-08T10:59:00.000Z","key":1486551540000,"doc_count":14},{"key_as_string":"2017-02-08T11:00:00.000Z","key":1486551600000,"doc_count":16},{"key_as_string":"2017-02-08T11:01:00.000Z","key":1486551660000,"doc_count":9},{"key_as_string":"2017-02-08T11:02:00.000Z","key":1486551720000,"doc_count":17},{"key_as_string":"2017-02-08T11:03:00.000Z","key":1486551780000,"doc_count":9},{"key_as_string":"2017-02-08T11:04:00.000Z","key":1486551840000,"doc_count":18},{"key_as_string":"2017-02-08T11:05:00.000Z","key":1486551900000,"doc_count":12},{"key_as_string":"2017-02-08T11:06:00.000Z","key":1486551960000,"doc_count":16},{"key_as_string":"2017-02-08T11:07:00.000Z","key":1486552020000,"doc_count":13},{"key_as_string":"2017-02-08T11:08:00.000Z","key":1486552080000,"doc_count":14},{"key_as_string":"2017-02-08T11:09:00.000Z","key":1486552140000,"doc_count":13},{"key_as_string":"2017-02-08T11:10:00.000Z","key":1486552200000,"doc_count":17},{"key_as_string":"2017-02-08T11:11:00.000Z","key":1486552260000,"doc_count":12},{"key_as_string":"2017-02-08T11:12:00.000Z","key":1486552320000,"doc_count":11},{"key_as_string":"2017-02-08T11:13:00.000Z","key":1486552380000,"doc_count":15},{"key_as_string":"2017-02-08T11:14:00.000Z","key":1486552440000,"doc_count":10},{"key_as_string":"2017-02-08T11:15:00.000Z","key":1486552500000,"doc_count":9},{"key_as_string":"2017-02-08T11:16:00.000Z","key":1486552560000,"doc_count":14},{"key_as_string":"2017-02-08T11:17:00.000Z","key":1486552620000,"doc_count":16},{"key_as_string":"2017-02-08T11:18:00.000Z","key":1486552680000,"doc_count":19},{"key_as_string":"2017-02-08T11:19:00.000Z","key":1486552740000,"doc_count":14},{"key_as_string":"2017-02-08T11:20:00.000Z","key":1486552800000,"doc_count":10},{"key_as_string":"2017-02-08T11:21:00.000Z","key":1486552860000,"doc_count":14},{"key_as_string":"2017-02-08T11:22:00.000Z","key":1486552920000,"doc_count":13},{"key_as_string":"2017-02-08T11:23:00.000Z","key":1486552980000,"doc_count":16},{"key_as_string":"2017-02-08T11:24:00.000Z","key":1486553040000,"doc_count":15},{"key_as_string":"2017-02-08T11:25:00.000Z","key":1486553100000,"doc_count":16},{"key_as_string":"2017-02-08T11:26:00.000Z","key":1486553160000,"doc_count":18},{"key_as_string":"2017-02-08T11:27:00.000Z","key":1486553220000,"doc_count":13},{"key_as_string":"2017-02-08T11:28:00.000Z","key":1486553280000,"doc_count":13},{"key_as_string":"2017-02-08T11:29:00.000Z","key":1486553340000,"doc_count":16},{"key_as_string":"2017-02-08T11:30:00.000Z","key":1486553400000,"doc_count":13},{"key_as_string":"2017-02-08T11:31:00.000Z","key":1486553460000,"doc_count":16},{"key_as_string":"2017-02-08T11:32:00.000Z","key":1486553520000,"doc_count":13},{"key_as_string":"2017-02-08T11:33:00.000Z","key":1486553580000,"doc_count":18},{"key_as_string":"2017-02-08T11:34:00.000Z","key":1486553640000,"doc_count":12},{"key_as_string":"2017-02-08T11:35:00.000Z","key":1486553700000,"doc_count":11},{"key_as_string":"2017-02-08T11:36:00.000Z","key":1486553760000,"doc_count":16},{"key_as_string":"2017-02-08T11:37:00.000Z","key":1486553820000,"doc_count":18},{"key_as_string":"2017-02-08T11:38:00.000Z","key":1486553880000,"doc_count":10},{"key_as_string":"2017-02-08T11:39:00.000Z","key":1486553940000,"doc_count":17},{"key_as_string":"2017-02-08T11:40:00.000Z","key":1486554000000,"doc_count":11},{"key_as_string":"2017-02-08T11:41:00.000Z","key":1486554060000,"doc_count":20},{"key_as_string":"2017-02-08T11:42:00.000Z","key":1486554120000,"doc_count":10},{"key_as_string":"2017-02-08T11:43:00.000Z","key":1486554180000,"doc_count":17},{"key_as_string":"2017-02-08T11:44:00.000Z","key":1486554240000,"doc_count":21},{"key_as_string":"2017-02-08T11:45:00.000Z","key":1486554300000,"doc_count":13},{"key_as_string":"2017-02-08T11:46:00.000Z","key":1486554360000,"doc_count":12},{"key_as_string":"2017-02-08T11:47:00.000Z","key":1486554420000,"doc_count":11},{"key_as_string":"2017-02-08T11:48:00.000Z","key":1486554480000,"doc_count":14},{"key_as_string":"2017-02-08T11:49:00.000Z","key":1486554540000,"doc_count":11},{"key_as_string":"2017-02-08T11:50:00.000Z","key":1486554600000,"doc_count":9},{"key_as_string":"2017-02-08T11:51:00.000Z","key":1486554660000,"doc_count":14},{"key_as_string":"2017-02-08T11:52:00.000Z","key":1486554720000,"doc_count":13},{"key_as_string":"2017-02-08T11:53:00.000Z","key":1486554780000,"doc_count":12},{"key_as_string":"2017-02-08T11:54:00.000Z","key":1486554840000,"doc_count":13},{"key_as_string":"2017-02-08T11:55:00.000Z","key":1486554900000,"doc_count":18},{"key_as_string":"2017-02-08T11:56:00.000Z","key":1486554960000,"doc_count":18},{"key_as_string":"2017-02-08T11:57:00.000Z","key":1486555020000,"doc_count":13},{"key_as_string":"2017-02-08T11:58:00.000Z","key":1486555080000,"doc_count":13},{"key_as_string":"2017-02-08T11:59:00.000Z","key":1486555140000,"doc_count":14},{"key_as_string":"2017-02-08T12:00:00.000Z","key":1486555200000,"doc_count":18},{"key_as_string":"2017-02-08T12:01:00.000Z","key":1486555260000,"doc_count":14},{"key_as_string":"2017-02-08T12:02:00.000Z","key":1486555320000,"doc_count":14},{"key_as_string":"2017-02-08T12:03:00.000Z","key":1486555380000,"doc_count":13},{"key_as_string":"2017-02-08T12:04:00.000Z","key":1486555440000,"doc_count":18},{"key_as_string":"2017-02-08T12:05:00.000Z","key":1486555500000,"doc_count":13},{"key_as_string":"2017-02-08T12:06:00.000Z","key":1486555560000,"doc_count":16},{"key_as_string":"2017-02-08T12:07:00.000Z","key":1486555620000,"doc_count":13},{"key_as_string":"2017-02-08T12:08:00.000Z","key":1486555680000,"doc_count":14},{"key_as_string":"2017-02-08T12:09:00.000Z","key":1486555740000,"doc_count":16},{"key_as_string":"2017-02-08T12:10:00.000Z","key":1486555800000,"doc_count":13},{"key_as_string":"2017-02-08T12:11:00.000Z","key":1486555860000,"doc_count":13},{"key_as_string":"2017-02-08T12:12:00.000Z","key":1486555920000,"doc_count":15},{"key_as_string":"2017-02-08T12:13:00.000Z","key":1486555980000,"doc_count":11},{"key_as_string":"2017-02-08T12:14:00.000Z","key":1486556040000,"doc_count":15},{"key_as_string":"2017-02-08T12:15:00.000Z","key":1486556100000,"doc_count":12},{"key_as_string":"2017-02-08T12:16:00.000Z","key":1486556160000,"doc_count":14},{"key_as_string":"2017-02-08T12:17:00.000Z","key":1486556220000,"doc_count":13},{"key_as_string":"2017-02-08T12:18:00.000Z","key":1486556280000,"doc_count":19},{"key_as_string":"2017-02-08T12:19:00.000Z","key":1486556340000,"doc_count":13},{"key_as_string":"2017-02-08T12:20:00.000Z","key":1486556400000,"doc_count":14},{"key_as_string":"2017-02-08T12:21:00.000Z","key":1486556460000,"doc_count":12},{"key_as_string":"2017-02-08T12:22:00.000Z","key":1486556520000,"doc_count":15},{"key_as_string":"2017-02-08T12:23:00.000Z","key":1486556580000,"doc_count":17},{"key_as_string":"2017-02-08T12:24:00.000Z","key":1486556640000,"doc_count":14},{"key_as_string":"2017-02-08T12:25:00.000Z","key":1486556700000,"doc_count":10},{"key_as_string":"2017-02-08T12:26:00.000Z","key":1486556760000,"doc_count":13},{"key_as_string":"2017-02-08T12:27:00.000Z","key":1486556820000,"doc_count":14},{"key_as_string":"2017-02-08T12:28:00.000Z","key":1486556880000,"doc_count":10},{"key_as_string":"2017-02-08T12:29:00.000Z","key":1486556940000,"doc_count":13},{"key_as_string":"2017-02-08T12:30:00.000Z","key":1486557000000,"doc_count":16},{"key_as_string":"2017-02-08T12:31:00.000Z","key":1486557060000,"doc_count":15},{"key_as_string":"2017-02-08T12:32:00.000Z","key":1486557120000,"doc_count":9},{"key_as_string":"2017-02-08T12:33:00.000Z","key":1486557180000,"doc_count":16},{"key_as_string":"2017-02-08T12:34:00.000Z","key":1486557240000,"doc_count":16},{"key_as_string":"2017-02-08T12:35:00.000Z","key":1486557300000,"doc_count":9},{"key_as_string":"2017-02-08T12:36:00.000Z","key":1486557360000,"doc_count":11},{"key_as_string":"2017-02-08T12:37:00.000Z","key":1486557420000,"doc_count":12},{"key_as_string":"2017-02-08T12:38:00.000Z","key":1486557480000,"doc_count":16},{"key_as_string":"2017-02-08T12:39:00.000Z","key":1486557540000,"doc_count":13},{"key_as_string":"2017-02-08T12:40:00.000Z","key":1486557600000,"doc_count":12},{"key_as_string":"2017-02-08T12:41:00.000Z","key":1486557660000,"doc_count":15},{"key_as_string":"2017-02-08T12:42:00.000Z","key":1486557720000,"doc_count":12},{"key_as_string":"2017-02-08T12:43:00.000Z","key":1486557780000,"doc_count":13},{"key_as_string":"2017-02-08T12:44:00.000Z","key":1486557840000,"doc_count":13},{"key_as_string":"2017-02-08T12:45:00.000Z","key":1486557900000,"doc_count":15},{"key_as_string":"2017-02-08T12:46:00.000Z","key":1486557960000,"doc_count":15},{"key_as_string":"2017-02-08T12:47:00.000Z","key":1486558020000,"doc_count":12},{"key_as_string":"2017-02-08T12:48:00.000Z","key":1486558080000,"doc_count":13},{"key_as_string":"2017-02-08T12:49:00.000Z","key":1486558140000,"doc_count":15},{"key_as_string":"2017-02-08T12:50:00.000Z","key":1486558200000,"doc_count":16},{"key_as_string":"2017-02-08T12:51:00.000Z","key":1486558260000,"doc_count":14},{"key_as_string":"2017-02-08T12:52:00.000Z","key":1486558320000,"doc_count":11},{"key_as_string":"2017-02-08T12:53:00.000Z","key":1486558380000,"doc_count":10},{"key_as_string":"2017-02-08T12:54:00.000Z","key":1486558440000,"doc_count":14},{"key_as_string":"2017-02-08T12:55:00.000Z","key":1486558500000,"doc_count":11},{"key_as_string":"2017-02-08T12:56:00.000Z","key":1486558560000,"doc_count":9},{"key_as_string":"2017-02-08T12:57:00.000Z","key":1486558620000,"doc_count":13},{"key_as_string":"2017-02-08T12:58:00.000Z","key":1486558680000,"doc_count":13},{"key_as_string":"2017-02-08T12:59:00.000Z","key":1486558740000,"doc_count":13},{"key_as_string":"2017-02-08T13:00:00.000Z","key":1486558800000,"doc_count":18},{"key_as_string":"2017-02-08T13:01:00.000Z","key":1486558860000,"doc_count":13},{"key_as_string":"2017-02-08T13:02:00.000Z","key":1486558920000,"doc_count":20},{"key_as_string":"2017-02-08T13:03:00.000Z","key":1486558980000,"doc_count":10},{"key_as_string":"2017-02-08T13:04:00.000Z","key":1486559040000,"doc_count":16},{"key_as_string":"2017-02-08T13:05:00.000Z","key":1486559100000,"doc_count":11},{"key_as_string":"2017-02-08T13:06:00.000Z","key":1486559160000,"doc_count":18},{"key_as_string":"2017-02-08T13:07:00.000Z","key":1486559220000,"doc_count":10},{"key_as_string":"2017-02-08T13:08:00.000Z","key":1486559280000,"doc_count":15},{"key_as_string":"2017-02-08T13:09:00.000Z","key":1486559340000,"doc_count":17},{"key_as_string":"2017-02-08T13:10:00.000Z","key":1486559400000,"doc_count":6},{"key_as_string":"2017-02-08T13:11:00.000Z","key":1486559460000,"doc_count":19},{"key_as_string":"2017-02-08T13:12:00.000Z","key":1486559520000,"doc_count":12},{"key_as_string":"2017-02-08T13:13:00.000Z","key":1486559580000,"doc_count":11},{"key_as_string":"2017-02-08T13:14:00.000Z","key":1486559640000,"doc_count":15},{"key_as_string":"2017-02-08T13:15:00.000Z","key":1486559700000,"doc_count":10},{"key_as_string":"2017-02-08T13:16:00.000Z","key":1486559760000,"doc_count":16},{"key_as_string":"2017-02-08T13:17:00.000Z","key":1486559820000,"doc_count":16},{"key_as_string":"2017-02-08T13:18:00.000Z","key":1486559880000,"doc_count":14},{"key_as_string":"2017-02-08T13:19:00.000Z","key":1486559940000,"doc_count":12},{"key_as_string":"2017-02-08T13:20:00.000Z","key":1486560000000,"doc_count":10},{"key_as_string":"2017-02-08T13:21:00.000Z","key":1486560060000,"doc_count":18},{"key_as_string":"2017-02-08T13:22:00.000Z","key":1486560120000,"doc_count":14},{"key_as_string":"2017-02-08T13:23:00.000Z","key":1486560180000,"doc_count":11},{"key_as_string":"2017-02-08T13:24:00.000Z","key":1486560240000,"doc_count":15},{"key_as_string":"2017-02-08T13:25:00.000Z","key":1486560300000,"doc_count":17},{"key_as_string":"2017-02-08T13:26:00.000Z","key":1486560360000,"doc_count":10},{"key_as_string":"2017-02-08T13:27:00.000Z","key":1486560420000,"doc_count":14},{"key_as_string":"2017-02-08T13:28:00.000Z","key":1486560480000,"doc_count":14},{"key_as_string":"2017-02-08T13:29:00.000Z","key":1486560540000,"doc_count":13},{"key_as_string":"2017-02-08T13:30:00.000Z","key":1486560600000,"doc_count":15},{"key_as_string":"2017-02-08T13:31:00.000Z","key":1486560660000,"doc_count":16},{"key_as_string":"2017-02-08T13:32:00.000Z","key":1486560720000,"doc_count":13},{"key_as_string":"2017-02-08T13:33:00.000Z","key":1486560780000,"doc_count":13},{"key_as_string":"2017-02-08T13:34:00.000Z","key":1486560840000,"doc_count":15},{"key_as_string":"2017-02-08T13:35:00.000Z","key":1486560900000,"doc_count":8},{"key_as_string":"2017-02-08T13:36:00.000Z","key":1486560960000,"doc_count":18},{"key_as_string":"2017-02-08T13:37:00.000Z","key":1486561020000,"doc_count":13},{"key_as_string":"2017-02-08T13:38:00.000Z","key":1486561080000,"doc_count":14},{"key_as_string":"2017-02-08T13:39:00.000Z","key":1486561140000,"doc_count":14},{"key_as_string":"2017-02-08T13:40:00.000Z","key":1486561200000,"doc_count":17},{"key_as_string":"2017-02-08T13:41:00.000Z","key":1486561260000,"doc_count":12},{"key_as_string":"2017-02-08T13:42:00.000Z","key":1486561320000,"doc_count":10},{"key_as_string":"2017-02-08T13:43:00.000Z","key":1486561380000,"doc_count":17},{"key_as_string":"2017-02-08T13:44:00.000Z","key":1486561440000,"doc_count":12},{"key_as_string":"2017-02-08T13:45:00.000Z","key":1486561500000,"doc_count":9},{"key_as_string":"2017-02-08T13:46:00.000Z","key":1486561560000,"doc_count":21},{"key_as_string":"2017-02-08T13:47:00.000Z","key":1486561620000,"doc_count":16},{"key_as_string":"2017-02-08T13:48:00.000Z","key":1486561680000,"doc_count":17},{"key_as_string":"2017-02-08T13:49:00.000Z","key":1486561740000,"doc_count":11},{"key_as_string":"2017-02-08T13:50:00.000Z","key":1486561800000,"doc_count":17},{"key_as_string":"2017-02-08T13:51:00.000Z","key":1486561860000,"doc_count":9},{"key_as_string":"2017-02-08T13:52:00.000Z","key":1486561920000,"doc_count":14},{"key_as_string":"2017-02-08T13:53:00.000Z","key":1486561980000,"doc_count":10},{"key_as_string":"2017-02-08T13:54:00.000Z","key":1486562040000,"doc_count":9},{"key_as_string":"2017-02-08T13:55:00.000Z","key":1486562100000,"doc_count":21},{"key_as_string":"2017-02-08T13:56:00.000Z","key":1486562160000,"doc_count":14},{"key_as_string":"2017-02-08T13:57:00.000Z","key":1486562220000,"doc_count":11},{"key_as_string":"2017-02-08T13:58:00.000Z","key":1486562280000,"doc_count":15},{"key_as_string":"2017-02-08T13:59:00.000Z","key":1486562340000,"doc_count":10},{"key_as_string":"2017-02-08T14:00:00.000Z","key":1486562400000,"doc_count":12},{"key_as_string":"2017-02-08T14:01:00.000Z","key":1486562460000,"doc_count":15},{"key_as_string":"2017-02-08T14:02:00.000Z","key":1486562520000,"doc_count":11},{"key_as_string":"2017-02-08T14:03:00.000Z","key":1486562580000,"doc_count":14},{"key_as_string":"2017-02-08T14:04:00.000Z","key":1486562640000,"doc_count":18},{"key_as_string":"2017-02-08T14:05:00.000Z","key":1486562700000,"doc_count":11},{"key_as_string":"2017-02-08T14:06:00.000Z","key":1486562760000,"doc_count":11},{"key_as_string":"2017-02-08T14:07:00.000Z","key":1486562820000,"doc_count":16},{"key_as_string":"2017-02-08T14:08:00.000Z","key":1486562880000,"doc_count":10},{"key_as_string":"2017-02-08T14:09:00.000Z","key":1486562940000,"doc_count":14},{"key_as_string":"2017-02-08T14:10:00.000Z","key":1486563000000,"doc_count":14},{"key_as_string":"2017-02-08T14:11:00.000Z","key":1486563060000,"doc_count":9},{"key_as_string":"2017-02-08T14:12:00.000Z","key":1486563120000,"doc_count":15},{"key_as_string":"2017-02-08T14:13:00.000Z","key":1486563180000,"doc_count":17},{"key_as_string":"2017-02-08T14:14:00.000Z","key":1486563240000,"doc_count":5},{"key_as_string":"2017-02-08T14:15:00.000Z","key":1486563300000,"doc_count":15},{"key_as_string":"2017-02-08T14:16:00.000Z","key":1486563360000,"doc_count":15},{"key_as_string":"2017-02-08T14:17:00.000Z","key":1486563420000,"doc_count":13},{"key_as_string":"2017-02-08T14:18:00.000Z","key":1486563480000,"doc_count":15},{"key_as_string":"2017-02-08T14:19:00.000Z","key":1486563540000,"doc_count":14},{"key_as_string":"2017-02-08T14:20:00.000Z","key":1486563600000,"doc_count":8},{"key_as_string":"2017-02-08T14:21:00.000Z","key":1486563660000,"doc_count":14},{"key_as_string":"2017-02-08T14:22:00.000Z","key":1486563720000,"doc_count":11},{"key_as_string":"2017-02-08T14:23:00.000Z","key":1486563780000,"doc_count":14},{"key_as_string":"2017-02-08T14:24:00.000Z","key":1486563840000,"doc_count":15},{"key_as_string":"2017-02-08T14:25:00.000Z","key":1486563900000,"doc_count":9},{"key_as_string":"2017-02-08T14:26:00.000Z","key":1486563960000,"doc_count":16},{"key_as_string":"2017-02-08T14:27:00.000Z","key":1486564020000,"doc_count":15},{"key_as_string":"2017-02-08T14:28:00.000Z","key":1486564080000,"doc_count":13},{"key_as_string":"2017-02-08T14:29:00.000Z","key":1486564140000,"doc_count":14},{"key_as_string":"2017-02-08T14:30:00.000Z","key":1486564200000,"doc_count":10},{"key_as_string":"2017-02-08T14:31:00.000Z","key":1486564260000,"doc_count":15},{"key_as_string":"2017-02-08T14:32:00.000Z","key":1486564320000,"doc_count":15},{"key_as_string":"2017-02-08T14:33:00.000Z","key":1486564380000,"doc_count":11},{"key_as_string":"2017-02-08T14:34:00.000Z","key":1486564440000,"doc_count":13},{"key_as_string":"2017-02-08T14:35:00.000Z","key":1486564500000,"doc_count":14},{"key_as_string":"2017-02-08T14:36:00.000Z","key":1486564560000,"doc_count":11},{"key_as_string":"2017-02-08T14:37:00.000Z","key":1486564620000,"doc_count":10},{"key_as_string":"2017-02-08T14:38:00.000Z","key":1486564680000,"doc_count":18},{"key_as_string":"2017-02-08T14:39:00.000Z","key":1486564740000,"doc_count":12},{"key_as_string":"2017-02-08T14:40:00.000Z","key":1486564800000,"doc_count":14},{"key_as_string":"2017-02-08T14:41:00.000Z","key":1486564860000,"doc_count":15},{"key_as_string":"2017-02-08T14:42:00.000Z","key":1486564920000,"doc_count":17},{"key_as_string":"2017-02-08T14:43:00.000Z","key":1486564980000,"doc_count":9},{"key_as_string":"2017-02-08T14:44:00.000Z","key":1486565040000,"doc_count":10},{"key_as_string":"2017-02-08T14:45:00.000Z","key":1486565100000,"doc_count":9},{"key_as_string":"2017-02-08T14:46:00.000Z","key":1486565160000,"doc_count":15},{"key_as_string":"2017-02-08T14:47:00.000Z","key":1486565220000,"doc_count":12},{"key_as_string":"2017-02-08T14:48:00.000Z","key":1486565280000,"doc_count":10},{"key_as_string":"2017-02-08T14:49:00.000Z","key":1486565340000,"doc_count":18},{"key_as_string":"2017-02-08T14:50:00.000Z","key":1486565400000,"doc_count":9},{"key_as_string":"2017-02-08T14:51:00.000Z","key":1486565460000,"doc_count":15},{"key_as_string":"2017-02-08T14:52:00.000Z","key":1486565520000,"doc_count":19},{"key_as_string":"2017-02-08T14:53:00.000Z","key":1486565580000,"doc_count":11},{"key_as_string":"2017-02-08T14:54:00.000Z","key":1486565640000,"doc_count":12},{"key_as_string":"2017-02-08T14:55:00.000Z","key":1486565700000,"doc_count":10},{"key_as_string":"2017-02-08T14:56:00.000Z","key":1486565760000,"doc_count":9},{"key_as_string":"2017-02-08T14:57:00.000Z","key":1486565820000,"doc_count":21},{"key_as_string":"2017-02-08T14:58:00.000Z","key":1486565880000,"doc_count":13},{"key_as_string":"2017-02-08T14:59:00.000Z","key":1486565940000,"doc_count":16},{"key_as_string":"2017-02-08T15:00:00.000Z","key":1486566000000,"doc_count":9},{"key_as_string":"2017-02-08T15:01:00.000Z","key":1486566060000,"doc_count":16},{"key_as_string":"2017-02-08T15:02:00.000Z","key":1486566120000,"doc_count":11},{"key_as_string":"2017-02-08T15:03:00.000Z","key":1486566180000,"doc_count":14},{"key_as_string":"2017-02-08T15:04:00.000Z","key":1486566240000,"doc_count":16},{"key_as_string":"2017-02-08T15:05:00.000Z","key":1486566300000,"doc_count":10},{"key_as_string":"2017-02-08T15:06:00.000Z","key":1486566360000,"doc_count":14},{"key_as_string":"2017-02-08T15:07:00.000Z","key":1486566420000,"doc_count":9},{"key_as_string":"2017-02-08T15:08:00.000Z","key":1486566480000,"doc_count":13},{"key_as_string":"2017-02-08T15:09:00.000Z","key":1486566540000,"doc_count":13},{"key_as_string":"2017-02-08T15:10:00.000Z","key":1486566600000,"doc_count":14},{"key_as_string":"2017-02-08T15:11:00.000Z","key":1486566660000,"doc_count":15},{"key_as_string":"2017-02-08T15:12:00.000Z","key":1486566720000,"doc_count":15},{"key_as_string":"2017-02-08T15:13:00.000Z","key":1486566780000,"doc_count":11},{"key_as_string":"2017-02-08T15:14:00.000Z","key":1486566840000,"doc_count":7},{"key_as_string":"2017-02-08T15:15:00.000Z","key":1486566900000,"doc_count":20},{"key_as_string":"2017-02-08T15:16:00.000Z","key":1486566960000,"doc_count":11},{"key_as_string":"2017-02-08T15:17:00.000Z","key":1486567020000,"doc_count":15},{"key_as_string":"2017-02-08T15:18:00.000Z","key":1486567080000,"doc_count":14},{"key_as_string":"2017-02-08T15:19:00.000Z","key":1486567140000,"doc_count":11},{"key_as_string":"2017-02-08T15:20:00.000Z","key":1486567200000,"doc_count":18},{"key_as_string":"2017-02-08T15:21:00.000Z","key":1486567260000,"doc_count":11},{"key_as_string":"2017-02-08T15:22:00.000Z","key":1486567320000,"doc_count":12},{"key_as_string":"2017-02-08T15:23:00.000Z","key":1486567380000,"doc_count":12},{"key_as_string":"2017-02-08T15:24:00.000Z","key":1486567440000,"doc_count":8},{"key_as_string":"2017-02-08T15:25:00.000Z","key":1486567500000,"doc_count":11},{"key_as_string":"2017-02-08T15:26:00.000Z","key":1486567560000,"doc_count":12},{"key_as_string":"2017-02-08T15:27:00.000Z","key":1486567620000,"doc_count":12},{"key_as_string":"2017-02-08T15:28:00.000Z","key":1486567680000,"doc_count":14},{"key_as_string":"2017-02-08T15:29:00.000Z","key":1486567740000,"doc_count":13},{"key_as_string":"2017-02-08T15:30:00.000Z","key":1486567800000,"doc_count":13},{"key_as_string":"2017-02-08T15:31:00.000Z","key":1486567860000,"doc_count":14},{"key_as_string":"2017-02-08T15:32:00.000Z","key":1486567920000,"doc_count":15},{"key_as_string":"2017-02-08T15:33:00.000Z","key":1486567980000,"doc_count":12},{"key_as_string":"2017-02-08T15:34:00.000Z","key":1486568040000,"doc_count":15},{"key_as_string":"2017-02-08T15:35:00.000Z","key":1486568100000,"doc_count":20},{"key_as_string":"2017-02-08T15:36:00.000Z","key":1486568160000,"doc_count":11},{"key_as_string":"2017-02-08T15:37:00.000Z","key":1486568220000,"doc_count":13},{"key_as_string":"2017-02-08T15:38:00.000Z","key":1486568280000,"doc_count":13},{"key_as_string":"2017-02-08T15:39:00.000Z","key":1486568340000,"doc_count":10},{"key_as_string":"2017-02-08T15:40:00.000Z","key":1486568400000,"doc_count":14},{"key_as_string":"2017-02-08T15:41:00.000Z","key":1486568460000,"doc_count":16},{"key_as_string":"2017-02-08T15:42:00.000Z","key":1486568520000,"doc_count":17},{"key_as_string":"2017-02-08T15:43:00.000Z","key":1486568580000,"doc_count":15},{"key_as_string":"2017-02-08T15:44:00.000Z","key":1486568640000,"doc_count":14},{"key_as_string":"2017-02-08T15:45:00.000Z","key":1486568700000,"doc_count":14},{"key_as_string":"2017-02-08T15:46:00.000Z","key":1486568760000,"doc_count":12},{"key_as_string":"2017-02-08T15:47:00.000Z","key":1486568820000,"doc_count":16},{"key_as_string":"2017-02-08T15:48:00.000Z","key":1486568880000,"doc_count":16},{"key_as_string":"2017-02-08T15:49:00.000Z","key":1486568940000,"doc_count":12},{"key_as_string":"2017-02-08T15:50:00.000Z","key":1486569000000,"doc_count":15},{"key_as_string":"2017-02-08T15:51:00.000Z","key":1486569060000,"doc_count":10},{"key_as_string":"2017-02-08T15:52:00.000Z","key":1486569120000,"doc_count":12},{"key_as_string":"2017-02-08T15:53:00.000Z","key":1486569180000,"doc_count":12},{"key_as_string":"2017-02-08T15:54:00.000Z","key":1486569240000,"doc_count":16},{"key_as_string":"2017-02-08T15:55:00.000Z","key":1486569300000,"doc_count":12},{"key_as_string":"2017-02-08T15:56:00.000Z","key":1486569360000,"doc_count":9},{"key_as_string":"2017-02-08T15:57:00.000Z","key":1486569420000,"doc_count":11},{"key_as_string":"2017-02-08T15:58:00.000Z","key":1486569480000,"doc_count":10},{"key_as_string":"2017-02-08T15:59:00.000Z","key":1486569540000,"doc_count":12},{"key_as_string":"2017-02-08T16:00:00.000Z","key":1486569600000,"doc_count":12},{"key_as_string":"2017-02-08T16:01:00.000Z","key":1486569660000,"doc_count":14},{"key_as_string":"2017-02-08T16:02:00.000Z","key":1486569720000,"doc_count":13},{"key_as_string":"2017-02-08T16:03:00.000Z","key":1486569780000,"doc_count":11},{"key_as_string":"2017-02-08T16:04:00.000Z","key":1486569840000,"doc_count":12},{"key_as_string":"2017-02-08T16:05:00.000Z","key":1486569900000,"doc_count":16},{"key_as_string":"2017-02-08T16:06:00.000Z","key":1486569960000,"doc_count":13},{"key_as_string":"2017-02-08T16:07:00.000Z","key":1486570020000,"doc_count":12},{"key_as_string":"2017-02-08T16:08:00.000Z","key":1486570080000,"doc_count":15},{"key_as_string":"2017-02-08T16:09:00.000Z","key":1486570140000,"doc_count":7},{"key_as_string":"2017-02-08T16:10:00.000Z","key":1486570200000,"doc_count":15},{"key_as_string":"2017-02-08T16:11:00.000Z","key":1486570260000,"doc_count":13},{"key_as_string":"2017-02-08T16:12:00.000Z","key":1486570320000,"doc_count":10},{"key_as_string":"2017-02-08T16:13:00.000Z","key":1486570380000,"doc_count":13},{"key_as_string":"2017-02-08T16:14:00.000Z","key":1486570440000,"doc_count":13},{"key_as_string":"2017-02-08T16:15:00.000Z","key":1486570500000,"doc_count":7},{"key_as_string":"2017-02-08T16:16:00.000Z","key":1486570560000,"doc_count":12},{"key_as_string":"2017-02-08T16:17:00.000Z","key":1486570620000,"doc_count":11},{"key_as_string":"2017-02-08T16:18:00.000Z","key":1486570680000,"doc_count":10},{"key_as_string":"2017-02-08T16:19:00.000Z","key":1486570740000,"doc_count":8},{"key_as_string":"2017-02-08T16:20:00.000Z","key":1486570800000,"doc_count":13},{"key_as_string":"2017-02-08T16:21:00.000Z","key":1486570860000,"doc_count":12},{"key_as_string":"2017-02-08T16:22:00.000Z","key":1486570920000,"doc_count":12},{"key_as_string":"2017-02-08T16:23:00.000Z","key":1486570980000,"doc_count":9},{"key_as_string":"2017-02-08T16:24:00.000Z","key":1486571040000,"doc_count":12},{"key_as_string":"2017-02-08T16:25:00.000Z","key":1486571100000,"doc_count":13},{"key_as_string":"2017-02-08T16:26:00.000Z","key":1486571160000,"doc_count":17},{"key_as_string":"2017-02-08T16:27:00.000Z","key":1486571220000,"doc_count":15},{"key_as_string":"2017-02-08T16:28:00.000Z","key":1486571280000,"doc_count":14},{"key_as_string":"2017-02-08T16:29:00.000Z","key":1486571340000,"doc_count":15},{"key_as_string":"2017-02-08T16:30:00.000Z","key":1486571400000,"doc_count":12},{"key_as_string":"2017-02-08T16:31:00.000Z","key":1486571460000,"doc_count":11},{"key_as_string":"2017-02-08T16:32:00.000Z","key":1486571520000,"doc_count":16},{"key_as_string":"2017-02-08T16:33:00.000Z","key":1486571580000,"doc_count":9},{"key_as_string":"2017-02-08T16:34:00.000Z","key":1486571640000,"doc_count":10},{"key_as_string":"2017-02-08T16:35:00.000Z","key":1486571700000,"doc_count":16},{"key_as_string":"2017-02-08T16:36:00.000Z","key":1486571760000,"doc_count":18},{"key_as_string":"2017-02-08T16:37:00.000Z","key":1486571820000,"doc_count":13},{"key_as_string":"2017-02-08T16:38:00.000Z","key":1486571880000,"doc_count":12},{"key_as_string":"2017-02-08T16:39:00.000Z","key":1486571940000,"doc_count":12},{"key_as_string":"2017-02-08T16:40:00.000Z","key":1486572000000,"doc_count":15},{"key_as_string":"2017-02-08T16:41:00.000Z","key":1486572060000,"doc_count":14},{"key_as_string":"2017-02-08T16:42:00.000Z","key":1486572120000,"doc_count":9},{"key_as_string":"2017-02-08T16:43:00.000Z","key":1486572180000,"doc_count":10},{"key_as_string":"2017-02-08T16:44:00.000Z","key":1486572240000,"doc_count":14},{"key_as_string":"2017-02-08T16:45:00.000Z","key":1486572300000,"doc_count":15},{"key_as_string":"2017-02-08T16:46:00.000Z","key":1486572360000,"doc_count":18},{"key_as_string":"2017-02-08T16:47:00.000Z","key":1486572420000,"doc_count":8},{"key_as_string":"2017-02-08T16:48:00.000Z","key":1486572480000,"doc_count":14},{"key_as_string":"2017-02-08T16:49:00.000Z","key":1486572540000,"doc_count":11},{"key_as_string":"2017-02-08T16:50:00.000Z","key":1486572600000,"doc_count":12},{"key_as_string":"2017-02-08T16:51:00.000Z","key":1486572660000,"doc_count":8},{"key_as_string":"2017-02-08T16:52:00.000Z","key":1486572720000,"doc_count":13},{"key_as_string":"2017-02-08T16:53:00.000Z","key":1486572780000,"doc_count":12},{"key_as_string":"2017-02-08T16:54:00.000Z","key":1486572840000,"doc_count":15},{"key_as_string":"2017-02-08T16:55:00.000Z","key":1486572900000,"doc_count":15},{"key_as_string":"2017-02-08T16:56:00.000Z","key":1486572960000,"doc_count":12},{"key_as_string":"2017-02-08T16:57:00.000Z","key":1486573020000,"doc_count":10},{"key_as_string":"2017-02-08T16:58:00.000Z","key":1486573080000,"doc_count":11},{"key_as_string":"2017-02-08T16:59:00.000Z","key":1486573140000,"doc_count":18},{"key_as_string":"2017-02-08T17:00:00.000Z","key":1486573200000,"doc_count":11},{"key_as_string":"2017-02-08T17:01:00.000Z","key":1486573260000,"doc_count":10},{"key_as_string":"2017-02-08T17:02:00.000Z","key":1486573320000,"doc_count":14},{"key_as_string":"2017-02-08T17:03:00.000Z","key":1486573380000,"doc_count":11},{"key_as_string":"2017-02-08T17:04:00.000Z","key":1486573440000,"doc_count":14},{"key_as_string":"2017-02-08T17:05:00.000Z","key":1486573500000,"doc_count":7},{"key_as_string":"2017-02-08T17:06:00.000Z","key":1486573560000,"doc_count":17},{"key_as_string":"2017-02-08T17:07:00.000Z","key":1486573620000,"doc_count":6},{"key_as_string":"2017-02-08T17:08:00.000Z","key":1486573680000,"doc_count":12},{"key_as_string":"2017-02-08T17:09:00.000Z","key":1486573740000,"doc_count":7},{"key_as_string":"2017-02-08T17:10:00.000Z","key":1486573800000,"doc_count":17},{"key_as_string":"2017-02-08T17:11:00.000Z","key":1486573860000,"doc_count":19},{"key_as_string":"2017-02-08T17:12:00.000Z","key":1486573920000,"doc_count":13},{"key_as_string":"2017-02-08T17:13:00.000Z","key":1486573980000,"doc_count":9},{"key_as_string":"2017-02-08T17:14:00.000Z","key":1486574040000,"doc_count":16},{"key_as_string":"2017-02-08T17:15:00.000Z","key":1486574100000,"doc_count":15},{"key_as_string":"2017-02-08T17:16:00.000Z","key":1486574160000,"doc_count":11},{"key_as_string":"2017-02-08T17:17:00.000Z","key":1486574220000,"doc_count":18},{"key_as_string":"2017-02-08T17:18:00.000Z","key":1486574280000,"doc_count":13},{"key_as_string":"2017-02-08T17:19:00.000Z","key":1486574340000,"doc_count":16},{"key_as_string":"2017-02-08T17:20:00.000Z","key":1486574400000,"doc_count":14},{"key_as_string":"2017-02-08T17:21:00.000Z","key":1486574460000,"doc_count":13},{"key_as_string":"2017-02-08T17:22:00.000Z","key":1486574520000,"doc_count":13},{"key_as_string":"2017-02-08T17:23:00.000Z","key":1486574580000,"doc_count":11},{"key_as_string":"2017-02-08T17:24:00.000Z","key":1486574640000,"doc_count":8},{"key_as_string":"2017-02-08T17:25:00.000Z","key":1486574700000,"doc_count":9},{"key_as_string":"2017-02-08T17:26:00.000Z","key":1486574760000,"doc_count":16},{"key_as_string":"2017-02-08T17:27:00.000Z","key":1486574820000,"doc_count":13},{"key_as_string":"2017-02-08T17:28:00.000Z","key":1486574880000,"doc_count":9},{"key_as_string":"2017-02-08T17:29:00.000Z","key":1486574940000,"doc_count":13},{"key_as_string":"2017-02-08T17:30:00.000Z","key":1486575000000,"doc_count":13},{"key_as_string":"2017-02-08T17:31:00.000Z","key":1486575060000,"doc_count":15},{"key_as_string":"2017-02-08T17:32:00.000Z","key":1486575120000,"doc_count":10},{"key_as_string":"2017-02-08T17:33:00.000Z","key":1486575180000,"doc_count":14},{"key_as_string":"2017-02-08T17:34:00.000Z","key":1486575240000,"doc_count":10},{"key_as_string":"2017-02-08T17:35:00.000Z","key":1486575300000,"doc_count":14},{"key_as_string":"2017-02-08T17:36:00.000Z","key":1486575360000,"doc_count":10},{"key_as_string":"2017-02-08T17:37:00.000Z","key":1486575420000,"doc_count":9},{"key_as_string":"2017-02-08T17:38:00.000Z","key":1486575480000,"doc_count":11},{"key_as_string":"2017-02-08T17:39:00.000Z","key":1486575540000,"doc_count":12},{"key_as_string":"2017-02-08T17:40:00.000Z","key":1486575600000,"doc_count":10},{"key_as_string":"2017-02-08T17:41:00.000Z","key":1486575660000,"doc_count":15},{"key_as_string":"2017-02-08T17:42:00.000Z","key":1486575720000,"doc_count":18},{"key_as_string":"2017-02-08T17:43:00.000Z","key":1486575780000,"doc_count":9},{"key_as_string":"2017-02-08T17:44:00.000Z","key":1486575840000,"doc_count":14},{"key_as_string":"2017-02-08T17:45:00.000Z","key":1486575900000,"doc_count":9},{"key_as_string":"2017-02-08T17:46:00.000Z","key":1486575960000,"doc_count":11},{"key_as_string":"2017-02-08T17:47:00.000Z","key":1486576020000,"doc_count":13},{"key_as_string":"2017-02-08T17:48:00.000Z","key":1486576080000,"doc_count":10},{"key_as_string":"2017-02-08T17:49:00.000Z","key":1486576140000,"doc_count":9},{"key_as_string":"2017-02-08T17:50:00.000Z","key":1486576200000,"doc_count":13},{"key_as_string":"2017-02-08T17:51:00.000Z","key":1486576260000,"doc_count":12},{"key_as_string":"2017-02-08T17:52:00.000Z","key":1486576320000,"doc_count":11},{"key_as_string":"2017-02-08T17:53:00.000Z","key":1486576380000,"doc_count":12},{"key_as_string":"2017-02-08T17:54:00.000Z","key":1486576440000,"doc_count":11},{"key_as_string":"2017-02-08T17:55:00.000Z","key":1486576500000,"doc_count":14},{"key_as_string":"2017-02-08T17:56:00.000Z","key":1486576560000,"doc_count":17},{"key_as_string":"2017-02-08T17:57:00.000Z","key":1486576620000,"doc_count":12},{"key_as_string":"2017-02-08T17:58:00.000Z","key":1486576680000,"doc_count":8},{"key_as_string":"2017-02-08T17:59:00.000Z","key":1486576740000,"doc_count":12},{"key_as_string":"2017-02-08T18:00:00.000Z","key":1486576800000,"doc_count":15},{"key_as_string":"2017-02-08T18:01:00.000Z","key":1486576860000,"doc_count":10},{"key_as_string":"2017-02-08T18:02:00.000Z","key":1486576920000,"doc_count":11},{"key_as_string":"2017-02-08T18:03:00.000Z","key":1486576980000,"doc_count":11},{"key_as_string":"2017-02-08T18:04:00.000Z","key":1486577040000,"doc_count":13},{"key_as_string":"2017-02-08T18:05:00.000Z","key":1486577100000,"doc_count":11},{"key_as_string":"2017-02-08T18:06:00.000Z","key":1486577160000,"doc_count":10},{"key_as_string":"2017-02-08T18:07:00.000Z","key":1486577220000,"doc_count":12},{"key_as_string":"2017-02-08T18:08:00.000Z","key":1486577280000,"doc_count":13},{"key_as_string":"2017-02-08T18:09:00.000Z","key":1486577340000,"doc_count":8},{"key_as_string":"2017-02-08T18:10:00.000Z","key":1486577400000,"doc_count":6},{"key_as_string":"2017-02-08T18:11:00.000Z","key":1486577460000,"doc_count":17},{"key_as_string":"2017-02-08T18:12:00.000Z","key":1486577520000,"doc_count":11},{"key_as_string":"2017-02-08T18:13:00.000Z","key":1486577580000,"doc_count":13},{"key_as_string":"2017-02-08T18:14:00.000Z","key":1486577640000,"doc_count":10},{"key_as_string":"2017-02-08T18:15:00.000Z","key":1486577700000,"doc_count":11},{"key_as_string":"2017-02-08T18:16:00.000Z","key":1486577760000,"doc_count":13},{"key_as_string":"2017-02-08T18:17:00.000Z","key":1486577820000,"doc_count":12},{"key_as_string":"2017-02-08T18:18:00.000Z","key":1486577880000,"doc_count":15},{"key_as_string":"2017-02-08T18:19:00.000Z","key":1486577940000,"doc_count":10},{"key_as_string":"2017-02-08T18:20:00.000Z","key":1486578000000,"doc_count":10},{"key_as_string":"2017-02-08T18:21:00.000Z","key":1486578060000,"doc_count":12},{"key_as_string":"2017-02-08T18:22:00.000Z","key":1486578120000,"doc_count":16},{"key_as_string":"2017-02-08T18:23:00.000Z","key":1486578180000,"doc_count":7},{"key_as_string":"2017-02-08T18:24:00.000Z","key":1486578240000,"doc_count":12},{"key_as_string":"2017-02-08T18:25:00.000Z","key":1486578300000,"doc_count":10},{"key_as_string":"2017-02-08T18:26:00.000Z","key":1486578360000,"doc_count":8},{"key_as_string":"2017-02-08T18:27:00.000Z","key":1486578420000,"doc_count":15},{"key_as_string":"2017-02-08T18:28:00.000Z","key":1486578480000,"doc_count":10},{"key_as_string":"2017-02-08T18:29:00.000Z","key":1486578540000,"doc_count":13},{"key_as_string":"2017-02-08T18:30:00.000Z","key":1486578600000,"doc_count":10},{"key_as_string":"2017-02-08T18:31:00.000Z","key":1486578660000,"doc_count":11},{"key_as_string":"2017-02-08T18:32:00.000Z","key":1486578720000,"doc_count":12},{"key_as_string":"2017-02-08T18:33:00.000Z","key":1486578780000,"doc_count":10},{"key_as_string":"2017-02-08T18:34:00.000Z","key":1486578840000,"doc_count":15},{"key_as_string":"2017-02-08T18:35:00.000Z","key":1486578900000,"doc_count":13},{"key_as_string":"2017-02-08T18:36:00.000Z","key":1486578960000,"doc_count":13},{"key_as_string":"2017-02-08T18:37:00.000Z","key":1486579020000,"doc_count":11},{"key_as_string":"2017-02-08T18:38:00.000Z","key":1486579080000,"doc_count":9},{"key_as_string":"2017-02-08T18:39:00.000Z","key":1486579140000,"doc_count":14},{"key_as_string":"2017-02-08T18:40:00.000Z","key":1486579200000,"doc_count":12},{"key_as_string":"2017-02-08T18:41:00.000Z","key":1486579260000,"doc_count":14},{"key_as_string":"2017-02-08T18:42:00.000Z","key":1486579320000,"doc_count":13},{"key_as_string":"2017-02-08T18:43:00.000Z","key":1486579380000,"doc_count":11},{"key_as_string":"2017-02-08T18:44:00.000Z","key":1486579440000,"doc_count":11},{"key_as_string":"2017-02-08T18:45:00.000Z","key":1486579500000,"doc_count":11},{"key_as_string":"2017-02-08T18:46:00.000Z","key":1486579560000,"doc_count":9},{"key_as_string":"2017-02-08T18:47:00.000Z","key":1486579620000,"doc_count":14},{"key_as_string":"2017-02-08T18:48:00.000Z","key":1486579680000,"doc_count":9},{"key_as_string":"2017-02-08T18:49:00.000Z","key":1486579740000,"doc_count":13},{"key_as_string":"2017-02-08T18:50:00.000Z","key":1486579800000,"doc_count":16},{"key_as_string":"2017-02-08T18:51:00.000Z","key":1486579860000,"doc_count":10},{"key_as_string":"2017-02-08T18:52:00.000Z","key":1486579920000,"doc_count":9},{"key_as_string":"2017-02-08T18:53:00.000Z","key":1486579980000,"doc_count":9},{"key_as_string":"2017-02-08T18:54:00.000Z","key":1486580040000,"doc_count":11},{"key_as_string":"2017-02-08T18:55:00.000Z","key":1486580100000,"doc_count":13},{"key_as_string":"2017-02-08T18:56:00.000Z","key":1486580160000,"doc_count":11},{"key_as_string":"2017-02-08T18:57:00.000Z","key":1486580220000,"doc_count":16},{"key_as_string":"2017-02-08T18:58:00.000Z","key":1486580280000,"doc_count":11},{"key_as_string":"2017-02-08T18:59:00.000Z","key":1486580340000,"doc_count":14},{"key_as_string":"2017-02-08T19:00:00.000Z","key":1486580400000,"doc_count":14},{"key_as_string":"2017-02-08T19:01:00.000Z","key":1486580460000,"doc_count":7},{"key_as_string":"2017-02-08T19:02:00.000Z","key":1486580520000,"doc_count":12},{"key_as_string":"2017-02-08T19:03:00.000Z","key":1486580580000,"doc_count":12},{"key_as_string":"2017-02-08T19:04:00.000Z","key":1486580640000,"doc_count":8},{"key_as_string":"2017-02-08T19:05:00.000Z","key":1486580700000,"doc_count":7},{"key_as_string":"2017-02-08T19:06:00.000Z","key":1486580760000,"doc_count":17},{"key_as_string":"2017-02-08T19:07:00.000Z","key":1486580820000,"doc_count":8},{"key_as_string":"2017-02-08T19:08:00.000Z","key":1486580880000,"doc_count":15},{"key_as_string":"2017-02-08T19:09:00.000Z","key":1486580940000,"doc_count":11},{"key_as_string":"2017-02-08T19:10:00.000Z","key":1486581000000,"doc_count":9},{"key_as_string":"2017-02-08T19:11:00.000Z","key":1486581060000,"doc_count":14},{"key_as_string":"2017-02-08T19:12:00.000Z","key":1486581120000,"doc_count":15},{"key_as_string":"2017-02-08T19:13:00.000Z","key":1486581180000,"doc_count":12},{"key_as_string":"2017-02-08T19:14:00.000Z","key":1486581240000,"doc_count":7},{"key_as_string":"2017-02-08T19:15:00.000Z","key":1486581300000,"doc_count":10},{"key_as_string":"2017-02-08T19:16:00.000Z","key":1486581360000,"doc_count":13},{"key_as_string":"2017-02-08T19:17:00.000Z","key":1486581420000,"doc_count":13},{"key_as_string":"2017-02-08T19:18:00.000Z","key":1486581480000,"doc_count":8},{"key_as_string":"2017-02-08T19:19:00.000Z","key":1486581540000,"doc_count":9},{"key_as_string":"2017-02-08T19:20:00.000Z","key":1486581600000,"doc_count":12},{"key_as_string":"2017-02-08T19:21:00.000Z","key":1486581660000,"doc_count":8},{"key_as_string":"2017-02-08T19:22:00.000Z","key":1486581720000,"doc_count":16},{"key_as_string":"2017-02-08T19:23:00.000Z","key":1486581780000,"doc_count":10},{"key_as_string":"2017-02-08T19:24:00.000Z","key":1486581840000,"doc_count":12},{"key_as_string":"2017-02-08T19:25:00.000Z","key":1486581900000,"doc_count":11},{"key_as_string":"2017-02-08T19:26:00.000Z","key":1486581960000,"doc_count":8},{"key_as_string":"2017-02-08T19:27:00.000Z","key":1486582020000,"doc_count":11},{"key_as_string":"2017-02-08T19:28:00.000Z","key":1486582080000,"doc_count":19},{"key_as_string":"2017-02-08T19:29:00.000Z","key":1486582140000,"doc_count":8},{"key_as_string":"2017-02-08T19:30:00.000Z","key":1486582200000,"doc_count":13},{"key_as_string":"2017-02-08T19:31:00.000Z","key":1486582260000,"doc_count":17},{"key_as_string":"2017-02-08T19:32:00.000Z","key":1486582320000,"doc_count":11},{"key_as_string":"2017-02-08T19:33:00.000Z","key":1486582380000,"doc_count":9},{"key_as_string":"2017-02-08T19:34:00.000Z","key":1486582440000,"doc_count":9},{"key_as_string":"2017-02-08T19:35:00.000Z","key":1486582500000,"doc_count":18},{"key_as_string":"2017-02-08T19:36:00.000Z","key":1486582560000,"doc_count":8},{"key_as_string":"2017-02-08T19:37:00.000Z","key":1486582620000,"doc_count":9},{"key_as_string":"2017-02-08T19:38:00.000Z","key":1486582680000,"doc_count":12},{"key_as_string":"2017-02-08T19:39:00.000Z","key":1486582740000,"doc_count":11},{"key_as_string":"2017-02-08T19:40:00.000Z","key":1486582800000,"doc_count":13},{"key_as_string":"2017-02-08T19:41:00.000Z","key":1486582860000,"doc_count":8},{"key_as_string":"2017-02-08T19:42:00.000Z","key":1486582920000,"doc_count":10},{"key_as_string":"2017-02-08T19:43:00.000Z","key":1486582980000,"doc_count":10},{"key_as_string":"2017-02-08T19:44:00.000Z","key":1486583040000,"doc_count":15},{"key_as_string":"2017-02-08T19:45:00.000Z","key":1486583100000,"doc_count":7},{"key_as_string":"2017-02-08T19:46:00.000Z","key":1486583160000,"doc_count":12},{"key_as_string":"2017-02-08T19:47:00.000Z","key":1486583220000,"doc_count":8},{"key_as_string":"2017-02-08T19:48:00.000Z","key":1486583280000,"doc_count":11},{"key_as_string":"2017-02-08T19:49:00.000Z","key":1486583340000,"doc_count":10},{"key_as_string":"2017-02-08T19:50:00.000Z","key":1486583400000,"doc_count":10},{"key_as_string":"2017-02-08T19:51:00.000Z","key":1486583460000,"doc_count":9},{"key_as_string":"2017-02-08T19:52:00.000Z","key":1486583520000,"doc_count":13},{"key_as_string":"2017-02-08T19:53:00.000Z","key":1486583580000,"doc_count":6},{"key_as_string":"2017-02-08T19:54:00.000Z","key":1486583640000,"doc_count":16},{"key_as_string":"2017-02-08T19:55:00.000Z","key":1486583700000,"doc_count":15},{"key_as_string":"2017-02-08T19:56:00.000Z","key":1486583760000,"doc_count":14},{"key_as_string":"2017-02-08T19:57:00.000Z","key":1486583820000,"doc_count":6},{"key_as_string":"2017-02-08T19:58:00.000Z","key":1486583880000,"doc_count":13},{"key_as_string":"2017-02-08T19:59:00.000Z","key":1486583940000,"doc_count":11},{"key_as_string":"2017-02-08T20:00:00.000Z","key":1486584000000,"doc_count":9},{"key_as_string":"2017-02-08T20:01:00.000Z","key":1486584060000,"doc_count":11},{"key_as_string":"2017-02-08T20:02:00.000Z","key":1486584120000,"doc_count":16},{"key_as_string":"2017-02-08T20:03:00.000Z","key":1486584180000,"doc_count":8},{"key_as_string":"2017-02-08T20:04:00.000Z","key":1486584240000,"doc_count":9},{"key_as_string":"2017-02-08T20:05:00.000Z","key":1486584300000,"doc_count":8},{"key_as_string":"2017-02-08T20:06:00.000Z","key":1486584360000,"doc_count":13},{"key_as_string":"2017-02-08T20:07:00.000Z","key":1486584420000,"doc_count":15},{"key_as_string":"2017-02-08T20:08:00.000Z","key":1486584480000,"doc_count":7},{"key_as_string":"2017-02-08T20:09:00.000Z","key":1486584540000,"doc_count":13},{"key_as_string":"2017-02-08T20:10:00.000Z","key":1486584600000,"doc_count":12},{"key_as_string":"2017-02-08T20:11:00.000Z","key":1486584660000,"doc_count":6},{"key_as_string":"2017-02-08T20:12:00.000Z","key":1486584720000,"doc_count":9},{"key_as_string":"2017-02-08T20:13:00.000Z","key":1486584780000,"doc_count":12},{"key_as_string":"2017-02-08T20:14:00.000Z","key":1486584840000,"doc_count":13},{"key_as_string":"2017-02-08T20:15:00.000Z","key":1486584900000,"doc_count":13},{"key_as_string":"2017-02-08T20:16:00.000Z","key":1486584960000,"doc_count":10},{"key_as_string":"2017-02-08T20:17:00.000Z","key":1486585020000,"doc_count":8},{"key_as_string":"2017-02-08T20:18:00.000Z","key":1486585080000,"doc_count":12},{"key_as_string":"2017-02-08T20:19:00.000Z","key":1486585140000,"doc_count":12},{"key_as_string":"2017-02-08T20:20:00.000Z","key":1486585200000,"doc_count":14},{"key_as_string":"2017-02-08T20:21:00.000Z","key":1486585260000,"doc_count":11},{"key_as_string":"2017-02-08T20:22:00.000Z","key":1486585320000,"doc_count":13},{"key_as_string":"2017-02-08T20:23:00.000Z","key":1486585380000,"doc_count":13},{"key_as_string":"2017-02-08T20:24:00.000Z","key":1486585440000,"doc_count":9},{"key_as_string":"2017-02-08T20:25:00.000Z","key":1486585500000,"doc_count":11},{"key_as_string":"2017-02-08T20:26:00.000Z","key":1486585560000,"doc_count":9},{"key_as_string":"2017-02-08T20:27:00.000Z","key":1486585620000,"doc_count":20},{"key_as_string":"2017-02-08T20:28:00.000Z","key":1486585680000,"doc_count":6},{"key_as_string":"2017-02-08T20:29:00.000Z","key":1486585740000,"doc_count":12},{"key_as_string":"2017-02-08T20:30:00.000Z","key":1486585800000,"doc_count":11},{"key_as_string":"2017-02-08T20:31:00.000Z","key":1486585860000,"doc_count":9},{"key_as_string":"2017-02-08T20:32:00.000Z","key":1486585920000,"doc_count":12},{"key_as_string":"2017-02-08T20:33:00.000Z","key":1486585980000,"doc_count":8},{"key_as_string":"2017-02-08T20:34:00.000Z","key":1486586040000,"doc_count":12},{"key_as_string":"2017-02-08T20:35:00.000Z","key":1486586100000,"doc_count":11},{"key_as_string":"2017-02-08T20:36:00.000Z","key":1486586160000,"doc_count":9},{"key_as_string":"2017-02-08T20:37:00.000Z","key":1486586220000,"doc_count":14},{"key_as_string":"2017-02-08T20:38:00.000Z","key":1486586280000,"doc_count":12},{"key_as_string":"2017-02-08T20:39:00.000Z","key":1486586340000,"doc_count":8},{"key_as_string":"2017-02-08T20:40:00.000Z","key":1486586400000,"doc_count":11},{"key_as_string":"2017-02-08T20:41:00.000Z","key":1486586460000,"doc_count":10},{"key_as_string":"2017-02-08T20:42:00.000Z","key":1486586520000,"doc_count":8},{"key_as_string":"2017-02-08T20:43:00.000Z","key":1486586580000,"doc_count":11},{"key_as_string":"2017-02-08T20:44:00.000Z","key":1486586640000,"doc_count":16},{"key_as_string":"2017-02-08T20:45:00.000Z","key":1486586700000,"doc_count":9},{"key_as_string":"2017-02-08T20:46:00.000Z","key":1486586760000,"doc_count":9},{"key_as_string":"2017-02-08T20:47:00.000Z","key":1486586820000,"doc_count":8},{"key_as_string":"2017-02-08T20:48:00.000Z","key":1486586880000,"doc_count":13},{"key_as_string":"2017-02-08T20:49:00.000Z","key":1486586940000,"doc_count":10},{"key_as_string":"2017-02-08T20:50:00.000Z","key":1486587000000,"doc_count":9},{"key_as_string":"2017-02-08T20:51:00.000Z","key":1486587060000,"doc_count":10},{"key_as_string":"2017-02-08T20:52:00.000Z","key":1486587120000,"doc_count":10},{"key_as_string":"2017-02-08T20:53:00.000Z","key":1486587180000,"doc_count":10},{"key_as_string":"2017-02-08T20:54:00.000Z","key":1486587240000,"doc_count":12},{"key_as_string":"2017-02-08T20:55:00.000Z","key":1486587300000,"doc_count":8},{"key_as_string":"2017-02-08T20:56:00.000Z","key":1486587360000,"doc_count":10},{"key_as_string":"2017-02-08T20:57:00.000Z","key":1486587420000,"doc_count":11},{"key_as_string":"2017-02-08T20:58:00.000Z","key":1486587480000,"doc_count":9},{"key_as_string":"2017-02-08T20:59:00.000Z","key":1486587540000,"doc_count":15},{"key_as_string":"2017-02-08T21:00:00.000Z","key":1486587600000,"doc_count":12},{"key_as_string":"2017-02-08T21:01:00.000Z","key":1486587660000,"doc_count":13},{"key_as_string":"2017-02-08T21:02:00.000Z","key":1486587720000,"doc_count":10},{"key_as_string":"2017-02-08T21:03:00.000Z","key":1486587780000,"doc_count":7},{"key_as_string":"2017-02-08T21:04:00.000Z","key":1486587840000,"doc_count":9},{"key_as_string":"2017-02-08T21:05:00.000Z","key":1486587900000,"doc_count":13},{"key_as_string":"2017-02-08T21:06:00.000Z","key":1486587960000,"doc_count":9},{"key_as_string":"2017-02-08T21:07:00.000Z","key":1486588020000,"doc_count":12},{"key_as_string":"2017-02-08T21:08:00.000Z","key":1486588080000,"doc_count":6},{"key_as_string":"2017-02-08T21:09:00.000Z","key":1486588140000,"doc_count":17},{"key_as_string":"2017-02-08T21:10:00.000Z","key":1486588200000,"doc_count":4},{"key_as_string":"2017-02-08T21:11:00.000Z","key":1486588260000,"doc_count":13},{"key_as_string":"2017-02-08T21:12:00.000Z","key":1486588320000,"doc_count":9},{"key_as_string":"2017-02-08T21:13:00.000Z","key":1486588380000,"doc_count":13},{"key_as_string":"2017-02-08T21:14:00.000Z","key":1486588440000,"doc_count":10},{"key_as_string":"2017-02-08T21:15:00.000Z","key":1486588500000,"doc_count":8},{"key_as_string":"2017-02-08T21:16:00.000Z","key":1486588560000,"doc_count":8},{"key_as_string":"2017-02-08T21:17:00.000Z","key":1486588620000,"doc_count":10},{"key_as_string":"2017-02-08T21:18:00.000Z","key":1486588680000,"doc_count":12},{"key_as_string":"2017-02-08T21:19:00.000Z","key":1486588740000,"doc_count":10},{"key_as_string":"2017-02-08T21:20:00.000Z","key":1486588800000,"doc_count":13},{"key_as_string":"2017-02-08T21:21:00.000Z","key":1486588860000,"doc_count":14},{"key_as_string":"2017-02-08T21:22:00.000Z","key":1486588920000,"doc_count":9},{"key_as_string":"2017-02-08T21:23:00.000Z","key":1486588980000,"doc_count":9},{"key_as_string":"2017-02-08T21:24:00.000Z","key":1486589040000,"doc_count":12},{"key_as_string":"2017-02-08T21:25:00.000Z","key":1486589100000,"doc_count":12},{"key_as_string":"2017-02-08T21:26:00.000Z","key":1486589160000,"doc_count":19},{"key_as_string":"2017-02-08T21:27:00.000Z","key":1486589220000,"doc_count":6},{"key_as_string":"2017-02-08T21:28:00.000Z","key":1486589280000,"doc_count":15},{"key_as_string":"2017-02-08T21:29:00.000Z","key":1486589340000,"doc_count":10},{"key_as_string":"2017-02-08T21:30:00.000Z","key":1486589400000,"doc_count":9},{"key_as_string":"2017-02-08T21:31:00.000Z","key":1486589460000,"doc_count":9},{"key_as_string":"2017-02-08T21:32:00.000Z","key":1486589520000,"doc_count":12},{"key_as_string":"2017-02-08T21:33:00.000Z","key":1486589580000,"doc_count":10},{"key_as_string":"2017-02-08T21:34:00.000Z","key":1486589640000,"doc_count":11},{"key_as_string":"2017-02-08T21:35:00.000Z","key":1486589700000,"doc_count":10},{"key_as_string":"2017-02-08T21:36:00.000Z","key":1486589760000,"doc_count":15},{"key_as_string":"2017-02-08T21:37:00.000Z","key":1486589820000,"doc_count":8},{"key_as_string":"2017-02-08T21:38:00.000Z","key":1486589880000,"doc_count":11},{"key_as_string":"2017-02-08T21:39:00.000Z","key":1486589940000,"doc_count":9},{"key_as_string":"2017-02-08T21:40:00.000Z","key":1486590000000,"doc_count":9},{"key_as_string":"2017-02-08T21:41:00.000Z","key":1486590060000,"doc_count":10},{"key_as_string":"2017-02-08T21:42:00.000Z","key":1486590120000,"doc_count":8},{"key_as_string":"2017-02-08T21:43:00.000Z","key":1486590180000,"doc_count":13},{"key_as_string":"2017-02-08T21:44:00.000Z","key":1486590240000,"doc_count":13},{"key_as_string":"2017-02-08T21:45:00.000Z","key":1486590300000,"doc_count":15},{"key_as_string":"2017-02-08T21:46:00.000Z","key":1486590360000,"doc_count":8},{"key_as_string":"2017-02-08T21:47:00.000Z","key":1486590420000,"doc_count":7},{"key_as_string":"2017-02-08T21:48:00.000Z","key":1486590480000,"doc_count":14},{"key_as_string":"2017-02-08T21:49:00.000Z","key":1486590540000,"doc_count":8},{"key_as_string":"2017-02-08T21:50:00.000Z","key":1486590600000,"doc_count":11},{"key_as_string":"2017-02-08T21:51:00.000Z","key":1486590660000,"doc_count":12},{"key_as_string":"2017-02-08T21:52:00.000Z","key":1486590720000,"doc_count":9},{"key_as_string":"2017-02-08T21:53:00.000Z","key":1486590780000,"doc_count":11},{"key_as_string":"2017-02-08T21:54:00.000Z","key":1486590840000,"doc_count":9},{"key_as_string":"2017-02-08T21:55:00.000Z","key":1486590900000,"doc_count":7},{"key_as_string":"2017-02-08T21:56:00.000Z","key":1486590960000,"doc_count":13},{"key_as_string":"2017-02-08T21:57:00.000Z","key":1486591020000,"doc_count":10},{"key_as_string":"2017-02-08T21:58:00.000Z","key":1486591080000,"doc_count":12},{"key_as_string":"2017-02-08T21:59:00.000Z","key":1486591140000,"doc_count":15},{"key_as_string":"2017-02-08T22:00:00.000Z","key":1486591200000,"doc_count":13},{"key_as_string":"2017-02-08T22:01:00.000Z","key":1486591260000,"doc_count":14},{"key_as_string":"2017-02-08T22:02:00.000Z","key":1486591320000,"doc_count":7},{"key_as_string":"2017-02-08T22:03:00.000Z","key":1486591380000,"doc_count":12},{"key_as_string":"2017-02-08T22:04:00.000Z","key":1486591440000,"doc_count":11},{"key_as_string":"2017-02-08T22:05:00.000Z","key":1486591500000,"doc_count":11},{"key_as_string":"2017-02-08T22:06:00.000Z","key":1486591560000,"doc_count":11},{"key_as_string":"2017-02-08T22:07:00.000Z","key":1486591620000,"doc_count":8},{"key_as_string":"2017-02-08T22:08:00.000Z","key":1486591680000,"doc_count":14},{"key_as_string":"2017-02-08T22:09:00.000Z","key":1486591740000,"doc_count":11},{"key_as_string":"2017-02-08T22:10:00.000Z","key":1486591800000,"doc_count":16},{"key_as_string":"2017-02-08T22:11:00.000Z","key":1486591860000,"doc_count":8},{"key_as_string":"2017-02-08T22:12:00.000Z","key":1486591920000,"doc_count":15},{"key_as_string":"2017-02-08T22:13:00.000Z","key":1486591980000,"doc_count":11},{"key_as_string":"2017-02-08T22:14:00.000Z","key":1486592040000,"doc_count":6},{"key_as_string":"2017-02-08T22:15:00.000Z","key":1486592100000,"doc_count":11},{"key_as_string":"2017-02-08T22:16:00.000Z","key":1486592160000,"doc_count":9},{"key_as_string":"2017-02-08T22:17:00.000Z","key":1486592220000,"doc_count":15},{"key_as_string":"2017-02-08T22:18:00.000Z","key":1486592280000,"doc_count":10},{"key_as_string":"2017-02-08T22:19:00.000Z","key":1486592340000,"doc_count":7},{"key_as_string":"2017-02-08T22:20:00.000Z","key":1486592400000,"doc_count":11},{"key_as_string":"2017-02-08T22:21:00.000Z","key":1486592460000,"doc_count":8},{"key_as_string":"2017-02-08T22:22:00.000Z","key":1486592520000,"doc_count":11},{"key_as_string":"2017-02-08T22:23:00.000Z","key":1486592580000,"doc_count":5},{"key_as_string":"2017-02-08T22:24:00.000Z","key":1486592640000,"doc_count":13},{"key_as_string":"2017-02-08T22:25:00.000Z","key":1486592700000,"doc_count":11},{"key_as_string":"2017-02-08T22:26:00.000Z","key":1486592760000,"doc_count":13},{"key_as_string":"2017-02-08T22:27:00.000Z","key":1486592820000,"doc_count":15},{"key_as_string":"2017-02-08T22:28:00.000Z","key":1486592880000,"doc_count":12},{"key_as_string":"2017-02-08T22:29:00.000Z","key":1486592940000,"doc_count":7},{"key_as_string":"2017-02-08T22:30:00.000Z","key":1486593000000,"doc_count":14},{"key_as_string":"2017-02-08T22:31:00.000Z","key":1486593060000,"doc_count":13},{"key_as_string":"2017-02-08T22:32:00.000Z","key":1486593120000,"doc_count":13},{"key_as_string":"2017-02-08T22:33:00.000Z","key":1486593180000,"doc_count":9},{"key_as_string":"2017-02-08T22:34:00.000Z","key":1486593240000,"doc_count":13},{"key_as_string":"2017-02-08T22:35:00.000Z","key":1486593300000,"doc_count":14},{"key_as_string":"2017-02-08T22:36:00.000Z","key":1486593360000,"doc_count":9},{"key_as_string":"2017-02-08T22:37:00.000Z","key":1486593420000,"doc_count":11},{"key_as_string":"2017-02-08T22:38:00.000Z","key":1486593480000,"doc_count":8},{"key_as_string":"2017-02-08T22:39:00.000Z","key":1486593540000,"doc_count":14},{"key_as_string":"2017-02-08T22:40:00.000Z","key":1486593600000,"doc_count":16},{"key_as_string":"2017-02-08T22:41:00.000Z","key":1486593660000,"doc_count":7},{"key_as_string":"2017-02-08T22:42:00.000Z","key":1486593720000,"doc_count":14},{"key_as_string":"2017-02-08T22:43:00.000Z","key":1486593780000,"doc_count":10},{"key_as_string":"2017-02-08T22:44:00.000Z","key":1486593840000,"doc_count":12},{"key_as_string":"2017-02-08T22:45:00.000Z","key":1486593900000,"doc_count":7},{"key_as_string":"2017-02-08T22:46:00.000Z","key":1486593960000,"doc_count":13},{"key_as_string":"2017-02-08T22:47:00.000Z","key":1486594020000,"doc_count":11},{"key_as_string":"2017-02-08T22:48:00.000Z","key":1486594080000,"doc_count":18},{"key_as_string":"2017-02-08T22:49:00.000Z","key":1486594140000,"doc_count":4},{"key_as_string":"2017-02-08T22:50:00.000Z","key":1486594200000,"doc_count":5},{"key_as_string":"2017-02-08T22:51:00.000Z","key":1486594260000,"doc_count":16},{"key_as_string":"2017-02-08T22:52:00.000Z","key":1486594320000,"doc_count":8},{"key_as_string":"2017-02-08T22:53:00.000Z","key":1486594380000,"doc_count":11},{"key_as_string":"2017-02-08T22:54:00.000Z","key":1486594440000,"doc_count":10},{"key_as_string":"2017-02-08T22:55:00.000Z","key":1486594500000,"doc_count":10},{"key_as_string":"2017-02-08T22:56:00.000Z","key":1486594560000,"doc_count":15},{"key_as_string":"2017-02-08T22:57:00.000Z","key":1486594620000,"doc_count":7},{"key_as_string":"2017-02-08T22:58:00.000Z","key":1486594680000,"doc_count":14},{"key_as_string":"2017-02-08T22:59:00.000Z","key":1486594740000,"doc_count":14},{"key_as_string":"2017-02-08T23:00:00.000Z","key":1486594800000,"doc_count":6},{"key_as_string":"2017-02-08T23:01:00.000Z","key":1486594860000,"doc_count":9},{"key_as_string":"2017-02-08T23:02:00.000Z","key":1486594920000,"doc_count":14},{"key_as_string":"2017-02-08T23:03:00.000Z","key":1486594980000,"doc_count":9},{"key_as_string":"2017-02-08T23:04:00.000Z","key":1486595040000,"doc_count":11},{"key_as_string":"2017-02-08T23:05:00.000Z","key":1486595100000,"doc_count":14},{"key_as_string":"2017-02-08T23:06:00.000Z","key":1486595160000,"doc_count":6},{"key_as_string":"2017-02-08T23:07:00.000Z","key":1486595220000,"doc_count":10},{"key_as_string":"2017-02-08T23:08:00.000Z","key":1486595280000,"doc_count":9},{"key_as_string":"2017-02-08T23:09:00.000Z","key":1486595340000,"doc_count":5},{"key_as_string":"2017-02-08T23:10:00.000Z","key":1486595400000,"doc_count":12},{"key_as_string":"2017-02-08T23:11:00.000Z","key":1486595460000,"doc_count":11},{"key_as_string":"2017-02-08T23:12:00.000Z","key":1486595520000,"doc_count":8},{"key_as_string":"2017-02-08T23:13:00.000Z","key":1486595580000,"doc_count":10},{"key_as_string":"2017-02-08T23:14:00.000Z","key":1486595640000,"doc_count":14},{"key_as_string":"2017-02-08T23:15:00.000Z","key":1486595700000,"doc_count":6},{"key_as_string":"2017-02-08T23:16:00.000Z","key":1486595760000,"doc_count":9},{"key_as_string":"2017-02-08T23:17:00.000Z","key":1486595820000,"doc_count":12},{"key_as_string":"2017-02-08T23:18:00.000Z","key":1486595880000,"doc_count":12},{"key_as_string":"2017-02-08T23:19:00.000Z","key":1486595940000,"doc_count":5},{"key_as_string":"2017-02-08T23:20:00.000Z","key":1486596000000,"doc_count":12},{"key_as_string":"2017-02-08T23:21:00.000Z","key":1486596060000,"doc_count":10},{"key_as_string":"2017-02-08T23:22:00.000Z","key":1486596120000,"doc_count":13},{"key_as_string":"2017-02-08T23:23:00.000Z","key":1486596180000,"doc_count":10},{"key_as_string":"2017-02-08T23:24:00.000Z","key":1486596240000,"doc_count":8},{"key_as_string":"2017-02-08T23:25:00.000Z","key":1486596300000,"doc_count":11},{"key_as_string":"2017-02-08T23:26:00.000Z","key":1486596360000,"doc_count":11},{"key_as_string":"2017-02-08T23:27:00.000Z","key":1486596420000,"doc_count":5},{"key_as_string":"2017-02-08T23:28:00.000Z","key":1486596480000,"doc_count":9},{"key_as_string":"2017-02-08T23:29:00.000Z","key":1486596540000,"doc_count":12},{"key_as_string":"2017-02-08T23:30:00.000Z","key":1486596600000,"doc_count":7},{"key_as_string":"2017-02-08T23:31:00.000Z","key":1486596660000,"doc_count":14},{"key_as_string":"2017-02-08T23:32:00.000Z","key":1486596720000,"doc_count":12},{"key_as_string":"2017-02-08T23:33:00.000Z","key":1486596780000,"doc_count":12},{"key_as_string":"2017-02-08T23:34:00.000Z","key":1486596840000,"doc_count":18},{"key_as_string":"2017-02-08T23:35:00.000Z","key":1486596900000,"doc_count":6},{"key_as_string":"2017-02-08T23:36:00.000Z","key":1486596960000,"doc_count":7},{"key_as_string":"2017-02-08T23:37:00.000Z","key":1486597020000,"doc_count":12},{"key_as_string":"2017-02-08T23:38:00.000Z","key":1486597080000,"doc_count":11},{"key_as_string":"2017-02-08T23:39:00.000Z","key":1486597140000,"doc_count":7},{"key_as_string":"2017-02-08T23:40:00.000Z","key":1486597200000,"doc_count":12},{"key_as_string":"2017-02-08T23:41:00.000Z","key":1486597260000,"doc_count":16},{"key_as_string":"2017-02-08T23:42:00.000Z","key":1486597320000,"doc_count":8},{"key_as_string":"2017-02-08T23:43:00.000Z","key":1486597380000,"doc_count":11},{"key_as_string":"2017-02-08T23:44:00.000Z","key":1486597440000,"doc_count":8},{"key_as_string":"2017-02-08T23:45:00.000Z","key":1486597500000,"doc_count":11},{"key_as_string":"2017-02-08T23:46:00.000Z","key":1486597560000,"doc_count":11},{"key_as_string":"2017-02-08T23:47:00.000Z","key":1486597620000,"doc_count":9},{"key_as_string":"2017-02-08T23:48:00.000Z","key":1486597680000,"doc_count":7},{"key_as_string":"2017-02-08T23:49:00.000Z","key":1486597740000,"doc_count":11},{"key_as_string":"2017-02-08T23:50:00.000Z","key":1486597800000,"doc_count":11},{"key_as_string":"2017-02-08T23:51:00.000Z","key":1486597860000,"doc_count":8},{"key_as_string":"2017-02-08T23:52:00.000Z","key":1486597920000,"doc_count":11},{"key_as_string":"2017-02-08T23:53:00.000Z","key":1486597980000,"doc_count":10},{"key_as_string":"2017-02-08T23:54:00.000Z","key":1486598040000,"doc_count":11},{"key_as_string":"2017-02-08T23:55:00.000Z","key":1486598100000,"doc_count":9},{"key_as_string":"2017-02-08T23:56:00.000Z","key":1486598160000,"doc_count":6},{"key_as_string":"2017-02-08T23:57:00.000Z","key":1486598220000,"doc_count":13},{"key_as_string":"2017-02-08T23:58:00.000Z","key":1486598280000,"doc_count":10},{"key_as_string":"2017-02-08T23:59:00.000Z","key":1486598340000,"doc_count":9},{"key_as_string":"2017-02-09T00:00:00.000Z","key":1486598400000,"doc_count":14},{"key_as_string":"2017-02-09T00:01:00.000Z","key":1486598460000,"doc_count":7},{"key_as_string":"2017-02-09T00:02:00.000Z","key":1486598520000,"doc_count":11},{"key_as_string":"2017-02-09T00:03:00.000Z","key":1486598580000,"doc_count":14},{"key_as_string":"2017-02-09T00:04:00.000Z","key":1486598640000,"doc_count":7},{"key_as_string":"2017-02-09T00:05:00.000Z","key":1486598700000,"doc_count":15},{"key_as_string":"2017-02-09T00:06:00.000Z","key":1486598760000,"doc_count":4},{"key_as_string":"2017-02-09T00:07:00.000Z","key":1486598820000,"doc_count":14},{"key_as_string":"2017-02-09T00:08:00.000Z","key":1486598880000,"doc_count":11},{"key_as_string":"2017-02-09T00:09:00.000Z","key":1486598940000,"doc_count":8},{"key_as_string":"2017-02-09T00:10:00.000Z","key":1486599000000,"doc_count":9},{"key_as_string":"2017-02-09T00:11:00.000Z","key":1486599060000,"doc_count":13},{"key_as_string":"2017-02-09T00:12:00.000Z","key":1486599120000,"doc_count":8},{"key_as_string":"2017-02-09T00:13:00.000Z","key":1486599180000,"doc_count":9},{"key_as_string":"2017-02-09T00:14:00.000Z","key":1486599240000,"doc_count":14},{"key_as_string":"2017-02-09T00:15:00.000Z","key":1486599300000,"doc_count":13},{"key_as_string":"2017-02-09T00:16:00.000Z","key":1486599360000,"doc_count":8},{"key_as_string":"2017-02-09T00:17:00.000Z","key":1486599420000,"doc_count":6},{"key_as_string":"2017-02-09T00:18:00.000Z","key":1486599480000,"doc_count":14},{"key_as_string":"2017-02-09T00:19:00.000Z","key":1486599540000,"doc_count":15},{"key_as_string":"2017-02-09T00:20:00.000Z","key":1486599600000,"doc_count":9},{"key_as_string":"2017-02-09T00:21:00.000Z","key":1486599660000,"doc_count":6},{"key_as_string":"2017-02-09T00:22:00.000Z","key":1486599720000,"doc_count":9},{"key_as_string":"2017-02-09T00:23:00.000Z","key":1486599780000,"doc_count":15},{"key_as_string":"2017-02-09T00:24:00.000Z","key":1486599840000,"doc_count":10},{"key_as_string":"2017-02-09T00:25:00.000Z","key":1486599900000,"doc_count":9},{"key_as_string":"2017-02-09T00:26:00.000Z","key":1486599960000,"doc_count":11},{"key_as_string":"2017-02-09T00:27:00.000Z","key":1486600020000,"doc_count":10},{"key_as_string":"2017-02-09T00:28:00.000Z","key":1486600080000,"doc_count":11},{"key_as_string":"2017-02-09T00:29:00.000Z","key":1486600140000,"doc_count":8},{"key_as_string":"2017-02-09T00:30:00.000Z","key":1486600200000,"doc_count":5},{"key_as_string":"2017-02-09T00:31:00.000Z","key":1486600260000,"doc_count":15},{"key_as_string":"2017-02-09T00:32:00.000Z","key":1486600320000,"doc_count":5},{"key_as_string":"2017-02-09T00:33:00.000Z","key":1486600380000,"doc_count":12},{"key_as_string":"2017-02-09T00:34:00.000Z","key":1486600440000,"doc_count":11},{"key_as_string":"2017-02-09T00:35:00.000Z","key":1486600500000,"doc_count":8},{"key_as_string":"2017-02-09T00:36:00.000Z","key":1486600560000,"doc_count":10},{"key_as_string":"2017-02-09T00:37:00.000Z","key":1486600620000,"doc_count":11},{"key_as_string":"2017-02-09T00:38:00.000Z","key":1486600680000,"doc_count":11},{"key_as_string":"2017-02-09T00:39:00.000Z","key":1486600740000,"doc_count":7},{"key_as_string":"2017-02-09T00:40:00.000Z","key":1486600800000,"doc_count":8},{"key_as_string":"2017-02-09T00:41:00.000Z","key":1486600860000,"doc_count":10},{"key_as_string":"2017-02-09T00:42:00.000Z","key":1486600920000,"doc_count":11},{"key_as_string":"2017-02-09T00:43:00.000Z","key":1486600980000,"doc_count":10},{"key_as_string":"2017-02-09T00:44:00.000Z","key":1486601040000,"doc_count":9},{"key_as_string":"2017-02-09T00:45:00.000Z","key":1486601100000,"doc_count":10},{"key_as_string":"2017-02-09T00:46:00.000Z","key":1486601160000,"doc_count":9},{"key_as_string":"2017-02-09T00:47:00.000Z","key":1486601220000,"doc_count":9},{"key_as_string":"2017-02-09T00:48:00.000Z","key":1486601280000,"doc_count":11},{"key_as_string":"2017-02-09T00:49:00.000Z","key":1486601340000,"doc_count":6},{"key_as_string":"2017-02-09T00:50:00.000Z","key":1486601400000,"doc_count":13},{"key_as_string":"2017-02-09T00:51:00.000Z","key":1486601460000,"doc_count":8},{"key_as_string":"2017-02-09T00:52:00.000Z","key":1486601520000,"doc_count":9},{"key_as_string":"2017-02-09T00:53:00.000Z","key":1486601580000,"doc_count":12},{"key_as_string":"2017-02-09T00:54:00.000Z","key":1486601640000,"doc_count":11},{"key_as_string":"2017-02-09T00:55:00.000Z","key":1486601700000,"doc_count":7},{"key_as_string":"2017-02-09T00:56:00.000Z","key":1486601760000,"doc_count":16},{"key_as_string":"2017-02-09T00:57:00.000Z","key":1486601820000,"doc_count":11},{"key_as_string":"2017-02-09T00:58:00.000Z","key":1486601880000,"doc_count":7},{"key_as_string":"2017-02-09T00:59:00.000Z","key":1486601940000,"doc_count":9},{"key_as_string":"2017-02-09T01:00:00.000Z","key":1486602000000,"doc_count":14},{"key_as_string":"2017-02-09T01:01:00.000Z","key":1486602060000,"doc_count":9},{"key_as_string":"2017-02-09T01:02:00.000Z","key":1486602120000,"doc_count":15},{"key_as_string":"2017-02-09T01:03:00.000Z","key":1486602180000,"doc_count":10},{"key_as_string":"2017-02-09T01:04:00.000Z","key":1486602240000,"doc_count":14},{"key_as_string":"2017-02-09T01:05:00.000Z","key":1486602300000,"doc_count":8},{"key_as_string":"2017-02-09T01:06:00.000Z","key":1486602360000,"doc_count":13},{"key_as_string":"2017-02-09T01:07:00.000Z","key":1486602420000,"doc_count":10},{"key_as_string":"2017-02-09T01:08:00.000Z","key":1486602480000,"doc_count":7},{"key_as_string":"2017-02-09T01:09:00.000Z","key":1486602540000,"doc_count":15},{"key_as_string":"2017-02-09T01:10:00.000Z","key":1486602600000,"doc_count":10},{"key_as_string":"2017-02-09T01:11:00.000Z","key":1486602660000,"doc_count":7},{"key_as_string":"2017-02-09T01:12:00.000Z","key":1486602720000,"doc_count":14},{"key_as_string":"2017-02-09T01:13:00.000Z","key":1486602780000,"doc_count":11},{"key_as_string":"2017-02-09T01:14:00.000Z","key":1486602840000,"doc_count":10},{"key_as_string":"2017-02-09T01:15:00.000Z","key":1486602900000,"doc_count":12},{"key_as_string":"2017-02-09T01:16:00.000Z","key":1486602960000,"doc_count":10},{"key_as_string":"2017-02-09T01:17:00.000Z","key":1486603020000,"doc_count":9},{"key_as_string":"2017-02-09T01:18:00.000Z","key":1486603080000,"doc_count":12},{"key_as_string":"2017-02-09T01:19:00.000Z","key":1486603140000,"doc_count":6},{"key_as_string":"2017-02-09T01:20:00.000Z","key":1486603200000,"doc_count":12},{"key_as_string":"2017-02-09T01:21:00.000Z","key":1486603260000,"doc_count":7},{"key_as_string":"2017-02-09T01:22:00.000Z","key":1486603320000,"doc_count":11},{"key_as_string":"2017-02-09T01:23:00.000Z","key":1486603380000,"doc_count":6},{"key_as_string":"2017-02-09T01:24:00.000Z","key":1486603440000,"doc_count":14},{"key_as_string":"2017-02-09T01:25:00.000Z","key":1486603500000,"doc_count":6},{"key_as_string":"2017-02-09T01:26:00.000Z","key":1486603560000,"doc_count":9},{"key_as_string":"2017-02-09T01:27:00.000Z","key":1486603620000,"doc_count":14},{"key_as_string":"2017-02-09T01:28:00.000Z","key":1486603680000,"doc_count":9},{"key_as_string":"2017-02-09T01:29:00.000Z","key":1486603740000,"doc_count":13},{"key_as_string":"2017-02-09T01:30:00.000Z","key":1486603800000,"doc_count":9},{"key_as_string":"2017-02-09T01:31:00.000Z","key":1486603860000,"doc_count":11},{"key_as_string":"2017-02-09T01:32:00.000Z","key":1486603920000,"doc_count":13},{"key_as_string":"2017-02-09T01:33:00.000Z","key":1486603980000,"doc_count":6},{"key_as_string":"2017-02-09T01:34:00.000Z","key":1486604040000,"doc_count":13},{"key_as_string":"2017-02-09T01:35:00.000Z","key":1486604100000,"doc_count":7},{"key_as_string":"2017-02-09T01:36:00.000Z","key":1486604160000,"doc_count":11},{"key_as_string":"2017-02-09T01:37:00.000Z","key":1486604220000,"doc_count":10},{"key_as_string":"2017-02-09T01:38:00.000Z","key":1486604280000,"doc_count":6},{"key_as_string":"2017-02-09T01:39:00.000Z","key":1486604340000,"doc_count":14},{"key_as_string":"2017-02-09T01:40:00.000Z","key":1486604400000,"doc_count":5},{"key_as_string":"2017-02-09T01:41:00.000Z","key":1486604460000,"doc_count":8},{"key_as_string":"2017-02-09T01:42:00.000Z","key":1486604520000,"doc_count":12},{"key_as_string":"2017-02-09T01:43:00.000Z","key":1486604580000,"doc_count":16},{"key_as_string":"2017-02-09T01:44:00.000Z","key":1486604640000,"doc_count":8},{"key_as_string":"2017-02-09T01:45:00.000Z","key":1486604700000,"doc_count":5},{"key_as_string":"2017-02-09T01:46:00.000Z","key":1486604760000,"doc_count":13},{"key_as_string":"2017-02-09T01:47:00.000Z","key":1486604820000,"doc_count":7},{"key_as_string":"2017-02-09T01:48:00.000Z","key":1486604880000,"doc_count":8},{"key_as_string":"2017-02-09T01:49:00.000Z","key":1486604940000,"doc_count":17},{"key_as_string":"2017-02-09T01:50:00.000Z","key":1486605000000,"doc_count":7},{"key_as_string":"2017-02-09T01:51:00.000Z","key":1486605060000,"doc_count":10},{"key_as_string":"2017-02-09T01:52:00.000Z","key":1486605120000,"doc_count":13},{"key_as_string":"2017-02-09T01:53:00.000Z","key":1486605180000,"doc_count":15},{"key_as_string":"2017-02-09T01:54:00.000Z","key":1486605240000,"doc_count":12},{"key_as_string":"2017-02-09T01:55:00.000Z","key":1486605300000,"doc_count":6},{"key_as_string":"2017-02-09T01:56:00.000Z","key":1486605360000,"doc_count":14},{"key_as_string":"2017-02-09T01:57:00.000Z","key":1486605420000,"doc_count":13},{"key_as_string":"2017-02-09T01:58:00.000Z","key":1486605480000,"doc_count":12},{"key_as_string":"2017-02-09T01:59:00.000Z","key":1486605540000,"doc_count":11},{"key_as_string":"2017-02-09T02:00:00.000Z","key":1486605600000,"doc_count":12},{"key_as_string":"2017-02-09T02:01:00.000Z","key":1486605660000,"doc_count":15},{"key_as_string":"2017-02-09T02:02:00.000Z","key":1486605720000,"doc_count":6},{"key_as_string":"2017-02-09T02:03:00.000Z","key":1486605780000,"doc_count":15},{"key_as_string":"2017-02-09T02:04:00.000Z","key":1486605840000,"doc_count":4},{"key_as_string":"2017-02-09T02:05:00.000Z","key":1486605900000,"doc_count":14},{"key_as_string":"2017-02-09T02:06:00.000Z","key":1486605960000,"doc_count":15},{"key_as_string":"2017-02-09T02:07:00.000Z","key":1486606020000,"doc_count":8},{"key_as_string":"2017-02-09T02:08:00.000Z","key":1486606080000,"doc_count":9},{"key_as_string":"2017-02-09T02:09:00.000Z","key":1486606140000,"doc_count":13},{"key_as_string":"2017-02-09T02:10:00.000Z","key":1486606200000,"doc_count":8},{"key_as_string":"2017-02-09T02:11:00.000Z","key":1486606260000,"doc_count":12},{"key_as_string":"2017-02-09T02:12:00.000Z","key":1486606320000,"doc_count":12},{"key_as_string":"2017-02-09T02:13:00.000Z","key":1486606380000,"doc_count":16},{"key_as_string":"2017-02-09T02:14:00.000Z","key":1486606440000,"doc_count":9},{"key_as_string":"2017-02-09T02:15:00.000Z","key":1486606500000,"doc_count":10},{"key_as_string":"2017-02-09T02:16:00.000Z","key":1486606560000,"doc_count":12},{"key_as_string":"2017-02-09T02:17:00.000Z","key":1486606620000,"doc_count":11},{"key_as_string":"2017-02-09T02:18:00.000Z","key":1486606680000,"doc_count":10},{"key_as_string":"2017-02-09T02:19:00.000Z","key":1486606740000,"doc_count":10},{"key_as_string":"2017-02-09T02:20:00.000Z","key":1486606800000,"doc_count":9},{"key_as_string":"2017-02-09T02:21:00.000Z","key":1486606860000,"doc_count":16},{"key_as_string":"2017-02-09T02:22:00.000Z","key":1486606920000,"doc_count":11},{"key_as_string":"2017-02-09T02:23:00.000Z","key":1486606980000,"doc_count":10},{"key_as_string":"2017-02-09T02:24:00.000Z","key":1486607040000,"doc_count":10},{"key_as_string":"2017-02-09T02:25:00.000Z","key":1486607100000,"doc_count":11},{"key_as_string":"2017-02-09T02:26:00.000Z","key":1486607160000,"doc_count":7},{"key_as_string":"2017-02-09T02:27:00.000Z","key":1486607220000,"doc_count":12},{"key_as_string":"2017-02-09T02:28:00.000Z","key":1486607280000,"doc_count":9},{"key_as_string":"2017-02-09T02:29:00.000Z","key":1486607340000,"doc_count":6},{"key_as_string":"2017-02-09T02:30:00.000Z","key":1486607400000,"doc_count":10},{"key_as_string":"2017-02-09T02:31:00.000Z","key":1486607460000,"doc_count":8},{"key_as_string":"2017-02-09T02:32:00.000Z","key":1486607520000,"doc_count":14},{"key_as_string":"2017-02-09T02:33:00.000Z","key":1486607580000,"doc_count":9},{"key_as_string":"2017-02-09T02:34:00.000Z","key":1486607640000,"doc_count":10},{"key_as_string":"2017-02-09T02:35:00.000Z","key":1486607700000,"doc_count":9},{"key_as_string":"2017-02-09T02:36:00.000Z","key":1486607760000,"doc_count":11},{"key_as_string":"2017-02-09T02:37:00.000Z","key":1486607820000,"doc_count":11},{"key_as_string":"2017-02-09T02:38:00.000Z","key":1486607880000,"doc_count":6},{"key_as_string":"2017-02-09T02:39:00.000Z","key":1486607940000,"doc_count":20},{"key_as_string":"2017-02-09T02:40:00.000Z","key":1486608000000,"doc_count":11},{"key_as_string":"2017-02-09T02:41:00.000Z","key":1486608060000,"doc_count":11},{"key_as_string":"2017-02-09T02:42:00.000Z","key":1486608120000,"doc_count":11},{"key_as_string":"2017-02-09T02:43:00.000Z","key":1486608180000,"doc_count":5},{"key_as_string":"2017-02-09T02:44:00.000Z","key":1486608240000,"doc_count":10},{"key_as_string":"2017-02-09T02:45:00.000Z","key":1486608300000,"doc_count":10},{"key_as_string":"2017-02-09T02:46:00.000Z","key":1486608360000,"doc_count":14},{"key_as_string":"2017-02-09T02:47:00.000Z","key":1486608420000,"doc_count":10},{"key_as_string":"2017-02-09T02:48:00.000Z","key":1486608480000,"doc_count":13},{"key_as_string":"2017-02-09T02:49:00.000Z","key":1486608540000,"doc_count":9},{"key_as_string":"2017-02-09T02:50:00.000Z","key":1486608600000,"doc_count":10},{"key_as_string":"2017-02-09T02:51:00.000Z","key":1486608660000,"doc_count":9},{"key_as_string":"2017-02-09T02:52:00.000Z","key":1486608720000,"doc_count":13},{"key_as_string":"2017-02-09T02:53:00.000Z","key":1486608780000,"doc_count":16},{"key_as_string":"2017-02-09T02:54:00.000Z","key":1486608840000,"doc_count":5},{"key_as_string":"2017-02-09T02:55:00.000Z","key":1486608900000,"doc_count":8},{"key_as_string":"2017-02-09T02:56:00.000Z","key":1486608960000,"doc_count":13},{"key_as_string":"2017-02-09T02:57:00.000Z","key":1486609020000,"doc_count":10},{"key_as_string":"2017-02-09T02:58:00.000Z","key":1486609080000,"doc_count":11},{"key_as_string":"2017-02-09T02:59:00.000Z","key":1486609140000,"doc_count":9},{"key_as_string":"2017-02-09T03:00:00.000Z","key":1486609200000,"doc_count":14},{"key_as_string":"2017-02-09T03:01:00.000Z","key":1486609260000,"doc_count":7},{"key_as_string":"2017-02-09T03:02:00.000Z","key":1486609320000,"doc_count":9},{"key_as_string":"2017-02-09T03:03:00.000Z","key":1486609380000,"doc_count":11},{"key_as_string":"2017-02-09T03:04:00.000Z","key":1486609440000,"doc_count":21},{"key_as_string":"2017-02-09T03:05:00.000Z","key":1486609500000,"doc_count":12},{"key_as_string":"2017-02-09T03:06:00.000Z","key":1486609560000,"doc_count":14},{"key_as_string":"2017-02-09T03:07:00.000Z","key":1486609620000,"doc_count":9},{"key_as_string":"2017-02-09T03:08:00.000Z","key":1486609680000,"doc_count":12},{"key_as_string":"2017-02-09T03:09:00.000Z","key":1486609740000,"doc_count":12},{"key_as_string":"2017-02-09T03:10:00.000Z","key":1486609800000,"doc_count":10},{"key_as_string":"2017-02-09T03:11:00.000Z","key":1486609860000,"doc_count":7},{"key_as_string":"2017-02-09T03:12:00.000Z","key":1486609920000,"doc_count":11},{"key_as_string":"2017-02-09T03:13:00.000Z","key":1486609980000,"doc_count":9},{"key_as_string":"2017-02-09T03:14:00.000Z","key":1486610040000,"doc_count":5},{"key_as_string":"2017-02-09T03:15:00.000Z","key":1486610100000,"doc_count":14},{"key_as_string":"2017-02-09T03:16:00.000Z","key":1486610160000,"doc_count":7},{"key_as_string":"2017-02-09T03:17:00.000Z","key":1486610220000,"doc_count":11},{"key_as_string":"2017-02-09T03:18:00.000Z","key":1486610280000,"doc_count":14},{"key_as_string":"2017-02-09T03:19:00.000Z","key":1486610340000,"doc_count":12},{"key_as_string":"2017-02-09T03:20:00.000Z","key":1486610400000,"doc_count":7},{"key_as_string":"2017-02-09T03:21:00.000Z","key":1486610460000,"doc_count":15},{"key_as_string":"2017-02-09T03:22:00.000Z","key":1486610520000,"doc_count":12},{"key_as_string":"2017-02-09T03:23:00.000Z","key":1486610580000,"doc_count":10},{"key_as_string":"2017-02-09T03:24:00.000Z","key":1486610640000,"doc_count":6},{"key_as_string":"2017-02-09T03:25:00.000Z","key":1486610700000,"doc_count":11},{"key_as_string":"2017-02-09T03:26:00.000Z","key":1486610760000,"doc_count":10},{"key_as_string":"2017-02-09T03:27:00.000Z","key":1486610820000,"doc_count":11},{"key_as_string":"2017-02-09T03:28:00.000Z","key":1486610880000,"doc_count":12},{"key_as_string":"2017-02-09T03:29:00.000Z","key":1486610940000,"doc_count":11},{"key_as_string":"2017-02-09T03:30:00.000Z","key":1486611000000,"doc_count":15},{"key_as_string":"2017-02-09T03:31:00.000Z","key":1486611060000,"doc_count":10},{"key_as_string":"2017-02-09T03:32:00.000Z","key":1486611120000,"doc_count":14},{"key_as_string":"2017-02-09T03:33:00.000Z","key":1486611180000,"doc_count":10},{"key_as_string":"2017-02-09T03:34:00.000Z","key":1486611240000,"doc_count":10},{"key_as_string":"2017-02-09T03:35:00.000Z","key":1486611300000,"doc_count":15},{"key_as_string":"2017-02-09T03:36:00.000Z","key":1486611360000,"doc_count":8},{"key_as_string":"2017-02-09T03:37:00.000Z","key":1486611420000,"doc_count":8},{"key_as_string":"2017-02-09T03:38:00.000Z","key":1486611480000,"doc_count":15},{"key_as_string":"2017-02-09T03:39:00.000Z","key":1486611540000,"doc_count":7},{"key_as_string":"2017-02-09T03:40:00.000Z","key":1486611600000,"doc_count":15},{"key_as_string":"2017-02-09T03:41:00.000Z","key":1486611660000,"doc_count":7},{"key_as_string":"2017-02-09T03:42:00.000Z","key":1486611720000,"doc_count":14},{"key_as_string":"2017-02-09T03:43:00.000Z","key":1486611780000,"doc_count":8},{"key_as_string":"2017-02-09T03:44:00.000Z","key":1486611840000,"doc_count":9},{"key_as_string":"2017-02-09T03:45:00.000Z","key":1486611900000,"doc_count":11},{"key_as_string":"2017-02-09T03:46:00.000Z","key":1486611960000,"doc_count":15},{"key_as_string":"2017-02-09T03:47:00.000Z","key":1486612020000,"doc_count":6},{"key_as_string":"2017-02-09T03:48:00.000Z","key":1486612080000,"doc_count":9},{"key_as_string":"2017-02-09T03:49:00.000Z","key":1486612140000,"doc_count":13},{"key_as_string":"2017-02-09T03:50:00.000Z","key":1486612200000,"doc_count":9},{"key_as_string":"2017-02-09T03:51:00.000Z","key":1486612260000,"doc_count":11},{"key_as_string":"2017-02-09T03:52:00.000Z","key":1486612320000,"doc_count":12},{"key_as_string":"2017-02-09T03:53:00.000Z","key":1486612380000,"doc_count":13},{"key_as_string":"2017-02-09T03:54:00.000Z","key":1486612440000,"doc_count":7},{"key_as_string":"2017-02-09T03:55:00.000Z","key":1486612500000,"doc_count":14},{"key_as_string":"2017-02-09T03:56:00.000Z","key":1486612560000,"doc_count":10},{"key_as_string":"2017-02-09T03:57:00.000Z","key":1486612620000,"doc_count":8},{"key_as_string":"2017-02-09T03:58:00.000Z","key":1486612680000,"doc_count":6},{"key_as_string":"2017-02-09T03:59:00.000Z","key":1486612740000,"doc_count":11},{"key_as_string":"2017-02-09T04:00:00.000Z","key":1486612800000,"doc_count":8},{"key_as_string":"2017-02-09T04:01:00.000Z","key":1486612860000,"doc_count":12},{"key_as_string":"2017-02-09T04:02:00.000Z","key":1486612920000,"doc_count":13},{"key_as_string":"2017-02-09T04:03:00.000Z","key":1486612980000,"doc_count":10},{"key_as_string":"2017-02-09T04:04:00.000Z","key":1486613040000,"doc_count":12},{"key_as_string":"2017-02-09T04:05:00.000Z","key":1486613100000,"doc_count":9},{"key_as_string":"2017-02-09T04:06:00.000Z","key":1486613160000,"doc_count":16},{"key_as_string":"2017-02-09T04:07:00.000Z","key":1486613220000,"doc_count":12},{"key_as_string":"2017-02-09T04:08:00.000Z","key":1486613280000,"doc_count":16},{"key_as_string":"2017-02-09T04:09:00.000Z","key":1486613340000,"doc_count":10},{"key_as_string":"2017-02-09T04:10:00.000Z","key":1486613400000,"doc_count":9},{"key_as_string":"2017-02-09T04:11:00.000Z","key":1486613460000,"doc_count":9},{"key_as_string":"2017-02-09T04:12:00.000Z","key":1486613520000,"doc_count":11},{"key_as_string":"2017-02-09T04:13:00.000Z","key":1486613580000,"doc_count":8},{"key_as_string":"2017-02-09T04:14:00.000Z","key":1486613640000,"doc_count":11},{"key_as_string":"2017-02-09T04:15:00.000Z","key":1486613700000,"doc_count":7},{"key_as_string":"2017-02-09T04:16:00.000Z","key":1486613760000,"doc_count":9},{"key_as_string":"2017-02-09T04:17:00.000Z","key":1486613820000,"doc_count":14},{"key_as_string":"2017-02-09T04:18:00.000Z","key":1486613880000,"doc_count":12},{"key_as_string":"2017-02-09T04:19:00.000Z","key":1486613940000,"doc_count":12},{"key_as_string":"2017-02-09T04:20:00.000Z","key":1486614000000,"doc_count":11},{"key_as_string":"2017-02-09T04:21:00.000Z","key":1486614060000,"doc_count":15},{"key_as_string":"2017-02-09T04:22:00.000Z","key":1486614120000,"doc_count":15},{"key_as_string":"2017-02-09T04:23:00.000Z","key":1486614180000,"doc_count":14},{"key_as_string":"2017-02-09T04:24:00.000Z","key":1486614240000,"doc_count":10},{"key_as_string":"2017-02-09T04:25:00.000Z","key":1486614300000,"doc_count":8},{"key_as_string":"2017-02-09T04:26:00.000Z","key":1486614360000,"doc_count":8},{"key_as_string":"2017-02-09T04:27:00.000Z","key":1486614420000,"doc_count":14},{"key_as_string":"2017-02-09T04:28:00.000Z","key":1486614480000,"doc_count":9},{"key_as_string":"2017-02-09T04:29:00.000Z","key":1486614540000,"doc_count":16},{"key_as_string":"2017-02-09T04:30:00.000Z","key":1486614600000,"doc_count":11},{"key_as_string":"2017-02-09T04:31:00.000Z","key":1486614660000,"doc_count":13},{"key_as_string":"2017-02-09T04:32:00.000Z","key":1486614720000,"doc_count":9},{"key_as_string":"2017-02-09T04:33:00.000Z","key":1486614780000,"doc_count":16},{"key_as_string":"2017-02-09T04:34:00.000Z","key":1486614840000,"doc_count":11},{"key_as_string":"2017-02-09T04:35:00.000Z","key":1486614900000,"doc_count":9},{"key_as_string":"2017-02-09T04:36:00.000Z","key":1486614960000,"doc_count":11},{"key_as_string":"2017-02-09T04:37:00.000Z","key":1486615020000,"doc_count":14},{"key_as_string":"2017-02-09T04:38:00.000Z","key":1486615080000,"doc_count":14},{"key_as_string":"2017-02-09T04:39:00.000Z","key":1486615140000,"doc_count":10},{"key_as_string":"2017-02-09T04:40:00.000Z","key":1486615200000,"doc_count":7},{"key_as_string":"2017-02-09T04:41:00.000Z","key":1486615260000,"doc_count":13},{"key_as_string":"2017-02-09T04:42:00.000Z","key":1486615320000,"doc_count":10},{"key_as_string":"2017-02-09T04:43:00.000Z","key":1486615380000,"doc_count":17},{"key_as_string":"2017-02-09T04:44:00.000Z","key":1486615440000,"doc_count":12},{"key_as_string":"2017-02-09T04:45:00.000Z","key":1486615500000,"doc_count":9},{"key_as_string":"2017-02-09T04:46:00.000Z","key":1486615560000,"doc_count":7},{"key_as_string":"2017-02-09T04:47:00.000Z","key":1486615620000,"doc_count":14},{"key_as_string":"2017-02-09T04:48:00.000Z","key":1486615680000,"doc_count":11},{"key_as_string":"2017-02-09T04:49:00.000Z","key":1486615740000,"doc_count":15},{"key_as_string":"2017-02-09T04:50:00.000Z","key":1486615800000,"doc_count":12},{"key_as_string":"2017-02-09T04:51:00.000Z","key":1486615860000,"doc_count":11},{"key_as_string":"2017-02-09T04:52:00.000Z","key":1486615920000,"doc_count":10},{"key_as_string":"2017-02-09T04:53:00.000Z","key":1486615980000,"doc_count":10},{"key_as_string":"2017-02-09T04:54:00.000Z","key":1486616040000,"doc_count":12},{"key_as_string":"2017-02-09T04:55:00.000Z","key":1486616100000,"doc_count":10},{"key_as_string":"2017-02-09T04:56:00.000Z","key":1486616160000,"doc_count":13},{"key_as_string":"2017-02-09T04:57:00.000Z","key":1486616220000,"doc_count":10},{"key_as_string":"2017-02-09T04:58:00.000Z","key":1486616280000,"doc_count":12},{"key_as_string":"2017-02-09T04:59:00.000Z","key":1486616340000,"doc_count":13},{"key_as_string":"2017-02-09T05:00:00.000Z","key":1486616400000,"doc_count":11},{"key_as_string":"2017-02-09T05:01:00.000Z","key":1486616460000,"doc_count":14},{"key_as_string":"2017-02-09T05:02:00.000Z","key":1486616520000,"doc_count":10},{"key_as_string":"2017-02-09T05:03:00.000Z","key":1486616580000,"doc_count":13},{"key_as_string":"2017-02-09T05:04:00.000Z","key":1486616640000,"doc_count":11},{"key_as_string":"2017-02-09T05:05:00.000Z","key":1486616700000,"doc_count":11},{"key_as_string":"2017-02-09T05:06:00.000Z","key":1486616760000,"doc_count":12},{"key_as_string":"2017-02-09T05:07:00.000Z","key":1486616820000,"doc_count":21},{"key_as_string":"2017-02-09T05:08:00.000Z","key":1486616880000,"doc_count":7},{"key_as_string":"2017-02-09T05:09:00.000Z","key":1486616940000,"doc_count":14},{"key_as_string":"2017-02-09T05:10:00.000Z","key":1486617000000,"doc_count":9},{"key_as_string":"2017-02-09T05:11:00.000Z","key":1486617060000,"doc_count":7},{"key_as_string":"2017-02-09T05:12:00.000Z","key":1486617120000,"doc_count":15},{"key_as_string":"2017-02-09T05:13:00.000Z","key":1486617180000,"doc_count":12},{"key_as_string":"2017-02-09T05:14:00.000Z","key":1486617240000,"doc_count":15},{"key_as_string":"2017-02-09T05:15:00.000Z","key":1486617300000,"doc_count":12},{"key_as_string":"2017-02-09T05:16:00.000Z","key":1486617360000,"doc_count":15},{"key_as_string":"2017-02-09T05:17:00.000Z","key":1486617420000,"doc_count":11},{"key_as_string":"2017-02-09T05:18:00.000Z","key":1486617480000,"doc_count":16},{"key_as_string":"2017-02-09T05:19:00.000Z","key":1486617540000,"doc_count":8},{"key_as_string":"2017-02-09T05:20:00.000Z","key":1486617600000,"doc_count":12},{"key_as_string":"2017-02-09T05:21:00.000Z","key":1486617660000,"doc_count":12},{"key_as_string":"2017-02-09T05:22:00.000Z","key":1486617720000,"doc_count":11},{"key_as_string":"2017-02-09T05:23:00.000Z","key":1486617780000,"doc_count":10},{"key_as_string":"2017-02-09T05:24:00.000Z","key":1486617840000,"doc_count":15},{"key_as_string":"2017-02-09T05:25:00.000Z","key":1486617900000,"doc_count":8},{"key_as_string":"2017-02-09T05:26:00.000Z","key":1486617960000,"doc_count":13},{"key_as_string":"2017-02-09T05:27:00.000Z","key":1486618020000,"doc_count":14},{"key_as_string":"2017-02-09T05:28:00.000Z","key":1486618080000,"doc_count":7},{"key_as_string":"2017-02-09T05:29:00.000Z","key":1486618140000,"doc_count":9},{"key_as_string":"2017-02-09T05:30:00.000Z","key":1486618200000,"doc_count":10},{"key_as_string":"2017-02-09T05:31:00.000Z","key":1486618260000,"doc_count":11},{"key_as_string":"2017-02-09T05:32:00.000Z","key":1486618320000,"doc_count":8},{"key_as_string":"2017-02-09T05:33:00.000Z","key":1486618380000,"doc_count":12},{"key_as_string":"2017-02-09T05:34:00.000Z","key":1486618440000,"doc_count":13},{"key_as_string":"2017-02-09T05:35:00.000Z","key":1486618500000,"doc_count":10},{"key_as_string":"2017-02-09T05:36:00.000Z","key":1486618560000,"doc_count":13},{"key_as_string":"2017-02-09T05:37:00.000Z","key":1486618620000,"doc_count":5},{"key_as_string":"2017-02-09T05:38:00.000Z","key":1486618680000,"doc_count":13},{"key_as_string":"2017-02-09T05:39:00.000Z","key":1486618740000,"doc_count":5},{"key_as_string":"2017-02-09T05:40:00.000Z","key":1486618800000,"doc_count":13},{"key_as_string":"2017-02-09T05:41:00.000Z","key":1486618860000,"doc_count":12},{"key_as_string":"2017-02-09T05:42:00.000Z","key":1486618920000,"doc_count":21},{"key_as_string":"2017-02-09T05:43:00.000Z","key":1486618980000,"doc_count":6},{"key_as_string":"2017-02-09T05:44:00.000Z","key":1486619040000,"doc_count":16},{"key_as_string":"2017-02-09T05:45:00.000Z","key":1486619100000,"doc_count":11},{"key_as_string":"2017-02-09T05:46:00.000Z","key":1486619160000,"doc_count":10},{"key_as_string":"2017-02-09T05:47:00.000Z","key":1486619220000,"doc_count":10},{"key_as_string":"2017-02-09T05:48:00.000Z","key":1486619280000,"doc_count":12},{"key_as_string":"2017-02-09T05:49:00.000Z","key":1486619340000,"doc_count":11},{"key_as_string":"2017-02-09T05:50:00.000Z","key":1486619400000,"doc_count":13},{"key_as_string":"2017-02-09T05:51:00.000Z","key":1486619460000,"doc_count":12},{"key_as_string":"2017-02-09T05:52:00.000Z","key":1486619520000,"doc_count":6},{"key_as_string":"2017-02-09T05:53:00.000Z","key":1486619580000,"doc_count":13},{"key_as_string":"2017-02-09T05:54:00.000Z","key":1486619640000,"doc_count":11},{"key_as_string":"2017-02-09T05:55:00.000Z","key":1486619700000,"doc_count":13},{"key_as_string":"2017-02-09T05:56:00.000Z","key":1486619760000,"doc_count":13},{"key_as_string":"2017-02-09T05:57:00.000Z","key":1486619820000,"doc_count":13},{"key_as_string":"2017-02-09T05:58:00.000Z","key":1486619880000,"doc_count":9},{"key_as_string":"2017-02-09T05:59:00.000Z","key":1486619940000,"doc_count":12},{"key_as_string":"2017-02-09T06:00:00.000Z","key":1486620000000,"doc_count":12},{"key_as_string":"2017-02-09T06:01:00.000Z","key":1486620060000,"doc_count":17},{"key_as_string":"2017-02-09T06:02:00.000Z","key":1486620120000,"doc_count":14},{"key_as_string":"2017-02-09T06:03:00.000Z","key":1486620180000,"doc_count":7},{"key_as_string":"2017-02-09T06:04:00.000Z","key":1486620240000,"doc_count":9},{"key_as_string":"2017-02-09T06:05:00.000Z","key":1486620300000,"doc_count":15},{"key_as_string":"2017-02-09T06:06:00.000Z","key":1486620360000,"doc_count":11},{"key_as_string":"2017-02-09T06:07:00.000Z","key":1486620420000,"doc_count":10},{"key_as_string":"2017-02-09T06:08:00.000Z","key":1486620480000,"doc_count":11},{"key_as_string":"2017-02-09T06:09:00.000Z","key":1486620540000,"doc_count":8},{"key_as_string":"2017-02-09T06:10:00.000Z","key":1486620600000,"doc_count":12},{"key_as_string":"2017-02-09T06:11:00.000Z","key":1486620660000,"doc_count":16},{"key_as_string":"2017-02-09T06:12:00.000Z","key":1486620720000,"doc_count":11},{"key_as_string":"2017-02-09T06:13:00.000Z","key":1486620780000,"doc_count":8},{"key_as_string":"2017-02-09T06:14:00.000Z","key":1486620840000,"doc_count":11},{"key_as_string":"2017-02-09T06:15:00.000Z","key":1486620900000,"doc_count":16},{"key_as_string":"2017-02-09T06:16:00.000Z","key":1486620960000,"doc_count":12},{"key_as_string":"2017-02-09T06:17:00.000Z","key":1486621020000,"doc_count":10},{"key_as_string":"2017-02-09T06:18:00.000Z","key":1486621080000,"doc_count":10},{"key_as_string":"2017-02-09T06:19:00.000Z","key":1486621140000,"doc_count":18},{"key_as_string":"2017-02-09T06:20:00.000Z","key":1486621200000,"doc_count":8},{"key_as_string":"2017-02-09T06:21:00.000Z","key":1486621260000,"doc_count":13},{"key_as_string":"2017-02-09T06:22:00.000Z","key":1486621320000,"doc_count":10},{"key_as_string":"2017-02-09T06:23:00.000Z","key":1486621380000,"doc_count":15},{"key_as_string":"2017-02-09T06:24:00.000Z","key":1486621440000,"doc_count":13},{"key_as_string":"2017-02-09T06:25:00.000Z","key":1486621500000,"doc_count":10},{"key_as_string":"2017-02-09T06:26:00.000Z","key":1486621560000,"doc_count":11},{"key_as_string":"2017-02-09T06:27:00.000Z","key":1486621620000,"doc_count":10},{"key_as_string":"2017-02-09T06:28:00.000Z","key":1486621680000,"doc_count":11},{"key_as_string":"2017-02-09T06:29:00.000Z","key":1486621740000,"doc_count":14},{"key_as_string":"2017-02-09T06:30:00.000Z","key":1486621800000,"doc_count":7},{"key_as_string":"2017-02-09T06:31:00.000Z","key":1486621860000,"doc_count":13},{"key_as_string":"2017-02-09T06:32:00.000Z","key":1486621920000,"doc_count":10},{"key_as_string":"2017-02-09T06:33:00.000Z","key":1486621980000,"doc_count":7},{"key_as_string":"2017-02-09T06:34:00.000Z","key":1486622040000,"doc_count":15},{"key_as_string":"2017-02-09T06:35:00.000Z","key":1486622100000,"doc_count":10},{"key_as_string":"2017-02-09T06:36:00.000Z","key":1486622160000,"doc_count":14},{"key_as_string":"2017-02-09T06:37:00.000Z","key":1486622220000,"doc_count":10},{"key_as_string":"2017-02-09T06:38:00.000Z","key":1486622280000,"doc_count":8},{"key_as_string":"2017-02-09T06:39:00.000Z","key":1486622340000,"doc_count":7},{"key_as_string":"2017-02-09T06:40:00.000Z","key":1486622400000,"doc_count":13},{"key_as_string":"2017-02-09T06:41:00.000Z","key":1486622460000,"doc_count":13},{"key_as_string":"2017-02-09T06:42:00.000Z","key":1486622520000,"doc_count":7},{"key_as_string":"2017-02-09T06:43:00.000Z","key":1486622580000,"doc_count":12},{"key_as_string":"2017-02-09T06:44:00.000Z","key":1486622640000,"doc_count":11},{"key_as_string":"2017-02-09T06:45:00.000Z","key":1486622700000,"doc_count":10},{"key_as_string":"2017-02-09T06:46:00.000Z","key":1486622760000,"doc_count":16},{"key_as_string":"2017-02-09T06:47:00.000Z","key":1486622820000,"doc_count":17},{"key_as_string":"2017-02-09T06:48:00.000Z","key":1486622880000,"doc_count":13},{"key_as_string":"2017-02-09T06:49:00.000Z","key":1486622940000,"doc_count":11},{"key_as_string":"2017-02-09T06:50:00.000Z","key":1486623000000,"doc_count":8},{"key_as_string":"2017-02-09T06:51:00.000Z","key":1486623060000,"doc_count":6},{"key_as_string":"2017-02-09T06:52:00.000Z","key":1486623120000,"doc_count":17},{"key_as_string":"2017-02-09T06:53:00.000Z","key":1486623180000,"doc_count":11},{"key_as_string":"2017-02-09T06:54:00.000Z","key":1486623240000,"doc_count":11},{"key_as_string":"2017-02-09T06:55:00.000Z","key":1486623300000,"doc_count":14},{"key_as_string":"2017-02-09T06:56:00.000Z","key":1486623360000,"doc_count":10},{"key_as_string":"2017-02-09T06:57:00.000Z","key":1486623420000,"doc_count":14},{"key_as_string":"2017-02-09T06:58:00.000Z","key":1486623480000,"doc_count":8},{"key_as_string":"2017-02-09T06:59:00.000Z","key":1486623540000,"doc_count":10},{"key_as_string":"2017-02-09T07:00:00.000Z","key":1486623600000,"doc_count":11},{"key_as_string":"2017-02-09T07:01:00.000Z","key":1486623660000,"doc_count":16},{"key_as_string":"2017-02-09T07:02:00.000Z","key":1486623720000,"doc_count":17},{"key_as_string":"2017-02-09T07:03:00.000Z","key":1486623780000,"doc_count":16},{"key_as_string":"2017-02-09T07:04:00.000Z","key":1486623840000,"doc_count":15},{"key_as_string":"2017-02-09T07:05:00.000Z","key":1486623900000,"doc_count":12},{"key_as_string":"2017-02-09T07:06:00.000Z","key":1486623960000,"doc_count":9},{"key_as_string":"2017-02-09T07:07:00.000Z","key":1486624020000,"doc_count":11},{"key_as_string":"2017-02-09T07:08:00.000Z","key":1486624080000,"doc_count":11},{"key_as_string":"2017-02-09T07:09:00.000Z","key":1486624140000,"doc_count":20},{"key_as_string":"2017-02-09T07:10:00.000Z","key":1486624200000,"doc_count":9},{"key_as_string":"2017-02-09T07:11:00.000Z","key":1486624260000,"doc_count":17},{"key_as_string":"2017-02-09T07:12:00.000Z","key":1486624320000,"doc_count":13},{"key_as_string":"2017-02-09T07:13:00.000Z","key":1486624380000,"doc_count":18},{"key_as_string":"2017-02-09T07:14:00.000Z","key":1486624440000,"doc_count":8},{"key_as_string":"2017-02-09T07:15:00.000Z","key":1486624500000,"doc_count":14},{"key_as_string":"2017-02-09T07:16:00.000Z","key":1486624560000,"doc_count":9},{"key_as_string":"2017-02-09T07:17:00.000Z","key":1486624620000,"doc_count":15},{"key_as_string":"2017-02-09T07:18:00.000Z","key":1486624680000,"doc_count":15},{"key_as_string":"2017-02-09T07:19:00.000Z","key":1486624740000,"doc_count":15},{"key_as_string":"2017-02-09T07:20:00.000Z","key":1486624800000,"doc_count":17},{"key_as_string":"2017-02-09T07:21:00.000Z","key":1486624860000,"doc_count":13},{"key_as_string":"2017-02-09T07:22:00.000Z","key":1486624920000,"doc_count":10},{"key_as_string":"2017-02-09T07:23:00.000Z","key":1486624980000,"doc_count":10},{"key_as_string":"2017-02-09T07:24:00.000Z","key":1486625040000,"doc_count":9},{"key_as_string":"2017-02-09T07:25:00.000Z","key":1486625100000,"doc_count":16},{"key_as_string":"2017-02-09T07:26:00.000Z","key":1486625160000,"doc_count":14},{"key_as_string":"2017-02-09T07:27:00.000Z","key":1486625220000,"doc_count":13},{"key_as_string":"2017-02-09T07:28:00.000Z","key":1486625280000,"doc_count":14},{"key_as_string":"2017-02-09T07:29:00.000Z","key":1486625340000,"doc_count":14},{"key_as_string":"2017-02-09T07:30:00.000Z","key":1486625400000,"doc_count":14},{"key_as_string":"2017-02-09T07:31:00.000Z","key":1486625460000,"doc_count":16},{"key_as_string":"2017-02-09T07:32:00.000Z","key":1486625520000,"doc_count":13},{"key_as_string":"2017-02-09T07:33:00.000Z","key":1486625580000,"doc_count":12},{"key_as_string":"2017-02-09T07:34:00.000Z","key":1486625640000,"doc_count":15},{"key_as_string":"2017-02-09T07:35:00.000Z","key":1486625700000,"doc_count":13},{"key_as_string":"2017-02-09T07:36:00.000Z","key":1486625760000,"doc_count":15},{"key_as_string":"2017-02-09T07:37:00.000Z","key":1486625820000,"doc_count":12},{"key_as_string":"2017-02-09T07:38:00.000Z","key":1486625880000,"doc_count":9},{"key_as_string":"2017-02-09T07:39:00.000Z","key":1486625940000,"doc_count":20},{"key_as_string":"2017-02-09T07:40:00.000Z","key":1486626000000,"doc_count":13},{"key_as_string":"2017-02-09T07:41:00.000Z","key":1486626060000,"doc_count":17},{"key_as_string":"2017-02-09T07:42:00.000Z","key":1486626120000,"doc_count":10},{"key_as_string":"2017-02-09T07:43:00.000Z","key":1486626180000,"doc_count":15},{"key_as_string":"2017-02-09T07:44:00.000Z","key":1486626240000,"doc_count":11},{"key_as_string":"2017-02-09T07:45:00.000Z","key":1486626300000,"doc_count":11},{"key_as_string":"2017-02-09T07:46:00.000Z","key":1486626360000,"doc_count":13},{"key_as_string":"2017-02-09T07:47:00.000Z","key":1486626420000,"doc_count":14},{"key_as_string":"2017-02-09T07:48:00.000Z","key":1486626480000,"doc_count":13},{"key_as_string":"2017-02-09T07:49:00.000Z","key":1486626540000,"doc_count":13},{"key_as_string":"2017-02-09T07:50:00.000Z","key":1486626600000,"doc_count":12},{"key_as_string":"2017-02-09T07:51:00.000Z","key":1486626660000,"doc_count":15},{"key_as_string":"2017-02-09T07:52:00.000Z","key":1486626720000,"doc_count":15},{"key_as_string":"2017-02-09T07:53:00.000Z","key":1486626780000,"doc_count":15},{"key_as_string":"2017-02-09T07:54:00.000Z","key":1486626840000,"doc_count":12},{"key_as_string":"2017-02-09T07:55:00.000Z","key":1486626900000,"doc_count":11},{"key_as_string":"2017-02-09T07:56:00.000Z","key":1486626960000,"doc_count":14},{"key_as_string":"2017-02-09T07:57:00.000Z","key":1486627020000,"doc_count":8},{"key_as_string":"2017-02-09T07:58:00.000Z","key":1486627080000,"doc_count":17},{"key_as_string":"2017-02-09T07:59:00.000Z","key":1486627140000,"doc_count":13},{"key_as_string":"2017-02-09T08:00:00.000Z","key":1486627200000,"doc_count":13},{"key_as_string":"2017-02-09T08:01:00.000Z","key":1486627260000,"doc_count":12},{"key_as_string":"2017-02-09T08:02:00.000Z","key":1486627320000,"doc_count":19},{"key_as_string":"2017-02-09T08:03:00.000Z","key":1486627380000,"doc_count":15},{"key_as_string":"2017-02-09T08:04:00.000Z","key":1486627440000,"doc_count":9},{"key_as_string":"2017-02-09T08:05:00.000Z","key":1486627500000,"doc_count":14},{"key_as_string":"2017-02-09T08:06:00.000Z","key":1486627560000,"doc_count":14},{"key_as_string":"2017-02-09T08:07:00.000Z","key":1486627620000,"doc_count":13},{"key_as_string":"2017-02-09T08:08:00.000Z","key":1486627680000,"doc_count":10},{"key_as_string":"2017-02-09T08:09:00.000Z","key":1486627740000,"doc_count":14},{"key_as_string":"2017-02-09T08:10:00.000Z","key":1486627800000,"doc_count":11},{"key_as_string":"2017-02-09T08:11:00.000Z","key":1486627860000,"doc_count":12},{"key_as_string":"2017-02-09T08:12:00.000Z","key":1486627920000,"doc_count":15},{"key_as_string":"2017-02-09T08:13:00.000Z","key":1486627980000,"doc_count":13},{"key_as_string":"2017-02-09T08:14:00.000Z","key":1486628040000,"doc_count":12},{"key_as_string":"2017-02-09T08:15:00.000Z","key":1486628100000,"doc_count":11},{"key_as_string":"2017-02-09T08:16:00.000Z","key":1486628160000,"doc_count":21},{"key_as_string":"2017-02-09T08:17:00.000Z","key":1486628220000,"doc_count":16},{"key_as_string":"2017-02-09T08:18:00.000Z","key":1486628280000,"doc_count":16},{"key_as_string":"2017-02-09T08:19:00.000Z","key":1486628340000,"doc_count":11},{"key_as_string":"2017-02-09T08:20:00.000Z","key":1486628400000,"doc_count":14},{"key_as_string":"2017-02-09T08:21:00.000Z","key":1486628460000,"doc_count":14},{"key_as_string":"2017-02-09T08:22:00.000Z","key":1486628520000,"doc_count":13},{"key_as_string":"2017-02-09T08:23:00.000Z","key":1486628580000,"doc_count":13},{"key_as_string":"2017-02-09T08:24:00.000Z","key":1486628640000,"doc_count":12},{"key_as_string":"2017-02-09T08:25:00.000Z","key":1486628700000,"doc_count":16},{"key_as_string":"2017-02-09T08:26:00.000Z","key":1486628760000,"doc_count":12},{"key_as_string":"2017-02-09T08:27:00.000Z","key":1486628820000,"doc_count":10},{"key_as_string":"2017-02-09T08:28:00.000Z","key":1486628880000,"doc_count":15},{"key_as_string":"2017-02-09T08:29:00.000Z","key":1486628940000,"doc_count":17},{"key_as_string":"2017-02-09T08:30:00.000Z","key":1486629000000,"doc_count":12},{"key_as_string":"2017-02-09T08:31:00.000Z","key":1486629060000,"doc_count":13},{"key_as_string":"2017-02-09T08:32:00.000Z","key":1486629120000,"doc_count":14},{"key_as_string":"2017-02-09T08:33:00.000Z","key":1486629180000,"doc_count":14},{"key_as_string":"2017-02-09T08:34:00.000Z","key":1486629240000,"doc_count":14},{"key_as_string":"2017-02-09T08:35:00.000Z","key":1486629300000,"doc_count":12},{"key_as_string":"2017-02-09T08:36:00.000Z","key":1486629360000,"doc_count":14},{"key_as_string":"2017-02-09T08:37:00.000Z","key":1486629420000,"doc_count":14},{"key_as_string":"2017-02-09T08:38:00.000Z","key":1486629480000,"doc_count":12},{"key_as_string":"2017-02-09T08:39:00.000Z","key":1486629540000,"doc_count":7},{"key_as_string":"2017-02-09T08:40:00.000Z","key":1486629600000,"doc_count":18},{"key_as_string":"2017-02-09T08:41:00.000Z","key":1486629660000,"doc_count":10},{"key_as_string":"2017-02-09T08:42:00.000Z","key":1486629720000,"doc_count":13},{"key_as_string":"2017-02-09T08:43:00.000Z","key":1486629780000,"doc_count":14},{"key_as_string":"2017-02-09T08:44:00.000Z","key":1486629840000,"doc_count":16},{"key_as_string":"2017-02-09T08:45:00.000Z","key":1486629900000,"doc_count":14},{"key_as_string":"2017-02-09T08:46:00.000Z","key":1486629960000,"doc_count":13},{"key_as_string":"2017-02-09T08:47:00.000Z","key":1486630020000,"doc_count":15},{"key_as_string":"2017-02-09T08:48:00.000Z","key":1486630080000,"doc_count":14},{"key_as_string":"2017-02-09T08:49:00.000Z","key":1486630140000,"doc_count":16},{"key_as_string":"2017-02-09T08:50:00.000Z","key":1486630200000,"doc_count":11},{"key_as_string":"2017-02-09T08:51:00.000Z","key":1486630260000,"doc_count":15},{"key_as_string":"2017-02-09T08:52:00.000Z","key":1486630320000,"doc_count":15},{"key_as_string":"2017-02-09T08:53:00.000Z","key":1486630380000,"doc_count":12},{"key_as_string":"2017-02-09T08:54:00.000Z","key":1486630440000,"doc_count":13},{"key_as_string":"2017-02-09T08:55:00.000Z","key":1486630500000,"doc_count":11},{"key_as_string":"2017-02-09T08:56:00.000Z","key":1486630560000,"doc_count":7},{"key_as_string":"2017-02-09T08:57:00.000Z","key":1486630620000,"doc_count":14},{"key_as_string":"2017-02-09T08:58:00.000Z","key":1486630680000,"doc_count":12},{"key_as_string":"2017-02-09T08:59:00.000Z","key":1486630740000,"doc_count":8},{"key_as_string":"2017-02-09T09:00:00.000Z","key":1486630800000,"doc_count":15},{"key_as_string":"2017-02-09T09:01:00.000Z","key":1486630860000,"doc_count":13},{"key_as_string":"2017-02-09T09:02:00.000Z","key":1486630920000,"doc_count":17},{"key_as_string":"2017-02-09T09:03:00.000Z","key":1486630980000,"doc_count":10},{"key_as_string":"2017-02-09T09:04:00.000Z","key":1486631040000,"doc_count":12},{"key_as_string":"2017-02-09T09:05:00.000Z","key":1486631100000,"doc_count":12},{"key_as_string":"2017-02-09T09:06:00.000Z","key":1486631160000,"doc_count":10},{"key_as_string":"2017-02-09T09:07:00.000Z","key":1486631220000,"doc_count":13},{"key_as_string":"2017-02-09T09:08:00.000Z","key":1486631280000,"doc_count":15},{"key_as_string":"2017-02-09T09:09:00.000Z","key":1486631340000,"doc_count":10},{"key_as_string":"2017-02-09T09:10:00.000Z","key":1486631400000,"doc_count":17},{"key_as_string":"2017-02-09T09:11:00.000Z","key":1486631460000,"doc_count":14},{"key_as_string":"2017-02-09T09:12:00.000Z","key":1486631520000,"doc_count":10},{"key_as_string":"2017-02-09T09:13:00.000Z","key":1486631580000,"doc_count":15},{"key_as_string":"2017-02-09T09:14:00.000Z","key":1486631640000,"doc_count":14},{"key_as_string":"2017-02-09T09:15:00.000Z","key":1486631700000,"doc_count":16},{"key_as_string":"2017-02-09T09:16:00.000Z","key":1486631760000,"doc_count":11},{"key_as_string":"2017-02-09T09:17:00.000Z","key":1486631820000,"doc_count":16},{"key_as_string":"2017-02-09T09:18:00.000Z","key":1486631880000,"doc_count":11},{"key_as_string":"2017-02-09T09:19:00.000Z","key":1486631940000,"doc_count":11},{"key_as_string":"2017-02-09T09:20:00.000Z","key":1486632000000,"doc_count":18},{"key_as_string":"2017-02-09T09:21:00.000Z","key":1486632060000,"doc_count":10},{"key_as_string":"2017-02-09T09:22:00.000Z","key":1486632120000,"doc_count":10},{"key_as_string":"2017-02-09T09:23:00.000Z","key":1486632180000,"doc_count":14},{"key_as_string":"2017-02-09T09:24:00.000Z","key":1486632240000,"doc_count":18},{"key_as_string":"2017-02-09T09:25:00.000Z","key":1486632300000,"doc_count":12},{"key_as_string":"2017-02-09T09:26:00.000Z","key":1486632360000,"doc_count":16},{"key_as_string":"2017-02-09T09:27:00.000Z","key":1486632420000,"doc_count":15},{"key_as_string":"2017-02-09T09:28:00.000Z","key":1486632480000,"doc_count":25},{"key_as_string":"2017-02-09T09:29:00.000Z","key":1486632540000,"doc_count":13},{"key_as_string":"2017-02-09T09:30:00.000Z","key":1486632600000,"doc_count":11},{"key_as_string":"2017-02-09T09:31:00.000Z","key":1486632660000,"doc_count":12},{"key_as_string":"2017-02-09T09:32:00.000Z","key":1486632720000,"doc_count":16},{"key_as_string":"2017-02-09T09:33:00.000Z","key":1486632780000,"doc_count":10},{"key_as_string":"2017-02-09T09:34:00.000Z","key":1486632840000,"doc_count":14},{"key_as_string":"2017-02-09T09:35:00.000Z","key":1486632900000,"doc_count":14},{"key_as_string":"2017-02-09T09:36:00.000Z","key":1486632960000,"doc_count":16},{"key_as_string":"2017-02-09T09:37:00.000Z","key":1486633020000,"doc_count":19},{"key_as_string":"2017-02-09T09:38:00.000Z","key":1486633080000,"doc_count":15},{"key_as_string":"2017-02-09T09:39:00.000Z","key":1486633140000,"doc_count":13},{"key_as_string":"2017-02-09T09:40:00.000Z","key":1486633200000,"doc_count":10},{"key_as_string":"2017-02-09T09:41:00.000Z","key":1486633260000,"doc_count":16},{"key_as_string":"2017-02-09T09:42:00.000Z","key":1486633320000,"doc_count":20},{"key_as_string":"2017-02-09T09:43:00.000Z","key":1486633380000,"doc_count":7},{"key_as_string":"2017-02-09T09:44:00.000Z","key":1486633440000,"doc_count":16},{"key_as_string":"2017-02-09T09:45:00.000Z","key":1486633500000,"doc_count":10},{"key_as_string":"2017-02-09T09:46:00.000Z","key":1486633560000,"doc_count":15},{"key_as_string":"2017-02-09T09:47:00.000Z","key":1486633620000,"doc_count":10},{"key_as_string":"2017-02-09T09:48:00.000Z","key":1486633680000,"doc_count":19},{"key_as_string":"2017-02-09T09:49:00.000Z","key":1486633740000,"doc_count":11},{"key_as_string":"2017-02-09T09:50:00.000Z","key":1486633800000,"doc_count":12},{"key_as_string":"2017-02-09T09:51:00.000Z","key":1486633860000,"doc_count":13},{"key_as_string":"2017-02-09T09:52:00.000Z","key":1486633920000,"doc_count":10},{"key_as_string":"2017-02-09T09:53:00.000Z","key":1486633980000,"doc_count":15},{"key_as_string":"2017-02-09T09:54:00.000Z","key":1486634040000,"doc_count":11},{"key_as_string":"2017-02-09T09:55:00.000Z","key":1486634100000,"doc_count":15},{"key_as_string":"2017-02-09T09:56:00.000Z","key":1486634160000,"doc_count":14},{"key_as_string":"2017-02-09T09:57:00.000Z","key":1486634220000,"doc_count":11},{"key_as_string":"2017-02-09T09:58:00.000Z","key":1486634280000,"doc_count":9},{"key_as_string":"2017-02-09T09:59:00.000Z","key":1486634340000,"doc_count":18},{"key_as_string":"2017-02-09T10:00:00.000Z","key":1486634400000,"doc_count":13},{"key_as_string":"2017-02-09T10:01:00.000Z","key":1486634460000,"doc_count":13},{"key_as_string":"2017-02-09T10:02:00.000Z","key":1486634520000,"doc_count":11},{"key_as_string":"2017-02-09T10:03:00.000Z","key":1486634580000,"doc_count":15},{"key_as_string":"2017-02-09T10:04:00.000Z","key":1486634640000,"doc_count":11},{"key_as_string":"2017-02-09T10:05:00.000Z","key":1486634700000,"doc_count":16},{"key_as_string":"2017-02-09T10:06:00.000Z","key":1486634760000,"doc_count":15},{"key_as_string":"2017-02-09T10:07:00.000Z","key":1486634820000,"doc_count":9},{"key_as_string":"2017-02-09T10:08:00.000Z","key":1486634880000,"doc_count":14},{"key_as_string":"2017-02-09T10:09:00.000Z","key":1486634940000,"doc_count":16},{"key_as_string":"2017-02-09T10:10:00.000Z","key":1486635000000,"doc_count":16},{"key_as_string":"2017-02-09T10:11:00.000Z","key":1486635060000,"doc_count":13},{"key_as_string":"2017-02-09T10:12:00.000Z","key":1486635120000,"doc_count":16},{"key_as_string":"2017-02-09T10:13:00.000Z","key":1486635180000,"doc_count":12},{"key_as_string":"2017-02-09T10:14:00.000Z","key":1486635240000,"doc_count":12},{"key_as_string":"2017-02-09T10:15:00.000Z","key":1486635300000,"doc_count":14},{"key_as_string":"2017-02-09T10:16:00.000Z","key":1486635360000,"doc_count":12},{"key_as_string":"2017-02-09T10:17:00.000Z","key":1486635420000,"doc_count":18},{"key_as_string":"2017-02-09T10:18:00.000Z","key":1486635480000,"doc_count":19},{"key_as_string":"2017-02-09T10:19:00.000Z","key":1486635540000,"doc_count":8},{"key_as_string":"2017-02-09T10:20:00.000Z","key":1486635600000,"doc_count":12},{"key_as_string":"2017-02-09T10:21:00.000Z","key":1486635660000,"doc_count":13},{"key_as_string":"2017-02-09T10:22:00.000Z","key":1486635720000,"doc_count":16},{"key_as_string":"2017-02-09T10:23:00.000Z","key":1486635780000,"doc_count":13},{"key_as_string":"2017-02-09T10:24:00.000Z","key":1486635840000,"doc_count":9},{"key_as_string":"2017-02-09T10:25:00.000Z","key":1486635900000,"doc_count":17},{"key_as_string":"2017-02-09T10:26:00.000Z","key":1486635960000,"doc_count":16},{"key_as_string":"2017-02-09T10:27:00.000Z","key":1486636020000,"doc_count":14},{"key_as_string":"2017-02-09T10:28:00.000Z","key":1486636080000,"doc_count":11},{"key_as_string":"2017-02-09T10:29:00.000Z","key":1486636140000,"doc_count":12},{"key_as_string":"2017-02-09T10:30:00.000Z","key":1486636200000,"doc_count":19},{"key_as_string":"2017-02-09T10:31:00.000Z","key":1486636260000,"doc_count":16},{"key_as_string":"2017-02-09T10:32:00.000Z","key":1486636320000,"doc_count":12},{"key_as_string":"2017-02-09T10:33:00.000Z","key":1486636380000,"doc_count":14},{"key_as_string":"2017-02-09T10:34:00.000Z","key":1486636440000,"doc_count":11},{"key_as_string":"2017-02-09T10:35:00.000Z","key":1486636500000,"doc_count":15},{"key_as_string":"2017-02-09T10:36:00.000Z","key":1486636560000,"doc_count":18},{"key_as_string":"2017-02-09T10:37:00.000Z","key":1486636620000,"doc_count":15},{"key_as_string":"2017-02-09T10:38:00.000Z","key":1486636680000,"doc_count":12},{"key_as_string":"2017-02-09T10:39:00.000Z","key":1486636740000,"doc_count":14},{"key_as_string":"2017-02-09T10:40:00.000Z","key":1486636800000,"doc_count":14},{"key_as_string":"2017-02-09T10:41:00.000Z","key":1486636860000,"doc_count":17},{"key_as_string":"2017-02-09T10:42:00.000Z","key":1486636920000,"doc_count":13},{"key_as_string":"2017-02-09T10:43:00.000Z","key":1486636980000,"doc_count":9},{"key_as_string":"2017-02-09T10:44:00.000Z","key":1486637040000,"doc_count":11},{"key_as_string":"2017-02-09T10:45:00.000Z","key":1486637100000,"doc_count":14},{"key_as_string":"2017-02-09T10:46:00.000Z","key":1486637160000,"doc_count":15},{"key_as_string":"2017-02-09T10:47:00.000Z","key":1486637220000,"doc_count":14},{"key_as_string":"2017-02-09T10:48:00.000Z","key":1486637280000,"doc_count":13},{"key_as_string":"2017-02-09T10:49:00.000Z","key":1486637340000,"doc_count":16},{"key_as_string":"2017-02-09T10:50:00.000Z","key":1486637400000,"doc_count":11},{"key_as_string":"2017-02-09T10:51:00.000Z","key":1486637460000,"doc_count":15},{"key_as_string":"2017-02-09T10:52:00.000Z","key":1486637520000,"doc_count":16},{"key_as_string":"2017-02-09T10:53:00.000Z","key":1486637580000,"doc_count":14},{"key_as_string":"2017-02-09T10:54:00.000Z","key":1486637640000,"doc_count":13},{"key_as_string":"2017-02-09T10:55:00.000Z","key":1486637700000,"doc_count":12},{"key_as_string":"2017-02-09T10:56:00.000Z","key":1486637760000,"doc_count":14},{"key_as_string":"2017-02-09T10:57:00.000Z","key":1486637820000,"doc_count":14},{"key_as_string":"2017-02-09T10:58:00.000Z","key":1486637880000,"doc_count":15},{"key_as_string":"2017-02-09T10:59:00.000Z","key":1486637940000,"doc_count":11},{"key_as_string":"2017-02-09T11:00:00.000Z","key":1486638000000,"doc_count":14},{"key_as_string":"2017-02-09T11:01:00.000Z","key":1486638060000,"doc_count":12},{"key_as_string":"2017-02-09T11:02:00.000Z","key":1486638120000,"doc_count":17},{"key_as_string":"2017-02-09T11:03:00.000Z","key":1486638180000,"doc_count":10},{"key_as_string":"2017-02-09T11:04:00.000Z","key":1486638240000,"doc_count":14},{"key_as_string":"2017-02-09T11:05:00.000Z","key":1486638300000,"doc_count":13},{"key_as_string":"2017-02-09T11:06:00.000Z","key":1486638360000,"doc_count":11},{"key_as_string":"2017-02-09T11:07:00.000Z","key":1486638420000,"doc_count":14},{"key_as_string":"2017-02-09T11:08:00.000Z","key":1486638480000,"doc_count":8},{"key_as_string":"2017-02-09T11:09:00.000Z","key":1486638540000,"doc_count":20},{"key_as_string":"2017-02-09T11:10:00.000Z","key":1486638600000,"doc_count":15},{"key_as_string":"2017-02-09T11:11:00.000Z","key":1486638660000,"doc_count":17},{"key_as_string":"2017-02-09T11:12:00.000Z","key":1486638720000,"doc_count":14},{"key_as_string":"2017-02-09T11:13:00.000Z","key":1486638780000,"doc_count":12},{"key_as_string":"2017-02-09T11:14:00.000Z","key":1486638840000,"doc_count":12},{"key_as_string":"2017-02-09T11:15:00.000Z","key":1486638900000,"doc_count":18},{"key_as_string":"2017-02-09T11:16:00.000Z","key":1486638960000,"doc_count":17},{"key_as_string":"2017-02-09T11:17:00.000Z","key":1486639020000,"doc_count":16},{"key_as_string":"2017-02-09T11:18:00.000Z","key":1486639080000,"doc_count":11},{"key_as_string":"2017-02-09T11:19:00.000Z","key":1486639140000,"doc_count":14},{"key_as_string":"2017-02-09T11:20:00.000Z","key":1486639200000,"doc_count":17},{"key_as_string":"2017-02-09T11:21:00.000Z","key":1486639260000,"doc_count":16},{"key_as_string":"2017-02-09T11:22:00.000Z","key":1486639320000,"doc_count":13},{"key_as_string":"2017-02-09T11:23:00.000Z","key":1486639380000,"doc_count":15},{"key_as_string":"2017-02-09T11:24:00.000Z","key":1486639440000,"doc_count":11},{"key_as_string":"2017-02-09T11:25:00.000Z","key":1486639500000,"doc_count":12},{"key_as_string":"2017-02-09T11:26:00.000Z","key":1486639560000,"doc_count":20},{"key_as_string":"2017-02-09T11:27:00.000Z","key":1486639620000,"doc_count":13},{"key_as_string":"2017-02-09T11:28:00.000Z","key":1486639680000,"doc_count":15},{"key_as_string":"2017-02-09T11:29:00.000Z","key":1486639740000,"doc_count":19},{"key_as_string":"2017-02-09T11:30:00.000Z","key":1486639800000,"doc_count":12},{"key_as_string":"2017-02-09T11:31:00.000Z","key":1486639860000,"doc_count":12},{"key_as_string":"2017-02-09T11:32:00.000Z","key":1486639920000,"doc_count":13},{"key_as_string":"2017-02-09T11:33:00.000Z","key":1486639980000,"doc_count":15},{"key_as_string":"2017-02-09T11:34:00.000Z","key":1486640040000,"doc_count":14},{"key_as_string":"2017-02-09T11:35:00.000Z","key":1486640100000,"doc_count":16},{"key_as_string":"2017-02-09T11:36:00.000Z","key":1486640160000,"doc_count":18},{"key_as_string":"2017-02-09T11:37:00.000Z","key":1486640220000,"doc_count":13},{"key_as_string":"2017-02-09T11:38:00.000Z","key":1486640280000,"doc_count":11},{"key_as_string":"2017-02-09T11:39:00.000Z","key":1486640340000,"doc_count":18},{"key_as_string":"2017-02-09T11:40:00.000Z","key":1486640400000,"doc_count":10},{"key_as_string":"2017-02-09T11:41:00.000Z","key":1486640460000,"doc_count":16},{"key_as_string":"2017-02-09T11:42:00.000Z","key":1486640520000,"doc_count":16},{"key_as_string":"2017-02-09T11:43:00.000Z","key":1486640580000,"doc_count":10},{"key_as_string":"2017-02-09T11:44:00.000Z","key":1486640640000,"doc_count":8},{"key_as_string":"2017-02-09T11:45:00.000Z","key":1486640700000,"doc_count":17},{"key_as_string":"2017-02-09T11:46:00.000Z","key":1486640760000,"doc_count":15},{"key_as_string":"2017-02-09T11:47:00.000Z","key":1486640820000,"doc_count":11},{"key_as_string":"2017-02-09T11:48:00.000Z","key":1486640880000,"doc_count":14},{"key_as_string":"2017-02-09T11:49:00.000Z","key":1486640940000,"doc_count":16},{"key_as_string":"2017-02-09T11:50:00.000Z","key":1486641000000,"doc_count":15},{"key_as_string":"2017-02-09T11:51:00.000Z","key":1486641060000,"doc_count":16},{"key_as_string":"2017-02-09T11:52:00.000Z","key":1486641120000,"doc_count":19},{"key_as_string":"2017-02-09T11:53:00.000Z","key":1486641180000,"doc_count":14},{"key_as_string":"2017-02-09T11:54:00.000Z","key":1486641240000,"doc_count":11},{"key_as_string":"2017-02-09T11:55:00.000Z","key":1486641300000,"doc_count":7},{"key_as_string":"2017-02-09T11:56:00.000Z","key":1486641360000,"doc_count":15},{"key_as_string":"2017-02-09T11:57:00.000Z","key":1486641420000,"doc_count":10},{"key_as_string":"2017-02-09T11:58:00.000Z","key":1486641480000,"doc_count":11},{"key_as_string":"2017-02-09T11:59:00.000Z","key":1486641540000,"doc_count":16},{"key_as_string":"2017-02-09T12:00:00.000Z","key":1486641600000,"doc_count":18},{"key_as_string":"2017-02-09T12:01:00.000Z","key":1486641660000,"doc_count":11},{"key_as_string":"2017-02-09T12:02:00.000Z","key":1486641720000,"doc_count":16},{"key_as_string":"2017-02-09T12:03:00.000Z","key":1486641780000,"doc_count":12},{"key_as_string":"2017-02-09T12:04:00.000Z","key":1486641840000,"doc_count":14},{"key_as_string":"2017-02-09T12:05:00.000Z","key":1486641900000,"doc_count":13},{"key_as_string":"2017-02-09T12:06:00.000Z","key":1486641960000,"doc_count":11},{"key_as_string":"2017-02-09T12:07:00.000Z","key":1486642020000,"doc_count":19},{"key_as_string":"2017-02-09T12:08:00.000Z","key":1486642080000,"doc_count":19},{"key_as_string":"2017-02-09T12:09:00.000Z","key":1486642140000,"doc_count":9},{"key_as_string":"2017-02-09T12:10:00.000Z","key":1486642200000,"doc_count":16},{"key_as_string":"2017-02-09T12:11:00.000Z","key":1486642260000,"doc_count":14},{"key_as_string":"2017-02-09T12:12:00.000Z","key":1486642320000,"doc_count":12},{"key_as_string":"2017-02-09T12:13:00.000Z","key":1486642380000,"doc_count":19},{"key_as_string":"2017-02-09T12:14:00.000Z","key":1486642440000,"doc_count":16},{"key_as_string":"2017-02-09T12:15:00.000Z","key":1486642500000,"doc_count":15},{"key_as_string":"2017-02-09T12:16:00.000Z","key":1486642560000,"doc_count":13},{"key_as_string":"2017-02-09T12:17:00.000Z","key":1486642620000,"doc_count":10},{"key_as_string":"2017-02-09T12:18:00.000Z","key":1486642680000,"doc_count":13},{"key_as_string":"2017-02-09T12:19:00.000Z","key":1486642740000,"doc_count":13},{"key_as_string":"2017-02-09T12:20:00.000Z","key":1486642800000,"doc_count":11},{"key_as_string":"2017-02-09T12:21:00.000Z","key":1486642860000,"doc_count":19},{"key_as_string":"2017-02-09T12:22:00.000Z","key":1486642920000,"doc_count":13},{"key_as_string":"2017-02-09T12:23:00.000Z","key":1486642980000,"doc_count":17},{"key_as_string":"2017-02-09T12:24:00.000Z","key":1486643040000,"doc_count":10},{"key_as_string":"2017-02-09T12:25:00.000Z","key":1486643100000,"doc_count":12},{"key_as_string":"2017-02-09T12:26:00.000Z","key":1486643160000,"doc_count":13},{"key_as_string":"2017-02-09T12:27:00.000Z","key":1486643220000,"doc_count":12},{"key_as_string":"2017-02-09T12:28:00.000Z","key":1486643280000,"doc_count":16},{"key_as_string":"2017-02-09T12:29:00.000Z","key":1486643340000,"doc_count":15},{"key_as_string":"2017-02-09T12:30:00.000Z","key":1486643400000,"doc_count":14},{"key_as_string":"2017-02-09T12:31:00.000Z","key":1486643460000,"doc_count":18},{"key_as_string":"2017-02-09T12:32:00.000Z","key":1486643520000,"doc_count":10},{"key_as_string":"2017-02-09T12:33:00.000Z","key":1486643580000,"doc_count":13},{"key_as_string":"2017-02-09T12:34:00.000Z","key":1486643640000,"doc_count":9},{"key_as_string":"2017-02-09T12:35:00.000Z","key":1486643700000,"doc_count":16},{"key_as_string":"2017-02-09T12:36:00.000Z","key":1486643760000,"doc_count":12},{"key_as_string":"2017-02-09T12:37:00.000Z","key":1486643820000,"doc_count":13},{"key_as_string":"2017-02-09T12:38:00.000Z","key":1486643880000,"doc_count":16},{"key_as_string":"2017-02-09T12:39:00.000Z","key":1486643940000,"doc_count":9},{"key_as_string":"2017-02-09T12:40:00.000Z","key":1486644000000,"doc_count":12},{"key_as_string":"2017-02-09T12:41:00.000Z","key":1486644060000,"doc_count":11},{"key_as_string":"2017-02-09T12:42:00.000Z","key":1486644120000,"doc_count":16},{"key_as_string":"2017-02-09T12:43:00.000Z","key":1486644180000,"doc_count":13},{"key_as_string":"2017-02-09T12:44:00.000Z","key":1486644240000,"doc_count":15},{"key_as_string":"2017-02-09T12:45:00.000Z","key":1486644300000,"doc_count":13},{"key_as_string":"2017-02-09T12:46:00.000Z","key":1486644360000,"doc_count":15},{"key_as_string":"2017-02-09T12:47:00.000Z","key":1486644420000,"doc_count":13},{"key_as_string":"2017-02-09T12:48:00.000Z","key":1486644480000,"doc_count":9},{"key_as_string":"2017-02-09T12:49:00.000Z","key":1486644540000,"doc_count":18},{"key_as_string":"2017-02-09T12:50:00.000Z","key":1486644600000,"doc_count":13},{"key_as_string":"2017-02-09T12:51:00.000Z","key":1486644660000,"doc_count":13},{"key_as_string":"2017-02-09T12:52:00.000Z","key":1486644720000,"doc_count":13},{"key_as_string":"2017-02-09T12:53:00.000Z","key":1486644780000,"doc_count":11},{"key_as_string":"2017-02-09T12:54:00.000Z","key":1486644840000,"doc_count":19},{"key_as_string":"2017-02-09T12:55:00.000Z","key":1486644900000,"doc_count":12},{"key_as_string":"2017-02-09T12:56:00.000Z","key":1486644960000,"doc_count":15},{"key_as_string":"2017-02-09T12:57:00.000Z","key":1486645020000,"doc_count":14},{"key_as_string":"2017-02-09T12:58:00.000Z","key":1486645080000,"doc_count":17},{"key_as_string":"2017-02-09T12:59:00.000Z","key":1486645140000,"doc_count":12},{"key_as_string":"2017-02-09T13:00:00.000Z","key":1486645200000,"doc_count":17},{"key_as_string":"2017-02-09T13:01:00.000Z","key":1486645260000,"doc_count":13},{"key_as_string":"2017-02-09T13:02:00.000Z","key":1486645320000,"doc_count":12},{"key_as_string":"2017-02-09T13:03:00.000Z","key":1486645380000,"doc_count":11},{"key_as_string":"2017-02-09T13:04:00.000Z","key":1486645440000,"doc_count":14},{"key_as_string":"2017-02-09T13:05:00.000Z","key":1486645500000,"doc_count":18},{"key_as_string":"2017-02-09T13:06:00.000Z","key":1486645560000,"doc_count":10},{"key_as_string":"2017-02-09T13:07:00.000Z","key":1486645620000,"doc_count":14},{"key_as_string":"2017-02-09T13:08:00.000Z","key":1486645680000,"doc_count":15},{"key_as_string":"2017-02-09T13:09:00.000Z","key":1486645740000,"doc_count":11},{"key_as_string":"2017-02-09T13:10:00.000Z","key":1486645800000,"doc_count":15},{"key_as_string":"2017-02-09T13:11:00.000Z","key":1486645860000,"doc_count":14},{"key_as_string":"2017-02-09T13:12:00.000Z","key":1486645920000,"doc_count":9},{"key_as_string":"2017-02-09T13:13:00.000Z","key":1486645980000,"doc_count":16},{"key_as_string":"2017-02-09T13:14:00.000Z","key":1486646040000,"doc_count":16},{"key_as_string":"2017-02-09T13:15:00.000Z","key":1486646100000,"doc_count":13},{"key_as_string":"2017-02-09T13:16:00.000Z","key":1486646160000,"doc_count":9},{"key_as_string":"2017-02-09T13:17:00.000Z","key":1486646220000,"doc_count":11},{"key_as_string":"2017-02-09T13:18:00.000Z","key":1486646280000,"doc_count":14},{"key_as_string":"2017-02-09T13:19:00.000Z","key":1486646340000,"doc_count":15},{"key_as_string":"2017-02-09T13:20:00.000Z","key":1486646400000,"doc_count":16},{"key_as_string":"2017-02-09T13:21:00.000Z","key":1486646460000,"doc_count":9},{"key_as_string":"2017-02-09T13:22:00.000Z","key":1486646520000,"doc_count":16},{"key_as_string":"2017-02-09T13:23:00.000Z","key":1486646580000,"doc_count":13},{"key_as_string":"2017-02-09T13:24:00.000Z","key":1486646640000,"doc_count":11},{"key_as_string":"2017-02-09T13:25:00.000Z","key":1486646700000,"doc_count":13},{"key_as_string":"2017-02-09T13:26:00.000Z","key":1486646760000,"doc_count":10},{"key_as_string":"2017-02-09T13:27:00.000Z","key":1486646820000,"doc_count":18},{"key_as_string":"2017-02-09T13:28:00.000Z","key":1486646880000,"doc_count":13},{"key_as_string":"2017-02-09T13:29:00.000Z","key":1486646940000,"doc_count":13},{"key_as_string":"2017-02-09T13:30:00.000Z","key":1486647000000,"doc_count":18},{"key_as_string":"2017-02-09T13:31:00.000Z","key":1486647060000,"doc_count":10},{"key_as_string":"2017-02-09T13:32:00.000Z","key":1486647120000,"doc_count":15},{"key_as_string":"2017-02-09T13:33:00.000Z","key":1486647180000,"doc_count":15},{"key_as_string":"2017-02-09T13:34:00.000Z","key":1486647240000,"doc_count":18},{"key_as_string":"2017-02-09T13:35:00.000Z","key":1486647300000,"doc_count":15},{"key_as_string":"2017-02-09T13:36:00.000Z","key":1486647360000,"doc_count":20},{"key_as_string":"2017-02-09T13:37:00.000Z","key":1486647420000,"doc_count":13},{"key_as_string":"2017-02-09T13:38:00.000Z","key":1486647480000,"doc_count":15},{"key_as_string":"2017-02-09T13:39:00.000Z","key":1486647540000,"doc_count":15},{"key_as_string":"2017-02-09T13:40:00.000Z","key":1486647600000,"doc_count":16},{"key_as_string":"2017-02-09T13:41:00.000Z","key":1486647660000,"doc_count":7},{"key_as_string":"2017-02-09T13:42:00.000Z","key":1486647720000,"doc_count":17},{"key_as_string":"2017-02-09T13:43:00.000Z","key":1486647780000,"doc_count":12},{"key_as_string":"2017-02-09T13:44:00.000Z","key":1486647840000,"doc_count":15},{"key_as_string":"2017-02-09T13:45:00.000Z","key":1486647900000,"doc_count":16},{"key_as_string":"2017-02-09T13:46:00.000Z","key":1486647960000,"doc_count":14},{"key_as_string":"2017-02-09T13:47:00.000Z","key":1486648020000,"doc_count":18},{"key_as_string":"2017-02-09T13:48:00.000Z","key":1486648080000,"doc_count":17},{"key_as_string":"2017-02-09T13:49:00.000Z","key":1486648140000,"doc_count":16},{"key_as_string":"2017-02-09T13:50:00.000Z","key":1486648200000,"doc_count":9},{"key_as_string":"2017-02-09T13:51:00.000Z","key":1486648260000,"doc_count":14},{"key_as_string":"2017-02-09T13:52:00.000Z","key":1486648320000,"doc_count":14},{"key_as_string":"2017-02-09T13:53:00.000Z","key":1486648380000,"doc_count":20},{"key_as_string":"2017-02-09T13:54:00.000Z","key":1486648440000,"doc_count":9},{"key_as_string":"2017-02-09T13:55:00.000Z","key":1486648500000,"doc_count":12},{"key_as_string":"2017-02-09T13:56:00.000Z","key":1486648560000,"doc_count":15},{"key_as_string":"2017-02-09T13:57:00.000Z","key":1486648620000,"doc_count":11},{"key_as_string":"2017-02-09T13:58:00.000Z","key":1486648680000,"doc_count":15},{"key_as_string":"2017-02-09T13:59:00.000Z","key":1486648740000,"doc_count":13},{"key_as_string":"2017-02-09T14:00:00.000Z","key":1486648800000,"doc_count":10},{"key_as_string":"2017-02-09T14:01:00.000Z","key":1486648860000,"doc_count":14},{"key_as_string":"2017-02-09T14:02:00.000Z","key":1486648920000,"doc_count":14},{"key_as_string":"2017-02-09T14:03:00.000Z","key":1486648980000,"doc_count":16},{"key_as_string":"2017-02-09T14:04:00.000Z","key":1486649040000,"doc_count":12},{"key_as_string":"2017-02-09T14:05:00.000Z","key":1486649100000,"doc_count":9},{"key_as_string":"2017-02-09T14:06:00.000Z","key":1486649160000,"doc_count":11},{"key_as_string":"2017-02-09T14:07:00.000Z","key":1486649220000,"doc_count":15},{"key_as_string":"2017-02-09T14:08:00.000Z","key":1486649280000,"doc_count":12},{"key_as_string":"2017-02-09T14:09:00.000Z","key":1486649340000,"doc_count":19},{"key_as_string":"2017-02-09T14:10:00.000Z","key":1486649400000,"doc_count":14},{"key_as_string":"2017-02-09T14:11:00.000Z","key":1486649460000,"doc_count":17},{"key_as_string":"2017-02-09T14:12:00.000Z","key":1486649520000,"doc_count":7},{"key_as_string":"2017-02-09T14:13:00.000Z","key":1486649580000,"doc_count":20},{"key_as_string":"2017-02-09T14:14:00.000Z","key":1486649640000,"doc_count":9},{"key_as_string":"2017-02-09T14:15:00.000Z","key":1486649700000,"doc_count":17},{"key_as_string":"2017-02-09T14:16:00.000Z","key":1486649760000,"doc_count":16},{"key_as_string":"2017-02-09T14:17:00.000Z","key":1486649820000,"doc_count":15},{"key_as_string":"2017-02-09T14:18:00.000Z","key":1486649880000,"doc_count":15},{"key_as_string":"2017-02-09T14:19:00.000Z","key":1486649940000,"doc_count":12},{"key_as_string":"2017-02-09T14:20:00.000Z","key":1486650000000,"doc_count":8},{"key_as_string":"2017-02-09T14:21:00.000Z","key":1486650060000,"doc_count":17},{"key_as_string":"2017-02-09T14:22:00.000Z","key":1486650120000,"doc_count":10},{"key_as_string":"2017-02-09T14:23:00.000Z","key":1486650180000,"doc_count":11},{"key_as_string":"2017-02-09T14:24:00.000Z","key":1486650240000,"doc_count":11},{"key_as_string":"2017-02-09T14:25:00.000Z","key":1486650300000,"doc_count":14},{"key_as_string":"2017-02-09T14:26:00.000Z","key":1486650360000,"doc_count":16},{"key_as_string":"2017-02-09T14:27:00.000Z","key":1486650420000,"doc_count":12},{"key_as_string":"2017-02-09T14:28:00.000Z","key":1486650480000,"doc_count":14},{"key_as_string":"2017-02-09T14:29:00.000Z","key":1486650540000,"doc_count":11},{"key_as_string":"2017-02-09T14:30:00.000Z","key":1486650600000,"doc_count":13},{"key_as_string":"2017-02-09T14:31:00.000Z","key":1486650660000,"doc_count":13},{"key_as_string":"2017-02-09T14:32:00.000Z","key":1486650720000,"doc_count":19},{"key_as_string":"2017-02-09T14:33:00.000Z","key":1486650780000,"doc_count":13},{"key_as_string":"2017-02-09T14:34:00.000Z","key":1486650840000,"doc_count":15},{"key_as_string":"2017-02-09T14:35:00.000Z","key":1486650900000,"doc_count":11},{"key_as_string":"2017-02-09T14:36:00.000Z","key":1486650960000,"doc_count":15},{"key_as_string":"2017-02-09T14:37:00.000Z","key":1486651020000,"doc_count":12},{"key_as_string":"2017-02-09T14:38:00.000Z","key":1486651080000,"doc_count":11},{"key_as_string":"2017-02-09T14:39:00.000Z","key":1486651140000,"doc_count":18},{"key_as_string":"2017-02-09T14:40:00.000Z","key":1486651200000,"doc_count":9},{"key_as_string":"2017-02-09T14:41:00.000Z","key":1486651260000,"doc_count":15},{"key_as_string":"2017-02-09T14:42:00.000Z","key":1486651320000,"doc_count":12},{"key_as_string":"2017-02-09T14:43:00.000Z","key":1486651380000,"doc_count":15},{"key_as_string":"2017-02-09T14:44:00.000Z","key":1486651440000,"doc_count":12},{"key_as_string":"2017-02-09T14:45:00.000Z","key":1486651500000,"doc_count":13},{"key_as_string":"2017-02-09T14:46:00.000Z","key":1486651560000,"doc_count":12},{"key_as_string":"2017-02-09T14:47:00.000Z","key":1486651620000,"doc_count":14},{"key_as_string":"2017-02-09T14:48:00.000Z","key":1486651680000,"doc_count":13},{"key_as_string":"2017-02-09T14:49:00.000Z","key":1486651740000,"doc_count":17},{"key_as_string":"2017-02-09T14:50:00.000Z","key":1486651800000,"doc_count":9},{"key_as_string":"2017-02-09T14:51:00.000Z","key":1486651860000,"doc_count":12},{"key_as_string":"2017-02-09T14:52:00.000Z","key":1486651920000,"doc_count":16},{"key_as_string":"2017-02-09T14:53:00.000Z","key":1486651980000,"doc_count":19},{"key_as_string":"2017-02-09T14:54:00.000Z","key":1486652040000,"doc_count":15},{"key_as_string":"2017-02-09T14:55:00.000Z","key":1486652100000,"doc_count":11},{"key_as_string":"2017-02-09T14:56:00.000Z","key":1486652160000,"doc_count":15},{"key_as_string":"2017-02-09T14:57:00.000Z","key":1486652220000,"doc_count":11},{"key_as_string":"2017-02-09T14:58:00.000Z","key":1486652280000,"doc_count":12},{"key_as_string":"2017-02-09T14:59:00.000Z","key":1486652340000,"doc_count":11},{"key_as_string":"2017-02-09T15:00:00.000Z","key":1486652400000,"doc_count":13},{"key_as_string":"2017-02-09T15:01:00.000Z","key":1486652460000,"doc_count":10},{"key_as_string":"2017-02-09T15:02:00.000Z","key":1486652520000,"doc_count":17},{"key_as_string":"2017-02-09T15:03:00.000Z","key":1486652580000,"doc_count":12},{"key_as_string":"2017-02-09T15:04:00.000Z","key":1486652640000,"doc_count":13},{"key_as_string":"2017-02-09T15:05:00.000Z","key":1486652700000,"doc_count":13},{"key_as_string":"2017-02-09T15:06:00.000Z","key":1486652760000,"doc_count":15},{"key_as_string":"2017-02-09T15:07:00.000Z","key":1486652820000,"doc_count":12},{"key_as_string":"2017-02-09T15:08:00.000Z","key":1486652880000,"doc_count":12},{"key_as_string":"2017-02-09T15:09:00.000Z","key":1486652940000,"doc_count":13},{"key_as_string":"2017-02-09T15:10:00.000Z","key":1486653000000,"doc_count":15},{"key_as_string":"2017-02-09T15:11:00.000Z","key":1486653060000,"doc_count":20},{"key_as_string":"2017-02-09T15:12:00.000Z","key":1486653120000,"doc_count":10},{"key_as_string":"2017-02-09T15:13:00.000Z","key":1486653180000,"doc_count":12},{"key_as_string":"2017-02-09T15:14:00.000Z","key":1486653240000,"doc_count":8},{"key_as_string":"2017-02-09T15:15:00.000Z","key":1486653300000,"doc_count":18},{"key_as_string":"2017-02-09T15:16:00.000Z","key":1486653360000,"doc_count":16},{"key_as_string":"2017-02-09T15:17:00.000Z","key":1486653420000,"doc_count":13},{"key_as_string":"2017-02-09T15:18:00.000Z","key":1486653480000,"doc_count":14},{"key_as_string":"2017-02-09T15:19:00.000Z","key":1486653540000,"doc_count":14},{"key_as_string":"2017-02-09T15:20:00.000Z","key":1486653600000,"doc_count":14},{"key_as_string":"2017-02-09T15:21:00.000Z","key":1486653660000,"doc_count":11},{"key_as_string":"2017-02-09T15:22:00.000Z","key":1486653720000,"doc_count":13},{"key_as_string":"2017-02-09T15:23:00.000Z","key":1486653780000,"doc_count":11},{"key_as_string":"2017-02-09T15:24:00.000Z","key":1486653840000,"doc_count":14},{"key_as_string":"2017-02-09T15:25:00.000Z","key":1486653900000,"doc_count":15},{"key_as_string":"2017-02-09T15:26:00.000Z","key":1486653960000,"doc_count":12},{"key_as_string":"2017-02-09T15:27:00.000Z","key":1486654020000,"doc_count":9},{"key_as_string":"2017-02-09T15:28:00.000Z","key":1486654080000,"doc_count":17},{"key_as_string":"2017-02-09T15:29:00.000Z","key":1486654140000,"doc_count":10},{"key_as_string":"2017-02-09T15:30:00.000Z","key":1486654200000,"doc_count":15},{"key_as_string":"2017-02-09T15:31:00.000Z","key":1486654260000,"doc_count":13},{"key_as_string":"2017-02-09T15:32:00.000Z","key":1486654320000,"doc_count":10},{"key_as_string":"2017-02-09T15:33:00.000Z","key":1486654380000,"doc_count":19},{"key_as_string":"2017-02-09T15:34:00.000Z","key":1486654440000,"doc_count":13},{"key_as_string":"2017-02-09T15:35:00.000Z","key":1486654500000,"doc_count":13},{"key_as_string":"2017-02-09T15:36:00.000Z","key":1486654560000,"doc_count":11},{"key_as_string":"2017-02-09T15:37:00.000Z","key":1486654620000,"doc_count":10},{"key_as_string":"2017-02-09T15:38:00.000Z","key":1486654680000,"doc_count":14},{"key_as_string":"2017-02-09T15:39:00.000Z","key":1486654740000,"doc_count":19},{"key_as_string":"2017-02-09T15:40:00.000Z","key":1486654800000,"doc_count":14},{"key_as_string":"2017-02-09T15:41:00.000Z","key":1486654860000,"doc_count":14},{"key_as_string":"2017-02-09T15:42:00.000Z","key":1486654920000,"doc_count":11},{"key_as_string":"2017-02-09T15:43:00.000Z","key":1486654980000,"doc_count":12},{"key_as_string":"2017-02-09T15:44:00.000Z","key":1486655040000,"doc_count":10},{"key_as_string":"2017-02-09T15:45:00.000Z","key":1486655100000,"doc_count":14},{"key_as_string":"2017-02-09T15:46:00.000Z","key":1486655160000,"doc_count":13},{"key_as_string":"2017-02-09T15:47:00.000Z","key":1486655220000,"doc_count":10},{"key_as_string":"2017-02-09T15:48:00.000Z","key":1486655280000,"doc_count":12},{"key_as_string":"2017-02-09T15:49:00.000Z","key":1486655340000,"doc_count":18},{"key_as_string":"2017-02-09T15:50:00.000Z","key":1486655400000,"doc_count":18},{"key_as_string":"2017-02-09T15:51:00.000Z","key":1486655460000,"doc_count":12},{"key_as_string":"2017-02-09T15:52:00.000Z","key":1486655520000,"doc_count":12},{"key_as_string":"2017-02-09T15:53:00.000Z","key":1486655580000,"doc_count":18},{"key_as_string":"2017-02-09T15:54:00.000Z","key":1486655640000,"doc_count":9},{"key_as_string":"2017-02-09T15:55:00.000Z","key":1486655700000,"doc_count":11},{"key_as_string":"2017-02-09T15:56:00.000Z","key":1486655760000,"doc_count":14},{"key_as_string":"2017-02-09T15:57:00.000Z","key":1486655820000,"doc_count":14},{"key_as_string":"2017-02-09T15:58:00.000Z","key":1486655880000,"doc_count":15},{"key_as_string":"2017-02-09T15:59:00.000Z","key":1486655940000,"doc_count":13},{"key_as_string":"2017-02-09T16:00:00.000Z","key":1486656000000,"doc_count":13},{"key_as_string":"2017-02-09T16:01:00.000Z","key":1486656060000,"doc_count":11},{"key_as_string":"2017-02-09T16:02:00.000Z","key":1486656120000,"doc_count":10},{"key_as_string":"2017-02-09T16:03:00.000Z","key":1486656180000,"doc_count":18},{"key_as_string":"2017-02-09T16:04:00.000Z","key":1486656240000,"doc_count":6},{"key_as_string":"2017-02-09T16:05:00.000Z","key":1486656300000,"doc_count":14},{"key_as_string":"2017-02-09T16:06:00.000Z","key":1486656360000,"doc_count":16},{"key_as_string":"2017-02-09T16:07:00.000Z","key":1486656420000,"doc_count":12},{"key_as_string":"2017-02-09T16:08:00.000Z","key":1486656480000,"doc_count":15},{"key_as_string":"2017-02-09T16:09:00.000Z","key":1486656540000,"doc_count":13},{"key_as_string":"2017-02-09T16:10:00.000Z","key":1486656600000,"doc_count":13},{"key_as_string":"2017-02-09T16:11:00.000Z","key":1486656660000,"doc_count":7},{"key_as_string":"2017-02-09T16:12:00.000Z","key":1486656720000,"doc_count":16},{"key_as_string":"2017-02-09T16:13:00.000Z","key":1486656780000,"doc_count":10},{"key_as_string":"2017-02-09T16:14:00.000Z","key":1486656840000,"doc_count":52},{"key_as_string":"2017-02-09T16:15:00.000Z","key":1486656900000,"doc_count":130},{"key_as_string":"2017-02-09T16:16:00.000Z","key":1486656960000,"doc_count":17},{"key_as_string":"2017-02-09T16:17:00.000Z","key":1486657020000,"doc_count":13},{"key_as_string":"2017-02-09T16:18:00.000Z","key":1486657080000,"doc_count":10},{"key_as_string":"2017-02-09T16:19:00.000Z","key":1486657140000,"doc_count":9},{"key_as_string":"2017-02-09T16:20:00.000Z","key":1486657200000,"doc_count":9},{"key_as_string":"2017-02-09T16:21:00.000Z","key":1486657260000,"doc_count":17},{"key_as_string":"2017-02-09T16:22:00.000Z","key":1486657320000,"doc_count":13},{"key_as_string":"2017-02-09T16:23:00.000Z","key":1486657380000,"doc_count":10},{"key_as_string":"2017-02-09T16:24:00.000Z","key":1486657440000,"doc_count":11},{"key_as_string":"2017-02-09T16:25:00.000Z","key":1486657500000,"doc_count":9},{"key_as_string":"2017-02-09T16:26:00.000Z","key":1486657560000,"doc_count":12},{"key_as_string":"2017-02-09T16:27:00.000Z","key":1486657620000,"doc_count":15},{"key_as_string":"2017-02-09T16:28:00.000Z","key":1486657680000,"doc_count":8},{"key_as_string":"2017-02-09T16:29:00.000Z","key":1486657740000,"doc_count":12},{"key_as_string":"2017-02-09T16:30:00.000Z","key":1486657800000,"doc_count":12},{"key_as_string":"2017-02-09T16:31:00.000Z","key":1486657860000,"doc_count":15},{"key_as_string":"2017-02-09T16:32:00.000Z","key":1486657920000,"doc_count":10},{"key_as_string":"2017-02-09T16:33:00.000Z","key":1486657980000,"doc_count":13},{"key_as_string":"2017-02-09T16:34:00.000Z","key":1486658040000,"doc_count":13},{"key_as_string":"2017-02-09T16:35:00.000Z","key":1486658100000,"doc_count":14},{"key_as_string":"2017-02-09T16:36:00.000Z","key":1486658160000,"doc_count":14},{"key_as_string":"2017-02-09T16:37:00.000Z","key":1486658220000,"doc_count":11},{"key_as_string":"2017-02-09T16:38:00.000Z","key":1486658280000,"doc_count":12},{"key_as_string":"2017-02-09T16:39:00.000Z","key":1486658340000,"doc_count":11},{"key_as_string":"2017-02-09T16:40:00.000Z","key":1486658400000,"doc_count":10},{"key_as_string":"2017-02-09T16:41:00.000Z","key":1486658460000,"doc_count":10},{"key_as_string":"2017-02-09T16:42:00.000Z","key":1486658520000,"doc_count":13},{"key_as_string":"2017-02-09T16:43:00.000Z","key":1486658580000,"doc_count":16},{"key_as_string":"2017-02-09T16:44:00.000Z","key":1486658640000,"doc_count":14},{"key_as_string":"2017-02-09T16:45:00.000Z","key":1486658700000,"doc_count":15},{"key_as_string":"2017-02-09T16:46:00.000Z","key":1486658760000,"doc_count":13},{"key_as_string":"2017-02-09T16:47:00.000Z","key":1486658820000,"doc_count":14},{"key_as_string":"2017-02-09T16:48:00.000Z","key":1486658880000,"doc_count":9},{"key_as_string":"2017-02-09T16:49:00.000Z","key":1486658940000,"doc_count":15},{"key_as_string":"2017-02-09T16:50:00.000Z","key":1486659000000,"doc_count":13},{"key_as_string":"2017-02-09T16:51:00.000Z","key":1486659060000,"doc_count":15},{"key_as_string":"2017-02-09T16:52:00.000Z","key":1486659120000,"doc_count":13},{"key_as_string":"2017-02-09T16:53:00.000Z","key":1486659180000,"doc_count":16},{"key_as_string":"2017-02-09T16:54:00.000Z","key":1486659240000,"doc_count":11},{"key_as_string":"2017-02-09T16:55:00.000Z","key":1486659300000,"doc_count":18},{"key_as_string":"2017-02-09T16:56:00.000Z","key":1486659360000,"doc_count":9},{"key_as_string":"2017-02-09T16:57:00.000Z","key":1486659420000,"doc_count":19},{"key_as_string":"2017-02-09T16:58:00.000Z","key":1486659480000,"doc_count":8},{"key_as_string":"2017-02-09T16:59:00.000Z","key":1486659540000,"doc_count":12},{"key_as_string":"2017-02-09T17:00:00.000Z","key":1486659600000,"doc_count":17},{"key_as_string":"2017-02-09T17:01:00.000Z","key":1486659660000,"doc_count":14},{"key_as_string":"2017-02-09T17:02:00.000Z","key":1486659720000,"doc_count":13},{"key_as_string":"2017-02-09T17:03:00.000Z","key":1486659780000,"doc_count":9},{"key_as_string":"2017-02-09T17:04:00.000Z","key":1486659840000,"doc_count":14},{"key_as_string":"2017-02-09T17:05:00.000Z","key":1486659900000,"doc_count":15},{"key_as_string":"2017-02-09T17:06:00.000Z","key":1486659960000,"doc_count":13},{"key_as_string":"2017-02-09T17:07:00.000Z","key":1486660020000,"doc_count":9},{"key_as_string":"2017-02-09T17:08:00.000Z","key":1486660080000,"doc_count":8},{"key_as_string":"2017-02-09T17:09:00.000Z","key":1486660140000,"doc_count":11},{"key_as_string":"2017-02-09T17:10:00.000Z","key":1486660200000,"doc_count":11},{"key_as_string":"2017-02-09T17:11:00.000Z","key":1486660260000,"doc_count":12},{"key_as_string":"2017-02-09T17:12:00.000Z","key":1486660320000,"doc_count":12},{"key_as_string":"2017-02-09T17:13:00.000Z","key":1486660380000,"doc_count":9},{"key_as_string":"2017-02-09T17:14:00.000Z","key":1486660440000,"doc_count":15},{"key_as_string":"2017-02-09T17:15:00.000Z","key":1486660500000,"doc_count":11},{"key_as_string":"2017-02-09T17:16:00.000Z","key":1486660560000,"doc_count":11},{"key_as_string":"2017-02-09T17:17:00.000Z","key":1486660620000,"doc_count":11},{"key_as_string":"2017-02-09T17:18:00.000Z","key":1486660680000,"doc_count":11},{"key_as_string":"2017-02-09T17:19:00.000Z","key":1486660740000,"doc_count":15},{"key_as_string":"2017-02-09T17:20:00.000Z","key":1486660800000,"doc_count":7},{"key_as_string":"2017-02-09T17:21:00.000Z","key":1486660860000,"doc_count":15},{"key_as_string":"2017-02-09T17:22:00.000Z","key":1486660920000,"doc_count":13},{"key_as_string":"2017-02-09T17:23:00.000Z","key":1486660980000,"doc_count":10},{"key_as_string":"2017-02-09T17:24:00.000Z","key":1486661040000,"doc_count":18},{"key_as_string":"2017-02-09T17:25:00.000Z","key":1486661100000,"doc_count":9},{"key_as_string":"2017-02-09T17:26:00.000Z","key":1486661160000,"doc_count":12},{"key_as_string":"2017-02-09T17:27:00.000Z","key":1486661220000,"doc_count":8},{"key_as_string":"2017-02-09T17:28:00.000Z","key":1486661280000,"doc_count":11},{"key_as_string":"2017-02-09T17:29:00.000Z","key":1486661340000,"doc_count":10},{"key_as_string":"2017-02-09T17:30:00.000Z","key":1486661400000,"doc_count":19},{"key_as_string":"2017-02-09T17:31:00.000Z","key":1486661460000,"doc_count":10},{"key_as_string":"2017-02-09T17:32:00.000Z","key":1486661520000,"doc_count":11},{"key_as_string":"2017-02-09T17:33:00.000Z","key":1486661580000,"doc_count":12},{"key_as_string":"2017-02-09T17:34:00.000Z","key":1486661640000,"doc_count":12},{"key_as_string":"2017-02-09T17:35:00.000Z","key":1486661700000,"doc_count":15},{"key_as_string":"2017-02-09T17:36:00.000Z","key":1486661760000,"doc_count":11},{"key_as_string":"2017-02-09T17:37:00.000Z","key":1486661820000,"doc_count":12},{"key_as_string":"2017-02-09T17:38:00.000Z","key":1486661880000,"doc_count":12},{"key_as_string":"2017-02-09T17:39:00.000Z","key":1486661940000,"doc_count":14},{"key_as_string":"2017-02-09T17:40:00.000Z","key":1486662000000,"doc_count":10},{"key_as_string":"2017-02-09T17:41:00.000Z","key":1486662060000,"doc_count":13},{"key_as_string":"2017-02-09T17:42:00.000Z","key":1486662120000,"doc_count":11},{"key_as_string":"2017-02-09T17:43:00.000Z","key":1486662180000,"doc_count":16},{"key_as_string":"2017-02-09T17:44:00.000Z","key":1486662240000,"doc_count":13},{"key_as_string":"2017-02-09T17:45:00.000Z","key":1486662300000,"doc_count":7},{"key_as_string":"2017-02-09T17:46:00.000Z","key":1486662360000,"doc_count":15},{"key_as_string":"2017-02-09T17:47:00.000Z","key":1486662420000,"doc_count":11},{"key_as_string":"2017-02-09T17:48:00.000Z","key":1486662480000,"doc_count":10},{"key_as_string":"2017-02-09T17:49:00.000Z","key":1486662540000,"doc_count":13},{"key_as_string":"2017-02-09T17:50:00.000Z","key":1486662600000,"doc_count":11},{"key_as_string":"2017-02-09T17:51:00.000Z","key":1486662660000,"doc_count":19},{"key_as_string":"2017-02-09T17:52:00.000Z","key":1486662720000,"doc_count":8},{"key_as_string":"2017-02-09T17:53:00.000Z","key":1486662780000,"doc_count":12},{"key_as_string":"2017-02-09T17:54:00.000Z","key":1486662840000,"doc_count":15},{"key_as_string":"2017-02-09T17:55:00.000Z","key":1486662900000,"doc_count":9},{"key_as_string":"2017-02-09T17:56:00.000Z","key":1486662960000,"doc_count":11},{"key_as_string":"2017-02-09T17:57:00.000Z","key":1486663020000,"doc_count":14},{"key_as_string":"2017-02-09T17:58:00.000Z","key":1486663080000,"doc_count":11},{"key_as_string":"2017-02-09T17:59:00.000Z","key":1486663140000,"doc_count":18},{"key_as_string":"2017-02-09T18:00:00.000Z","key":1486663200000,"doc_count":14},{"key_as_string":"2017-02-09T18:01:00.000Z","key":1486663260000,"doc_count":11},{"key_as_string":"2017-02-09T18:02:00.000Z","key":1486663320000,"doc_count":11},{"key_as_string":"2017-02-09T18:03:00.000Z","key":1486663380000,"doc_count":13},{"key_as_string":"2017-02-09T18:04:00.000Z","key":1486663440000,"doc_count":15},{"key_as_string":"2017-02-09T18:05:00.000Z","key":1486663500000,"doc_count":10},{"key_as_string":"2017-02-09T18:06:00.000Z","key":1486663560000,"doc_count":17},{"key_as_string":"2017-02-09T18:07:00.000Z","key":1486663620000,"doc_count":14},{"key_as_string":"2017-02-09T18:08:00.000Z","key":1486663680000,"doc_count":11},{"key_as_string":"2017-02-09T18:09:00.000Z","key":1486663740000,"doc_count":15},{"key_as_string":"2017-02-09T18:10:00.000Z","key":1486663800000,"doc_count":12},{"key_as_string":"2017-02-09T18:11:00.000Z","key":1486663860000,"doc_count":7},{"key_as_string":"2017-02-09T18:12:00.000Z","key":1486663920000,"doc_count":17},{"key_as_string":"2017-02-09T18:13:00.000Z","key":1486663980000,"doc_count":14},{"key_as_string":"2017-02-09T18:14:00.000Z","key":1486664040000,"doc_count":10},{"key_as_string":"2017-02-09T18:15:00.000Z","key":1486664100000,"doc_count":13},{"key_as_string":"2017-02-09T18:16:00.000Z","key":1486664160000,"doc_count":18},{"key_as_string":"2017-02-09T18:17:00.000Z","key":1486664220000,"doc_count":7},{"key_as_string":"2017-02-09T18:18:00.000Z","key":1486664280000,"doc_count":17},{"key_as_string":"2017-02-09T18:19:00.000Z","key":1486664340000,"doc_count":10},{"key_as_string":"2017-02-09T18:20:00.000Z","key":1486664400000,"doc_count":7},{"key_as_string":"2017-02-09T18:21:00.000Z","key":1486664460000,"doc_count":12},{"key_as_string":"2017-02-09T18:22:00.000Z","key":1486664520000,"doc_count":14},{"key_as_string":"2017-02-09T18:23:00.000Z","key":1486664580000,"doc_count":14},{"key_as_string":"2017-02-09T18:24:00.000Z","key":1486664640000,"doc_count":11},{"key_as_string":"2017-02-09T18:25:00.000Z","key":1486664700000,"doc_count":13},{"key_as_string":"2017-02-09T18:26:00.000Z","key":1486664760000,"doc_count":15},{"key_as_string":"2017-02-09T18:27:00.000Z","key":1486664820000,"doc_count":6},{"key_as_string":"2017-02-09T18:28:00.000Z","key":1486664880000,"doc_count":12},{"key_as_string":"2017-02-09T18:29:00.000Z","key":1486664940000,"doc_count":15},{"key_as_string":"2017-02-09T18:30:00.000Z","key":1486665000000,"doc_count":9},{"key_as_string":"2017-02-09T18:31:00.000Z","key":1486665060000,"doc_count":13},{"key_as_string":"2017-02-09T18:32:00.000Z","key":1486665120000,"doc_count":13},{"key_as_string":"2017-02-09T18:33:00.000Z","key":1486665180000,"doc_count":14},{"key_as_string":"2017-02-09T18:34:00.000Z","key":1486665240000,"doc_count":8},{"key_as_string":"2017-02-09T18:35:00.000Z","key":1486665300000,"doc_count":9},{"key_as_string":"2017-02-09T18:36:00.000Z","key":1486665360000,"doc_count":11},{"key_as_string":"2017-02-09T18:37:00.000Z","key":1486665420000,"doc_count":12},{"key_as_string":"2017-02-09T18:38:00.000Z","key":1486665480000,"doc_count":11},{"key_as_string":"2017-02-09T18:39:00.000Z","key":1486665540000,"doc_count":12},{"key_as_string":"2017-02-09T18:40:00.000Z","key":1486665600000,"doc_count":16},{"key_as_string":"2017-02-09T18:41:00.000Z","key":1486665660000,"doc_count":7},{"key_as_string":"2017-02-09T18:42:00.000Z","key":1486665720000,"doc_count":13},{"key_as_string":"2017-02-09T18:43:00.000Z","key":1486665780000,"doc_count":13},{"key_as_string":"2017-02-09T18:44:00.000Z","key":1486665840000,"doc_count":14},{"key_as_string":"2017-02-09T18:45:00.000Z","key":1486665900000,"doc_count":7},{"key_as_string":"2017-02-09T18:46:00.000Z","key":1486665960000,"doc_count":9},{"key_as_string":"2017-02-09T18:47:00.000Z","key":1486666020000,"doc_count":11},{"key_as_string":"2017-02-09T18:48:00.000Z","key":1486666080000,"doc_count":11},{"key_as_string":"2017-02-09T18:49:00.000Z","key":1486666140000,"doc_count":11},{"key_as_string":"2017-02-09T18:50:00.000Z","key":1486666200000,"doc_count":8},{"key_as_string":"2017-02-09T18:51:00.000Z","key":1486666260000,"doc_count":15},{"key_as_string":"2017-02-09T18:52:00.000Z","key":1486666320000,"doc_count":8},{"key_as_string":"2017-02-09T18:53:00.000Z","key":1486666380000,"doc_count":13},{"key_as_string":"2017-02-09T18:54:00.000Z","key":1486666440000,"doc_count":13},{"key_as_string":"2017-02-09T18:55:00.000Z","key":1486666500000,"doc_count":11},{"key_as_string":"2017-02-09T18:56:00.000Z","key":1486666560000,"doc_count":16},{"key_as_string":"2017-02-09T18:57:00.000Z","key":1486666620000,"doc_count":6},{"key_as_string":"2017-02-09T18:58:00.000Z","key":1486666680000,"doc_count":12},{"key_as_string":"2017-02-09T18:59:00.000Z","key":1486666740000,"doc_count":12},{"key_as_string":"2017-02-09T19:00:00.000Z","key":1486666800000,"doc_count":9},{"key_as_string":"2017-02-09T19:01:00.000Z","key":1486666860000,"doc_count":12},{"key_as_string":"2017-02-09T19:02:00.000Z","key":1486666920000,"doc_count":11},{"key_as_string":"2017-02-09T19:03:00.000Z","key":1486666980000,"doc_count":14},{"key_as_string":"2017-02-09T19:04:00.000Z","key":1486667040000,"doc_count":10},{"key_as_string":"2017-02-09T19:05:00.000Z","key":1486667100000,"doc_count":9},{"key_as_string":"2017-02-09T19:06:00.000Z","key":1486667160000,"doc_count":8},{"key_as_string":"2017-02-09T19:07:00.000Z","key":1486667220000,"doc_count":19},{"key_as_string":"2017-02-09T19:08:00.000Z","key":1486667280000,"doc_count":8},{"key_as_string":"2017-02-09T19:09:00.000Z","key":1486667340000,"doc_count":12},{"key_as_string":"2017-02-09T19:10:00.000Z","key":1486667400000,"doc_count":10},{"key_as_string":"2017-02-09T19:11:00.000Z","key":1486667460000,"doc_count":9},{"key_as_string":"2017-02-09T19:12:00.000Z","key":1486667520000,"doc_count":10},{"key_as_string":"2017-02-09T19:13:00.000Z","key":1486667580000,"doc_count":7},{"key_as_string":"2017-02-09T19:14:00.000Z","key":1486667640000,"doc_count":7},{"key_as_string":"2017-02-09T19:15:00.000Z","key":1486667700000,"doc_count":15},{"key_as_string":"2017-02-09T19:16:00.000Z","key":1486667760000,"doc_count":8},{"key_as_string":"2017-02-09T19:17:00.000Z","key":1486667820000,"doc_count":9},{"key_as_string":"2017-02-09T19:18:00.000Z","key":1486667880000,"doc_count":14},{"key_as_string":"2017-02-09T19:19:00.000Z","key":1486667940000,"doc_count":10},{"key_as_string":"2017-02-09T19:20:00.000Z","key":1486668000000,"doc_count":8},{"key_as_string":"2017-02-09T19:21:00.000Z","key":1486668060000,"doc_count":19},{"key_as_string":"2017-02-09T19:22:00.000Z","key":1486668120000,"doc_count":7},{"key_as_string":"2017-02-09T19:23:00.000Z","key":1486668180000,"doc_count":9},{"key_as_string":"2017-02-09T19:24:00.000Z","key":1486668240000,"doc_count":9},{"key_as_string":"2017-02-09T19:25:00.000Z","key":1486668300000,"doc_count":14},{"key_as_string":"2017-02-09T19:26:00.000Z","key":1486668360000,"doc_count":15},{"key_as_string":"2017-02-09T19:27:00.000Z","key":1486668420000,"doc_count":13},{"key_as_string":"2017-02-09T19:28:00.000Z","key":1486668480000,"doc_count":15},{"key_as_string":"2017-02-09T19:29:00.000Z","key":1486668540000,"doc_count":9},{"key_as_string":"2017-02-09T19:30:00.000Z","key":1486668600000,"doc_count":7},{"key_as_string":"2017-02-09T19:31:00.000Z","key":1486668660000,"doc_count":9},{"key_as_string":"2017-02-09T19:32:00.000Z","key":1486668720000,"doc_count":6},{"key_as_string":"2017-02-09T19:33:00.000Z","key":1486668780000,"doc_count":16},{"key_as_string":"2017-02-09T19:34:00.000Z","key":1486668840000,"doc_count":14},{"key_as_string":"2017-02-09T19:35:00.000Z","key":1486668900000,"doc_count":12},{"key_as_string":"2017-02-09T19:36:00.000Z","key":1486668960000,"doc_count":12},{"key_as_string":"2017-02-09T19:37:00.000Z","key":1486669020000,"doc_count":11},{"key_as_string":"2017-02-09T19:38:00.000Z","key":1486669080000,"doc_count":12},{"key_as_string":"2017-02-09T19:39:00.000Z","key":1486669140000,"doc_count":13},{"key_as_string":"2017-02-09T19:40:00.000Z","key":1486669200000,"doc_count":6},{"key_as_string":"2017-02-09T19:41:00.000Z","key":1486669260000,"doc_count":14},{"key_as_string":"2017-02-09T19:42:00.000Z","key":1486669320000,"doc_count":15},{"key_as_string":"2017-02-09T19:43:00.000Z","key":1486669380000,"doc_count":9},{"key_as_string":"2017-02-09T19:44:00.000Z","key":1486669440000,"doc_count":7},{"key_as_string":"2017-02-09T19:45:00.000Z","key":1486669500000,"doc_count":15},{"key_as_string":"2017-02-09T19:46:00.000Z","key":1486669560000,"doc_count":10},{"key_as_string":"2017-02-09T19:47:00.000Z","key":1486669620000,"doc_count":9},{"key_as_string":"2017-02-09T19:48:00.000Z","key":1486669680000,"doc_count":9},{"key_as_string":"2017-02-09T19:49:00.000Z","key":1486669740000,"doc_count":14},{"key_as_string":"2017-02-09T19:50:00.000Z","key":1486669800000,"doc_count":8},{"key_as_string":"2017-02-09T19:51:00.000Z","key":1486669860000,"doc_count":12},{"key_as_string":"2017-02-09T19:52:00.000Z","key":1486669920000,"doc_count":8},{"key_as_string":"2017-02-09T19:53:00.000Z","key":1486669980000,"doc_count":6},{"key_as_string":"2017-02-09T19:54:00.000Z","key":1486670040000,"doc_count":13},{"key_as_string":"2017-02-09T19:55:00.000Z","key":1486670100000,"doc_count":14},{"key_as_string":"2017-02-09T19:56:00.000Z","key":1486670160000,"doc_count":10},{"key_as_string":"2017-02-09T19:57:00.000Z","key":1486670220000,"doc_count":15},{"key_as_string":"2017-02-09T19:58:00.000Z","key":1486670280000,"doc_count":11},{"key_as_string":"2017-02-09T19:59:00.000Z","key":1486670340000,"doc_count":11},{"key_as_string":"2017-02-09T20:00:00.000Z","key":1486670400000,"doc_count":14},{"key_as_string":"2017-02-09T20:01:00.000Z","key":1486670460000,"doc_count":16},{"key_as_string":"2017-02-09T20:02:00.000Z","key":1486670520000,"doc_count":11},{"key_as_string":"2017-02-09T20:03:00.000Z","key":1486670580000,"doc_count":11},{"key_as_string":"2017-02-09T20:04:00.000Z","key":1486670640000,"doc_count":14},{"key_as_string":"2017-02-09T20:05:00.000Z","key":1486670700000,"doc_count":6},{"key_as_string":"2017-02-09T20:06:00.000Z","key":1486670760000,"doc_count":12},{"key_as_string":"2017-02-09T20:07:00.000Z","key":1486670820000,"doc_count":14},{"key_as_string":"2017-02-09T20:08:00.000Z","key":1486670880000,"doc_count":11},{"key_as_string":"2017-02-09T20:09:00.000Z","key":1486670940000,"doc_count":15},{"key_as_string":"2017-02-09T20:10:00.000Z","key":1486671000000,"doc_count":14},{"key_as_string":"2017-02-09T20:11:00.000Z","key":1486671060000,"doc_count":13},{"key_as_string":"2017-02-09T20:12:00.000Z","key":1486671120000,"doc_count":10},{"key_as_string":"2017-02-09T20:13:00.000Z","key":1486671180000,"doc_count":12},{"key_as_string":"2017-02-09T20:14:00.000Z","key":1486671240000,"doc_count":10},{"key_as_string":"2017-02-09T20:15:00.000Z","key":1486671300000,"doc_count":9},{"key_as_string":"2017-02-09T20:16:00.000Z","key":1486671360000,"doc_count":12},{"key_as_string":"2017-02-09T20:17:00.000Z","key":1486671420000,"doc_count":9},{"key_as_string":"2017-02-09T20:18:00.000Z","key":1486671480000,"doc_count":14},{"key_as_string":"2017-02-09T20:19:00.000Z","key":1486671540000,"doc_count":12},{"key_as_string":"2017-02-09T20:20:00.000Z","key":1486671600000,"doc_count":11},{"key_as_string":"2017-02-09T20:21:00.000Z","key":1486671660000,"doc_count":10},{"key_as_string":"2017-02-09T20:22:00.000Z","key":1486671720000,"doc_count":14},{"key_as_string":"2017-02-09T20:23:00.000Z","key":1486671780000,"doc_count":10},{"key_as_string":"2017-02-09T20:24:00.000Z","key":1486671840000,"doc_count":12},{"key_as_string":"2017-02-09T20:25:00.000Z","key":1486671900000,"doc_count":8},{"key_as_string":"2017-02-09T20:26:00.000Z","key":1486671960000,"doc_count":14},{"key_as_string":"2017-02-09T20:27:00.000Z","key":1486672020000,"doc_count":7},{"key_as_string":"2017-02-09T20:28:00.000Z","key":1486672080000,"doc_count":12},{"key_as_string":"2017-02-09T20:29:00.000Z","key":1486672140000,"doc_count":11},{"key_as_string":"2017-02-09T20:30:00.000Z","key":1486672200000,"doc_count":15},{"key_as_string":"2017-02-09T20:31:00.000Z","key":1486672260000,"doc_count":11},{"key_as_string":"2017-02-09T20:32:00.000Z","key":1486672320000,"doc_count":11},{"key_as_string":"2017-02-09T20:33:00.000Z","key":1486672380000,"doc_count":7},{"key_as_string":"2017-02-09T20:34:00.000Z","key":1486672440000,"doc_count":10},{"key_as_string":"2017-02-09T20:35:00.000Z","key":1486672500000,"doc_count":13},{"key_as_string":"2017-02-09T20:36:00.000Z","key":1486672560000,"doc_count":6},{"key_as_string":"2017-02-09T20:37:00.000Z","key":1486672620000,"doc_count":9},{"key_as_string":"2017-02-09T20:38:00.000Z","key":1486672680000,"doc_count":7},{"key_as_string":"2017-02-09T20:39:00.000Z","key":1486672740000,"doc_count":10},{"key_as_string":"2017-02-09T20:40:00.000Z","key":1486672800000,"doc_count":8},{"key_as_string":"2017-02-09T20:41:00.000Z","key":1486672860000,"doc_count":12},{"key_as_string":"2017-02-09T20:42:00.000Z","key":1486672920000,"doc_count":6},{"key_as_string":"2017-02-09T20:43:00.000Z","key":1486672980000,"doc_count":14},{"key_as_string":"2017-02-09T20:44:00.000Z","key":1486673040000,"doc_count":6},{"key_as_string":"2017-02-09T20:45:00.000Z","key":1486673100000,"doc_count":8},{"key_as_string":"2017-02-09T20:46:00.000Z","key":1486673160000,"doc_count":14},{"key_as_string":"2017-02-09T20:47:00.000Z","key":1486673220000,"doc_count":10},{"key_as_string":"2017-02-09T20:48:00.000Z","key":1486673280000,"doc_count":9},{"key_as_string":"2017-02-09T20:49:00.000Z","key":1486673340000,"doc_count":11},{"key_as_string":"2017-02-09T20:50:00.000Z","key":1486673400000,"doc_count":14},{"key_as_string":"2017-02-09T20:51:00.000Z","key":1486673460000,"doc_count":6},{"key_as_string":"2017-02-09T20:52:00.000Z","key":1486673520000,"doc_count":9},{"key_as_string":"2017-02-09T20:53:00.000Z","key":1486673580000,"doc_count":10},{"key_as_string":"2017-02-09T20:54:00.000Z","key":1486673640000,"doc_count":13},{"key_as_string":"2017-02-09T20:55:00.000Z","key":1486673700000,"doc_count":11},{"key_as_string":"2017-02-09T20:56:00.000Z","key":1486673760000,"doc_count":6},{"key_as_string":"2017-02-09T20:57:00.000Z","key":1486673820000,"doc_count":10},{"key_as_string":"2017-02-09T20:58:00.000Z","key":1486673880000,"doc_count":10},{"key_as_string":"2017-02-09T20:59:00.000Z","key":1486673940000,"doc_count":9},{"key_as_string":"2017-02-09T21:00:00.000Z","key":1486674000000,"doc_count":17},{"key_as_string":"2017-02-09T21:01:00.000Z","key":1486674060000,"doc_count":11},{"key_as_string":"2017-02-09T21:02:00.000Z","key":1486674120000,"doc_count":10},{"key_as_string":"2017-02-09T21:03:00.000Z","key":1486674180000,"doc_count":9},{"key_as_string":"2017-02-09T21:04:00.000Z","key":1486674240000,"doc_count":14},{"key_as_string":"2017-02-09T21:05:00.000Z","key":1486674300000,"doc_count":10},{"key_as_string":"2017-02-09T21:06:00.000Z","key":1486674360000,"doc_count":12},{"key_as_string":"2017-02-09T21:07:00.000Z","key":1486674420000,"doc_count":9},{"key_as_string":"2017-02-09T21:08:00.000Z","key":1486674480000,"doc_count":11},{"key_as_string":"2017-02-09T21:09:00.000Z","key":1486674540000,"doc_count":11},{"key_as_string":"2017-02-09T21:10:00.000Z","key":1486674600000,"doc_count":11},{"key_as_string":"2017-02-09T21:11:00.000Z","key":1486674660000,"doc_count":10},{"key_as_string":"2017-02-09T21:12:00.000Z","key":1486674720000,"doc_count":9},{"key_as_string":"2017-02-09T21:13:00.000Z","key":1486674780000,"doc_count":13},{"key_as_string":"2017-02-09T21:14:00.000Z","key":1486674840000,"doc_count":9},{"key_as_string":"2017-02-09T21:15:00.000Z","key":1486674900000,"doc_count":8},{"key_as_string":"2017-02-09T21:16:00.000Z","key":1486674960000,"doc_count":11},{"key_as_string":"2017-02-09T21:17:00.000Z","key":1486675020000,"doc_count":12},{"key_as_string":"2017-02-09T21:18:00.000Z","key":1486675080000,"doc_count":7},{"key_as_string":"2017-02-09T21:19:00.000Z","key":1486675140000,"doc_count":14},{"key_as_string":"2017-02-09T21:20:00.000Z","key":1486675200000,"doc_count":15},{"key_as_string":"2017-02-09T21:21:00.000Z","key":1486675260000,"doc_count":5},{"key_as_string":"2017-02-09T21:22:00.000Z","key":1486675320000,"doc_count":8},{"key_as_string":"2017-02-09T21:23:00.000Z","key":1486675380000,"doc_count":15},{"key_as_string":"2017-02-09T21:24:00.000Z","key":1486675440000,"doc_count":9},{"key_as_string":"2017-02-09T21:25:00.000Z","key":1486675500000,"doc_count":14},{"key_as_string":"2017-02-09T21:26:00.000Z","key":1486675560000,"doc_count":12},{"key_as_string":"2017-02-09T21:27:00.000Z","key":1486675620000,"doc_count":8},{"key_as_string":"2017-02-09T21:28:00.000Z","key":1486675680000,"doc_count":12},{"key_as_string":"2017-02-09T21:29:00.000Z","key":1486675740000,"doc_count":10},{"key_as_string":"2017-02-09T21:30:00.000Z","key":1486675800000,"doc_count":10},{"key_as_string":"2017-02-09T21:31:00.000Z","key":1486675860000,"doc_count":11},{"key_as_string":"2017-02-09T21:32:00.000Z","key":1486675920000,"doc_count":10},{"key_as_string":"2017-02-09T21:33:00.000Z","key":1486675980000,"doc_count":9},{"key_as_string":"2017-02-09T21:34:00.000Z","key":1486676040000,"doc_count":10},{"key_as_string":"2017-02-09T21:35:00.000Z","key":1486676100000,"doc_count":11},{"key_as_string":"2017-02-09T21:36:00.000Z","key":1486676160000,"doc_count":11},{"key_as_string":"2017-02-09T21:37:00.000Z","key":1486676220000,"doc_count":8},{"key_as_string":"2017-02-09T21:38:00.000Z","key":1486676280000,"doc_count":12},{"key_as_string":"2017-02-09T21:39:00.000Z","key":1486676340000,"doc_count":9},{"key_as_string":"2017-02-09T21:40:00.000Z","key":1486676400000,"doc_count":8},{"key_as_string":"2017-02-09T21:41:00.000Z","key":1486676460000,"doc_count":10},{"key_as_string":"2017-02-09T21:42:00.000Z","key":1486676520000,"doc_count":8},{"key_as_string":"2017-02-09T21:43:00.000Z","key":1486676580000,"doc_count":12},{"key_as_string":"2017-02-09T21:44:00.000Z","key":1486676640000,"doc_count":10},{"key_as_string":"2017-02-09T21:45:00.000Z","key":1486676700000,"doc_count":14},{"key_as_string":"2017-02-09T21:46:00.000Z","key":1486676760000,"doc_count":11},{"key_as_string":"2017-02-09T21:47:00.000Z","key":1486676820000,"doc_count":8},{"key_as_string":"2017-02-09T21:48:00.000Z","key":1486676880000,"doc_count":12},{"key_as_string":"2017-02-09T21:49:00.000Z","key":1486676940000,"doc_count":12},{"key_as_string":"2017-02-09T21:50:00.000Z","key":1486677000000,"doc_count":9},{"key_as_string":"2017-02-09T21:51:00.000Z","key":1486677060000,"doc_count":11},{"key_as_string":"2017-02-09T21:52:00.000Z","key":1486677120000,"doc_count":10},{"key_as_string":"2017-02-09T21:53:00.000Z","key":1486677180000,"doc_count":11},{"key_as_string":"2017-02-09T21:54:00.000Z","key":1486677240000,"doc_count":14},{"key_as_string":"2017-02-09T21:55:00.000Z","key":1486677300000,"doc_count":9},{"key_as_string":"2017-02-09T21:56:00.000Z","key":1486677360000,"doc_count":8},{"key_as_string":"2017-02-09T21:57:00.000Z","key":1486677420000,"doc_count":10},{"key_as_string":"2017-02-09T21:58:00.000Z","key":1486677480000,"doc_count":8},{"key_as_string":"2017-02-09T21:59:00.000Z","key":1486677540000,"doc_count":16},{"key_as_string":"2017-02-09T22:00:00.000Z","key":1486677600000,"doc_count":11},{"key_as_string":"2017-02-09T22:01:00.000Z","key":1486677660000,"doc_count":7},{"key_as_string":"2017-02-09T22:02:00.000Z","key":1486677720000,"doc_count":13},{"key_as_string":"2017-02-09T22:03:00.000Z","key":1486677780000,"doc_count":12},{"key_as_string":"2017-02-09T22:04:00.000Z","key":1486677840000,"doc_count":9},{"key_as_string":"2017-02-09T22:05:00.000Z","key":1486677900000,"doc_count":14},{"key_as_string":"2017-02-09T22:06:00.000Z","key":1486677960000,"doc_count":8},{"key_as_string":"2017-02-09T22:07:00.000Z","key":1486678020000,"doc_count":9},{"key_as_string":"2017-02-09T22:08:00.000Z","key":1486678080000,"doc_count":15},{"key_as_string":"2017-02-09T22:09:00.000Z","key":1486678140000,"doc_count":10},{"key_as_string":"2017-02-09T22:10:00.000Z","key":1486678200000,"doc_count":7},{"key_as_string":"2017-02-09T22:11:00.000Z","key":1486678260000,"doc_count":11},{"key_as_string":"2017-02-09T22:12:00.000Z","key":1486678320000,"doc_count":8},{"key_as_string":"2017-02-09T22:13:00.000Z","key":1486678380000,"doc_count":13},{"key_as_string":"2017-02-09T22:14:00.000Z","key":1486678440000,"doc_count":12},{"key_as_string":"2017-02-09T22:15:00.000Z","key":1486678500000,"doc_count":6},{"key_as_string":"2017-02-09T22:16:00.000Z","key":1486678560000,"doc_count":9},{"key_as_string":"2017-02-09T22:17:00.000Z","key":1486678620000,"doc_count":13},{"key_as_string":"2017-02-09T22:18:00.000Z","key":1486678680000,"doc_count":12},{"key_as_string":"2017-02-09T22:19:00.000Z","key":1486678740000,"doc_count":9},{"key_as_string":"2017-02-09T22:20:00.000Z","key":1486678800000,"doc_count":7},{"key_as_string":"2017-02-09T22:21:00.000Z","key":1486678860000,"doc_count":8},{"key_as_string":"2017-02-09T22:22:00.000Z","key":1486678920000,"doc_count":12},{"key_as_string":"2017-02-09T22:23:00.000Z","key":1486678980000,"doc_count":7},{"key_as_string":"2017-02-09T22:24:00.000Z","key":1486679040000,"doc_count":15},{"key_as_string":"2017-02-09T22:25:00.000Z","key":1486679100000,"doc_count":12},{"key_as_string":"2017-02-09T22:26:00.000Z","key":1486679160000,"doc_count":12},{"key_as_string":"2017-02-09T22:27:00.000Z","key":1486679220000,"doc_count":12},{"key_as_string":"2017-02-09T22:28:00.000Z","key":1486679280000,"doc_count":11},{"key_as_string":"2017-02-09T22:29:00.000Z","key":1486679340000,"doc_count":7},{"key_as_string":"2017-02-09T22:30:00.000Z","key":1486679400000,"doc_count":9},{"key_as_string":"2017-02-09T22:31:00.000Z","key":1486679460000,"doc_count":10},{"key_as_string":"2017-02-09T22:32:00.000Z","key":1486679520000,"doc_count":14},{"key_as_string":"2017-02-09T22:33:00.000Z","key":1486679580000,"doc_count":10},{"key_as_string":"2017-02-09T22:34:00.000Z","key":1486679640000,"doc_count":14},{"key_as_string":"2017-02-09T22:35:00.000Z","key":1486679700000,"doc_count":13},{"key_as_string":"2017-02-09T22:36:00.000Z","key":1486679760000,"doc_count":9},{"key_as_string":"2017-02-09T22:37:00.000Z","key":1486679820000,"doc_count":7},{"key_as_string":"2017-02-09T22:38:00.000Z","key":1486679880000,"doc_count":11},{"key_as_string":"2017-02-09T22:39:00.000Z","key":1486679940000,"doc_count":8},{"key_as_string":"2017-02-09T22:40:00.000Z","key":1486680000000,"doc_count":9},{"key_as_string":"2017-02-09T22:41:00.000Z","key":1486680060000,"doc_count":9},{"key_as_string":"2017-02-09T22:42:00.000Z","key":1486680120000,"doc_count":15},{"key_as_string":"2017-02-09T22:43:00.000Z","key":1486680180000,"doc_count":8},{"key_as_string":"2017-02-09T22:44:00.000Z","key":1486680240000,"doc_count":7},{"key_as_string":"2017-02-09T22:45:00.000Z","key":1486680300000,"doc_count":10},{"key_as_string":"2017-02-09T22:46:00.000Z","key":1486680360000,"doc_count":13},{"key_as_string":"2017-02-09T22:47:00.000Z","key":1486680420000,"doc_count":14},{"key_as_string":"2017-02-09T22:48:00.000Z","key":1486680480000,"doc_count":7},{"key_as_string":"2017-02-09T22:49:00.000Z","key":1486680540000,"doc_count":8},{"key_as_string":"2017-02-09T22:50:00.000Z","key":1486680600000,"doc_count":12},{"key_as_string":"2017-02-09T22:51:00.000Z","key":1486680660000,"doc_count":9},{"key_as_string":"2017-02-09T22:52:00.000Z","key":1486680720000,"doc_count":9},{"key_as_string":"2017-02-09T22:53:00.000Z","key":1486680780000,"doc_count":6},{"key_as_string":"2017-02-09T22:54:00.000Z","key":1486680840000,"doc_count":17},{"key_as_string":"2017-02-09T22:55:00.000Z","key":1486680900000,"doc_count":10},{"key_as_string":"2017-02-09T22:56:00.000Z","key":1486680960000,"doc_count":9},{"key_as_string":"2017-02-09T22:57:00.000Z","key":1486681020000,"doc_count":12},{"key_as_string":"2017-02-09T22:58:00.000Z","key":1486681080000,"doc_count":10},{"key_as_string":"2017-02-09T22:59:00.000Z","key":1486681140000,"doc_count":11},{"key_as_string":"2017-02-09T23:00:00.000Z","key":1486681200000,"doc_count":6},{"key_as_string":"2017-02-09T23:01:00.000Z","key":1486681260000,"doc_count":11},{"key_as_string":"2017-02-09T23:02:00.000Z","key":1486681320000,"doc_count":11},{"key_as_string":"2017-02-09T23:03:00.000Z","key":1486681380000,"doc_count":13},{"key_as_string":"2017-02-09T23:04:00.000Z","key":1486681440000,"doc_count":16},{"key_as_string":"2017-02-09T23:05:00.000Z","key":1486681500000,"doc_count":10},{"key_as_string":"2017-02-09T23:06:00.000Z","key":1486681560000,"doc_count":9},{"key_as_string":"2017-02-09T23:07:00.000Z","key":1486681620000,"doc_count":6},{"key_as_string":"2017-02-09T23:08:00.000Z","key":1486681680000,"doc_count":11},{"key_as_string":"2017-02-09T23:09:00.000Z","key":1486681740000,"doc_count":12},{"key_as_string":"2017-02-09T23:10:00.000Z","key":1486681800000,"doc_count":4},{"key_as_string":"2017-02-09T23:11:00.000Z","key":1486681860000,"doc_count":12},{"key_as_string":"2017-02-09T23:12:00.000Z","key":1486681920000,"doc_count":12},{"key_as_string":"2017-02-09T23:13:00.000Z","key":1486681980000,"doc_count":8},{"key_as_string":"2017-02-09T23:14:00.000Z","key":1486682040000,"doc_count":12},{"key_as_string":"2017-02-09T23:15:00.000Z","key":1486682100000,"doc_count":8},{"key_as_string":"2017-02-09T23:16:00.000Z","key":1486682160000,"doc_count":11},{"key_as_string":"2017-02-09T23:17:00.000Z","key":1486682220000,"doc_count":12},{"key_as_string":"2017-02-09T23:18:00.000Z","key":1486682280000,"doc_count":6},{"key_as_string":"2017-02-09T23:19:00.000Z","key":1486682340000,"doc_count":13},{"key_as_string":"2017-02-09T23:20:00.000Z","key":1486682400000,"doc_count":9},{"key_as_string":"2017-02-09T23:21:00.000Z","key":1486682460000,"doc_count":7},{"key_as_string":"2017-02-09T23:22:00.000Z","key":1486682520000,"doc_count":18},{"key_as_string":"2017-02-09T23:23:00.000Z","key":1486682580000,"doc_count":6},{"key_as_string":"2017-02-09T23:24:00.000Z","key":1486682640000,"doc_count":10},{"key_as_string":"2017-02-09T23:25:00.000Z","key":1486682700000,"doc_count":10},{"key_as_string":"2017-02-09T23:26:00.000Z","key":1486682760000,"doc_count":13},{"key_as_string":"2017-02-09T23:27:00.000Z","key":1486682820000,"doc_count":12},{"key_as_string":"2017-02-09T23:28:00.000Z","key":1486682880000,"doc_count":14},{"key_as_string":"2017-02-09T23:29:00.000Z","key":1486682940000,"doc_count":7},{"key_as_string":"2017-02-09T23:30:00.000Z","key":1486683000000,"doc_count":8},{"key_as_string":"2017-02-09T23:31:00.000Z","key":1486683060000,"doc_count":13},{"key_as_string":"2017-02-09T23:32:00.000Z","key":1486683120000,"doc_count":7},{"key_as_string":"2017-02-09T23:33:00.000Z","key":1486683180000,"doc_count":10},{"key_as_string":"2017-02-09T23:34:00.000Z","key":1486683240000,"doc_count":9},{"key_as_string":"2017-02-09T23:35:00.000Z","key":1486683300000,"doc_count":8},{"key_as_string":"2017-02-09T23:36:00.000Z","key":1486683360000,"doc_count":11},{"key_as_string":"2017-02-09T23:37:00.000Z","key":1486683420000,"doc_count":14},{"key_as_string":"2017-02-09T23:38:00.000Z","key":1486683480000,"doc_count":11},{"key_as_string":"2017-02-09T23:39:00.000Z","key":1486683540000,"doc_count":8},{"key_as_string":"2017-02-09T23:40:00.000Z","key":1486683600000,"doc_count":12},{"key_as_string":"2017-02-09T23:41:00.000Z","key":1486683660000,"doc_count":12},{"key_as_string":"2017-02-09T23:42:00.000Z","key":1486683720000,"doc_count":9},{"key_as_string":"2017-02-09T23:43:00.000Z","key":1486683780000,"doc_count":16},{"key_as_string":"2017-02-09T23:44:00.000Z","key":1486683840000,"doc_count":11},{"key_as_string":"2017-02-09T23:45:00.000Z","key":1486683900000,"doc_count":7},{"key_as_string":"2017-02-09T23:46:00.000Z","key":1486683960000,"doc_count":12},{"key_as_string":"2017-02-09T23:47:00.000Z","key":1486684020000,"doc_count":15},{"key_as_string":"2017-02-09T23:48:00.000Z","key":1486684080000,"doc_count":7},{"key_as_string":"2017-02-09T23:49:00.000Z","key":1486684140000,"doc_count":10},{"key_as_string":"2017-02-09T23:50:00.000Z","key":1486684200000,"doc_count":15},{"key_as_string":"2017-02-09T23:51:00.000Z","key":1486684260000,"doc_count":12},{"key_as_string":"2017-02-09T23:52:00.000Z","key":1486684320000,"doc_count":9},{"key_as_string":"2017-02-09T23:53:00.000Z","key":1486684380000,"doc_count":7},{"key_as_string":"2017-02-09T23:54:00.000Z","key":1486684440000,"doc_count":8},{"key_as_string":"2017-02-09T23:55:00.000Z","key":1486684500000,"doc_count":8},{"key_as_string":"2017-02-09T23:56:00.000Z","key":1486684560000,"doc_count":13},{"key_as_string":"2017-02-09T23:57:00.000Z","key":1486684620000,"doc_count":12},{"key_as_string":"2017-02-09T23:58:00.000Z","key":1486684680000,"doc_count":12},{"key_as_string":"2017-02-09T23:59:00.000Z","key":1486684740000,"doc_count":9},{"key_as_string":"2017-02-10T00:00:00.000Z","key":1486684800000,"doc_count":8},{"key_as_string":"2017-02-10T00:01:00.000Z","key":1486684860000,"doc_count":10},{"key_as_string":"2017-02-10T00:02:00.000Z","key":1486684920000,"doc_count":12},{"key_as_string":"2017-02-10T00:03:00.000Z","key":1486684980000,"doc_count":11},{"key_as_string":"2017-02-10T00:04:00.000Z","key":1486685040000,"doc_count":11},{"key_as_string":"2017-02-10T00:05:00.000Z","key":1486685100000,"doc_count":12},{"key_as_string":"2017-02-10T00:06:00.000Z","key":1486685160000,"doc_count":9},{"key_as_string":"2017-02-10T00:07:00.000Z","key":1486685220000,"doc_count":11},{"key_as_string":"2017-02-10T00:08:00.000Z","key":1486685280000,"doc_count":8},{"key_as_string":"2017-02-10T00:09:00.000Z","key":1486685340000,"doc_count":11},{"key_as_string":"2017-02-10T00:10:00.000Z","key":1486685400000,"doc_count":10},{"key_as_string":"2017-02-10T00:11:00.000Z","key":1486685460000,"doc_count":14},{"key_as_string":"2017-02-10T00:12:00.000Z","key":1486685520000,"doc_count":5},{"key_as_string":"2017-02-10T00:13:00.000Z","key":1486685580000,"doc_count":6},{"key_as_string":"2017-02-10T00:14:00.000Z","key":1486685640000,"doc_count":8},{"key_as_string":"2017-02-10T00:15:00.000Z","key":1486685700000,"doc_count":11},{"key_as_string":"2017-02-10T00:16:00.000Z","key":1486685760000,"doc_count":15},{"key_as_string":"2017-02-10T00:17:00.000Z","key":1486685820000,"doc_count":8},{"key_as_string":"2017-02-10T00:18:00.000Z","key":1486685880000,"doc_count":12},{"key_as_string":"2017-02-10T00:19:00.000Z","key":1486685940000,"doc_count":7},{"key_as_string":"2017-02-10T00:20:00.000Z","key":1486686000000,"doc_count":11},{"key_as_string":"2017-02-10T00:21:00.000Z","key":1486686060000,"doc_count":20},{"key_as_string":"2017-02-10T00:22:00.000Z","key":1486686120000,"doc_count":7},{"key_as_string":"2017-02-10T00:23:00.000Z","key":1486686180000,"doc_count":11},{"key_as_string":"2017-02-10T00:24:00.000Z","key":1486686240000,"doc_count":8},{"key_as_string":"2017-02-10T00:25:00.000Z","key":1486686300000,"doc_count":9},{"key_as_string":"2017-02-10T00:26:00.000Z","key":1486686360000,"doc_count":15},{"key_as_string":"2017-02-10T00:27:00.000Z","key":1486686420000,"doc_count":12},{"key_as_string":"2017-02-10T00:28:00.000Z","key":1486686480000,"doc_count":13},{"key_as_string":"2017-02-10T00:29:00.000Z","key":1486686540000,"doc_count":10},{"key_as_string":"2017-02-10T00:30:00.000Z","key":1486686600000,"doc_count":14},{"key_as_string":"2017-02-10T00:31:00.000Z","key":1486686660000,"doc_count":9},{"key_as_string":"2017-02-10T00:32:00.000Z","key":1486686720000,"doc_count":6},{"key_as_string":"2017-02-10T00:33:00.000Z","key":1486686780000,"doc_count":13},{"key_as_string":"2017-02-10T00:34:00.000Z","key":1486686840000,"doc_count":8},{"key_as_string":"2017-02-10T00:35:00.000Z","key":1486686900000,"doc_count":12},{"key_as_string":"2017-02-10T00:36:00.000Z","key":1486686960000,"doc_count":10},{"key_as_string":"2017-02-10T00:37:00.000Z","key":1486687020000,"doc_count":11},{"key_as_string":"2017-02-10T00:38:00.000Z","key":1486687080000,"doc_count":12},{"key_as_string":"2017-02-10T00:39:00.000Z","key":1486687140000,"doc_count":11},{"key_as_string":"2017-02-10T00:40:00.000Z","key":1486687200000,"doc_count":9},{"key_as_string":"2017-02-10T00:41:00.000Z","key":1486687260000,"doc_count":15},{"key_as_string":"2017-02-10T00:42:00.000Z","key":1486687320000,"doc_count":11},{"key_as_string":"2017-02-10T00:43:00.000Z","key":1486687380000,"doc_count":10},{"key_as_string":"2017-02-10T00:44:00.000Z","key":1486687440000,"doc_count":6},{"key_as_string":"2017-02-10T00:45:00.000Z","key":1486687500000,"doc_count":9},{"key_as_string":"2017-02-10T00:46:00.000Z","key":1486687560000,"doc_count":6},{"key_as_string":"2017-02-10T00:47:00.000Z","key":1486687620000,"doc_count":15},{"key_as_string":"2017-02-10T00:48:00.000Z","key":1486687680000,"doc_count":5},{"key_as_string":"2017-02-10T00:49:00.000Z","key":1486687740000,"doc_count":8},{"key_as_string":"2017-02-10T00:50:00.000Z","key":1486687800000,"doc_count":14},{"key_as_string":"2017-02-10T00:51:00.000Z","key":1486687860000,"doc_count":8},{"key_as_string":"2017-02-10T00:52:00.000Z","key":1486687920000,"doc_count":10},{"key_as_string":"2017-02-10T00:53:00.000Z","key":1486687980000,"doc_count":11},{"key_as_string":"2017-02-10T00:54:00.000Z","key":1486688040000,"doc_count":11},{"key_as_string":"2017-02-10T00:55:00.000Z","key":1486688100000,"doc_count":14},{"key_as_string":"2017-02-10T00:56:00.000Z","key":1486688160000,"doc_count":11},{"key_as_string":"2017-02-10T00:57:00.000Z","key":1486688220000,"doc_count":9},{"key_as_string":"2017-02-10T00:58:00.000Z","key":1486688280000,"doc_count":10},{"key_as_string":"2017-02-10T00:59:00.000Z","key":1486688340000,"doc_count":12},{"key_as_string":"2017-02-10T01:00:00.000Z","key":1486688400000,"doc_count":8},{"key_as_string":"2017-02-10T01:01:00.000Z","key":1486688460000,"doc_count":14},{"key_as_string":"2017-02-10T01:02:00.000Z","key":1486688520000,"doc_count":10},{"key_as_string":"2017-02-10T01:03:00.000Z","key":1486688580000,"doc_count":7},{"key_as_string":"2017-02-10T01:04:00.000Z","key":1486688640000,"doc_count":14},{"key_as_string":"2017-02-10T01:05:00.000Z","key":1486688700000,"doc_count":5},{"key_as_string":"2017-02-10T01:06:00.000Z","key":1486688760000,"doc_count":19},{"key_as_string":"2017-02-10T01:07:00.000Z","key":1486688820000,"doc_count":7},{"key_as_string":"2017-02-10T01:08:00.000Z","key":1486688880000,"doc_count":14},{"key_as_string":"2017-02-10T01:09:00.000Z","key":1486688940000,"doc_count":6},{"key_as_string":"2017-02-10T01:10:00.000Z","key":1486689000000,"doc_count":11},{"key_as_string":"2017-02-10T01:11:00.000Z","key":1486689060000,"doc_count":16},{"key_as_string":"2017-02-10T01:12:00.000Z","key":1486689120000,"doc_count":11},{"key_as_string":"2017-02-10T01:13:00.000Z","key":1486689180000,"doc_count":6},{"key_as_string":"2017-02-10T01:14:00.000Z","key":1486689240000,"doc_count":10},{"key_as_string":"2017-02-10T01:15:00.000Z","key":1486689300000,"doc_count":10},{"key_as_string":"2017-02-10T01:16:00.000Z","key":1486689360000,"doc_count":10},{"key_as_string":"2017-02-10T01:17:00.000Z","key":1486689420000,"doc_count":11},{"key_as_string":"2017-02-10T01:18:00.000Z","key":1486689480000,"doc_count":7},{"key_as_string":"2017-02-10T01:19:00.000Z","key":1486689540000,"doc_count":8},{"key_as_string":"2017-02-10T01:20:00.000Z","key":1486689600000,"doc_count":17},{"key_as_string":"2017-02-10T01:21:00.000Z","key":1486689660000,"doc_count":12},{"key_as_string":"2017-02-10T01:22:00.000Z","key":1486689720000,"doc_count":12},{"key_as_string":"2017-02-10T01:23:00.000Z","key":1486689780000,"doc_count":12},{"key_as_string":"2017-02-10T01:24:00.000Z","key":1486689840000,"doc_count":13},{"key_as_string":"2017-02-10T01:25:00.000Z","key":1486689900000,"doc_count":9},{"key_as_string":"2017-02-10T01:26:00.000Z","key":1486689960000,"doc_count":8},{"key_as_string":"2017-02-10T01:27:00.000Z","key":1486690020000,"doc_count":9},{"key_as_string":"2017-02-10T01:28:00.000Z","key":1486690080000,"doc_count":10},{"key_as_string":"2017-02-10T01:29:00.000Z","key":1486690140000,"doc_count":11},{"key_as_string":"2017-02-10T01:30:00.000Z","key":1486690200000,"doc_count":5},{"key_as_string":"2017-02-10T01:31:00.000Z","key":1486690260000,"doc_count":12},{"key_as_string":"2017-02-10T01:32:00.000Z","key":1486690320000,"doc_count":8},{"key_as_string":"2017-02-10T01:33:00.000Z","key":1486690380000,"doc_count":8},{"key_as_string":"2017-02-10T01:34:00.000Z","key":1486690440000,"doc_count":11},{"key_as_string":"2017-02-10T01:35:00.000Z","key":1486690500000,"doc_count":7},{"key_as_string":"2017-02-10T01:36:00.000Z","key":1486690560000,"doc_count":16},{"key_as_string":"2017-02-10T01:37:00.000Z","key":1486690620000,"doc_count":9},{"key_as_string":"2017-02-10T01:38:00.000Z","key":1486690680000,"doc_count":3},{"key_as_string":"2017-02-10T01:39:00.000Z","key":1486690740000,"doc_count":14},{"key_as_string":"2017-02-10T01:40:00.000Z","key":1486690800000,"doc_count":3},{"key_as_string":"2017-02-10T01:41:00.000Z","key":1486690860000,"doc_count":14},{"key_as_string":"2017-02-10T01:42:00.000Z","key":1486690920000,"doc_count":11},{"key_as_string":"2017-02-10T01:43:00.000Z","key":1486690980000,"doc_count":8},{"key_as_string":"2017-02-10T01:44:00.000Z","key":1486691040000,"doc_count":13},{"key_as_string":"2017-02-10T01:45:00.000Z","key":1486691100000,"doc_count":6},{"key_as_string":"2017-02-10T01:46:00.000Z","key":1486691160000,"doc_count":16},{"key_as_string":"2017-02-10T01:47:00.000Z","key":1486691220000,"doc_count":12},{"key_as_string":"2017-02-10T01:48:00.000Z","key":1486691280000,"doc_count":8},{"key_as_string":"2017-02-10T01:49:00.000Z","key":1486691340000,"doc_count":17},{"key_as_string":"2017-02-10T01:50:00.000Z","key":1486691400000,"doc_count":9},{"key_as_string":"2017-02-10T01:51:00.000Z","key":1486691460000,"doc_count":11},{"key_as_string":"2017-02-10T01:52:00.000Z","key":1486691520000,"doc_count":10},{"key_as_string":"2017-02-10T01:53:00.000Z","key":1486691580000,"doc_count":13},{"key_as_string":"2017-02-10T01:54:00.000Z","key":1486691640000,"doc_count":11},{"key_as_string":"2017-02-10T01:55:00.000Z","key":1486691700000,"doc_count":9},{"key_as_string":"2017-02-10T01:56:00.000Z","key":1486691760000,"doc_count":11},{"key_as_string":"2017-02-10T01:57:00.000Z","key":1486691820000,"doc_count":8},{"key_as_string":"2017-02-10T01:58:00.000Z","key":1486691880000,"doc_count":14},{"key_as_string":"2017-02-10T01:59:00.000Z","key":1486691940000,"doc_count":8},{"key_as_string":"2017-02-10T02:00:00.000Z","key":1486692000000,"doc_count":4},{"key_as_string":"2017-02-10T02:01:00.000Z","key":1486692060000,"doc_count":13},{"key_as_string":"2017-02-10T02:02:00.000Z","key":1486692120000,"doc_count":8},{"key_as_string":"2017-02-10T02:03:00.000Z","key":1486692180000,"doc_count":9},{"key_as_string":"2017-02-10T02:04:00.000Z","key":1486692240000,"doc_count":9},{"key_as_string":"2017-02-10T02:05:00.000Z","key":1486692300000,"doc_count":14},{"key_as_string":"2017-02-10T02:06:00.000Z","key":1486692360000,"doc_count":7},{"key_as_string":"2017-02-10T02:07:00.000Z","key":1486692420000,"doc_count":9},{"key_as_string":"2017-02-10T02:08:00.000Z","key":1486692480000,"doc_count":16},{"key_as_string":"2017-02-10T02:09:00.000Z","key":1486692540000,"doc_count":10},{"key_as_string":"2017-02-10T02:10:00.000Z","key":1486692600000,"doc_count":11},{"key_as_string":"2017-02-10T02:11:00.000Z","key":1486692660000,"doc_count":7},{"key_as_string":"2017-02-10T02:12:00.000Z","key":1486692720000,"doc_count":12},{"key_as_string":"2017-02-10T02:13:00.000Z","key":1486692780000,"doc_count":11},{"key_as_string":"2017-02-10T02:14:00.000Z","key":1486692840000,"doc_count":5},{"key_as_string":"2017-02-10T02:15:00.000Z","key":1486692900000,"doc_count":14},{"key_as_string":"2017-02-10T02:16:00.000Z","key":1486692960000,"doc_count":13},{"key_as_string":"2017-02-10T02:17:00.000Z","key":1486693020000,"doc_count":7},{"key_as_string":"2017-02-10T02:18:00.000Z","key":1486693080000,"doc_count":11},{"key_as_string":"2017-02-10T02:19:00.000Z","key":1486693140000,"doc_count":10},{"key_as_string":"2017-02-10T02:20:00.000Z","key":1486693200000,"doc_count":8},{"key_as_string":"2017-02-10T02:21:00.000Z","key":1486693260000,"doc_count":9},{"key_as_string":"2017-02-10T02:22:00.000Z","key":1486693320000,"doc_count":12},{"key_as_string":"2017-02-10T02:23:00.000Z","key":1486693380000,"doc_count":14},{"key_as_string":"2017-02-10T02:24:00.000Z","key":1486693440000,"doc_count":8},{"key_as_string":"2017-02-10T02:25:00.000Z","key":1486693500000,"doc_count":10},{"key_as_string":"2017-02-10T02:26:00.000Z","key":1486693560000,"doc_count":10},{"key_as_string":"2017-02-10T02:27:00.000Z","key":1486693620000,"doc_count":8},{"key_as_string":"2017-02-10T02:28:00.000Z","key":1486693680000,"doc_count":7},{"key_as_string":"2017-02-10T02:29:00.000Z","key":1486693740000,"doc_count":7},{"key_as_string":"2017-02-10T02:30:00.000Z","key":1486693800000,"doc_count":13},{"key_as_string":"2017-02-10T02:31:00.000Z","key":1486693860000,"doc_count":7},{"key_as_string":"2017-02-10T02:32:00.000Z","key":1486693920000,"doc_count":14},{"key_as_string":"2017-02-10T02:33:00.000Z","key":1486693980000,"doc_count":8},{"key_as_string":"2017-02-10T02:34:00.000Z","key":1486694040000,"doc_count":10},{"key_as_string":"2017-02-10T02:35:00.000Z","key":1486694100000,"doc_count":10},{"key_as_string":"2017-02-10T02:36:00.000Z","key":1486694160000,"doc_count":10},{"key_as_string":"2017-02-10T02:37:00.000Z","key":1486694220000,"doc_count":13},{"key_as_string":"2017-02-10T02:38:00.000Z","key":1486694280000,"doc_count":7},{"key_as_string":"2017-02-10T02:39:00.000Z","key":1486694340000,"doc_count":13},{"key_as_string":"2017-02-10T02:40:00.000Z","key":1486694400000,"doc_count":14},{"key_as_string":"2017-02-10T02:41:00.000Z","key":1486694460000,"doc_count":12},{"key_as_string":"2017-02-10T02:42:00.000Z","key":1486694520000,"doc_count":9},{"key_as_string":"2017-02-10T02:43:00.000Z","key":1486694580000,"doc_count":9},{"key_as_string":"2017-02-10T02:44:00.000Z","key":1486694640000,"doc_count":10},{"key_as_string":"2017-02-10T02:45:00.000Z","key":1486694700000,"doc_count":15},{"key_as_string":"2017-02-10T02:46:00.000Z","key":1486694760000,"doc_count":8},{"key_as_string":"2017-02-10T02:47:00.000Z","key":1486694820000,"doc_count":11},{"key_as_string":"2017-02-10T02:48:00.000Z","key":1486694880000,"doc_count":12},{"key_as_string":"2017-02-10T02:49:00.000Z","key":1486694940000,"doc_count":10},{"key_as_string":"2017-02-10T02:50:00.000Z","key":1486695000000,"doc_count":9},{"key_as_string":"2017-02-10T02:51:00.000Z","key":1486695060000,"doc_count":16},{"key_as_string":"2017-02-10T02:52:00.000Z","key":1486695120000,"doc_count":8},{"key_as_string":"2017-02-10T02:53:00.000Z","key":1486695180000,"doc_count":9},{"key_as_string":"2017-02-10T02:54:00.000Z","key":1486695240000,"doc_count":15},{"key_as_string":"2017-02-10T02:55:00.000Z","key":1486695300000,"doc_count":9},{"key_as_string":"2017-02-10T02:56:00.000Z","key":1486695360000,"doc_count":9},{"key_as_string":"2017-02-10T02:57:00.000Z","key":1486695420000,"doc_count":9},{"key_as_string":"2017-02-10T02:58:00.000Z","key":1486695480000,"doc_count":10},{"key_as_string":"2017-02-10T02:59:00.000Z","key":1486695540000,"doc_count":10},{"key_as_string":"2017-02-10T03:00:00.000Z","key":1486695600000,"doc_count":16},{"key_as_string":"2017-02-10T03:01:00.000Z","key":1486695660000,"doc_count":7},{"key_as_string":"2017-02-10T03:02:00.000Z","key":1486695720000,"doc_count":11},{"key_as_string":"2017-02-10T03:03:00.000Z","key":1486695780000,"doc_count":15},{"key_as_string":"2017-02-10T03:04:00.000Z","key":1486695840000,"doc_count":7},{"key_as_string":"2017-02-10T03:05:00.000Z","key":1486695900000,"doc_count":9},{"key_as_string":"2017-02-10T03:06:00.000Z","key":1486695960000,"doc_count":9},{"key_as_string":"2017-02-10T03:07:00.000Z","key":1486696020000,"doc_count":10},{"key_as_string":"2017-02-10T03:08:00.000Z","key":1486696080000,"doc_count":10},{"key_as_string":"2017-02-10T03:09:00.000Z","key":1486696140000,"doc_count":18},{"key_as_string":"2017-02-10T03:10:00.000Z","key":1486696200000,"doc_count":13},{"key_as_string":"2017-02-10T03:11:00.000Z","key":1486696260000,"doc_count":8},{"key_as_string":"2017-02-10T03:12:00.000Z","key":1486696320000,"doc_count":11},{"key_as_string":"2017-02-10T03:13:00.000Z","key":1486696380000,"doc_count":9},{"key_as_string":"2017-02-10T03:14:00.000Z","key":1486696440000,"doc_count":10},{"key_as_string":"2017-02-10T03:15:00.000Z","key":1486696500000,"doc_count":16},{"key_as_string":"2017-02-10T03:16:00.000Z","key":1486696560000,"doc_count":10},{"key_as_string":"2017-02-10T03:17:00.000Z","key":1486696620000,"doc_count":13},{"key_as_string":"2017-02-10T03:18:00.000Z","key":1486696680000,"doc_count":7},{"key_as_string":"2017-02-10T03:19:00.000Z","key":1486696740000,"doc_count":13},{"key_as_string":"2017-02-10T03:20:00.000Z","key":1486696800000,"doc_count":9},{"key_as_string":"2017-02-10T03:21:00.000Z","key":1486696860000,"doc_count":8},{"key_as_string":"2017-02-10T03:22:00.000Z","key":1486696920000,"doc_count":16},{"key_as_string":"2017-02-10T03:23:00.000Z","key":1486696980000,"doc_count":9},{"key_as_string":"2017-02-10T03:24:00.000Z","key":1486697040000,"doc_count":14},{"key_as_string":"2017-02-10T03:25:00.000Z","key":1486697100000,"doc_count":11},{"key_as_string":"2017-02-10T03:26:00.000Z","key":1486697160000,"doc_count":11},{"key_as_string":"2017-02-10T03:27:00.000Z","key":1486697220000,"doc_count":9},{"key_as_string":"2017-02-10T03:28:00.000Z","key":1486697280000,"doc_count":9},{"key_as_string":"2017-02-10T03:29:00.000Z","key":1486697340000,"doc_count":11},{"key_as_string":"2017-02-10T03:30:00.000Z","key":1486697400000,"doc_count":7},{"key_as_string":"2017-02-10T03:31:00.000Z","key":1486697460000,"doc_count":14},{"key_as_string":"2017-02-10T03:32:00.000Z","key":1486697520000,"doc_count":7},{"key_as_string":"2017-02-10T03:33:00.000Z","key":1486697580000,"doc_count":14},{"key_as_string":"2017-02-10T03:34:00.000Z","key":1486697640000,"doc_count":8},{"key_as_string":"2017-02-10T03:35:00.000Z","key":1486697700000,"doc_count":8},{"key_as_string":"2017-02-10T03:36:00.000Z","key":1486697760000,"doc_count":15},{"key_as_string":"2017-02-10T03:37:00.000Z","key":1486697820000,"doc_count":9},{"key_as_string":"2017-02-10T03:38:00.000Z","key":1486697880000,"doc_count":12},{"key_as_string":"2017-02-10T03:39:00.000Z","key":1486697940000,"doc_count":15},{"key_as_string":"2017-02-10T03:40:00.000Z","key":1486698000000,"doc_count":12},{"key_as_string":"2017-02-10T03:41:00.000Z","key":1486698060000,"doc_count":12},{"key_as_string":"2017-02-10T03:42:00.000Z","key":1486698120000,"doc_count":10},{"key_as_string":"2017-02-10T03:43:00.000Z","key":1486698180000,"doc_count":11},{"key_as_string":"2017-02-10T03:44:00.000Z","key":1486698240000,"doc_count":12},{"key_as_string":"2017-02-10T03:45:00.000Z","key":1486698300000,"doc_count":9},{"key_as_string":"2017-02-10T03:46:00.000Z","key":1486698360000,"doc_count":13},{"key_as_string":"2017-02-10T03:47:00.000Z","key":1486698420000,"doc_count":8},{"key_as_string":"2017-02-10T03:48:00.000Z","key":1486698480000,"doc_count":15},{"key_as_string":"2017-02-10T03:49:00.000Z","key":1486698540000,"doc_count":8},{"key_as_string":"2017-02-10T03:50:00.000Z","key":1486698600000,"doc_count":12},{"key_as_string":"2017-02-10T03:51:00.000Z","key":1486698660000,"doc_count":16},{"key_as_string":"2017-02-10T03:52:00.000Z","key":1486698720000,"doc_count":7},{"key_as_string":"2017-02-10T03:53:00.000Z","key":1486698780000,"doc_count":12},{"key_as_string":"2017-02-10T03:54:00.000Z","key":1486698840000,"doc_count":8},{"key_as_string":"2017-02-10T03:55:00.000Z","key":1486698900000,"doc_count":7},{"key_as_string":"2017-02-10T03:56:00.000Z","key":1486698960000,"doc_count":13},{"key_as_string":"2017-02-10T03:57:00.000Z","key":1486699020000,"doc_count":8},{"key_as_string":"2017-02-10T03:58:00.000Z","key":1486699080000,"doc_count":10},{"key_as_string":"2017-02-10T03:59:00.000Z","key":1486699140000,"doc_count":13},{"key_as_string":"2017-02-10T04:00:00.000Z","key":1486699200000,"doc_count":11},{"key_as_string":"2017-02-10T04:01:00.000Z","key":1486699260000,"doc_count":10},{"key_as_string":"2017-02-10T04:02:00.000Z","key":1486699320000,"doc_count":12},{"key_as_string":"2017-02-10T04:03:00.000Z","key":1486699380000,"doc_count":9},{"key_as_string":"2017-02-10T04:04:00.000Z","key":1486699440000,"doc_count":13},{"key_as_string":"2017-02-10T04:05:00.000Z","key":1486699500000,"doc_count":8},{"key_as_string":"2017-02-10T04:06:00.000Z","key":1486699560000,"doc_count":15},{"key_as_string":"2017-02-10T04:07:00.000Z","key":1486699620000,"doc_count":11},{"key_as_string":"2017-02-10T04:08:00.000Z","key":1486699680000,"doc_count":11},{"key_as_string":"2017-02-10T04:09:00.000Z","key":1486699740000,"doc_count":16},{"key_as_string":"2017-02-10T04:10:00.000Z","key":1486699800000,"doc_count":8},{"key_as_string":"2017-02-10T04:11:00.000Z","key":1486699860000,"doc_count":15},{"key_as_string":"2017-02-10T04:12:00.000Z","key":1486699920000,"doc_count":8},{"key_as_string":"2017-02-10T04:13:00.000Z","key":1486699980000,"doc_count":11},{"key_as_string":"2017-02-10T04:14:00.000Z","key":1486700040000,"doc_count":11},{"key_as_string":"2017-02-10T04:15:00.000Z","key":1486700100000,"doc_count":13},{"key_as_string":"2017-02-10T04:16:00.000Z","key":1486700160000,"doc_count":6},{"key_as_string":"2017-02-10T04:17:00.000Z","key":1486700220000,"doc_count":11},{"key_as_string":"2017-02-10T04:18:00.000Z","key":1486700280000,"doc_count":11},{"key_as_string":"2017-02-10T04:19:00.000Z","key":1486700340000,"doc_count":9},{"key_as_string":"2017-02-10T04:20:00.000Z","key":1486700400000,"doc_count":17},{"key_as_string":"2017-02-10T04:21:00.000Z","key":1486700460000,"doc_count":7},{"key_as_string":"2017-02-10T04:22:00.000Z","key":1486700520000,"doc_count":14},{"key_as_string":"2017-02-10T04:23:00.000Z","key":1486700580000,"doc_count":13},{"key_as_string":"2017-02-10T04:24:00.000Z","key":1486700640000,"doc_count":7},{"key_as_string":"2017-02-10T04:25:00.000Z","key":1486700700000,"doc_count":11},{"key_as_string":"2017-02-10T04:26:00.000Z","key":1486700760000,"doc_count":12},{"key_as_string":"2017-02-10T04:27:00.000Z","key":1486700820000,"doc_count":11},{"key_as_string":"2017-02-10T04:28:00.000Z","key":1486700880000,"doc_count":9},{"key_as_string":"2017-02-10T04:29:00.000Z","key":1486700940000,"doc_count":9},{"key_as_string":"2017-02-10T04:30:00.000Z","key":1486701000000,"doc_count":10},{"key_as_string":"2017-02-10T04:31:00.000Z","key":1486701060000,"doc_count":10},{"key_as_string":"2017-02-10T04:32:00.000Z","key":1486701120000,"doc_count":10},{"key_as_string":"2017-02-10T04:33:00.000Z","key":1486701180000,"doc_count":11},{"key_as_string":"2017-02-10T04:34:00.000Z","key":1486701240000,"doc_count":13},{"key_as_string":"2017-02-10T04:35:00.000Z","key":1486701300000,"doc_count":6},{"key_as_string":"2017-02-10T04:36:00.000Z","key":1486701360000,"doc_count":8},{"key_as_string":"2017-02-10T04:37:00.000Z","key":1486701420000,"doc_count":14},{"key_as_string":"2017-02-10T04:38:00.000Z","key":1486701480000,"doc_count":9},{"key_as_string":"2017-02-10T04:39:00.000Z","key":1486701540000,"doc_count":12},{"key_as_string":"2017-02-10T04:40:00.000Z","key":1486701600000,"doc_count":10},{"key_as_string":"2017-02-10T04:41:00.000Z","key":1486701660000,"doc_count":9},{"key_as_string":"2017-02-10T04:42:00.000Z","key":1486701720000,"doc_count":10},{"key_as_string":"2017-02-10T04:43:00.000Z","key":1486701780000,"doc_count":9},{"key_as_string":"2017-02-10T04:44:00.000Z","key":1486701840000,"doc_count":11},{"key_as_string":"2017-02-10T04:45:00.000Z","key":1486701900000,"doc_count":10},{"key_as_string":"2017-02-10T04:46:00.000Z","key":1486701960000,"doc_count":19},{"key_as_string":"2017-02-10T04:47:00.000Z","key":1486702020000,"doc_count":11},{"key_as_string":"2017-02-10T04:48:00.000Z","key":1486702080000,"doc_count":10},{"key_as_string":"2017-02-10T04:49:00.000Z","key":1486702140000,"doc_count":10},{"key_as_string":"2017-02-10T04:50:00.000Z","key":1486702200000,"doc_count":10},{"key_as_string":"2017-02-10T04:51:00.000Z","key":1486702260000,"doc_count":11},{"key_as_string":"2017-02-10T04:52:00.000Z","key":1486702320000,"doc_count":17},{"key_as_string":"2017-02-10T04:53:00.000Z","key":1486702380000,"doc_count":6},{"key_as_string":"2017-02-10T04:54:00.000Z","key":1486702440000,"doc_count":7},{"key_as_string":"2017-02-10T04:55:00.000Z","key":1486702500000,"doc_count":10},{"key_as_string":"2017-02-10T04:56:00.000Z","key":1486702560000,"doc_count":10},{"key_as_string":"2017-02-10T04:57:00.000Z","key":1486702620000,"doc_count":10},{"key_as_string":"2017-02-10T04:58:00.000Z","key":1486702680000,"doc_count":11},{"key_as_string":"2017-02-10T04:59:00.000Z","key":1486702740000,"doc_count":10},{"key_as_string":"2017-02-10T05:00:00.000Z","key":1486702800000,"doc_count":8},{"key_as_string":"2017-02-10T05:01:00.000Z","key":1486702860000,"doc_count":13},{"key_as_string":"2017-02-10T05:02:00.000Z","key":1486702920000,"doc_count":11},{"key_as_string":"2017-02-10T05:03:00.000Z","key":1486702980000,"doc_count":7},{"key_as_string":"2017-02-10T05:04:00.000Z","key":1486703040000,"doc_count":10},{"key_as_string":"2017-02-10T05:05:00.000Z","key":1486703100000,"doc_count":10},{"key_as_string":"2017-02-10T05:06:00.000Z","key":1486703160000,"doc_count":10},{"key_as_string":"2017-02-10T05:07:00.000Z","key":1486703220000,"doc_count":9},{"key_as_string":"2017-02-10T05:08:00.000Z","key":1486703280000,"doc_count":9},{"key_as_string":"2017-02-10T05:09:00.000Z","key":1486703340000,"doc_count":15},{"key_as_string":"2017-02-10T05:10:00.000Z","key":1486703400000,"doc_count":12},{"key_as_string":"2017-02-10T05:11:00.000Z","key":1486703460000,"doc_count":11},{"key_as_string":"2017-02-10T05:12:00.000Z","key":1486703520000,"doc_count":11},{"key_as_string":"2017-02-10T05:13:00.000Z","key":1486703580000,"doc_count":10},{"key_as_string":"2017-02-10T05:14:00.000Z","key":1486703640000,"doc_count":14},{"key_as_string":"2017-02-10T05:15:00.000Z","key":1486703700000,"doc_count":9},{"key_as_string":"2017-02-10T05:16:00.000Z","key":1486703760000,"doc_count":11},{"key_as_string":"2017-02-10T05:17:00.000Z","key":1486703820000,"doc_count":8},{"key_as_string":"2017-02-10T05:18:00.000Z","key":1486703880000,"doc_count":11},{"key_as_string":"2017-02-10T05:19:00.000Z","key":1486703940000,"doc_count":7},{"key_as_string":"2017-02-10T05:20:00.000Z","key":1486704000000,"doc_count":13},{"key_as_string":"2017-02-10T05:21:00.000Z","key":1486704060000,"doc_count":10},{"key_as_string":"2017-02-10T05:22:00.000Z","key":1486704120000,"doc_count":13},{"key_as_string":"2017-02-10T05:23:00.000Z","key":1486704180000,"doc_count":11},{"key_as_string":"2017-02-10T05:24:00.000Z","key":1486704240000,"doc_count":10},{"key_as_string":"2017-02-10T05:25:00.000Z","key":1486704300000,"doc_count":16},{"key_as_string":"2017-02-10T05:26:00.000Z","key":1486704360000,"doc_count":10},{"key_as_string":"2017-02-10T05:27:00.000Z","key":1486704420000,"doc_count":12},{"key_as_string":"2017-02-10T05:28:00.000Z","key":1486704480000,"doc_count":15},{"key_as_string":"2017-02-10T05:29:00.000Z","key":1486704540000,"doc_count":9},{"key_as_string":"2017-02-10T05:30:00.000Z","key":1486704600000,"doc_count":11},{"key_as_string":"2017-02-10T05:31:00.000Z","key":1486704660000,"doc_count":8},{"key_as_string":"2017-02-10T05:32:00.000Z","key":1486704720000,"doc_count":10},{"key_as_string":"2017-02-10T05:33:00.000Z","key":1486704780000,"doc_count":12},{"key_as_string":"2017-02-10T05:34:00.000Z","key":1486704840000,"doc_count":11},{"key_as_string":"2017-02-10T05:35:00.000Z","key":1486704900000,"doc_count":8},{"key_as_string":"2017-02-10T05:36:00.000Z","key":1486704960000,"doc_count":12},{"key_as_string":"2017-02-10T05:37:00.000Z","key":1486705020000,"doc_count":8},{"key_as_string":"2017-02-10T05:38:00.000Z","key":1486705080000,"doc_count":8},{"key_as_string":"2017-02-10T05:39:00.000Z","key":1486705140000,"doc_count":12},{"key_as_string":"2017-02-10T05:40:00.000Z","key":1486705200000,"doc_count":14},{"key_as_string":"2017-02-10T05:41:00.000Z","key":1486705260000,"doc_count":15},{"key_as_string":"2017-02-10T05:42:00.000Z","key":1486705320000,"doc_count":5},{"key_as_string":"2017-02-10T05:43:00.000Z","key":1486705380000,"doc_count":11},{"key_as_string":"2017-02-10T05:44:00.000Z","key":1486705440000,"doc_count":12},{"key_as_string":"2017-02-10T05:45:00.000Z","key":1486705500000,"doc_count":6},{"key_as_string":"2017-02-10T05:46:00.000Z","key":1486705560000,"doc_count":12},{"key_as_string":"2017-02-10T05:47:00.000Z","key":1486705620000,"doc_count":10},{"key_as_string":"2017-02-10T05:48:00.000Z","key":1486705680000,"doc_count":12},{"key_as_string":"2017-02-10T05:49:00.000Z","key":1486705740000,"doc_count":17},{"key_as_string":"2017-02-10T05:50:00.000Z","key":1486705800000,"doc_count":10},{"key_as_string":"2017-02-10T05:51:00.000Z","key":1486705860000,"doc_count":13},{"key_as_string":"2017-02-10T05:52:00.000Z","key":1486705920000,"doc_count":13},{"key_as_string":"2017-02-10T05:53:00.000Z","key":1486705980000,"doc_count":10},{"key_as_string":"2017-02-10T05:54:00.000Z","key":1486706040000,"doc_count":10},{"key_as_string":"2017-02-10T05:55:00.000Z","key":1486706100000,"doc_count":15},{"key_as_string":"2017-02-10T05:56:00.000Z","key":1486706160000,"doc_count":8},{"key_as_string":"2017-02-10T05:57:00.000Z","key":1486706220000,"doc_count":10},{"key_as_string":"2017-02-10T05:58:00.000Z","key":1486706280000,"doc_count":11},{"key_as_string":"2017-02-10T05:59:00.000Z","key":1486706340000,"doc_count":10},{"key_as_string":"2017-02-10T06:00:00.000Z","key":1486706400000,"doc_count":19},{"key_as_string":"2017-02-10T06:01:00.000Z","key":1486706460000,"doc_count":13},{"key_as_string":"2017-02-10T06:02:00.000Z","key":1486706520000,"doc_count":14},{"key_as_string":"2017-02-10T06:03:00.000Z","key":1486706580000,"doc_count":11},{"key_as_string":"2017-02-10T06:04:00.000Z","key":1486706640000,"doc_count":13},{"key_as_string":"2017-02-10T06:05:00.000Z","key":1486706700000,"doc_count":6},{"key_as_string":"2017-02-10T06:06:00.000Z","key":1486706760000,"doc_count":12},{"key_as_string":"2017-02-10T06:07:00.000Z","key":1486706820000,"doc_count":14},{"key_as_string":"2017-02-10T06:08:00.000Z","key":1486706880000,"doc_count":12},{"key_as_string":"2017-02-10T06:09:00.000Z","key":1486706940000,"doc_count":14},{"key_as_string":"2017-02-10T06:10:00.000Z","key":1486707000000,"doc_count":8},{"key_as_string":"2017-02-10T06:11:00.000Z","key":1486707060000,"doc_count":6},{"key_as_string":"2017-02-10T06:12:00.000Z","key":1486707120000,"doc_count":17},{"key_as_string":"2017-02-10T06:13:00.000Z","key":1486707180000,"doc_count":14},{"key_as_string":"2017-02-10T06:14:00.000Z","key":1486707240000,"doc_count":5},{"key_as_string":"2017-02-10T06:15:00.000Z","key":1486707300000,"doc_count":17},{"key_as_string":"2017-02-10T06:16:00.000Z","key":1486707360000,"doc_count":9},{"key_as_string":"2017-02-10T06:17:00.000Z","key":1486707420000,"doc_count":13},{"key_as_string":"2017-02-10T06:18:00.000Z","key":1486707480000,"doc_count":8},{"key_as_string":"2017-02-10T06:19:00.000Z","key":1486707540000,"doc_count":14},{"key_as_string":"2017-02-10T06:20:00.000Z","key":1486707600000,"doc_count":8},{"key_as_string":"2017-02-10T06:21:00.000Z","key":1486707660000,"doc_count":11},{"key_as_string":"2017-02-10T06:22:00.000Z","key":1486707720000,"doc_count":15},{"key_as_string":"2017-02-10T06:23:00.000Z","key":1486707780000,"doc_count":16},{"key_as_string":"2017-02-10T06:24:00.000Z","key":1486707840000,"doc_count":11},{"key_as_string":"2017-02-10T06:25:00.000Z","key":1486707900000,"doc_count":10},{"key_as_string":"2017-02-10T06:26:00.000Z","key":1486707960000,"doc_count":8},{"key_as_string":"2017-02-10T06:27:00.000Z","key":1486708020000,"doc_count":18},{"key_as_string":"2017-02-10T06:28:00.000Z","key":1486708080000,"doc_count":11},{"key_as_string":"2017-02-10T06:29:00.000Z","key":1486708140000,"doc_count":10},{"key_as_string":"2017-02-10T06:30:00.000Z","key":1486708200000,"doc_count":9},{"key_as_string":"2017-02-10T06:31:00.000Z","key":1486708260000,"doc_count":13},{"key_as_string":"2017-02-10T06:32:00.000Z","key":1486708320000,"doc_count":10},{"key_as_string":"2017-02-10T06:33:00.000Z","key":1486708380000,"doc_count":12},{"key_as_string":"2017-02-10T06:34:00.000Z","key":1486708440000,"doc_count":10},{"key_as_string":"2017-02-10T06:35:00.000Z","key":1486708500000,"doc_count":9},{"key_as_string":"2017-02-10T06:36:00.000Z","key":1486708560000,"doc_count":17},{"key_as_string":"2017-02-10T06:37:00.000Z","key":1486708620000,"doc_count":15},{"key_as_string":"2017-02-10T06:38:00.000Z","key":1486708680000,"doc_count":11},{"key_as_string":"2017-02-10T06:39:00.000Z","key":1486708740000,"doc_count":12},{"key_as_string":"2017-02-10T06:40:00.000Z","key":1486708800000,"doc_count":11},{"key_as_string":"2017-02-10T06:41:00.000Z","key":1486708860000,"doc_count":13},{"key_as_string":"2017-02-10T06:42:00.000Z","key":1486708920000,"doc_count":10},{"key_as_string":"2017-02-10T06:43:00.000Z","key":1486708980000,"doc_count":12},{"key_as_string":"2017-02-10T06:44:00.000Z","key":1486709040000,"doc_count":14},{"key_as_string":"2017-02-10T06:45:00.000Z","key":1486709100000,"doc_count":7},{"key_as_string":"2017-02-10T06:46:00.000Z","key":1486709160000,"doc_count":17},{"key_as_string":"2017-02-10T06:47:00.000Z","key":1486709220000,"doc_count":9},{"key_as_string":"2017-02-10T06:48:00.000Z","key":1486709280000,"doc_count":12},{"key_as_string":"2017-02-10T06:49:00.000Z","key":1486709340000,"doc_count":14},{"key_as_string":"2017-02-10T06:50:00.000Z","key":1486709400000,"doc_count":15},{"key_as_string":"2017-02-10T06:51:00.000Z","key":1486709460000,"doc_count":12},{"key_as_string":"2017-02-10T06:52:00.000Z","key":1486709520000,"doc_count":8},{"key_as_string":"2017-02-10T06:53:00.000Z","key":1486709580000,"doc_count":13},{"key_as_string":"2017-02-10T06:54:00.000Z","key":1486709640000,"doc_count":15},{"key_as_string":"2017-02-10T06:55:00.000Z","key":1486709700000,"doc_count":8},{"key_as_string":"2017-02-10T06:56:00.000Z","key":1486709760000,"doc_count":7},{"key_as_string":"2017-02-10T06:57:00.000Z","key":1486709820000,"doc_count":18},{"key_as_string":"2017-02-10T06:58:00.000Z","key":1486709880000,"doc_count":11},{"key_as_string":"2017-02-10T06:59:00.000Z","key":1486709940000,"doc_count":14},{"key_as_string":"2017-02-10T07:00:00.000Z","key":1486710000000,"doc_count":8},{"key_as_string":"2017-02-10T07:01:00.000Z","key":1486710060000,"doc_count":12},{"key_as_string":"2017-02-10T07:02:00.000Z","key":1486710120000,"doc_count":14},{"key_as_string":"2017-02-10T07:03:00.000Z","key":1486710180000,"doc_count":9},{"key_as_string":"2017-02-10T07:04:00.000Z","key":1486710240000,"doc_count":13},{"key_as_string":"2017-02-10T07:05:00.000Z","key":1486710300000,"doc_count":12},{"key_as_string":"2017-02-10T07:06:00.000Z","key":1486710360000,"doc_count":15},{"key_as_string":"2017-02-10T07:07:00.000Z","key":1486710420000,"doc_count":19},{"key_as_string":"2017-02-10T07:08:00.000Z","key":1486710480000,"doc_count":11},{"key_as_string":"2017-02-10T07:09:00.000Z","key":1486710540000,"doc_count":16},{"key_as_string":"2017-02-10T07:10:00.000Z","key":1486710600000,"doc_count":11},{"key_as_string":"2017-02-10T07:11:00.000Z","key":1486710660000,"doc_count":13},{"key_as_string":"2017-02-10T07:12:00.000Z","key":1486710720000,"doc_count":12},{"key_as_string":"2017-02-10T07:13:00.000Z","key":1486710780000,"doc_count":9},{"key_as_string":"2017-02-10T07:14:00.000Z","key":1486710840000,"doc_count":21},{"key_as_string":"2017-02-10T07:15:00.000Z","key":1486710900000,"doc_count":11},{"key_as_string":"2017-02-10T07:16:00.000Z","key":1486710960000,"doc_count":6},{"key_as_string":"2017-02-10T07:17:00.000Z","key":1486711020000,"doc_count":16},{"key_as_string":"2017-02-10T07:18:00.000Z","key":1486711080000,"doc_count":15},{"key_as_string":"2017-02-10T07:19:00.000Z","key":1486711140000,"doc_count":13},{"key_as_string":"2017-02-10T07:20:00.000Z","key":1486711200000,"doc_count":15},{"key_as_string":"2017-02-10T07:21:00.000Z","key":1486711260000,"doc_count":14},{"key_as_string":"2017-02-10T07:22:00.000Z","key":1486711320000,"doc_count":14},{"key_as_string":"2017-02-10T07:23:00.000Z","key":1486711380000,"doc_count":13},{"key_as_string":"2017-02-10T07:24:00.000Z","key":1486711440000,"doc_count":10},{"key_as_string":"2017-02-10T07:25:00.000Z","key":1486711500000,"doc_count":11},{"key_as_string":"2017-02-10T07:26:00.000Z","key":1486711560000,"doc_count":12},{"key_as_string":"2017-02-10T07:27:00.000Z","key":1486711620000,"doc_count":15},{"key_as_string":"2017-02-10T07:28:00.000Z","key":1486711680000,"doc_count":7},{"key_as_string":"2017-02-10T07:29:00.000Z","key":1486711740000,"doc_count":18},{"key_as_string":"2017-02-10T07:30:00.000Z","key":1486711800000,"doc_count":14},{"key_as_string":"2017-02-10T07:31:00.000Z","key":1486711860000,"doc_count":12},{"key_as_string":"2017-02-10T07:32:00.000Z","key":1486711920000,"doc_count":16},{"key_as_string":"2017-02-10T07:33:00.000Z","key":1486711980000,"doc_count":12},{"key_as_string":"2017-02-10T07:34:00.000Z","key":1486712040000,"doc_count":15},{"key_as_string":"2017-02-10T07:35:00.000Z","key":1486712100000,"doc_count":12},{"key_as_string":"2017-02-10T07:36:00.000Z","key":1486712160000,"doc_count":10},{"key_as_string":"2017-02-10T07:37:00.000Z","key":1486712220000,"doc_count":12},{"key_as_string":"2017-02-10T07:38:00.000Z","key":1486712280000,"doc_count":13},{"key_as_string":"2017-02-10T07:39:00.000Z","key":1486712340000,"doc_count":8},{"key_as_string":"2017-02-10T07:40:00.000Z","key":1486712400000,"doc_count":11},{"key_as_string":"2017-02-10T07:41:00.000Z","key":1486712460000,"doc_count":13},{"key_as_string":"2017-02-10T07:42:00.000Z","key":1486712520000,"doc_count":19},{"key_as_string":"2017-02-10T07:43:00.000Z","key":1486712580000,"doc_count":10},{"key_as_string":"2017-02-10T07:44:00.000Z","key":1486712640000,"doc_count":19},{"key_as_string":"2017-02-10T07:45:00.000Z","key":1486712700000,"doc_count":8},{"key_as_string":"2017-02-10T07:46:00.000Z","key":1486712760000,"doc_count":13},{"key_as_string":"2017-02-10T07:47:00.000Z","key":1486712820000,"doc_count":17},{"key_as_string":"2017-02-10T07:48:00.000Z","key":1486712880000,"doc_count":14},{"key_as_string":"2017-02-10T07:49:00.000Z","key":1486712940000,"doc_count":13},{"key_as_string":"2017-02-10T07:50:00.000Z","key":1486713000000,"doc_count":14},{"key_as_string":"2017-02-10T07:51:00.000Z","key":1486713060000,"doc_count":11},{"key_as_string":"2017-02-10T07:52:00.000Z","key":1486713120000,"doc_count":16},{"key_as_string":"2017-02-10T07:53:00.000Z","key":1486713180000,"doc_count":13},{"key_as_string":"2017-02-10T07:54:00.000Z","key":1486713240000,"doc_count":12},{"key_as_string":"2017-02-10T07:55:00.000Z","key":1486713300000,"doc_count":13},{"key_as_string":"2017-02-10T07:56:00.000Z","key":1486713360000,"doc_count":11},{"key_as_string":"2017-02-10T07:57:00.000Z","key":1486713420000,"doc_count":9},{"key_as_string":"2017-02-10T07:58:00.000Z","key":1486713480000,"doc_count":11},{"key_as_string":"2017-02-10T07:59:00.000Z","key":1486713540000,"doc_count":14},{"key_as_string":"2017-02-10T08:00:00.000Z","key":1486713600000,"doc_count":9},{"key_as_string":"2017-02-10T08:01:00.000Z","key":1486713660000,"doc_count":13},{"key_as_string":"2017-02-10T08:02:00.000Z","key":1486713720000,"doc_count":13},{"key_as_string":"2017-02-10T08:03:00.000Z","key":1486713780000,"doc_count":12},{"key_as_string":"2017-02-10T08:04:00.000Z","key":1486713840000,"doc_count":19},{"key_as_string":"2017-02-10T08:05:00.000Z","key":1486713900000,"doc_count":9},{"key_as_string":"2017-02-10T08:06:00.000Z","key":1486713960000,"doc_count":15},{"key_as_string":"2017-02-10T08:07:00.000Z","key":1486714020000,"doc_count":9},{"key_as_string":"2017-02-10T08:08:00.000Z","key":1486714080000,"doc_count":15},{"key_as_string":"2017-02-10T08:09:00.000Z","key":1486714140000,"doc_count":11},{"key_as_string":"2017-02-10T08:10:00.000Z","key":1486714200000,"doc_count":10},{"key_as_string":"2017-02-10T08:11:00.000Z","key":1486714260000,"doc_count":13},{"key_as_string":"2017-02-10T08:12:00.000Z","key":1486714320000,"doc_count":8},{"key_as_string":"2017-02-10T08:13:00.000Z","key":1486714380000,"doc_count":13},{"key_as_string":"2017-02-10T08:14:00.000Z","key":1486714440000,"doc_count":15},{"key_as_string":"2017-02-10T08:15:00.000Z","key":1486714500000,"doc_count":17},{"key_as_string":"2017-02-10T08:16:00.000Z","key":1486714560000,"doc_count":13},{"key_as_string":"2017-02-10T08:17:00.000Z","key":1486714620000,"doc_count":17},{"key_as_string":"2017-02-10T08:18:00.000Z","key":1486714680000,"doc_count":12},{"key_as_string":"2017-02-10T08:19:00.000Z","key":1486714740000,"doc_count":17},{"key_as_string":"2017-02-10T08:20:00.000Z","key":1486714800000,"doc_count":15},{"key_as_string":"2017-02-10T08:21:00.000Z","key":1486714860000,"doc_count":12},{"key_as_string":"2017-02-10T08:22:00.000Z","key":1486714920000,"doc_count":12},{"key_as_string":"2017-02-10T08:23:00.000Z","key":1486714980000,"doc_count":14},{"key_as_string":"2017-02-10T08:24:00.000Z","key":1486715040000,"doc_count":15},{"key_as_string":"2017-02-10T08:25:00.000Z","key":1486715100000,"doc_count":13},{"key_as_string":"2017-02-10T08:26:00.000Z","key":1486715160000,"doc_count":11},{"key_as_string":"2017-02-10T08:27:00.000Z","key":1486715220000,"doc_count":15},{"key_as_string":"2017-02-10T08:28:00.000Z","key":1486715280000,"doc_count":11},{"key_as_string":"2017-02-10T08:29:00.000Z","key":1486715340000,"doc_count":13},{"key_as_string":"2017-02-10T08:30:00.000Z","key":1486715400000,"doc_count":12},{"key_as_string":"2017-02-10T08:31:00.000Z","key":1486715460000,"doc_count":12},{"key_as_string":"2017-02-10T08:32:00.000Z","key":1486715520000,"doc_count":16},{"key_as_string":"2017-02-10T08:33:00.000Z","key":1486715580000,"doc_count":12},{"key_as_string":"2017-02-10T08:34:00.000Z","key":1486715640000,"doc_count":12},{"key_as_string":"2017-02-10T08:35:00.000Z","key":1486715700000,"doc_count":13},{"key_as_string":"2017-02-10T08:36:00.000Z","key":1486715760000,"doc_count":11},{"key_as_string":"2017-02-10T08:37:00.000Z","key":1486715820000,"doc_count":17},{"key_as_string":"2017-02-10T08:38:00.000Z","key":1486715880000,"doc_count":14},{"key_as_string":"2017-02-10T08:39:00.000Z","key":1486715940000,"doc_count":7},{"key_as_string":"2017-02-10T08:40:00.000Z","key":1486716000000,"doc_count":22},{"key_as_string":"2017-02-10T08:41:00.000Z","key":1486716060000,"doc_count":12},{"key_as_string":"2017-02-10T08:42:00.000Z","key":1486716120000,"doc_count":17},{"key_as_string":"2017-02-10T08:43:00.000Z","key":1486716180000,"doc_count":13},{"key_as_string":"2017-02-10T08:44:00.000Z","key":1486716240000,"doc_count":17},{"key_as_string":"2017-02-10T08:45:00.000Z","key":1486716300000,"doc_count":14},{"key_as_string":"2017-02-10T08:46:00.000Z","key":1486716360000,"doc_count":11},{"key_as_string":"2017-02-10T08:47:00.000Z","key":1486716420000,"doc_count":18},{"key_as_string":"2017-02-10T08:48:00.000Z","key":1486716480000,"doc_count":11},{"key_as_string":"2017-02-10T08:49:00.000Z","key":1486716540000,"doc_count":18},{"key_as_string":"2017-02-10T08:50:00.000Z","key":1486716600000,"doc_count":13},{"key_as_string":"2017-02-10T08:51:00.000Z","key":1486716660000,"doc_count":12},{"key_as_string":"2017-02-10T08:52:00.000Z","key":1486716720000,"doc_count":13},{"key_as_string":"2017-02-10T08:53:00.000Z","key":1486716780000,"doc_count":14},{"key_as_string":"2017-02-10T08:54:00.000Z","key":1486716840000,"doc_count":18},{"key_as_string":"2017-02-10T08:55:00.000Z","key":1486716900000,"doc_count":10},{"key_as_string":"2017-02-10T08:56:00.000Z","key":1486716960000,"doc_count":17},{"key_as_string":"2017-02-10T08:57:00.000Z","key":1486717020000,"doc_count":13},{"key_as_string":"2017-02-10T08:58:00.000Z","key":1486717080000,"doc_count":14},{"key_as_string":"2017-02-10T08:59:00.000Z","key":1486717140000,"doc_count":11},{"key_as_string":"2017-02-10T09:00:00.000Z","key":1486717200000,"doc_count":11},{"key_as_string":"2017-02-10T09:01:00.000Z","key":1486717260000,"doc_count":12},{"key_as_string":"2017-02-10T09:02:00.000Z","key":1486717320000,"doc_count":10},{"key_as_string":"2017-02-10T09:03:00.000Z","key":1486717380000,"doc_count":16},{"key_as_string":"2017-02-10T09:04:00.000Z","key":1486717440000,"doc_count":9},{"key_as_string":"2017-02-10T09:05:00.000Z","key":1486717500000,"doc_count":15},{"key_as_string":"2017-02-10T09:06:00.000Z","key":1486717560000,"doc_count":15},{"key_as_string":"2017-02-10T09:07:00.000Z","key":1486717620000,"doc_count":17},{"key_as_string":"2017-02-10T09:08:00.000Z","key":1486717680000,"doc_count":10},{"key_as_string":"2017-02-10T09:09:00.000Z","key":1486717740000,"doc_count":14},{"key_as_string":"2017-02-10T09:10:00.000Z","key":1486717800000,"doc_count":12},{"key_as_string":"2017-02-10T09:11:00.000Z","key":1486717860000,"doc_count":16},{"key_as_string":"2017-02-10T09:12:00.000Z","key":1486717920000,"doc_count":9},{"key_as_string":"2017-02-10T09:13:00.000Z","key":1486717980000,"doc_count":14},{"key_as_string":"2017-02-10T09:14:00.000Z","key":1486718040000,"doc_count":14},{"key_as_string":"2017-02-10T09:15:00.000Z","key":1486718100000,"doc_count":18},{"key_as_string":"2017-02-10T09:16:00.000Z","key":1486718160000,"doc_count":16},{"key_as_string":"2017-02-10T09:17:00.000Z","key":1486718220000,"doc_count":16},{"key_as_string":"2017-02-10T09:18:00.000Z","key":1486718280000,"doc_count":13},{"key_as_string":"2017-02-10T09:19:00.000Z","key":1486718340000,"doc_count":11},{"key_as_string":"2017-02-10T09:20:00.000Z","key":1486718400000,"doc_count":14},{"key_as_string":"2017-02-10T09:21:00.000Z","key":1486718460000,"doc_count":12},{"key_as_string":"2017-02-10T09:22:00.000Z","key":1486718520000,"doc_count":10},{"key_as_string":"2017-02-10T09:23:00.000Z","key":1486718580000,"doc_count":12},{"key_as_string":"2017-02-10T09:24:00.000Z","key":1486718640000,"doc_count":15},{"key_as_string":"2017-02-10T09:25:00.000Z","key":1486718700000,"doc_count":9},{"key_as_string":"2017-02-10T09:26:00.000Z","key":1486718760000,"doc_count":16},{"key_as_string":"2017-02-10T09:27:00.000Z","key":1486718820000,"doc_count":17},{"key_as_string":"2017-02-10T09:28:00.000Z","key":1486718880000,"doc_count":12},{"key_as_string":"2017-02-10T09:29:00.000Z","key":1486718940000,"doc_count":10},{"key_as_string":"2017-02-10T09:30:00.000Z","key":1486719000000,"doc_count":12},{"key_as_string":"2017-02-10T09:31:00.000Z","key":1486719060000,"doc_count":13},{"key_as_string":"2017-02-10T09:32:00.000Z","key":1486719120000,"doc_count":13},{"key_as_string":"2017-02-10T09:33:00.000Z","key":1486719180000,"doc_count":11},{"key_as_string":"2017-02-10T09:34:00.000Z","key":1486719240000,"doc_count":11},{"key_as_string":"2017-02-10T09:35:00.000Z","key":1486719300000,"doc_count":15},{"key_as_string":"2017-02-10T09:36:00.000Z","key":1486719360000,"doc_count":10},{"key_as_string":"2017-02-10T09:37:00.000Z","key":1486719420000,"doc_count":12},{"key_as_string":"2017-02-10T09:38:00.000Z","key":1486719480000,"doc_count":19},{"key_as_string":"2017-02-10T09:39:00.000Z","key":1486719540000,"doc_count":12},{"key_as_string":"2017-02-10T09:40:00.000Z","key":1486719600000,"doc_count":19},{"key_as_string":"2017-02-10T09:41:00.000Z","key":1486719660000,"doc_count":16},{"key_as_string":"2017-02-10T09:42:00.000Z","key":1486719720000,"doc_count":19},{"key_as_string":"2017-02-10T09:43:00.000Z","key":1486719780000,"doc_count":7},{"key_as_string":"2017-02-10T09:44:00.000Z","key":1486719840000,"doc_count":18},{"key_as_string":"2017-02-10T09:45:00.000Z","key":1486719900000,"doc_count":12},{"key_as_string":"2017-02-10T09:46:00.000Z","key":1486719960000,"doc_count":14},{"key_as_string":"2017-02-10T09:47:00.000Z","key":1486720020000,"doc_count":14},{"key_as_string":"2017-02-10T09:48:00.000Z","key":1486720080000,"doc_count":11},{"key_as_string":"2017-02-10T09:49:00.000Z","key":1486720140000,"doc_count":14},{"key_as_string":"2017-02-10T09:50:00.000Z","key":1486720200000,"doc_count":9},{"key_as_string":"2017-02-10T09:51:00.000Z","key":1486720260000,"doc_count":17},{"key_as_string":"2017-02-10T09:52:00.000Z","key":1486720320000,"doc_count":20},{"key_as_string":"2017-02-10T09:53:00.000Z","key":1486720380000,"doc_count":13},{"key_as_string":"2017-02-10T09:54:00.000Z","key":1486720440000,"doc_count":7},{"key_as_string":"2017-02-10T09:55:00.000Z","key":1486720500000,"doc_count":16},{"key_as_string":"2017-02-10T09:56:00.000Z","key":1486720560000,"doc_count":13},{"key_as_string":"2017-02-10T09:57:00.000Z","key":1486720620000,"doc_count":12},{"key_as_string":"2017-02-10T09:58:00.000Z","key":1486720680000,"doc_count":13},{"key_as_string":"2017-02-10T09:59:00.000Z","key":1486720740000,"doc_count":10},{"key_as_string":"2017-02-10T10:00:00.000Z","key":1486720800000,"doc_count":15},{"key_as_string":"2017-02-10T10:01:00.000Z","key":1486720860000,"doc_count":13},{"key_as_string":"2017-02-10T10:02:00.000Z","key":1486720920000,"doc_count":23},{"key_as_string":"2017-02-10T10:03:00.000Z","key":1486720980000,"doc_count":11},{"key_as_string":"2017-02-10T10:04:00.000Z","key":1486721040000,"doc_count":11},{"key_as_string":"2017-02-10T10:05:00.000Z","key":1486721100000,"doc_count":17},{"key_as_string":"2017-02-10T10:06:00.000Z","key":1486721160000,"doc_count":10},{"key_as_string":"2017-02-10T10:07:00.000Z","key":1486721220000,"doc_count":15},{"key_as_string":"2017-02-10T10:08:00.000Z","key":1486721280000,"doc_count":13},{"key_as_string":"2017-02-10T10:09:00.000Z","key":1486721340000,"doc_count":15},{"key_as_string":"2017-02-10T10:10:00.000Z","key":1486721400000,"doc_count":17},{"key_as_string":"2017-02-10T10:11:00.000Z","key":1486721460000,"doc_count":12},{"key_as_string":"2017-02-10T10:12:00.000Z","key":1486721520000,"doc_count":11},{"key_as_string":"2017-02-10T10:13:00.000Z","key":1486721580000,"doc_count":19},{"key_as_string":"2017-02-10T10:14:00.000Z","key":1486721640000,"doc_count":12},{"key_as_string":"2017-02-10T10:15:00.000Z","key":1486721700000,"doc_count":17},{"key_as_string":"2017-02-10T10:16:00.000Z","key":1486721760000,"doc_count":13},{"key_as_string":"2017-02-10T10:17:00.000Z","key":1486721820000,"doc_count":15},{"key_as_string":"2017-02-10T10:18:00.000Z","key":1486721880000,"doc_count":13},{"key_as_string":"2017-02-10T10:19:00.000Z","key":1486721940000,"doc_count":15},{"key_as_string":"2017-02-10T10:20:00.000Z","key":1486722000000,"doc_count":15},{"key_as_string":"2017-02-10T10:21:00.000Z","key":1486722060000,"doc_count":15},{"key_as_string":"2017-02-10T10:22:00.000Z","key":1486722120000,"doc_count":14},{"key_as_string":"2017-02-10T10:23:00.000Z","key":1486722180000,"doc_count":18},{"key_as_string":"2017-02-10T10:24:00.000Z","key":1486722240000,"doc_count":16},{"key_as_string":"2017-02-10T10:25:00.000Z","key":1486722300000,"doc_count":11},{"key_as_string":"2017-02-10T10:26:00.000Z","key":1486722360000,"doc_count":12},{"key_as_string":"2017-02-10T10:27:00.000Z","key":1486722420000,"doc_count":21},{"key_as_string":"2017-02-10T10:28:00.000Z","key":1486722480000,"doc_count":12},{"key_as_string":"2017-02-10T10:29:00.000Z","key":1486722540000,"doc_count":10},{"key_as_string":"2017-02-10T10:30:00.000Z","key":1486722600000,"doc_count":13},{"key_as_string":"2017-02-10T10:31:00.000Z","key":1486722660000,"doc_count":12},{"key_as_string":"2017-02-10T10:32:00.000Z","key":1486722720000,"doc_count":14},{"key_as_string":"2017-02-10T10:33:00.000Z","key":1486722780000,"doc_count":10},{"key_as_string":"2017-02-10T10:34:00.000Z","key":1486722840000,"doc_count":16},{"key_as_string":"2017-02-10T10:35:00.000Z","key":1486722900000,"doc_count":10},{"key_as_string":"2017-02-10T10:36:00.000Z","key":1486722960000,"doc_count":19},{"key_as_string":"2017-02-10T10:37:00.000Z","key":1486723020000,"doc_count":6},{"key_as_string":"2017-02-10T10:38:00.000Z","key":1486723080000,"doc_count":21},{"key_as_string":"2017-02-10T10:39:00.000Z","key":1486723140000,"doc_count":13},{"key_as_string":"2017-02-10T10:40:00.000Z","key":1486723200000,"doc_count":18},{"key_as_string":"2017-02-10T10:41:00.000Z","key":1486723260000,"doc_count":12},{"key_as_string":"2017-02-10T10:42:00.000Z","key":1486723320000,"doc_count":16},{"key_as_string":"2017-02-10T10:43:00.000Z","key":1486723380000,"doc_count":6},{"key_as_string":"2017-02-10T10:44:00.000Z","key":1486723440000,"doc_count":16},{"key_as_string":"2017-02-10T10:45:00.000Z","key":1486723500000,"doc_count":10},{"key_as_string":"2017-02-10T10:46:00.000Z","key":1486723560000,"doc_count":17},{"key_as_string":"2017-02-10T10:47:00.000Z","key":1486723620000,"doc_count":11},{"key_as_string":"2017-02-10T10:48:00.000Z","key":1486723680000,"doc_count":17},{"key_as_string":"2017-02-10T10:49:00.000Z","key":1486723740000,"doc_count":11},{"key_as_string":"2017-02-10T10:50:00.000Z","key":1486723800000,"doc_count":12},{"key_as_string":"2017-02-10T10:51:00.000Z","key":1486723860000,"doc_count":12},{"key_as_string":"2017-02-10T10:52:00.000Z","key":1486723920000,"doc_count":18},{"key_as_string":"2017-02-10T10:53:00.000Z","key":1486723980000,"doc_count":15},{"key_as_string":"2017-02-10T10:54:00.000Z","key":1486724040000,"doc_count":15},{"key_as_string":"2017-02-10T10:55:00.000Z","key":1486724100000,"doc_count":16},{"key_as_string":"2017-02-10T10:56:00.000Z","key":1486724160000,"doc_count":8},{"key_as_string":"2017-02-10T10:57:00.000Z","key":1486724220000,"doc_count":19},{"key_as_string":"2017-02-10T10:58:00.000Z","key":1486724280000,"doc_count":12},{"key_as_string":"2017-02-10T10:59:00.000Z","key":1486724340000,"doc_count":16},{"key_as_string":"2017-02-10T11:00:00.000Z","key":1486724400000,"doc_count":16},{"key_as_string":"2017-02-10T11:01:00.000Z","key":1486724460000,"doc_count":11},{"key_as_string":"2017-02-10T11:02:00.000Z","key":1486724520000,"doc_count":11},{"key_as_string":"2017-02-10T11:03:00.000Z","key":1486724580000,"doc_count":16},{"key_as_string":"2017-02-10T11:04:00.000Z","key":1486724640000,"doc_count":15},{"key_as_string":"2017-02-10T11:05:00.000Z","key":1486724700000,"doc_count":12},{"key_as_string":"2017-02-10T11:06:00.000Z","key":1486724760000,"doc_count":20},{"key_as_string":"2017-02-10T11:07:00.000Z","key":1486724820000,"doc_count":14},{"key_as_string":"2017-02-10T11:08:00.000Z","key":1486724880000,"doc_count":11},{"key_as_string":"2017-02-10T11:09:00.000Z","key":1486724940000,"doc_count":11},{"key_as_string":"2017-02-10T11:10:00.000Z","key":1486725000000,"doc_count":11},{"key_as_string":"2017-02-10T11:11:00.000Z","key":1486725060000,"doc_count":16},{"key_as_string":"2017-02-10T11:12:00.000Z","key":1486725120000,"doc_count":12},{"key_as_string":"2017-02-10T11:13:00.000Z","key":1486725180000,"doc_count":15},{"key_as_string":"2017-02-10T11:14:00.000Z","key":1486725240000,"doc_count":12},{"key_as_string":"2017-02-10T11:15:00.000Z","key":1486725300000,"doc_count":12},{"key_as_string":"2017-02-10T11:16:00.000Z","key":1486725360000,"doc_count":17},{"key_as_string":"2017-02-10T11:17:00.000Z","key":1486725420000,"doc_count":15},{"key_as_string":"2017-02-10T11:18:00.000Z","key":1486725480000,"doc_count":12},{"key_as_string":"2017-02-10T11:19:00.000Z","key":1486725540000,"doc_count":13},{"key_as_string":"2017-02-10T11:20:00.000Z","key":1486725600000,"doc_count":12},{"key_as_string":"2017-02-10T11:21:00.000Z","key":1486725660000,"doc_count":12},{"key_as_string":"2017-02-10T11:22:00.000Z","key":1486725720000,"doc_count":9},{"key_as_string":"2017-02-10T11:23:00.000Z","key":1486725780000,"doc_count":15},{"key_as_string":"2017-02-10T11:24:00.000Z","key":1486725840000,"doc_count":21},{"key_as_string":"2017-02-10T11:25:00.000Z","key":1486725900000,"doc_count":13},{"key_as_string":"2017-02-10T11:26:00.000Z","key":1486725960000,"doc_count":15},{"key_as_string":"2017-02-10T11:27:00.000Z","key":1486726020000,"doc_count":14},{"key_as_string":"2017-02-10T11:28:00.000Z","key":1486726080000,"doc_count":10},{"key_as_string":"2017-02-10T11:29:00.000Z","key":1486726140000,"doc_count":16},{"key_as_string":"2017-02-10T11:30:00.000Z","key":1486726200000,"doc_count":12},{"key_as_string":"2017-02-10T11:31:00.000Z","key":1486726260000,"doc_count":18},{"key_as_string":"2017-02-10T11:32:00.000Z","key":1486726320000,"doc_count":11},{"key_as_string":"2017-02-10T11:33:00.000Z","key":1486726380000,"doc_count":15},{"key_as_string":"2017-02-10T11:34:00.000Z","key":1486726440000,"doc_count":16},{"key_as_string":"2017-02-10T11:35:00.000Z","key":1486726500000,"doc_count":19},{"key_as_string":"2017-02-10T11:36:00.000Z","key":1486726560000,"doc_count":9},{"key_as_string":"2017-02-10T11:37:00.000Z","key":1486726620000,"doc_count":14},{"key_as_string":"2017-02-10T11:38:00.000Z","key":1486726680000,"doc_count":12},{"key_as_string":"2017-02-10T11:39:00.000Z","key":1486726740000,"doc_count":15},{"key_as_string":"2017-02-10T11:40:00.000Z","key":1486726800000,"doc_count":13},{"key_as_string":"2017-02-10T11:41:00.000Z","key":1486726860000,"doc_count":14},{"key_as_string":"2017-02-10T11:42:00.000Z","key":1486726920000,"doc_count":11},{"key_as_string":"2017-02-10T11:43:00.000Z","key":1486726980000,"doc_count":16},{"key_as_string":"2017-02-10T11:44:00.000Z","key":1486727040000,"doc_count":10},{"key_as_string":"2017-02-10T11:45:00.000Z","key":1486727100000,"doc_count":12},{"key_as_string":"2017-02-10T11:46:00.000Z","key":1486727160000,"doc_count":9},{"key_as_string":"2017-02-10T11:47:00.000Z","key":1486727220000,"doc_count":16},{"key_as_string":"2017-02-10T11:48:00.000Z","key":1486727280000,"doc_count":8},{"key_as_string":"2017-02-10T11:49:00.000Z","key":1486727340000,"doc_count":13},{"key_as_string":"2017-02-10T11:50:00.000Z","key":1486727400000,"doc_count":16},{"key_as_string":"2017-02-10T11:51:00.000Z","key":1486727460000,"doc_count":13},{"key_as_string":"2017-02-10T11:52:00.000Z","key":1486727520000,"doc_count":12},{"key_as_string":"2017-02-10T11:53:00.000Z","key":1486727580000,"doc_count":23},{"key_as_string":"2017-02-10T11:54:00.000Z","key":1486727640000,"doc_count":11},{"key_as_string":"2017-02-10T11:55:00.000Z","key":1486727700000,"doc_count":12},{"key_as_string":"2017-02-10T11:56:00.000Z","key":1486727760000,"doc_count":14},{"key_as_string":"2017-02-10T11:57:00.000Z","key":1486727820000,"doc_count":15},{"key_as_string":"2017-02-10T11:58:00.000Z","key":1486727880000,"doc_count":14},{"key_as_string":"2017-02-10T11:59:00.000Z","key":1486727940000,"doc_count":14},{"key_as_string":"2017-02-10T12:00:00.000Z","key":1486728000000,"doc_count":13},{"key_as_string":"2017-02-10T12:01:00.000Z","key":1486728060000,"doc_count":15},{"key_as_string":"2017-02-10T12:02:00.000Z","key":1486728120000,"doc_count":10},{"key_as_string":"2017-02-10T12:03:00.000Z","key":1486728180000,"doc_count":14},{"key_as_string":"2017-02-10T12:04:00.000Z","key":1486728240000,"doc_count":14},{"key_as_string":"2017-02-10T12:05:00.000Z","key":1486728300000,"doc_count":15},{"key_as_string":"2017-02-10T12:06:00.000Z","key":1486728360000,"doc_count":10},{"key_as_string":"2017-02-10T12:07:00.000Z","key":1486728420000,"doc_count":16},{"key_as_string":"2017-02-10T12:08:00.000Z","key":1486728480000,"doc_count":17},{"key_as_string":"2017-02-10T12:09:00.000Z","key":1486728540000,"doc_count":11},{"key_as_string":"2017-02-10T12:10:00.000Z","key":1486728600000,"doc_count":16},{"key_as_string":"2017-02-10T12:11:00.000Z","key":1486728660000,"doc_count":16},{"key_as_string":"2017-02-10T12:12:00.000Z","key":1486728720000,"doc_count":8},{"key_as_string":"2017-02-10T12:13:00.000Z","key":1486728780000,"doc_count":19},{"key_as_string":"2017-02-10T12:14:00.000Z","key":1486728840000,"doc_count":21},{"key_as_string":"2017-02-10T12:15:00.000Z","key":1486728900000,"doc_count":15},{"key_as_string":"2017-02-10T12:16:00.000Z","key":1486728960000,"doc_count":12},{"key_as_string":"2017-02-10T12:17:00.000Z","key":1486729020000,"doc_count":16},{"key_as_string":"2017-02-10T12:18:00.000Z","key":1486729080000,"doc_count":14},{"key_as_string":"2017-02-10T12:19:00.000Z","key":1486729140000,"doc_count":17},{"key_as_string":"2017-02-10T12:20:00.000Z","key":1486729200000,"doc_count":16},{"key_as_string":"2017-02-10T12:21:00.000Z","key":1486729260000,"doc_count":13},{"key_as_string":"2017-02-10T12:22:00.000Z","key":1486729320000,"doc_count":9},{"key_as_string":"2017-02-10T12:23:00.000Z","key":1486729380000,"doc_count":14},{"key_as_string":"2017-02-10T12:24:00.000Z","key":1486729440000,"doc_count":14},{"key_as_string":"2017-02-10T12:25:00.000Z","key":1486729500000,"doc_count":12},{"key_as_string":"2017-02-10T12:26:00.000Z","key":1486729560000,"doc_count":15},{"key_as_string":"2017-02-10T12:27:00.000Z","key":1486729620000,"doc_count":11},{"key_as_string":"2017-02-10T12:28:00.000Z","key":1486729680000,"doc_count":11},{"key_as_string":"2017-02-10T12:29:00.000Z","key":1486729740000,"doc_count":13},{"key_as_string":"2017-02-10T12:30:00.000Z","key":1486729800000,"doc_count":9},{"key_as_string":"2017-02-10T12:31:00.000Z","key":1486729860000,"doc_count":16},{"key_as_string":"2017-02-10T12:32:00.000Z","key":1486729920000,"doc_count":7},{"key_as_string":"2017-02-10T12:33:00.000Z","key":1486729980000,"doc_count":15},{"key_as_string":"2017-02-10T12:34:00.000Z","key":1486730040000,"doc_count":10},{"key_as_string":"2017-02-10T12:35:00.000Z","key":1486730100000,"doc_count":15},{"key_as_string":"2017-02-10T12:36:00.000Z","key":1486730160000,"doc_count":15},{"key_as_string":"2017-02-10T12:37:00.000Z","key":1486730220000,"doc_count":17},{"key_as_string":"2017-02-10T12:38:00.000Z","key":1486730280000,"doc_count":15},{"key_as_string":"2017-02-10T12:39:00.000Z","key":1486730340000,"doc_count":13},{"key_as_string":"2017-02-10T12:40:00.000Z","key":1486730400000,"doc_count":12},{"key_as_string":"2017-02-10T12:41:00.000Z","key":1486730460000,"doc_count":10},{"key_as_string":"2017-02-10T12:42:00.000Z","key":1486730520000,"doc_count":11},{"key_as_string":"2017-02-10T12:43:00.000Z","key":1486730580000,"doc_count":15},{"key_as_string":"2017-02-10T12:44:00.000Z","key":1486730640000,"doc_count":14},{"key_as_string":"2017-02-10T12:45:00.000Z","key":1486730700000,"doc_count":15},{"key_as_string":"2017-02-10T12:46:00.000Z","key":1486730760000,"doc_count":12},{"key_as_string":"2017-02-10T12:47:00.000Z","key":1486730820000,"doc_count":14},{"key_as_string":"2017-02-10T12:48:00.000Z","key":1486730880000,"doc_count":15},{"key_as_string":"2017-02-10T12:49:00.000Z","key":1486730940000,"doc_count":14},{"key_as_string":"2017-02-10T12:50:00.000Z","key":1486731000000,"doc_count":14},{"key_as_string":"2017-02-10T12:51:00.000Z","key":1486731060000,"doc_count":13},{"key_as_string":"2017-02-10T12:52:00.000Z","key":1486731120000,"doc_count":17},{"key_as_string":"2017-02-10T12:53:00.000Z","key":1486731180000,"doc_count":10},{"key_as_string":"2017-02-10T12:54:00.000Z","key":1486731240000,"doc_count":12},{"key_as_string":"2017-02-10T12:55:00.000Z","key":1486731300000,"doc_count":16},{"key_as_string":"2017-02-10T12:56:00.000Z","key":1486731360000,"doc_count":8},{"key_as_string":"2017-02-10T12:57:00.000Z","key":1486731420000,"doc_count":12},{"key_as_string":"2017-02-10T12:58:00.000Z","key":1486731480000,"doc_count":22},{"key_as_string":"2017-02-10T12:59:00.000Z","key":1486731540000,"doc_count":13},{"key_as_string":"2017-02-10T13:00:00.000Z","key":1486731600000,"doc_count":15},{"key_as_string":"2017-02-10T13:01:00.000Z","key":1486731660000,"doc_count":8},{"key_as_string":"2017-02-10T13:02:00.000Z","key":1486731720000,"doc_count":19},{"key_as_string":"2017-02-10T13:03:00.000Z","key":1486731780000,"doc_count":9},{"key_as_string":"2017-02-10T13:04:00.000Z","key":1486731840000,"doc_count":12},{"key_as_string":"2017-02-10T13:05:00.000Z","key":1486731900000,"doc_count":15},{"key_as_string":"2017-02-10T13:06:00.000Z","key":1486731960000,"doc_count":15},{"key_as_string":"2017-02-10T13:07:00.000Z","key":1486732020000,"doc_count":16},{"key_as_string":"2017-02-10T13:08:00.000Z","key":1486732080000,"doc_count":14},{"key_as_string":"2017-02-10T13:09:00.000Z","key":1486732140000,"doc_count":15},{"key_as_string":"2017-02-10T13:10:00.000Z","key":1486732200000,"doc_count":9},{"key_as_string":"2017-02-10T13:11:00.000Z","key":1486732260000,"doc_count":14},{"key_as_string":"2017-02-10T13:12:00.000Z","key":1486732320000,"doc_count":15},{"key_as_string":"2017-02-10T13:13:00.000Z","key":1486732380000,"doc_count":12},{"key_as_string":"2017-02-10T13:14:00.000Z","key":1486732440000,"doc_count":13},{"key_as_string":"2017-02-10T13:15:00.000Z","key":1486732500000,"doc_count":22},{"key_as_string":"2017-02-10T13:16:00.000Z","key":1486732560000,"doc_count":9},{"key_as_string":"2017-02-10T13:17:00.000Z","key":1486732620000,"doc_count":13},{"key_as_string":"2017-02-10T13:18:00.000Z","key":1486732680000,"doc_count":14},{"key_as_string":"2017-02-10T13:19:00.000Z","key":1486732740000,"doc_count":9},{"key_as_string":"2017-02-10T13:20:00.000Z","key":1486732800000,"doc_count":11},{"key_as_string":"2017-02-10T13:21:00.000Z","key":1486732860000,"doc_count":12},{"key_as_string":"2017-02-10T13:22:00.000Z","key":1486732920000,"doc_count":16},{"key_as_string":"2017-02-10T13:23:00.000Z","key":1486732980000,"doc_count":15},{"key_as_string":"2017-02-10T13:24:00.000Z","key":1486733040000,"doc_count":9},{"key_as_string":"2017-02-10T13:25:00.000Z","key":1486733100000,"doc_count":12},{"key_as_string":"2017-02-10T13:26:00.000Z","key":1486733160000,"doc_count":14},{"key_as_string":"2017-02-10T13:27:00.000Z","key":1486733220000,"doc_count":17},{"key_as_string":"2017-02-10T13:28:00.000Z","key":1486733280000,"doc_count":5},{"key_as_string":"2017-02-10T13:29:00.000Z","key":1486733340000,"doc_count":16},{"key_as_string":"2017-02-10T13:30:00.000Z","key":1486733400000,"doc_count":9},{"key_as_string":"2017-02-10T13:31:00.000Z","key":1486733460000,"doc_count":17},{"key_as_string":"2017-02-10T13:32:00.000Z","key":1486733520000,"doc_count":12},{"key_as_string":"2017-02-10T13:33:00.000Z","key":1486733580000,"doc_count":10},{"key_as_string":"2017-02-10T13:34:00.000Z","key":1486733640000,"doc_count":18},{"key_as_string":"2017-02-10T13:35:00.000Z","key":1486733700000,"doc_count":5},{"key_as_string":"2017-02-10T13:36:00.000Z","key":1486733760000,"doc_count":13},{"key_as_string":"2017-02-10T13:37:00.000Z","key":1486733820000,"doc_count":18},{"key_as_string":"2017-02-10T13:38:00.000Z","key":1486733880000,"doc_count":17},{"key_as_string":"2017-02-10T13:39:00.000Z","key":1486733940000,"doc_count":15},{"key_as_string":"2017-02-10T13:40:00.000Z","key":1486734000000,"doc_count":16},{"key_as_string":"2017-02-10T13:41:00.000Z","key":1486734060000,"doc_count":8},{"key_as_string":"2017-02-10T13:42:00.000Z","key":1486734120000,"doc_count":17},{"key_as_string":"2017-02-10T13:43:00.000Z","key":1486734180000,"doc_count":14},{"key_as_string":"2017-02-10T13:44:00.000Z","key":1486734240000,"doc_count":14},{"key_as_string":"2017-02-10T13:45:00.000Z","key":1486734300000,"doc_count":17},{"key_as_string":"2017-02-10T13:46:00.000Z","key":1486734360000,"doc_count":14},{"key_as_string":"2017-02-10T13:47:00.000Z","key":1486734420000,"doc_count":16},{"key_as_string":"2017-02-10T13:48:00.000Z","key":1486734480000,"doc_count":16},{"key_as_string":"2017-02-10T13:49:00.000Z","key":1486734540000,"doc_count":21},{"key_as_string":"2017-02-10T13:50:00.000Z","key":1486734600000,"doc_count":12},{"key_as_string":"2017-02-10T13:51:00.000Z","key":1486734660000,"doc_count":12},{"key_as_string":"2017-02-10T13:52:00.000Z","key":1486734720000,"doc_count":8},{"key_as_string":"2017-02-10T13:53:00.000Z","key":1486734780000,"doc_count":15},{"key_as_string":"2017-02-10T13:54:00.000Z","key":1486734840000,"doc_count":13},{"key_as_string":"2017-02-10T13:55:00.000Z","key":1486734900000,"doc_count":14},{"key_as_string":"2017-02-10T13:56:00.000Z","key":1486734960000,"doc_count":13},{"key_as_string":"2017-02-10T13:57:00.000Z","key":1486735020000,"doc_count":12},{"key_as_string":"2017-02-10T13:58:00.000Z","key":1486735080000,"doc_count":14},{"key_as_string":"2017-02-10T13:59:00.000Z","key":1486735140000,"doc_count":13},{"key_as_string":"2017-02-10T14:00:00.000Z","key":1486735200000,"doc_count":16},{"key_as_string":"2017-02-10T14:01:00.000Z","key":1486735260000,"doc_count":9},{"key_as_string":"2017-02-10T14:02:00.000Z","key":1486735320000,"doc_count":20},{"key_as_string":"2017-02-10T14:03:00.000Z","key":1486735380000,"doc_count":15},{"key_as_string":"2017-02-10T14:04:00.000Z","key":1486735440000,"doc_count":13},{"key_as_string":"2017-02-10T14:05:00.000Z","key":1486735500000,"doc_count":10},{"key_as_string":"2017-02-10T14:06:00.000Z","key":1486735560000,"doc_count":11},{"key_as_string":"2017-02-10T14:07:00.000Z","key":1486735620000,"doc_count":9},{"key_as_string":"2017-02-10T14:08:00.000Z","key":1486735680000,"doc_count":15},{"key_as_string":"2017-02-10T14:09:00.000Z","key":1486735740000,"doc_count":17},{"key_as_string":"2017-02-10T14:10:00.000Z","key":1486735800000,"doc_count":13},{"key_as_string":"2017-02-10T14:11:00.000Z","key":1486735860000,"doc_count":15},{"key_as_string":"2017-02-10T14:12:00.000Z","key":1486735920000,"doc_count":10},{"key_as_string":"2017-02-10T14:13:00.000Z","key":1486735980000,"doc_count":12},{"key_as_string":"2017-02-10T14:14:00.000Z","key":1486736040000,"doc_count":15},{"key_as_string":"2017-02-10T14:15:00.000Z","key":1486736100000,"doc_count":13},{"key_as_string":"2017-02-10T14:16:00.000Z","key":1486736160000,"doc_count":13},{"key_as_string":"2017-02-10T14:17:00.000Z","key":1486736220000,"doc_count":15},{"key_as_string":"2017-02-10T14:18:00.000Z","key":1486736280000,"doc_count":14},{"key_as_string":"2017-02-10T14:19:00.000Z","key":1486736340000,"doc_count":9},{"key_as_string":"2017-02-10T14:20:00.000Z","key":1486736400000,"doc_count":15},{"key_as_string":"2017-02-10T14:21:00.000Z","key":1486736460000,"doc_count":12},{"key_as_string":"2017-02-10T14:22:00.000Z","key":1486736520000,"doc_count":12},{"key_as_string":"2017-02-10T14:23:00.000Z","key":1486736580000,"doc_count":16},{"key_as_string":"2017-02-10T14:24:00.000Z","key":1486736640000,"doc_count":4},{"key_as_string":"2017-02-10T14:25:00.000Z","key":1486736700000,"doc_count":12},{"key_as_string":"2017-02-10T14:26:00.000Z","key":1486736760000,"doc_count":15},{"key_as_string":"2017-02-10T14:27:00.000Z","key":1486736820000,"doc_count":17},{"key_as_string":"2017-02-10T14:28:00.000Z","key":1486736880000,"doc_count":15},{"key_as_string":"2017-02-10T14:29:00.000Z","key":1486736940000,"doc_count":13},{"key_as_string":"2017-02-10T14:30:00.000Z","key":1486737000000,"doc_count":9},{"key_as_string":"2017-02-10T14:31:00.000Z","key":1486737060000,"doc_count":17},{"key_as_string":"2017-02-10T14:32:00.000Z","key":1486737120000,"doc_count":14},{"key_as_string":"2017-02-10T14:33:00.000Z","key":1486737180000,"doc_count":11},{"key_as_string":"2017-02-10T14:34:00.000Z","key":1486737240000,"doc_count":10},{"key_as_string":"2017-02-10T14:35:00.000Z","key":1486737300000,"doc_count":10},{"key_as_string":"2017-02-10T14:36:00.000Z","key":1486737360000,"doc_count":12},{"key_as_string":"2017-02-10T14:37:00.000Z","key":1486737420000,"doc_count":14},{"key_as_string":"2017-02-10T14:38:00.000Z","key":1486737480000,"doc_count":15},{"key_as_string":"2017-02-10T14:39:00.000Z","key":1486737540000,"doc_count":8},{"key_as_string":"2017-02-10T14:40:00.000Z","key":1486737600000,"doc_count":15},{"key_as_string":"2017-02-10T14:41:00.000Z","key":1486737660000,"doc_count":10},{"key_as_string":"2017-02-10T14:42:00.000Z","key":1486737720000,"doc_count":14},{"key_as_string":"2017-02-10T14:43:00.000Z","key":1486737780000,"doc_count":11},{"key_as_string":"2017-02-10T14:44:00.000Z","key":1486737840000,"doc_count":12},{"key_as_string":"2017-02-10T14:45:00.000Z","key":1486737900000,"doc_count":18},{"key_as_string":"2017-02-10T14:46:00.000Z","key":1486737960000,"doc_count":12},{"key_as_string":"2017-02-10T14:47:00.000Z","key":1486738020000,"doc_count":14},{"key_as_string":"2017-02-10T14:48:00.000Z","key":1486738080000,"doc_count":13},{"key_as_string":"2017-02-10T14:49:00.000Z","key":1486738140000,"doc_count":9},{"key_as_string":"2017-02-10T14:50:00.000Z","key":1486738200000,"doc_count":20},{"key_as_string":"2017-02-10T14:51:00.000Z","key":1486738260000,"doc_count":11},{"key_as_string":"2017-02-10T14:52:00.000Z","key":1486738320000,"doc_count":9},{"key_as_string":"2017-02-10T14:53:00.000Z","key":1486738380000,"doc_count":14},{"key_as_string":"2017-02-10T14:54:00.000Z","key":1486738440000,"doc_count":15},{"key_as_string":"2017-02-10T14:55:00.000Z","key":1486738500000,"doc_count":13},{"key_as_string":"2017-02-10T14:56:00.000Z","key":1486738560000,"doc_count":12},{"key_as_string":"2017-02-10T14:57:00.000Z","key":1486738620000,"doc_count":15},{"key_as_string":"2017-02-10T14:58:00.000Z","key":1486738680000,"doc_count":9},{"key_as_string":"2017-02-10T14:59:00.000Z","key":1486738740000,"doc_count":12},{"key_as_string":"2017-02-10T15:00:00.000Z","key":1486738800000,"doc_count":15},{"key_as_string":"2017-02-10T15:01:00.000Z","key":1486738860000,"doc_count":11},{"key_as_string":"2017-02-10T15:02:00.000Z","key":1486738920000,"doc_count":14},{"key_as_string":"2017-02-10T15:03:00.000Z","key":1486738980000,"doc_count":11},{"key_as_string":"2017-02-10T15:04:00.000Z","key":1486739040000,"doc_count":12},{"key_as_string":"2017-02-10T15:05:00.000Z","key":1486739100000,"doc_count":11},{"key_as_string":"2017-02-10T15:06:00.000Z","key":1486739160000,"doc_count":17},{"key_as_string":"2017-02-10T15:07:00.000Z","key":1486739220000,"doc_count":12},{"key_as_string":"2017-02-10T15:08:00.000Z","key":1486739280000,"doc_count":10},{"key_as_string":"2017-02-10T15:09:00.000Z","key":1486739340000,"doc_count":19},{"key_as_string":"2017-02-10T15:10:00.000Z","key":1486739400000,"doc_count":10},{"key_as_string":"2017-02-10T15:11:00.000Z","key":1486739460000,"doc_count":10},{"key_as_string":"2017-02-10T15:12:00.000Z","key":1486739520000,"doc_count":18},{"key_as_string":"2017-02-10T15:13:00.000Z","key":1486739580000,"doc_count":14},{"key_as_string":"2017-02-10T15:14:00.000Z","key":1486739640000,"doc_count":11},{"key_as_string":"2017-02-10T15:15:00.000Z","key":1486739700000,"doc_count":16},{"key_as_string":"2017-02-10T15:16:00.000Z","key":1486739760000,"doc_count":13},{"key_as_string":"2017-02-10T15:17:00.000Z","key":1486739820000,"doc_count":20},{"key_as_string":"2017-02-10T15:18:00.000Z","key":1486739880000,"doc_count":10},{"key_as_string":"2017-02-10T15:19:00.000Z","key":1486739940000,"doc_count":16},{"key_as_string":"2017-02-10T15:20:00.000Z","key":1486740000000,"doc_count":15},{"key_as_string":"2017-02-10T15:21:00.000Z","key":1486740060000,"doc_count":16},{"key_as_string":"2017-02-10T15:22:00.000Z","key":1486740120000,"doc_count":20},{"key_as_string":"2017-02-10T15:23:00.000Z","key":1486740180000,"doc_count":12},{"key_as_string":"2017-02-10T15:24:00.000Z","key":1486740240000,"doc_count":15},{"key_as_string":"2017-02-10T15:25:00.000Z","key":1486740300000,"doc_count":12},{"key_as_string":"2017-02-10T15:26:00.000Z","key":1486740360000,"doc_count":16},{"key_as_string":"2017-02-10T15:27:00.000Z","key":1486740420000,"doc_count":14},{"key_as_string":"2017-02-10T15:28:00.000Z","key":1486740480000,"doc_count":12},{"key_as_string":"2017-02-10T15:29:00.000Z","key":1486740540000,"doc_count":10},{"key_as_string":"2017-02-10T15:30:00.000Z","key":1486740600000,"doc_count":16},{"key_as_string":"2017-02-10T15:31:00.000Z","key":1486740660000,"doc_count":13},{"key_as_string":"2017-02-10T15:32:00.000Z","key":1486740720000,"doc_count":14},{"key_as_string":"2017-02-10T15:33:00.000Z","key":1486740780000,"doc_count":11},{"key_as_string":"2017-02-10T15:34:00.000Z","key":1486740840000,"doc_count":12},{"key_as_string":"2017-02-10T15:35:00.000Z","key":1486740900000,"doc_count":12},{"key_as_string":"2017-02-10T15:36:00.000Z","key":1486740960000,"doc_count":11},{"key_as_string":"2017-02-10T15:37:00.000Z","key":1486741020000,"doc_count":13},{"key_as_string":"2017-02-10T15:38:00.000Z","key":1486741080000,"doc_count":11},{"key_as_string":"2017-02-10T15:39:00.000Z","key":1486741140000,"doc_count":11},{"key_as_string":"2017-02-10T15:40:00.000Z","key":1486741200000,"doc_count":12},{"key_as_string":"2017-02-10T15:41:00.000Z","key":1486741260000,"doc_count":16},{"key_as_string":"2017-02-10T15:42:00.000Z","key":1486741320000,"doc_count":15},{"key_as_string":"2017-02-10T15:43:00.000Z","key":1486741380000,"doc_count":15},{"key_as_string":"2017-02-10T15:44:00.000Z","key":1486741440000,"doc_count":15},{"key_as_string":"2017-02-10T15:45:00.000Z","key":1486741500000,"doc_count":15},{"key_as_string":"2017-02-10T15:46:00.000Z","key":1486741560000,"doc_count":11},{"key_as_string":"2017-02-10T15:47:00.000Z","key":1486741620000,"doc_count":14},{"key_as_string":"2017-02-10T15:48:00.000Z","key":1486741680000,"doc_count":15},{"key_as_string":"2017-02-10T15:49:00.000Z","key":1486741740000,"doc_count":12},{"key_as_string":"2017-02-10T15:50:00.000Z","key":1486741800000,"doc_count":12},{"key_as_string":"2017-02-10T15:51:00.000Z","key":1486741860000,"doc_count":12},{"key_as_string":"2017-02-10T15:52:00.000Z","key":1486741920000,"doc_count":19},{"key_as_string":"2017-02-10T15:53:00.000Z","key":1486741980000,"doc_count":14},{"key_as_string":"2017-02-10T15:54:00.000Z","key":1486742040000,"doc_count":18},{"key_as_string":"2017-02-10T15:55:00.000Z","key":1486742100000,"doc_count":11},{"key_as_string":"2017-02-10T15:56:00.000Z","key":1486742160000,"doc_count":16},{"key_as_string":"2017-02-10T15:57:00.000Z","key":1486742220000,"doc_count":11},{"key_as_string":"2017-02-10T15:58:00.000Z","key":1486742280000,"doc_count":10},{"key_as_string":"2017-02-10T15:59:00.000Z","key":1486742340000,"doc_count":12},{"key_as_string":"2017-02-10T16:00:00.000Z","key":1486742400000,"doc_count":16},{"key_as_string":"2017-02-10T16:01:00.000Z","key":1486742460000,"doc_count":12},{"key_as_string":"2017-02-10T16:02:00.000Z","key":1486742520000,"doc_count":16},{"key_as_string":"2017-02-10T16:03:00.000Z","key":1486742580000,"doc_count":11},{"key_as_string":"2017-02-10T16:04:00.000Z","key":1486742640000,"doc_count":13},{"key_as_string":"2017-02-10T16:05:00.000Z","key":1486742700000,"doc_count":15},{"key_as_string":"2017-02-10T16:06:00.000Z","key":1486742760000,"doc_count":13},{"key_as_string":"2017-02-10T16:07:00.000Z","key":1486742820000,"doc_count":14},{"key_as_string":"2017-02-10T16:08:00.000Z","key":1486742880000,"doc_count":16},{"key_as_string":"2017-02-10T16:09:00.000Z","key":1486742940000,"doc_count":8},{"key_as_string":"2017-02-10T16:10:00.000Z","key":1486743000000,"doc_count":13},{"key_as_string":"2017-02-10T16:11:00.000Z","key":1486743060000,"doc_count":13},{"key_as_string":"2017-02-10T16:12:00.000Z","key":1486743120000,"doc_count":15},{"key_as_string":"2017-02-10T16:13:00.000Z","key":1486743180000,"doc_count":20},{"key_as_string":"2017-02-10T16:14:00.000Z","key":1486743240000,"doc_count":12},{"key_as_string":"2017-02-10T16:15:00.000Z","key":1486743300000,"doc_count":10},{"key_as_string":"2017-02-10T16:16:00.000Z","key":1486743360000,"doc_count":12},{"key_as_string":"2017-02-10T16:17:00.000Z","key":1486743420000,"doc_count":12},{"key_as_string":"2017-02-10T16:18:00.000Z","key":1486743480000,"doc_count":15},{"key_as_string":"2017-02-10T16:19:00.000Z","key":1486743540000,"doc_count":11},{"key_as_string":"2017-02-10T16:20:00.000Z","key":1486743600000,"doc_count":10},{"key_as_string":"2017-02-10T16:21:00.000Z","key":1486743660000,"doc_count":13},{"key_as_string":"2017-02-10T16:22:00.000Z","key":1486743720000,"doc_count":12},{"key_as_string":"2017-02-10T16:23:00.000Z","key":1486743780000,"doc_count":15},{"key_as_string":"2017-02-10T16:24:00.000Z","key":1486743840000,"doc_count":17},{"key_as_string":"2017-02-10T16:25:00.000Z","key":1486743900000,"doc_count":12},{"key_as_string":"2017-02-10T16:26:00.000Z","key":1486743960000,"doc_count":13},{"key_as_string":"2017-02-10T16:27:00.000Z","key":1486744020000,"doc_count":11},{"key_as_string":"2017-02-10T16:28:00.000Z","key":1486744080000,"doc_count":8},{"key_as_string":"2017-02-10T16:29:00.000Z","key":1486744140000,"doc_count":14},{"key_as_string":"2017-02-10T16:30:00.000Z","key":1486744200000,"doc_count":12},{"key_as_string":"2017-02-10T16:31:00.000Z","key":1486744260000,"doc_count":12},{"key_as_string":"2017-02-10T16:32:00.000Z","key":1486744320000,"doc_count":12},{"key_as_string":"2017-02-10T16:33:00.000Z","key":1486744380000,"doc_count":8},{"key_as_string":"2017-02-10T16:34:00.000Z","key":1486744440000,"doc_count":18},{"key_as_string":"2017-02-10T16:35:00.000Z","key":1486744500000,"doc_count":14},{"key_as_string":"2017-02-10T16:36:00.000Z","key":1486744560000,"doc_count":12},{"key_as_string":"2017-02-10T16:37:00.000Z","key":1486744620000,"doc_count":10},{"key_as_string":"2017-02-10T16:38:00.000Z","key":1486744680000,"doc_count":19},{"key_as_string":"2017-02-10T16:39:00.000Z","key":1486744740000,"doc_count":8},{"key_as_string":"2017-02-10T16:40:00.000Z","key":1486744800000,"doc_count":12},{"key_as_string":"2017-02-10T16:41:00.000Z","key":1486744860000,"doc_count":16},{"key_as_string":"2017-02-10T16:42:00.000Z","key":1486744920000,"doc_count":11},{"key_as_string":"2017-02-10T16:43:00.000Z","key":1486744980000,"doc_count":15},{"key_as_string":"2017-02-10T16:44:00.000Z","key":1486745040000,"doc_count":9},{"key_as_string":"2017-02-10T16:45:00.000Z","key":1486745100000,"doc_count":15},{"key_as_string":"2017-02-10T16:46:00.000Z","key":1486745160000,"doc_count":11},{"key_as_string":"2017-02-10T16:47:00.000Z","key":1486745220000,"doc_count":16},{"key_as_string":"2017-02-10T16:48:00.000Z","key":1486745280000,"doc_count":17},{"key_as_string":"2017-02-10T16:49:00.000Z","key":1486745340000,"doc_count":10},{"key_as_string":"2017-02-10T16:50:00.000Z","key":1486745400000,"doc_count":11},{"key_as_string":"2017-02-10T16:51:00.000Z","key":1486745460000,"doc_count":13},{"key_as_string":"2017-02-10T16:52:00.000Z","key":1486745520000,"doc_count":7},{"key_as_string":"2017-02-10T16:53:00.000Z","key":1486745580000,"doc_count":13},{"key_as_string":"2017-02-10T16:54:00.000Z","key":1486745640000,"doc_count":12},{"key_as_string":"2017-02-10T16:55:00.000Z","key":1486745700000,"doc_count":18},{"key_as_string":"2017-02-10T16:56:00.000Z","key":1486745760000,"doc_count":6},{"key_as_string":"2017-02-10T16:57:00.000Z","key":1486745820000,"doc_count":11},{"key_as_string":"2017-02-10T16:58:00.000Z","key":1486745880000,"doc_count":10},{"key_as_string":"2017-02-10T16:59:00.000Z","key":1486745940000,"doc_count":12},{"key_as_string":"2017-02-10T17:00:00.000Z","key":1486746000000,"doc_count":13},{"key_as_string":"2017-02-10T17:01:00.000Z","key":1486746060000,"doc_count":9},{"key_as_string":"2017-02-10T17:02:00.000Z","key":1486746120000,"doc_count":14},{"key_as_string":"2017-02-10T17:03:00.000Z","key":1486746180000,"doc_count":13},{"key_as_string":"2017-02-10T17:04:00.000Z","key":1486746240000,"doc_count":12},{"key_as_string":"2017-02-10T17:05:00.000Z","key":1486746300000,"doc_count":9},{"key_as_string":"2017-02-10T17:06:00.000Z","key":1486746360000,"doc_count":14},{"key_as_string":"2017-02-10T17:07:00.000Z","key":1486746420000,"doc_count":15},{"key_as_string":"2017-02-10T17:08:00.000Z","key":1486746480000,"doc_count":11},{"key_as_string":"2017-02-10T17:09:00.000Z","key":1486746540000,"doc_count":8},{"key_as_string":"2017-02-10T17:10:00.000Z","key":1486746600000,"doc_count":9},{"key_as_string":"2017-02-10T17:11:00.000Z","key":1486746660000,"doc_count":12},{"key_as_string":"2017-02-10T17:12:00.000Z","key":1486746720000,"doc_count":15},{"key_as_string":"2017-02-10T17:13:00.000Z","key":1486746780000,"doc_count":13},{"key_as_string":"2017-02-10T17:14:00.000Z","key":1486746840000,"doc_count":14},{"key_as_string":"2017-02-10T17:15:00.000Z","key":1486746900000,"doc_count":10},{"key_as_string":"2017-02-10T17:16:00.000Z","key":1486746960000,"doc_count":12},{"key_as_string":"2017-02-10T17:17:00.000Z","key":1486747020000,"doc_count":10},{"key_as_string":"2017-02-10T17:18:00.000Z","key":1486747080000,"doc_count":14},{"key_as_string":"2017-02-10T17:19:00.000Z","key":1486747140000,"doc_count":7},{"key_as_string":"2017-02-10T17:20:00.000Z","key":1486747200000,"doc_count":9},{"key_as_string":"2017-02-10T17:21:00.000Z","key":1486747260000,"doc_count":10},{"key_as_string":"2017-02-10T17:22:00.000Z","key":1486747320000,"doc_count":13},{"key_as_string":"2017-02-10T17:23:00.000Z","key":1486747380000,"doc_count":16},{"key_as_string":"2017-02-10T17:24:00.000Z","key":1486747440000,"doc_count":11},{"key_as_string":"2017-02-10T17:25:00.000Z","key":1486747500000,"doc_count":14},{"key_as_string":"2017-02-10T17:26:00.000Z","key":1486747560000,"doc_count":12},{"key_as_string":"2017-02-10T17:27:00.000Z","key":1486747620000,"doc_count":12},{"key_as_string":"2017-02-10T17:28:00.000Z","key":1486747680000,"doc_count":9},{"key_as_string":"2017-02-10T17:29:00.000Z","key":1486747740000,"doc_count":16},{"key_as_string":"2017-02-10T17:30:00.000Z","key":1486747800000,"doc_count":14},{"key_as_string":"2017-02-10T17:31:00.000Z","key":1486747860000,"doc_count":10},{"key_as_string":"2017-02-10T17:32:00.000Z","key":1486747920000,"doc_count":8},{"key_as_string":"2017-02-10T17:33:00.000Z","key":1486747980000,"doc_count":9},{"key_as_string":"2017-02-10T17:34:00.000Z","key":1486748040000,"doc_count":15},{"key_as_string":"2017-02-10T17:35:00.000Z","key":1486748100000,"doc_count":9},{"key_as_string":"2017-02-10T17:36:00.000Z","key":1486748160000,"doc_count":13},{"key_as_string":"2017-02-10T17:37:00.000Z","key":1486748220000,"doc_count":9},{"key_as_string":"2017-02-10T17:38:00.000Z","key":1486748280000,"doc_count":7},{"key_as_string":"2017-02-10T17:39:00.000Z","key":1486748340000,"doc_count":18},{"key_as_string":"2017-02-10T17:40:00.000Z","key":1486748400000,"doc_count":14},{"key_as_string":"2017-02-10T17:41:00.000Z","key":1486748460000,"doc_count":9},{"key_as_string":"2017-02-10T17:42:00.000Z","key":1486748520000,"doc_count":12},{"key_as_string":"2017-02-10T17:43:00.000Z","key":1486748580000,"doc_count":9},{"key_as_string":"2017-02-10T17:44:00.000Z","key":1486748640000,"doc_count":14},{"key_as_string":"2017-02-10T17:45:00.000Z","key":1486748700000,"doc_count":11},{"key_as_string":"2017-02-10T17:46:00.000Z","key":1486748760000,"doc_count":11},{"key_as_string":"2017-02-10T17:47:00.000Z","key":1486748820000,"doc_count":12},{"key_as_string":"2017-02-10T17:48:00.000Z","key":1486748880000,"doc_count":16},{"key_as_string":"2017-02-10T17:49:00.000Z","key":1486748940000,"doc_count":10},{"key_as_string":"2017-02-10T17:50:00.000Z","key":1486749000000,"doc_count":14},{"key_as_string":"2017-02-10T17:51:00.000Z","key":1486749060000,"doc_count":8},{"key_as_string":"2017-02-10T17:52:00.000Z","key":1486749120000,"doc_count":16},{"key_as_string":"2017-02-10T17:53:00.000Z","key":1486749180000,"doc_count":9},{"key_as_string":"2017-02-10T17:54:00.000Z","key":1486749240000,"doc_count":11},{"key_as_string":"2017-02-10T17:55:00.000Z","key":1486749300000,"doc_count":9},{"key_as_string":"2017-02-10T17:56:00.000Z","key":1486749360000,"doc_count":12},{"key_as_string":"2017-02-10T17:57:00.000Z","key":1486749420000,"doc_count":13},{"key_as_string":"2017-02-10T17:58:00.000Z","key":1486749480000,"doc_count":12},{"key_as_string":"2017-02-10T17:59:00.000Z","key":1486749540000,"doc_count":15},{"key_as_string":"2017-02-10T18:00:00.000Z","key":1486749600000,"doc_count":10},{"key_as_string":"2017-02-10T18:01:00.000Z","key":1486749660000,"doc_count":10},{"key_as_string":"2017-02-10T18:02:00.000Z","key":1486749720000,"doc_count":10},{"key_as_string":"2017-02-10T18:03:00.000Z","key":1486749780000,"doc_count":9},{"key_as_string":"2017-02-10T18:04:00.000Z","key":1486749840000,"doc_count":12},{"key_as_string":"2017-02-10T18:05:00.000Z","key":1486749900000,"doc_count":14},{"key_as_string":"2017-02-10T18:06:00.000Z","key":1486749960000,"doc_count":16},{"key_as_string":"2017-02-10T18:07:00.000Z","key":1486750020000,"doc_count":12},{"key_as_string":"2017-02-10T18:08:00.000Z","key":1486750080000,"doc_count":10},{"key_as_string":"2017-02-10T18:09:00.000Z","key":1486750140000,"doc_count":11},{"key_as_string":"2017-02-10T18:10:00.000Z","key":1486750200000,"doc_count":12},{"key_as_string":"2017-02-10T18:11:00.000Z","key":1486750260000,"doc_count":10},{"key_as_string":"2017-02-10T18:12:00.000Z","key":1486750320000,"doc_count":13},{"key_as_string":"2017-02-10T18:13:00.000Z","key":1486750380000,"doc_count":12},{"key_as_string":"2017-02-10T18:14:00.000Z","key":1486750440000,"doc_count":14},{"key_as_string":"2017-02-10T18:15:00.000Z","key":1486750500000,"doc_count":11},{"key_as_string":"2017-02-10T18:16:00.000Z","key":1486750560000,"doc_count":12},{"key_as_string":"2017-02-10T18:17:00.000Z","key":1486750620000,"doc_count":10},{"key_as_string":"2017-02-10T18:18:00.000Z","key":1486750680000,"doc_count":9},{"key_as_string":"2017-02-10T18:19:00.000Z","key":1486750740000,"doc_count":14},{"key_as_string":"2017-02-10T18:20:00.000Z","key":1486750800000,"doc_count":6},{"key_as_string":"2017-02-10T18:21:00.000Z","key":1486750860000,"doc_count":13},{"key_as_string":"2017-02-10T18:22:00.000Z","key":1486750920000,"doc_count":14},{"key_as_string":"2017-02-10T18:23:00.000Z","key":1486750980000,"doc_count":9},{"key_as_string":"2017-02-10T18:24:00.000Z","key":1486751040000,"doc_count":9},{"key_as_string":"2017-02-10T18:25:00.000Z","key":1486751100000,"doc_count":10},{"key_as_string":"2017-02-10T18:26:00.000Z","key":1486751160000,"doc_count":9},{"key_as_string":"2017-02-10T18:27:00.000Z","key":1486751220000,"doc_count":12},{"key_as_string":"2017-02-10T18:28:00.000Z","key":1486751280000,"doc_count":7},{"key_as_string":"2017-02-10T18:29:00.000Z","key":1486751340000,"doc_count":12},{"key_as_string":"2017-02-10T18:30:00.000Z","key":1486751400000,"doc_count":13},{"key_as_string":"2017-02-10T18:31:00.000Z","key":1486751460000,"doc_count":11},{"key_as_string":"2017-02-10T18:32:00.000Z","key":1486751520000,"doc_count":13},{"key_as_string":"2017-02-10T18:33:00.000Z","key":1486751580000,"doc_count":4},{"key_as_string":"2017-02-10T18:34:00.000Z","key":1486751640000,"doc_count":12},{"key_as_string":"2017-02-10T18:35:00.000Z","key":1486751700000,"doc_count":12},{"key_as_string":"2017-02-10T18:36:00.000Z","key":1486751760000,"doc_count":9},{"key_as_string":"2017-02-10T18:37:00.000Z","key":1486751820000,"doc_count":14},{"key_as_string":"2017-02-10T18:38:00.000Z","key":1486751880000,"doc_count":9},{"key_as_string":"2017-02-10T18:39:00.000Z","key":1486751940000,"doc_count":12},{"key_as_string":"2017-02-10T18:40:00.000Z","key":1486752000000,"doc_count":10},{"key_as_string":"2017-02-10T18:41:00.000Z","key":1486752060000,"doc_count":15},{"key_as_string":"2017-02-10T18:42:00.000Z","key":1486752120000,"doc_count":13},{"key_as_string":"2017-02-10T18:43:00.000Z","key":1486752180000,"doc_count":16},{"key_as_string":"2017-02-10T18:44:00.000Z","key":1486752240000,"doc_count":12},{"key_as_string":"2017-02-10T18:45:00.000Z","key":1486752300000,"doc_count":11},{"key_as_string":"2017-02-10T18:46:00.000Z","key":1486752360000,"doc_count":13},{"key_as_string":"2017-02-10T18:47:00.000Z","key":1486752420000,"doc_count":15},{"key_as_string":"2017-02-10T18:48:00.000Z","key":1486752480000,"doc_count":6},{"key_as_string":"2017-02-10T18:49:00.000Z","key":1486752540000,"doc_count":9},{"key_as_string":"2017-02-10T18:50:00.000Z","key":1486752600000,"doc_count":19},{"key_as_string":"2017-02-10T18:51:00.000Z","key":1486752660000,"doc_count":11},{"key_as_string":"2017-02-10T18:52:00.000Z","key":1486752720000,"doc_count":11},{"key_as_string":"2017-02-10T18:53:00.000Z","key":1486752780000,"doc_count":11},{"key_as_string":"2017-02-10T18:54:00.000Z","key":1486752840000,"doc_count":12},{"key_as_string":"2017-02-10T18:55:00.000Z","key":1486752900000,"doc_count":11},{"key_as_string":"2017-02-10T18:56:00.000Z","key":1486752960000,"doc_count":12},{"key_as_string":"2017-02-10T18:57:00.000Z","key":1486753020000,"doc_count":11},{"key_as_string":"2017-02-10T18:58:00.000Z","key":1486753080000,"doc_count":13},{"key_as_string":"2017-02-10T18:59:00.000Z","key":1486753140000,"doc_count":12},{"key_as_string":"2017-02-10T19:00:00.000Z","key":1486753200000,"doc_count":10},{"key_as_string":"2017-02-10T19:01:00.000Z","key":1486753260000,"doc_count":7},{"key_as_string":"2017-02-10T19:02:00.000Z","key":1486753320000,"doc_count":15},{"key_as_string":"2017-02-10T19:03:00.000Z","key":1486753380000,"doc_count":10},{"key_as_string":"2017-02-10T19:04:00.000Z","key":1486753440000,"doc_count":11},{"key_as_string":"2017-02-10T19:05:00.000Z","key":1486753500000,"doc_count":10},{"key_as_string":"2017-02-10T19:06:00.000Z","key":1486753560000,"doc_count":15},{"key_as_string":"2017-02-10T19:07:00.000Z","key":1486753620000,"doc_count":12},{"key_as_string":"2017-02-10T19:08:00.000Z","key":1486753680000,"doc_count":7},{"key_as_string":"2017-02-10T19:09:00.000Z","key":1486753740000,"doc_count":11},{"key_as_string":"2017-02-10T19:10:00.000Z","key":1486753800000,"doc_count":9},{"key_as_string":"2017-02-10T19:11:00.000Z","key":1486753860000,"doc_count":11},{"key_as_string":"2017-02-10T19:12:00.000Z","key":1486753920000,"doc_count":10},{"key_as_string":"2017-02-10T19:13:00.000Z","key":1486753980000,"doc_count":11},{"key_as_string":"2017-02-10T19:14:00.000Z","key":1486754040000,"doc_count":14},{"key_as_string":"2017-02-10T19:15:00.000Z","key":1486754100000,"doc_count":10},{"key_as_string":"2017-02-10T19:16:00.000Z","key":1486754160000,"doc_count":12},{"key_as_string":"2017-02-10T19:17:00.000Z","key":1486754220000,"doc_count":12},{"key_as_string":"2017-02-10T19:18:00.000Z","key":1486754280000,"doc_count":11},{"key_as_string":"2017-02-10T19:19:00.000Z","key":1486754340000,"doc_count":11},{"key_as_string":"2017-02-10T19:20:00.000Z","key":1486754400000,"doc_count":10},{"key_as_string":"2017-02-10T19:21:00.000Z","key":1486754460000,"doc_count":15},{"key_as_string":"2017-02-10T19:22:00.000Z","key":1486754520000,"doc_count":8},{"key_as_string":"2017-02-10T19:23:00.000Z","key":1486754580000,"doc_count":7},{"key_as_string":"2017-02-10T19:24:00.000Z","key":1486754640000,"doc_count":20},{"key_as_string":"2017-02-10T19:25:00.000Z","key":1486754700000,"doc_count":10},{"key_as_string":"2017-02-10T19:26:00.000Z","key":1486754760000,"doc_count":9},{"key_as_string":"2017-02-10T19:27:00.000Z","key":1486754820000,"doc_count":13},{"key_as_string":"2017-02-10T19:28:00.000Z","key":1486754880000,"doc_count":12},{"key_as_string":"2017-02-10T19:29:00.000Z","key":1486754940000,"doc_count":10},{"key_as_string":"2017-02-10T19:30:00.000Z","key":1486755000000,"doc_count":11},{"key_as_string":"2017-02-10T19:31:00.000Z","key":1486755060000,"doc_count":10},{"key_as_string":"2017-02-10T19:32:00.000Z","key":1486755120000,"doc_count":10},{"key_as_string":"2017-02-10T19:33:00.000Z","key":1486755180000,"doc_count":11},{"key_as_string":"2017-02-10T19:34:00.000Z","key":1486755240000,"doc_count":12},{"key_as_string":"2017-02-10T19:35:00.000Z","key":1486755300000,"doc_count":8},{"key_as_string":"2017-02-10T19:36:00.000Z","key":1486755360000,"doc_count":10},{"key_as_string":"2017-02-10T19:37:00.000Z","key":1486755420000,"doc_count":13},{"key_as_string":"2017-02-10T19:38:00.000Z","key":1486755480000,"doc_count":11},{"key_as_string":"2017-02-10T19:39:00.000Z","key":1486755540000,"doc_count":7},{"key_as_string":"2017-02-10T19:40:00.000Z","key":1486755600000,"doc_count":17},{"key_as_string":"2017-02-10T19:41:00.000Z","key":1486755660000,"doc_count":8},{"key_as_string":"2017-02-10T19:42:00.000Z","key":1486755720000,"doc_count":15},{"key_as_string":"2017-02-10T19:43:00.000Z","key":1486755780000,"doc_count":11},{"key_as_string":"2017-02-10T19:44:00.000Z","key":1486755840000,"doc_count":11},{"key_as_string":"2017-02-10T19:45:00.000Z","key":1486755900000,"doc_count":8},{"key_as_string":"2017-02-10T19:46:00.000Z","key":1486755960000,"doc_count":8},{"key_as_string":"2017-02-10T19:47:00.000Z","key":1486756020000,"doc_count":15},{"key_as_string":"2017-02-10T19:48:00.000Z","key":1486756080000,"doc_count":15},{"key_as_string":"2017-02-10T19:49:00.000Z","key":1486756140000,"doc_count":11},{"key_as_string":"2017-02-10T19:50:00.000Z","key":1486756200000,"doc_count":15},{"key_as_string":"2017-02-10T19:51:00.000Z","key":1486756260000,"doc_count":9},{"key_as_string":"2017-02-10T19:52:00.000Z","key":1486756320000,"doc_count":10},{"key_as_string":"2017-02-10T19:53:00.000Z","key":1486756380000,"doc_count":9},{"key_as_string":"2017-02-10T19:54:00.000Z","key":1486756440000,"doc_count":12},{"key_as_string":"2017-02-10T19:55:00.000Z","key":1486756500000,"doc_count":9},{"key_as_string":"2017-02-10T19:56:00.000Z","key":1486756560000,"doc_count":13},{"key_as_string":"2017-02-10T19:57:00.000Z","key":1486756620000,"doc_count":12},{"key_as_string":"2017-02-10T19:58:00.000Z","key":1486756680000,"doc_count":10},{"key_as_string":"2017-02-10T19:59:00.000Z","key":1486756740000,"doc_count":7},{"key_as_string":"2017-02-10T20:00:00.000Z","key":1486756800000,"doc_count":12},{"key_as_string":"2017-02-10T20:01:00.000Z","key":1486756860000,"doc_count":12},{"key_as_string":"2017-02-10T20:02:00.000Z","key":1486756920000,"doc_count":12},{"key_as_string":"2017-02-10T20:03:00.000Z","key":1486756980000,"doc_count":8},{"key_as_string":"2017-02-10T20:04:00.000Z","key":1486757040000,"doc_count":20},{"key_as_string":"2017-02-10T20:05:00.000Z","key":1486757100000,"doc_count":7},{"key_as_string":"2017-02-10T20:06:00.000Z","key":1486757160000,"doc_count":16},{"key_as_string":"2017-02-10T20:07:00.000Z","key":1486757220000,"doc_count":13},{"key_as_string":"2017-02-10T20:08:00.000Z","key":1486757280000,"doc_count":9},{"key_as_string":"2017-02-10T20:09:00.000Z","key":1486757340000,"doc_count":12},{"key_as_string":"2017-02-10T20:10:00.000Z","key":1486757400000,"doc_count":7},{"key_as_string":"2017-02-10T20:11:00.000Z","key":1486757460000,"doc_count":8},{"key_as_string":"2017-02-10T20:12:00.000Z","key":1486757520000,"doc_count":10},{"key_as_string":"2017-02-10T20:13:00.000Z","key":1486757580000,"doc_count":8},{"key_as_string":"2017-02-10T20:14:00.000Z","key":1486757640000,"doc_count":17},{"key_as_string":"2017-02-10T20:15:00.000Z","key":1486757700000,"doc_count":11},{"key_as_string":"2017-02-10T20:16:00.000Z","key":1486757760000,"doc_count":12},{"key_as_string":"2017-02-10T20:17:00.000Z","key":1486757820000,"doc_count":12},{"key_as_string":"2017-02-10T20:18:00.000Z","key":1486757880000,"doc_count":12},{"key_as_string":"2017-02-10T20:19:00.000Z","key":1486757940000,"doc_count":15},{"key_as_string":"2017-02-10T20:20:00.000Z","key":1486758000000,"doc_count":7},{"key_as_string":"2017-02-10T20:21:00.000Z","key":1486758060000,"doc_count":11},{"key_as_string":"2017-02-10T20:22:00.000Z","key":1486758120000,"doc_count":10},{"key_as_string":"2017-02-10T20:23:00.000Z","key":1486758180000,"doc_count":14},{"key_as_string":"2017-02-10T20:24:00.000Z","key":1486758240000,"doc_count":11},{"key_as_string":"2017-02-10T20:25:00.000Z","key":1486758300000,"doc_count":9},{"key_as_string":"2017-02-10T20:26:00.000Z","key":1486758360000,"doc_count":7},{"key_as_string":"2017-02-10T20:27:00.000Z","key":1486758420000,"doc_count":10},{"key_as_string":"2017-02-10T20:28:00.000Z","key":1486758480000,"doc_count":14},{"key_as_string":"2017-02-10T20:29:00.000Z","key":1486758540000,"doc_count":12},{"key_as_string":"2017-02-10T20:30:00.000Z","key":1486758600000,"doc_count":10},{"key_as_string":"2017-02-10T20:31:00.000Z","key":1486758660000,"doc_count":11},{"key_as_string":"2017-02-10T20:32:00.000Z","key":1486758720000,"doc_count":12},{"key_as_string":"2017-02-10T20:33:00.000Z","key":1486758780000,"doc_count":15},{"key_as_string":"2017-02-10T20:34:00.000Z","key":1486758840000,"doc_count":12},{"key_as_string":"2017-02-10T20:35:00.000Z","key":1486758900000,"doc_count":14},{"key_as_string":"2017-02-10T20:36:00.000Z","key":1486758960000,"doc_count":6},{"key_as_string":"2017-02-10T20:37:00.000Z","key":1486759020000,"doc_count":11},{"key_as_string":"2017-02-10T20:38:00.000Z","key":1486759080000,"doc_count":15},{"key_as_string":"2017-02-10T20:39:00.000Z","key":1486759140000,"doc_count":11},{"key_as_string":"2017-02-10T20:40:00.000Z","key":1486759200000,"doc_count":10},{"key_as_string":"2017-02-10T20:41:00.000Z","key":1486759260000,"doc_count":10},{"key_as_string":"2017-02-10T20:42:00.000Z","key":1486759320000,"doc_count":8},{"key_as_string":"2017-02-10T20:43:00.000Z","key":1486759380000,"doc_count":10},{"key_as_string":"2017-02-10T20:44:00.000Z","key":1486759440000,"doc_count":10},{"key_as_string":"2017-02-10T20:45:00.000Z","key":1486759500000,"doc_count":9},{"key_as_string":"2017-02-10T20:46:00.000Z","key":1486759560000,"doc_count":12},{"key_as_string":"2017-02-10T20:47:00.000Z","key":1486759620000,"doc_count":11},{"key_as_string":"2017-02-10T20:48:00.000Z","key":1486759680000,"doc_count":13},{"key_as_string":"2017-02-10T20:49:00.000Z","key":1486759740000,"doc_count":8},{"key_as_string":"2017-02-10T20:50:00.000Z","key":1486759800000,"doc_count":10},{"key_as_string":"2017-02-10T20:51:00.000Z","key":1486759860000,"doc_count":10},{"key_as_string":"2017-02-10T20:52:00.000Z","key":1486759920000,"doc_count":14},{"key_as_string":"2017-02-10T20:53:00.000Z","key":1486759980000,"doc_count":10},{"key_as_string":"2017-02-10T20:54:00.000Z","key":1486760040000,"doc_count":17},{"key_as_string":"2017-02-10T20:55:00.000Z","key":1486760100000,"doc_count":8},{"key_as_string":"2017-02-10T20:56:00.000Z","key":1486760160000,"doc_count":10},{"key_as_string":"2017-02-10T20:57:00.000Z","key":1486760220000,"doc_count":11},{"key_as_string":"2017-02-10T20:58:00.000Z","key":1486760280000,"doc_count":9},{"key_as_string":"2017-02-10T20:59:00.000Z","key":1486760340000,"doc_count":14},{"key_as_string":"2017-02-10T21:00:00.000Z","key":1486760400000,"doc_count":11},{"key_as_string":"2017-02-10T21:01:00.000Z","key":1486760460000,"doc_count":13},{"key_as_string":"2017-02-10T21:02:00.000Z","key":1486760520000,"doc_count":8},{"key_as_string":"2017-02-10T21:03:00.000Z","key":1486760580000,"doc_count":13},{"key_as_string":"2017-02-10T21:04:00.000Z","key":1486760640000,"doc_count":10},{"key_as_string":"2017-02-10T21:05:00.000Z","key":1486760700000,"doc_count":11},{"key_as_string":"2017-02-10T21:06:00.000Z","key":1486760760000,"doc_count":5},{"key_as_string":"2017-02-10T21:07:00.000Z","key":1486760820000,"doc_count":11},{"key_as_string":"2017-02-10T21:08:00.000Z","key":1486760880000,"doc_count":12},{"key_as_string":"2017-02-10T21:09:00.000Z","key":1486760940000,"doc_count":7},{"key_as_string":"2017-02-10T21:10:00.000Z","key":1486761000000,"doc_count":13},{"key_as_string":"2017-02-10T21:11:00.000Z","key":1486761060000,"doc_count":10},{"key_as_string":"2017-02-10T21:12:00.000Z","key":1486761120000,"doc_count":13},{"key_as_string":"2017-02-10T21:13:00.000Z","key":1486761180000,"doc_count":11},{"key_as_string":"2017-02-10T21:14:00.000Z","key":1486761240000,"doc_count":11},{"key_as_string":"2017-02-10T21:15:00.000Z","key":1486761300000,"doc_count":9},{"key_as_string":"2017-02-10T21:16:00.000Z","key":1486761360000,"doc_count":13},{"key_as_string":"2017-02-10T21:17:00.000Z","key":1486761420000,"doc_count":10},{"key_as_string":"2017-02-10T21:18:00.000Z","key":1486761480000,"doc_count":12},{"key_as_string":"2017-02-10T21:19:00.000Z","key":1486761540000,"doc_count":8},{"key_as_string":"2017-02-10T21:20:00.000Z","key":1486761600000,"doc_count":11},{"key_as_string":"2017-02-10T21:21:00.000Z","key":1486761660000,"doc_count":13},{"key_as_string":"2017-02-10T21:22:00.000Z","key":1486761720000,"doc_count":9},{"key_as_string":"2017-02-10T21:23:00.000Z","key":1486761780000,"doc_count":13},{"key_as_string":"2017-02-10T21:24:00.000Z","key":1486761840000,"doc_count":8},{"key_as_string":"2017-02-10T21:25:00.000Z","key":1486761900000,"doc_count":8},{"key_as_string":"2017-02-10T21:26:00.000Z","key":1486761960000,"doc_count":12},{"key_as_string":"2017-02-10T21:27:00.000Z","key":1486762020000,"doc_count":10},{"key_as_string":"2017-02-10T21:28:00.000Z","key":1486762080000,"doc_count":16},{"key_as_string":"2017-02-10T21:29:00.000Z","key":1486762140000,"doc_count":7},{"key_as_string":"2017-02-10T21:30:00.000Z","key":1486762200000,"doc_count":10},{"key_as_string":"2017-02-10T21:31:00.000Z","key":1486762260000,"doc_count":16},{"key_as_string":"2017-02-10T21:32:00.000Z","key":1486762320000,"doc_count":14},{"key_as_string":"2017-02-10T21:33:00.000Z","key":1486762380000,"doc_count":6},{"key_as_string":"2017-02-10T21:34:00.000Z","key":1486762440000,"doc_count":9},{"key_as_string":"2017-02-10T21:35:00.000Z","key":1486762500000,"doc_count":11},{"key_as_string":"2017-02-10T21:36:00.000Z","key":1486762560000,"doc_count":12},{"key_as_string":"2017-02-10T21:37:00.000Z","key":1486762620000,"doc_count":16},{"key_as_string":"2017-02-10T21:38:00.000Z","key":1486762680000,"doc_count":11},{"key_as_string":"2017-02-10T21:39:00.000Z","key":1486762740000,"doc_count":10},{"key_as_string":"2017-02-10T21:40:00.000Z","key":1486762800000,"doc_count":11},{"key_as_string":"2017-02-10T21:41:00.000Z","key":1486762860000,"doc_count":11},{"key_as_string":"2017-02-10T21:42:00.000Z","key":1486762920000,"doc_count":13},{"key_as_string":"2017-02-10T21:43:00.000Z","key":1486762980000,"doc_count":11},{"key_as_string":"2017-02-10T21:44:00.000Z","key":1486763040000,"doc_count":14},{"key_as_string":"2017-02-10T21:45:00.000Z","key":1486763100000,"doc_count":9},{"key_as_string":"2017-02-10T21:46:00.000Z","key":1486763160000,"doc_count":9},{"key_as_string":"2017-02-10T21:47:00.000Z","key":1486763220000,"doc_count":16},{"key_as_string":"2017-02-10T21:48:00.000Z","key":1486763280000,"doc_count":6},{"key_as_string":"2017-02-10T21:49:00.000Z","key":1486763340000,"doc_count":12},{"key_as_string":"2017-02-10T21:50:00.000Z","key":1486763400000,"doc_count":10},{"key_as_string":"2017-02-10T21:51:00.000Z","key":1486763460000,"doc_count":11},{"key_as_string":"2017-02-10T21:52:00.000Z","key":1486763520000,"doc_count":11},{"key_as_string":"2017-02-10T21:53:00.000Z","key":1486763580000,"doc_count":12},{"key_as_string":"2017-02-10T21:54:00.000Z","key":1486763640000,"doc_count":15},{"key_as_string":"2017-02-10T21:55:00.000Z","key":1486763700000,"doc_count":12},{"key_as_string":"2017-02-10T21:56:00.000Z","key":1486763760000,"doc_count":9},{"key_as_string":"2017-02-10T21:57:00.000Z","key":1486763820000,"doc_count":13},{"key_as_string":"2017-02-10T21:58:00.000Z","key":1486763880000,"doc_count":8},{"key_as_string":"2017-02-10T21:59:00.000Z","key":1486763940000,"doc_count":9},{"key_as_string":"2017-02-10T22:00:00.000Z","key":1486764000000,"doc_count":20},{"key_as_string":"2017-02-10T22:01:00.000Z","key":1486764060000,"doc_count":11},{"key_as_string":"2017-02-10T22:02:00.000Z","key":1486764120000,"doc_count":14},{"key_as_string":"2017-02-10T22:03:00.000Z","key":1486764180000,"doc_count":8},{"key_as_string":"2017-02-10T22:04:00.000Z","key":1486764240000,"doc_count":13},{"key_as_string":"2017-02-10T22:05:00.000Z","key":1486764300000,"doc_count":8},{"key_as_string":"2017-02-10T22:06:00.000Z","key":1486764360000,"doc_count":14},{"key_as_string":"2017-02-10T22:07:00.000Z","key":1486764420000,"doc_count":9},{"key_as_string":"2017-02-10T22:08:00.000Z","key":1486764480000,"doc_count":8},{"key_as_string":"2017-02-10T22:09:00.000Z","key":1486764540000,"doc_count":10},{"key_as_string":"2017-02-10T22:10:00.000Z","key":1486764600000,"doc_count":18},{"key_as_string":"2017-02-10T22:11:00.000Z","key":1486764660000,"doc_count":8},{"key_as_string":"2017-02-10T22:12:00.000Z","key":1486764720000,"doc_count":9},{"key_as_string":"2017-02-10T22:13:00.000Z","key":1486764780000,"doc_count":13},{"key_as_string":"2017-02-10T22:14:00.000Z","key":1486764840000,"doc_count":9},{"key_as_string":"2017-02-10T22:15:00.000Z","key":1486764900000,"doc_count":12},{"key_as_string":"2017-02-10T22:16:00.000Z","key":1486764960000,"doc_count":7},{"key_as_string":"2017-02-10T22:17:00.000Z","key":1486765020000,"doc_count":11},{"key_as_string":"2017-02-10T22:18:00.000Z","key":1486765080000,"doc_count":9},{"key_as_string":"2017-02-10T22:19:00.000Z","key":1486765140000,"doc_count":6},{"key_as_string":"2017-02-10T22:20:00.000Z","key":1486765200000,"doc_count":10},{"key_as_string":"2017-02-10T22:21:00.000Z","key":1486765260000,"doc_count":9},{"key_as_string":"2017-02-10T22:22:00.000Z","key":1486765320000,"doc_count":12},{"key_as_string":"2017-02-10T22:23:00.000Z","key":1486765380000,"doc_count":13},{"key_as_string":"2017-02-10T22:24:00.000Z","key":1486765440000,"doc_count":12},{"key_as_string":"2017-02-10T22:25:00.000Z","key":1486765500000,"doc_count":9},{"key_as_string":"2017-02-10T22:26:00.000Z","key":1486765560000,"doc_count":17},{"key_as_string":"2017-02-10T22:27:00.000Z","key":1486765620000,"doc_count":8},{"key_as_string":"2017-02-10T22:28:00.000Z","key":1486765680000,"doc_count":15},{"key_as_string":"2017-02-10T22:29:00.000Z","key":1486765740000,"doc_count":10},{"key_as_string":"2017-02-10T22:30:00.000Z","key":1486765800000,"doc_count":7},{"key_as_string":"2017-02-10T22:31:00.000Z","key":1486765860000,"doc_count":15},{"key_as_string":"2017-02-10T22:32:00.000Z","key":1486765920000,"doc_count":8},{"key_as_string":"2017-02-10T22:33:00.000Z","key":1486765980000,"doc_count":10},{"key_as_string":"2017-02-10T22:34:00.000Z","key":1486766040000,"doc_count":13},{"key_as_string":"2017-02-10T22:35:00.000Z","key":1486766100000,"doc_count":12},{"key_as_string":"2017-02-10T22:36:00.000Z","key":1486766160000,"doc_count":10},{"key_as_string":"2017-02-10T22:37:00.000Z","key":1486766220000,"doc_count":13},{"key_as_string":"2017-02-10T22:38:00.000Z","key":1486766280000,"doc_count":8},{"key_as_string":"2017-02-10T22:39:00.000Z","key":1486766340000,"doc_count":14},{"key_as_string":"2017-02-10T22:40:00.000Z","key":1486766400000,"doc_count":14},{"key_as_string":"2017-02-10T22:41:00.000Z","key":1486766460000,"doc_count":13},{"key_as_string":"2017-02-10T22:42:00.000Z","key":1486766520000,"doc_count":9},{"key_as_string":"2017-02-10T22:43:00.000Z","key":1486766580000,"doc_count":11},{"key_as_string":"2017-02-10T22:44:00.000Z","key":1486766640000,"doc_count":12},{"key_as_string":"2017-02-10T22:45:00.000Z","key":1486766700000,"doc_count":11},{"key_as_string":"2017-02-10T22:46:00.000Z","key":1486766760000,"doc_count":5},{"key_as_string":"2017-02-10T22:47:00.000Z","key":1486766820000,"doc_count":12},{"key_as_string":"2017-02-10T22:48:00.000Z","key":1486766880000,"doc_count":8},{"key_as_string":"2017-02-10T22:49:00.000Z","key":1486766940000,"doc_count":13},{"key_as_string":"2017-02-10T22:50:00.000Z","key":1486767000000,"doc_count":9},{"key_as_string":"2017-02-10T22:51:00.000Z","key":1486767060000,"doc_count":14},{"key_as_string":"2017-02-10T22:52:00.000Z","key":1486767120000,"doc_count":8},{"key_as_string":"2017-02-10T22:53:00.000Z","key":1486767180000,"doc_count":14},{"key_as_string":"2017-02-10T22:54:00.000Z","key":1486767240000,"doc_count":5},{"key_as_string":"2017-02-10T22:55:00.000Z","key":1486767300000,"doc_count":15},{"key_as_string":"2017-02-10T22:56:00.000Z","key":1486767360000,"doc_count":10},{"key_as_string":"2017-02-10T22:57:00.000Z","key":1486767420000,"doc_count":17},{"key_as_string":"2017-02-10T22:58:00.000Z","key":1486767480000,"doc_count":10},{"key_as_string":"2017-02-10T22:59:00.000Z","key":1486767540000,"doc_count":14},{"key_as_string":"2017-02-10T23:00:00.000Z","key":1486767600000,"doc_count":5},{"key_as_string":"2017-02-10T23:01:00.000Z","key":1486767660000,"doc_count":12},{"key_as_string":"2017-02-10T23:02:00.000Z","key":1486767720000,"doc_count":12},{"key_as_string":"2017-02-10T23:03:00.000Z","key":1486767780000,"doc_count":9},{"key_as_string":"2017-02-10T23:04:00.000Z","key":1486767840000,"doc_count":7},{"key_as_string":"2017-02-10T23:05:00.000Z","key":1486767900000,"doc_count":12},{"key_as_string":"2017-02-10T23:06:00.000Z","key":1486767960000,"doc_count":7},{"key_as_string":"2017-02-10T23:07:00.000Z","key":1486768020000,"doc_count":14},{"key_as_string":"2017-02-10T23:08:00.000Z","key":1486768080000,"doc_count":10},{"key_as_string":"2017-02-10T23:09:00.000Z","key":1486768140000,"doc_count":9},{"key_as_string":"2017-02-10T23:10:00.000Z","key":1486768200000,"doc_count":15},{"key_as_string":"2017-02-10T23:11:00.000Z","key":1486768260000,"doc_count":13},{"key_as_string":"2017-02-10T23:12:00.000Z","key":1486768320000,"doc_count":10},{"key_as_string":"2017-02-10T23:13:00.000Z","key":1486768380000,"doc_count":8},{"key_as_string":"2017-02-10T23:14:00.000Z","key":1486768440000,"doc_count":10},{"key_as_string":"2017-02-10T23:15:00.000Z","key":1486768500000,"doc_count":13},{"key_as_string":"2017-02-10T23:16:00.000Z","key":1486768560000,"doc_count":9},{"key_as_string":"2017-02-10T23:17:00.000Z","key":1486768620000,"doc_count":8},{"key_as_string":"2017-02-10T23:18:00.000Z","key":1486768680000,"doc_count":7},{"key_as_string":"2017-02-10T23:19:00.000Z","key":1486768740000,"doc_count":12},{"key_as_string":"2017-02-10T23:20:00.000Z","key":1486768800000,"doc_count":9},{"key_as_string":"2017-02-10T23:21:00.000Z","key":1486768860000,"doc_count":11},{"key_as_string":"2017-02-10T23:22:00.000Z","key":1486768920000,"doc_count":8},{"key_as_string":"2017-02-10T23:23:00.000Z","key":1486768980000,"doc_count":9},{"key_as_string":"2017-02-10T23:24:00.000Z","key":1486769040000,"doc_count":14},{"key_as_string":"2017-02-10T23:25:00.000Z","key":1486769100000,"doc_count":9},{"key_as_string":"2017-02-10T23:26:00.000Z","key":1486769160000,"doc_count":8},{"key_as_string":"2017-02-10T23:27:00.000Z","key":1486769220000,"doc_count":7},{"key_as_string":"2017-02-10T23:28:00.000Z","key":1486769280000,"doc_count":17},{"key_as_string":"2017-02-10T23:29:00.000Z","key":1486769340000,"doc_count":5},{"key_as_string":"2017-02-10T23:30:00.000Z","key":1486769400000,"doc_count":16},{"key_as_string":"2017-02-10T23:31:00.000Z","key":1486769460000,"doc_count":14},{"key_as_string":"2017-02-10T23:32:00.000Z","key":1486769520000,"doc_count":6},{"key_as_string":"2017-02-10T23:33:00.000Z","key":1486769580000,"doc_count":8},{"key_as_string":"2017-02-10T23:34:00.000Z","key":1486769640000,"doc_count":15},{"key_as_string":"2017-02-10T23:35:00.000Z","key":1486769700000,"doc_count":9},{"key_as_string":"2017-02-10T23:36:00.000Z","key":1486769760000,"doc_count":11},{"key_as_string":"2017-02-10T23:37:00.000Z","key":1486769820000,"doc_count":13},{"key_as_string":"2017-02-10T23:38:00.000Z","key":1486769880000,"doc_count":12},{"key_as_string":"2017-02-10T23:39:00.000Z","key":1486769940000,"doc_count":12},{"key_as_string":"2017-02-10T23:40:00.000Z","key":1486770000000,"doc_count":9},{"key_as_string":"2017-02-10T23:41:00.000Z","key":1486770060000,"doc_count":11},{"key_as_string":"2017-02-10T23:42:00.000Z","key":1486770120000,"doc_count":10},{"key_as_string":"2017-02-10T23:43:00.000Z","key":1486770180000,"doc_count":16},{"key_as_string":"2017-02-10T23:44:00.000Z","key":1486770240000,"doc_count":8},{"key_as_string":"2017-02-10T23:45:00.000Z","key":1486770300000,"doc_count":8},{"key_as_string":"2017-02-10T23:46:00.000Z","key":1486770360000,"doc_count":8},{"key_as_string":"2017-02-10T23:47:00.000Z","key":1486770420000,"doc_count":11},{"key_as_string":"2017-02-10T23:48:00.000Z","key":1486770480000,"doc_count":10},{"key_as_string":"2017-02-10T23:49:00.000Z","key":1486770540000,"doc_count":10},{"key_as_string":"2017-02-10T23:50:00.000Z","key":1486770600000,"doc_count":13},{"key_as_string":"2017-02-10T23:51:00.000Z","key":1486770660000,"doc_count":6},{"key_as_string":"2017-02-10T23:52:00.000Z","key":1486770720000,"doc_count":16},{"key_as_string":"2017-02-10T23:53:00.000Z","key":1486770780000,"doc_count":10},{"key_as_string":"2017-02-10T23:54:00.000Z","key":1486770840000,"doc_count":11},{"key_as_string":"2017-02-10T23:55:00.000Z","key":1486770900000,"doc_count":14},{"key_as_string":"2017-02-10T23:56:00.000Z","key":1486770960000,"doc_count":9},{"key_as_string":"2017-02-10T23:57:00.000Z","key":1486771020000,"doc_count":9},{"key_as_string":"2017-02-10T23:58:00.000Z","key":1486771080000,"doc_count":11},{"key_as_string":"2017-02-10T23:59:00.000Z","key":1486771140000,"doc_count":6},{"key_as_string":"2017-02-11T00:00:00.000Z","key":1486771200000,"doc_count":12},{"key_as_string":"2017-02-11T00:01:00.000Z","key":1486771260000,"doc_count":14},{"key_as_string":"2017-02-11T00:02:00.000Z","key":1486771320000,"doc_count":9},{"key_as_string":"2017-02-11T00:03:00.000Z","key":1486771380000,"doc_count":3},{"key_as_string":"2017-02-11T00:04:00.000Z","key":1486771440000,"doc_count":15},{"key_as_string":"2017-02-11T00:05:00.000Z","key":1486771500000,"doc_count":10},{"key_as_string":"2017-02-11T00:06:00.000Z","key":1486771560000,"doc_count":11},{"key_as_string":"2017-02-11T00:07:00.000Z","key":1486771620000,"doc_count":6},{"key_as_string":"2017-02-11T00:08:00.000Z","key":1486771680000,"doc_count":11},{"key_as_string":"2017-02-11T00:09:00.000Z","key":1486771740000,"doc_count":10},{"key_as_string":"2017-02-11T00:10:00.000Z","key":1486771800000,"doc_count":7},{"key_as_string":"2017-02-11T00:11:00.000Z","key":1486771860000,"doc_count":13},{"key_as_string":"2017-02-11T00:12:00.000Z","key":1486771920000,"doc_count":9},{"key_as_string":"2017-02-11T00:13:00.000Z","key":1486771980000,"doc_count":10},{"key_as_string":"2017-02-11T00:14:00.000Z","key":1486772040000,"doc_count":17},{"key_as_string":"2017-02-11T00:15:00.000Z","key":1486772100000,"doc_count":7},{"key_as_string":"2017-02-11T00:16:00.000Z","key":1486772160000,"doc_count":12},{"key_as_string":"2017-02-11T00:17:00.000Z","key":1486772220000,"doc_count":13},{"key_as_string":"2017-02-11T00:18:00.000Z","key":1486772280000,"doc_count":4},{"key_as_string":"2017-02-11T00:19:00.000Z","key":1486772340000,"doc_count":15},{"key_as_string":"2017-02-11T00:20:00.000Z","key":1486772400000,"doc_count":13},{"key_as_string":"2017-02-11T00:21:00.000Z","key":1486772460000,"doc_count":8},{"key_as_string":"2017-02-11T00:22:00.000Z","key":1486772520000,"doc_count":8},{"key_as_string":"2017-02-11T00:23:00.000Z","key":1486772580000,"doc_count":12},{"key_as_string":"2017-02-11T00:24:00.000Z","key":1486772640000,"doc_count":9},{"key_as_string":"2017-02-11T00:25:00.000Z","key":1486772700000,"doc_count":8},{"key_as_string":"2017-02-11T00:26:00.000Z","key":1486772760000,"doc_count":13},{"key_as_string":"2017-02-11T00:27:00.000Z","key":1486772820000,"doc_count":10},{"key_as_string":"2017-02-11T00:28:00.000Z","key":1486772880000,"doc_count":11},{"key_as_string":"2017-02-11T00:29:00.000Z","key":1486772940000,"doc_count":7},{"key_as_string":"2017-02-11T00:30:00.000Z","key":1486773000000,"doc_count":14},{"key_as_string":"2017-02-11T00:31:00.000Z","key":1486773060000,"doc_count":8},{"key_as_string":"2017-02-11T00:32:00.000Z","key":1486773120000,"doc_count":9},{"key_as_string":"2017-02-11T00:33:00.000Z","key":1486773180000,"doc_count":14},{"key_as_string":"2017-02-11T00:34:00.000Z","key":1486773240000,"doc_count":7},{"key_as_string":"2017-02-11T00:35:00.000Z","key":1486773300000,"doc_count":10},{"key_as_string":"2017-02-11T00:36:00.000Z","key":1486773360000,"doc_count":11},{"key_as_string":"2017-02-11T00:37:00.000Z","key":1486773420000,"doc_count":15},{"key_as_string":"2017-02-11T00:38:00.000Z","key":1486773480000,"doc_count":9},{"key_as_string":"2017-02-11T00:39:00.000Z","key":1486773540000,"doc_count":11},{"key_as_string":"2017-02-11T00:40:00.000Z","key":1486773600000,"doc_count":8},{"key_as_string":"2017-02-11T00:41:00.000Z","key":1486773660000,"doc_count":9},{"key_as_string":"2017-02-11T00:42:00.000Z","key":1486773720000,"doc_count":10},{"key_as_string":"2017-02-11T00:43:00.000Z","key":1486773780000,"doc_count":14},{"key_as_string":"2017-02-11T00:44:00.000Z","key":1486773840000,"doc_count":7},{"key_as_string":"2017-02-11T00:45:00.000Z","key":1486773900000,"doc_count":12},{"key_as_string":"2017-02-11T00:46:00.000Z","key":1486773960000,"doc_count":12},{"key_as_string":"2017-02-11T00:47:00.000Z","key":1486774020000,"doc_count":9},{"key_as_string":"2017-02-11T00:48:00.000Z","key":1486774080000,"doc_count":11},{"key_as_string":"2017-02-11T00:49:00.000Z","key":1486774140000,"doc_count":6},{"key_as_string":"2017-02-11T00:50:00.000Z","key":1486774200000,"doc_count":11},{"key_as_string":"2017-02-11T00:51:00.000Z","key":1486774260000,"doc_count":14},{"key_as_string":"2017-02-11T00:52:00.000Z","key":1486774320000,"doc_count":6},{"key_as_string":"2017-02-11T00:53:00.000Z","key":1486774380000,"doc_count":14},{"key_as_string":"2017-02-11T00:54:00.000Z","key":1486774440000,"doc_count":9},{"key_as_string":"2017-02-11T00:55:00.000Z","key":1486774500000,"doc_count":7},{"key_as_string":"2017-02-11T00:56:00.000Z","key":1486774560000,"doc_count":9},{"key_as_string":"2017-02-11T00:57:00.000Z","key":1486774620000,"doc_count":11},{"key_as_string":"2017-02-11T00:58:00.000Z","key":1486774680000,"doc_count":11},{"key_as_string":"2017-02-11T00:59:00.000Z","key":1486774740000,"doc_count":9},{"key_as_string":"2017-02-11T01:00:00.000Z","key":1486774800000,"doc_count":9},{"key_as_string":"2017-02-11T01:01:00.000Z","key":1486774860000,"doc_count":9},{"key_as_string":"2017-02-11T01:02:00.000Z","key":1486774920000,"doc_count":9},{"key_as_string":"2017-02-11T01:03:00.000Z","key":1486774980000,"doc_count":13},{"key_as_string":"2017-02-11T01:04:00.000Z","key":1486775040000,"doc_count":8},{"key_as_string":"2017-02-11T01:05:00.000Z","key":1486775100000,"doc_count":14},{"key_as_string":"2017-02-11T01:06:00.000Z","key":1486775160000,"doc_count":7},{"key_as_string":"2017-02-11T01:07:00.000Z","key":1486775220000,"doc_count":13},{"key_as_string":"2017-02-11T01:08:00.000Z","key":1486775280000,"doc_count":9},{"key_as_string":"2017-02-11T01:09:00.000Z","key":1486775340000,"doc_count":11},{"key_as_string":"2017-02-11T01:10:00.000Z","key":1486775400000,"doc_count":11},{"key_as_string":"2017-02-11T01:11:00.000Z","key":1486775460000,"doc_count":15},{"key_as_string":"2017-02-11T01:12:00.000Z","key":1486775520000,"doc_count":8},{"key_as_string":"2017-02-11T01:13:00.000Z","key":1486775580000,"doc_count":7},{"key_as_string":"2017-02-11T01:14:00.000Z","key":1486775640000,"doc_count":16},{"key_as_string":"2017-02-11T01:15:00.000Z","key":1486775700000,"doc_count":6},{"key_as_string":"2017-02-11T01:16:00.000Z","key":1486775760000,"doc_count":13},{"key_as_string":"2017-02-11T01:17:00.000Z","key":1486775820000,"doc_count":9},{"key_as_string":"2017-02-11T01:18:00.000Z","key":1486775880000,"doc_count":7},{"key_as_string":"2017-02-11T01:19:00.000Z","key":1486775940000,"doc_count":12},{"key_as_string":"2017-02-11T01:20:00.000Z","key":1486776000000,"doc_count":8},{"key_as_string":"2017-02-11T01:21:00.000Z","key":1486776060000,"doc_count":12},{"key_as_string":"2017-02-11T01:22:00.000Z","key":1486776120000,"doc_count":16},{"key_as_string":"2017-02-11T01:23:00.000Z","key":1486776180000,"doc_count":9},{"key_as_string":"2017-02-11T01:24:00.000Z","key":1486776240000,"doc_count":6},{"key_as_string":"2017-02-11T01:25:00.000Z","key":1486776300000,"doc_count":13},{"key_as_string":"2017-02-11T01:26:00.000Z","key":1486776360000,"doc_count":12},{"key_as_string":"2017-02-11T01:27:00.000Z","key":1486776420000,"doc_count":10},{"key_as_string":"2017-02-11T01:28:00.000Z","key":1486776480000,"doc_count":6},{"key_as_string":"2017-02-11T01:29:00.000Z","key":1486776540000,"doc_count":13},{"key_as_string":"2017-02-11T01:30:00.000Z","key":1486776600000,"doc_count":8},{"key_as_string":"2017-02-11T01:31:00.000Z","key":1486776660000,"doc_count":16},{"key_as_string":"2017-02-11T01:32:00.000Z","key":1486776720000,"doc_count":8},{"key_as_string":"2017-02-11T01:33:00.000Z","key":1486776780000,"doc_count":4},{"key_as_string":"2017-02-11T01:34:00.000Z","key":1486776840000,"doc_count":9},{"key_as_string":"2017-02-11T01:35:00.000Z","key":1486776900000,"doc_count":11},{"key_as_string":"2017-02-11T01:36:00.000Z","key":1486776960000,"doc_count":10},{"key_as_string":"2017-02-11T01:37:00.000Z","key":1486777020000,"doc_count":17},{"key_as_string":"2017-02-11T01:38:00.000Z","key":1486777080000,"doc_count":11},{"key_as_string":"2017-02-11T01:39:00.000Z","key":1486777140000,"doc_count":10},{"key_as_string":"2017-02-11T01:40:00.000Z","key":1486777200000,"doc_count":12},{"key_as_string":"2017-02-11T01:41:00.000Z","key":1486777260000,"doc_count":11},{"key_as_string":"2017-02-11T01:42:00.000Z","key":1486777320000,"doc_count":11},{"key_as_string":"2017-02-11T01:43:00.000Z","key":1486777380000,"doc_count":6},{"key_as_string":"2017-02-11T01:44:00.000Z","key":1486777440000,"doc_count":13},{"key_as_string":"2017-02-11T01:45:00.000Z","key":1486777500000,"doc_count":12},{"key_as_string":"2017-02-11T01:46:00.000Z","key":1486777560000,"doc_count":12},{"key_as_string":"2017-02-11T01:47:00.000Z","key":1486777620000,"doc_count":7},{"key_as_string":"2017-02-11T01:48:00.000Z","key":1486777680000,"doc_count":12},{"key_as_string":"2017-02-11T01:49:00.000Z","key":1486777740000,"doc_count":11},{"key_as_string":"2017-02-11T01:50:00.000Z","key":1486777800000,"doc_count":13},{"key_as_string":"2017-02-11T01:51:00.000Z","key":1486777860000,"doc_count":13},{"key_as_string":"2017-02-11T01:52:00.000Z","key":1486777920000,"doc_count":11},{"key_as_string":"2017-02-11T01:53:00.000Z","key":1486777980000,"doc_count":11},{"key_as_string":"2017-02-11T01:54:00.000Z","key":1486778040000,"doc_count":7},{"key_as_string":"2017-02-11T01:55:00.000Z","key":1486778100000,"doc_count":13},{"key_as_string":"2017-02-11T01:56:00.000Z","key":1486778160000,"doc_count":12},{"key_as_string":"2017-02-11T01:57:00.000Z","key":1486778220000,"doc_count":12},{"key_as_string":"2017-02-11T01:58:00.000Z","key":1486778280000,"doc_count":10},{"key_as_string":"2017-02-11T01:59:00.000Z","key":1486778340000,"doc_count":13},{"key_as_string":"2017-02-11T02:00:00.000Z","key":1486778400000,"doc_count":10},{"key_as_string":"2017-02-11T02:01:00.000Z","key":1486778460000,"doc_count":8},{"key_as_string":"2017-02-11T02:02:00.000Z","key":1486778520000,"doc_count":8},{"key_as_string":"2017-02-11T02:03:00.000Z","key":1486778580000,"doc_count":10},{"key_as_string":"2017-02-11T02:04:00.000Z","key":1486778640000,"doc_count":10},{"key_as_string":"2017-02-11T02:05:00.000Z","key":1486778700000,"doc_count":6},{"key_as_string":"2017-02-11T02:06:00.000Z","key":1486778760000,"doc_count":12},{"key_as_string":"2017-02-11T02:07:00.000Z","key":1486778820000,"doc_count":11},{"key_as_string":"2017-02-11T02:08:00.000Z","key":1486778880000,"doc_count":7},{"key_as_string":"2017-02-11T02:09:00.000Z","key":1486778940000,"doc_count":13},{"key_as_string":"2017-02-11T02:10:00.000Z","key":1486779000000,"doc_count":9},{"key_as_string":"2017-02-11T02:11:00.000Z","key":1486779060000,"doc_count":14},{"key_as_string":"2017-02-11T02:12:00.000Z","key":1486779120000,"doc_count":9},{"key_as_string":"2017-02-11T02:13:00.000Z","key":1486779180000,"doc_count":10},{"key_as_string":"2017-02-11T02:14:00.000Z","key":1486779240000,"doc_count":12},{"key_as_string":"2017-02-11T02:15:00.000Z","key":1486779300000,"doc_count":5},{"key_as_string":"2017-02-11T02:16:00.000Z","key":1486779360000,"doc_count":9},{"key_as_string":"2017-02-11T02:17:00.000Z","key":1486779420000,"doc_count":14},{"key_as_string":"2017-02-11T02:18:00.000Z","key":1486779480000,"doc_count":5},{"key_as_string":"2017-02-11T02:19:00.000Z","key":1486779540000,"doc_count":18},{"key_as_string":"2017-02-11T02:20:00.000Z","key":1486779600000,"doc_count":9},{"key_as_string":"2017-02-11T02:21:00.000Z","key":1486779660000,"doc_count":7},{"key_as_string":"2017-02-11T02:22:00.000Z","key":1486779720000,"doc_count":14},{"key_as_string":"2017-02-11T02:23:00.000Z","key":1486779780000,"doc_count":8},{"key_as_string":"2017-02-11T02:24:00.000Z","key":1486779840000,"doc_count":9},{"key_as_string":"2017-02-11T02:25:00.000Z","key":1486779900000,"doc_count":10},{"key_as_string":"2017-02-11T02:26:00.000Z","key":1486779960000,"doc_count":15},{"key_as_string":"2017-02-11T02:27:00.000Z","key":1486780020000,"doc_count":12},{"key_as_string":"2017-02-11T02:28:00.000Z","key":1486780080000,"doc_count":8},{"key_as_string":"2017-02-11T02:29:00.000Z","key":1486780140000,"doc_count":7},{"key_as_string":"2017-02-11T02:30:00.000Z","key":1486780200000,"doc_count":13},{"key_as_string":"2017-02-11T02:31:00.000Z","key":1486780260000,"doc_count":9},{"key_as_string":"2017-02-11T02:32:00.000Z","key":1486780320000,"doc_count":11},{"key_as_string":"2017-02-11T02:33:00.000Z","key":1486780380000,"doc_count":9},{"key_as_string":"2017-02-11T02:34:00.000Z","key":1486780440000,"doc_count":12},{"key_as_string":"2017-02-11T02:35:00.000Z","key":1486780500000,"doc_count":11},{"key_as_string":"2017-02-11T02:36:00.000Z","key":1486780560000,"doc_count":4},{"key_as_string":"2017-02-11T02:37:00.000Z","key":1486780620000,"doc_count":12},{"key_as_string":"2017-02-11T02:38:00.000Z","key":1486780680000,"doc_count":6},{"key_as_string":"2017-02-11T02:39:00.000Z","key":1486780740000,"doc_count":12},{"key_as_string":"2017-02-11T02:40:00.000Z","key":1486780800000,"doc_count":12},{"key_as_string":"2017-02-11T02:41:00.000Z","key":1486780860000,"doc_count":12},{"key_as_string":"2017-02-11T02:42:00.000Z","key":1486780920000,"doc_count":13},{"key_as_string":"2017-02-11T02:43:00.000Z","key":1486780980000,"doc_count":12},{"key_as_string":"2017-02-11T02:44:00.000Z","key":1486781040000,"doc_count":13},{"key_as_string":"2017-02-11T02:45:00.000Z","key":1486781100000,"doc_count":11},{"key_as_string":"2017-02-11T02:46:00.000Z","key":1486781160000,"doc_count":5},{"key_as_string":"2017-02-11T02:47:00.000Z","key":1486781220000,"doc_count":14},{"key_as_string":"2017-02-11T02:48:00.000Z","key":1486781280000,"doc_count":8},{"key_as_string":"2017-02-11T02:49:00.000Z","key":1486781340000,"doc_count":14},{"key_as_string":"2017-02-11T02:50:00.000Z","key":1486781400000,"doc_count":16},{"key_as_string":"2017-02-11T02:51:00.000Z","key":1486781460000,"doc_count":7},{"key_as_string":"2017-02-11T02:52:00.000Z","key":1486781520000,"doc_count":7},{"key_as_string":"2017-02-11T02:53:00.000Z","key":1486781580000,"doc_count":15},{"key_as_string":"2017-02-11T02:54:00.000Z","key":1486781640000,"doc_count":13},{"key_as_string":"2017-02-11T02:55:00.000Z","key":1486781700000,"doc_count":5},{"key_as_string":"2017-02-11T02:56:00.000Z","key":1486781760000,"doc_count":8},{"key_as_string":"2017-02-11T02:57:00.000Z","key":1486781820000,"doc_count":8},{"key_as_string":"2017-02-11T02:58:00.000Z","key":1486781880000,"doc_count":16},{"key_as_string":"2017-02-11T02:59:00.000Z","key":1486781940000,"doc_count":9},{"key_as_string":"2017-02-11T03:00:00.000Z","key":1486782000000,"doc_count":9},{"key_as_string":"2017-02-11T03:01:00.000Z","key":1486782060000,"doc_count":13},{"key_as_string":"2017-02-11T03:02:00.000Z","key":1486782120000,"doc_count":14},{"key_as_string":"2017-02-11T03:03:00.000Z","key":1486782180000,"doc_count":10},{"key_as_string":"2017-02-11T03:04:00.000Z","key":1486782240000,"doc_count":8},{"key_as_string":"2017-02-11T03:05:00.000Z","key":1486782300000,"doc_count":14},{"key_as_string":"2017-02-11T03:06:00.000Z","key":1486782360000,"doc_count":11},{"key_as_string":"2017-02-11T03:07:00.000Z","key":1486782420000,"doc_count":11},{"key_as_string":"2017-02-11T03:08:00.000Z","key":1486782480000,"doc_count":8},{"key_as_string":"2017-02-11T03:09:00.000Z","key":1486782540000,"doc_count":13},{"key_as_string":"2017-02-11T03:10:00.000Z","key":1486782600000,"doc_count":12},{"key_as_string":"2017-02-11T03:11:00.000Z","key":1486782660000,"doc_count":9},{"key_as_string":"2017-02-11T03:12:00.000Z","key":1486782720000,"doc_count":9},{"key_as_string":"2017-02-11T03:13:00.000Z","key":1486782780000,"doc_count":9},{"key_as_string":"2017-02-11T03:14:00.000Z","key":1486782840000,"doc_count":11},{"key_as_string":"2017-02-11T03:15:00.000Z","key":1486782900000,"doc_count":9},{"key_as_string":"2017-02-11T03:16:00.000Z","key":1486782960000,"doc_count":20},{"key_as_string":"2017-02-11T03:17:00.000Z","key":1486783020000,"doc_count":7},{"key_as_string":"2017-02-11T03:18:00.000Z","key":1486783080000,"doc_count":11},{"key_as_string":"2017-02-11T03:19:00.000Z","key":1486783140000,"doc_count":10},{"key_as_string":"2017-02-11T03:20:00.000Z","key":1486783200000,"doc_count":8},{"key_as_string":"2017-02-11T03:21:00.000Z","key":1486783260000,"doc_count":16},{"key_as_string":"2017-02-11T03:22:00.000Z","key":1486783320000,"doc_count":5},{"key_as_string":"2017-02-11T03:23:00.000Z","key":1486783380000,"doc_count":12},{"key_as_string":"2017-02-11T03:24:00.000Z","key":1486783440000,"doc_count":8},{"key_as_string":"2017-02-11T03:25:00.000Z","key":1486783500000,"doc_count":17},{"key_as_string":"2017-02-11T03:26:00.000Z","key":1486783560000,"doc_count":8},{"key_as_string":"2017-02-11T03:27:00.000Z","key":1486783620000,"doc_count":14},{"key_as_string":"2017-02-11T03:28:00.000Z","key":1486783680000,"doc_count":7},{"key_as_string":"2017-02-11T03:29:00.000Z","key":1486783740000,"doc_count":12},{"key_as_string":"2017-02-11T03:30:00.000Z","key":1486783800000,"doc_count":13},{"key_as_string":"2017-02-11T03:31:00.000Z","key":1486783860000,"doc_count":9},{"key_as_string":"2017-02-11T03:32:00.000Z","key":1486783920000,"doc_count":5},{"key_as_string":"2017-02-11T03:33:00.000Z","key":1486783980000,"doc_count":10},{"key_as_string":"2017-02-11T03:34:00.000Z","key":1486784040000,"doc_count":14},{"key_as_string":"2017-02-11T03:35:00.000Z","key":1486784100000,"doc_count":13},{"key_as_string":"2017-02-11T03:36:00.000Z","key":1486784160000,"doc_count":9},{"key_as_string":"2017-02-11T03:37:00.000Z","key":1486784220000,"doc_count":10},{"key_as_string":"2017-02-11T03:38:00.000Z","key":1486784280000,"doc_count":10},{"key_as_string":"2017-02-11T03:39:00.000Z","key":1486784340000,"doc_count":12},{"key_as_string":"2017-02-11T03:40:00.000Z","key":1486784400000,"doc_count":11},{"key_as_string":"2017-02-11T03:41:00.000Z","key":1486784460000,"doc_count":11},{"key_as_string":"2017-02-11T03:42:00.000Z","key":1486784520000,"doc_count":7},{"key_as_string":"2017-02-11T03:43:00.000Z","key":1486784580000,"doc_count":18},{"key_as_string":"2017-02-11T03:44:00.000Z","key":1486784640000,"doc_count":6},{"key_as_string":"2017-02-11T03:45:00.000Z","key":1486784700000,"doc_count":12},{"key_as_string":"2017-02-11T03:46:00.000Z","key":1486784760000,"doc_count":13},{"key_as_string":"2017-02-11T03:47:00.000Z","key":1486784820000,"doc_count":13},{"key_as_string":"2017-02-11T03:48:00.000Z","key":1486784880000,"doc_count":15},{"key_as_string":"2017-02-11T03:49:00.000Z","key":1486784940000,"doc_count":11},{"key_as_string":"2017-02-11T03:50:00.000Z","key":1486785000000,"doc_count":9},{"key_as_string":"2017-02-11T03:51:00.000Z","key":1486785060000,"doc_count":14},{"key_as_string":"2017-02-11T03:52:00.000Z","key":1486785120000,"doc_count":7},{"key_as_string":"2017-02-11T03:53:00.000Z","key":1486785180000,"doc_count":11},{"key_as_string":"2017-02-11T03:54:00.000Z","key":1486785240000,"doc_count":8},{"key_as_string":"2017-02-11T03:55:00.000Z","key":1486785300000,"doc_count":7},{"key_as_string":"2017-02-11T03:56:00.000Z","key":1486785360000,"doc_count":10},{"key_as_string":"2017-02-11T03:57:00.000Z","key":1486785420000,"doc_count":13},{"key_as_string":"2017-02-11T03:58:00.000Z","key":1486785480000,"doc_count":11},{"key_as_string":"2017-02-11T03:59:00.000Z","key":1486785540000,"doc_count":8},{"key_as_string":"2017-02-11T04:00:00.000Z","key":1486785600000,"doc_count":11},{"key_as_string":"2017-02-11T04:01:00.000Z","key":1486785660000,"doc_count":9},{"key_as_string":"2017-02-11T04:02:00.000Z","key":1486785720000,"doc_count":13},{"key_as_string":"2017-02-11T04:03:00.000Z","key":1486785780000,"doc_count":14},{"key_as_string":"2017-02-11T04:04:00.000Z","key":1486785840000,"doc_count":13},{"key_as_string":"2017-02-11T04:05:00.000Z","key":1486785900000,"doc_count":9},{"key_as_string":"2017-02-11T04:06:00.000Z","key":1486785960000,"doc_count":8},{"key_as_string":"2017-02-11T04:07:00.000Z","key":1486786020000,"doc_count":8},{"key_as_string":"2017-02-11T04:08:00.000Z","key":1486786080000,"doc_count":14},{"key_as_string":"2017-02-11T04:09:00.000Z","key":1486786140000,"doc_count":10},{"key_as_string":"2017-02-11T04:10:00.000Z","key":1486786200000,"doc_count":12},{"key_as_string":"2017-02-11T04:11:00.000Z","key":1486786260000,"doc_count":9},{"key_as_string":"2017-02-11T04:12:00.000Z","key":1486786320000,"doc_count":11},{"key_as_string":"2017-02-11T04:13:00.000Z","key":1486786380000,"doc_count":19},{"key_as_string":"2017-02-11T04:14:00.000Z","key":1486786440000,"doc_count":9},{"key_as_string":"2017-02-11T04:15:00.000Z","key":1486786500000,"doc_count":9},{"key_as_string":"2017-02-11T04:16:00.000Z","key":1486786560000,"doc_count":15},{"key_as_string":"2017-02-11T04:17:00.000Z","key":1486786620000,"doc_count":17},{"key_as_string":"2017-02-11T04:18:00.000Z","key":1486786680000,"doc_count":15},{"key_as_string":"2017-02-11T04:19:00.000Z","key":1486786740000,"doc_count":8},{"key_as_string":"2017-02-11T04:20:00.000Z","key":1486786800000,"doc_count":11},{"key_as_string":"2017-02-11T04:21:00.000Z","key":1486786860000,"doc_count":13},{"key_as_string":"2017-02-11T04:22:00.000Z","key":1486786920000,"doc_count":11},{"key_as_string":"2017-02-11T04:23:00.000Z","key":1486786980000,"doc_count":7},{"key_as_string":"2017-02-11T04:24:00.000Z","key":1486787040000,"doc_count":14},{"key_as_string":"2017-02-11T04:25:00.000Z","key":1486787100000,"doc_count":11},{"key_as_string":"2017-02-11T04:26:00.000Z","key":1486787160000,"doc_count":9},{"key_as_string":"2017-02-11T04:27:00.000Z","key":1486787220000,"doc_count":6},{"key_as_string":"2017-02-11T04:28:00.000Z","key":1486787280000,"doc_count":17},{"key_as_string":"2017-02-11T04:29:00.000Z","key":1486787340000,"doc_count":9},{"key_as_string":"2017-02-11T04:30:00.000Z","key":1486787400000,"doc_count":9},{"key_as_string":"2017-02-11T04:31:00.000Z","key":1486787460000,"doc_count":8},{"key_as_string":"2017-02-11T04:32:00.000Z","key":1486787520000,"doc_count":12},{"key_as_string":"2017-02-11T04:33:00.000Z","key":1486787580000,"doc_count":11},{"key_as_string":"2017-02-11T04:34:00.000Z","key":1486787640000,"doc_count":10},{"key_as_string":"2017-02-11T04:35:00.000Z","key":1486787700000,"doc_count":11},{"key_as_string":"2017-02-11T04:36:00.000Z","key":1486787760000,"doc_count":11},{"key_as_string":"2017-02-11T04:37:00.000Z","key":1486787820000,"doc_count":15},{"key_as_string":"2017-02-11T04:38:00.000Z","key":1486787880000,"doc_count":11},{"key_as_string":"2017-02-11T04:39:00.000Z","key":1486787940000,"doc_count":10},{"key_as_string":"2017-02-11T04:40:00.000Z","key":1486788000000,"doc_count":10},{"key_as_string":"2017-02-11T04:41:00.000Z","key":1486788060000,"doc_count":10},{"key_as_string":"2017-02-11T04:42:00.000Z","key":1486788120000,"doc_count":8},{"key_as_string":"2017-02-11T04:43:00.000Z","key":1486788180000,"doc_count":9},{"key_as_string":"2017-02-11T04:44:00.000Z","key":1486788240000,"doc_count":8},{"key_as_string":"2017-02-11T04:45:00.000Z","key":1486788300000,"doc_count":19},{"key_as_string":"2017-02-11T04:46:00.000Z","key":1486788360000,"doc_count":11},{"key_as_string":"2017-02-11T04:47:00.000Z","key":1486788420000,"doc_count":11},{"key_as_string":"2017-02-11T04:48:00.000Z","key":1486788480000,"doc_count":10},{"key_as_string":"2017-02-11T04:49:00.000Z","key":1486788540000,"doc_count":9},{"key_as_string":"2017-02-11T04:50:00.000Z","key":1486788600000,"doc_count":9},{"key_as_string":"2017-02-11T04:51:00.000Z","key":1486788660000,"doc_count":15},{"key_as_string":"2017-02-11T04:52:00.000Z","key":1486788720000,"doc_count":11},{"key_as_string":"2017-02-11T04:53:00.000Z","key":1486788780000,"doc_count":11},{"key_as_string":"2017-02-11T04:54:00.000Z","key":1486788840000,"doc_count":12},{"key_as_string":"2017-02-11T04:55:00.000Z","key":1486788900000,"doc_count":12},{"key_as_string":"2017-02-11T04:56:00.000Z","key":1486788960000,"doc_count":9},{"key_as_string":"2017-02-11T04:57:00.000Z","key":1486789020000,"doc_count":16},{"key_as_string":"2017-02-11T04:58:00.000Z","key":1486789080000,"doc_count":11},{"key_as_string":"2017-02-11T04:59:00.000Z","key":1486789140000,"doc_count":10},{"key_as_string":"2017-02-11T05:00:00.000Z","key":1486789200000,"doc_count":9},{"key_as_string":"2017-02-11T05:01:00.000Z","key":1486789260000,"doc_count":14},{"key_as_string":"2017-02-11T05:02:00.000Z","key":1486789320000,"doc_count":10},{"key_as_string":"2017-02-11T05:03:00.000Z","key":1486789380000,"doc_count":11},{"key_as_string":"2017-02-11T05:04:00.000Z","key":1486789440000,"doc_count":11},{"key_as_string":"2017-02-11T05:05:00.000Z","key":1486789500000,"doc_count":6},{"key_as_string":"2017-02-11T05:06:00.000Z","key":1486789560000,"doc_count":19},{"key_as_string":"2017-02-11T05:07:00.000Z","key":1486789620000,"doc_count":11},{"key_as_string":"2017-02-11T05:08:00.000Z","key":1486789680000,"doc_count":15},{"key_as_string":"2017-02-11T05:09:00.000Z","key":1486789740000,"doc_count":10},{"key_as_string":"2017-02-11T05:10:00.000Z","key":1486789800000,"doc_count":13},{"key_as_string":"2017-02-11T05:11:00.000Z","key":1486789860000,"doc_count":12},{"key_as_string":"2017-02-11T05:12:00.000Z","key":1486789920000,"doc_count":14},{"key_as_string":"2017-02-11T05:13:00.000Z","key":1486789980000,"doc_count":12},{"key_as_string":"2017-02-11T05:14:00.000Z","key":1486790040000,"doc_count":13},{"key_as_string":"2017-02-11T05:15:00.000Z","key":1486790100000,"doc_count":7},{"key_as_string":"2017-02-11T05:16:00.000Z","key":1486790160000,"doc_count":10},{"key_as_string":"2017-02-11T05:17:00.000Z","key":1486790220000,"doc_count":12},{"key_as_string":"2017-02-11T05:18:00.000Z","key":1486790280000,"doc_count":15},{"key_as_string":"2017-02-11T05:19:00.000Z","key":1486790340000,"doc_count":10},{"key_as_string":"2017-02-11T05:20:00.000Z","key":1486790400000,"doc_count":9},{"key_as_string":"2017-02-11T05:21:00.000Z","key":1486790460000,"doc_count":10},{"key_as_string":"2017-02-11T05:22:00.000Z","key":1486790520000,"doc_count":15},{"key_as_string":"2017-02-11T05:23:00.000Z","key":1486790580000,"doc_count":9},{"key_as_string":"2017-02-11T05:24:00.000Z","key":1486790640000,"doc_count":13},{"key_as_string":"2017-02-11T05:25:00.000Z","key":1486790700000,"doc_count":12},{"key_as_string":"2017-02-11T05:26:00.000Z","key":1486790760000,"doc_count":9},{"key_as_string":"2017-02-11T05:27:00.000Z","key":1486790820000,"doc_count":15},{"key_as_string":"2017-02-11T05:28:00.000Z","key":1486790880000,"doc_count":11},{"key_as_string":"2017-02-11T05:29:00.000Z","key":1486790940000,"doc_count":14},{"key_as_string":"2017-02-11T05:30:00.000Z","key":1486791000000,"doc_count":14},{"key_as_string":"2017-02-11T05:31:00.000Z","key":1486791060000,"doc_count":15},{"key_as_string":"2017-02-11T05:32:00.000Z","key":1486791120000,"doc_count":7},{"key_as_string":"2017-02-11T05:33:00.000Z","key":1486791180000,"doc_count":7},{"key_as_string":"2017-02-11T05:34:00.000Z","key":1486791240000,"doc_count":9},{"key_as_string":"2017-02-11T05:35:00.000Z","key":1486791300000,"doc_count":13},{"key_as_string":"2017-02-11T05:36:00.000Z","key":1486791360000,"doc_count":11},{"key_as_string":"2017-02-11T05:37:00.000Z","key":1486791420000,"doc_count":11},{"key_as_string":"2017-02-11T05:38:00.000Z","key":1486791480000,"doc_count":10},{"key_as_string":"2017-02-11T05:39:00.000Z","key":1486791540000,"doc_count":7},{"key_as_string":"2017-02-11T05:40:00.000Z","key":1486791600000,"doc_count":12},{"key_as_string":"2017-02-11T05:41:00.000Z","key":1486791660000,"doc_count":11},{"key_as_string":"2017-02-11T05:42:00.000Z","key":1486791720000,"doc_count":16},{"key_as_string":"2017-02-11T05:43:00.000Z","key":1486791780000,"doc_count":12},{"key_as_string":"2017-02-11T05:44:00.000Z","key":1486791840000,"doc_count":8},{"key_as_string":"2017-02-11T05:45:00.000Z","key":1486791900000,"doc_count":13},{"key_as_string":"2017-02-11T05:46:00.000Z","key":1486791960000,"doc_count":17},{"key_as_string":"2017-02-11T05:47:00.000Z","key":1486792020000,"doc_count":8},{"key_as_string":"2017-02-11T05:48:00.000Z","key":1486792080000,"doc_count":9},{"key_as_string":"2017-02-11T05:49:00.000Z","key":1486792140000,"doc_count":9},{"key_as_string":"2017-02-11T05:50:00.000Z","key":1486792200000,"doc_count":13},{"key_as_string":"2017-02-11T05:51:00.000Z","key":1486792260000,"doc_count":7},{"key_as_string":"2017-02-11T05:52:00.000Z","key":1486792320000,"doc_count":13},{"key_as_string":"2017-02-11T05:53:00.000Z","key":1486792380000,"doc_count":8},{"key_as_string":"2017-02-11T05:54:00.000Z","key":1486792440000,"doc_count":12},{"key_as_string":"2017-02-11T05:55:00.000Z","key":1486792500000,"doc_count":9},{"key_as_string":"2017-02-11T05:56:00.000Z","key":1486792560000,"doc_count":15},{"key_as_string":"2017-02-11T05:57:00.000Z","key":1486792620000,"doc_count":11},{"key_as_string":"2017-02-11T05:58:00.000Z","key":1486792680000,"doc_count":14},{"key_as_string":"2017-02-11T05:59:00.000Z","key":1486792740000,"doc_count":10},{"key_as_string":"2017-02-11T06:00:00.000Z","key":1486792800000,"doc_count":15},{"key_as_string":"2017-02-11T06:01:00.000Z","key":1486792860000,"doc_count":10},{"key_as_string":"2017-02-11T06:02:00.000Z","key":1486792920000,"doc_count":9},{"key_as_string":"2017-02-11T06:03:00.000Z","key":1486792980000,"doc_count":16},{"key_as_string":"2017-02-11T06:04:00.000Z","key":1486793040000,"doc_count":12},{"key_as_string":"2017-02-11T06:05:00.000Z","key":1486793100000,"doc_count":13},{"key_as_string":"2017-02-11T06:06:00.000Z","key":1486793160000,"doc_count":14},{"key_as_string":"2017-02-11T06:07:00.000Z","key":1486793220000,"doc_count":11},{"key_as_string":"2017-02-11T06:08:00.000Z","key":1486793280000,"doc_count":16},{"key_as_string":"2017-02-11T06:09:00.000Z","key":1486793340000,"doc_count":9},{"key_as_string":"2017-02-11T06:10:00.000Z","key":1486793400000,"doc_count":15},{"key_as_string":"2017-02-11T06:11:00.000Z","key":1486793460000,"doc_count":9},{"key_as_string":"2017-02-11T06:12:00.000Z","key":1486793520000,"doc_count":9},{"key_as_string":"2017-02-11T06:13:00.000Z","key":1486793580000,"doc_count":13},{"key_as_string":"2017-02-11T06:14:00.000Z","key":1486793640000,"doc_count":12},{"key_as_string":"2017-02-11T06:15:00.000Z","key":1486793700000,"doc_count":11},{"key_as_string":"2017-02-11T06:16:00.000Z","key":1486793760000,"doc_count":14},{"key_as_string":"2017-02-11T06:17:00.000Z","key":1486793820000,"doc_count":16},{"key_as_string":"2017-02-11T06:18:00.000Z","key":1486793880000,"doc_count":7},{"key_as_string":"2017-02-11T06:19:00.000Z","key":1486793940000,"doc_count":18},{"key_as_string":"2017-02-11T06:20:00.000Z","key":1486794000000,"doc_count":15},{"key_as_string":"2017-02-11T06:21:00.000Z","key":1486794060000,"doc_count":10},{"key_as_string":"2017-02-11T06:22:00.000Z","key":1486794120000,"doc_count":10},{"key_as_string":"2017-02-11T06:23:00.000Z","key":1486794180000,"doc_count":11},{"key_as_string":"2017-02-11T06:24:00.000Z","key":1486794240000,"doc_count":7},{"key_as_string":"2017-02-11T06:25:00.000Z","key":1486794300000,"doc_count":12},{"key_as_string":"2017-02-11T06:26:00.000Z","key":1486794360000,"doc_count":10},{"key_as_string":"2017-02-11T06:27:00.000Z","key":1486794420000,"doc_count":11},{"key_as_string":"2017-02-11T06:28:00.000Z","key":1486794480000,"doc_count":13},{"key_as_string":"2017-02-11T06:29:00.000Z","key":1486794540000,"doc_count":11},{"key_as_string":"2017-02-11T06:30:00.000Z","key":1486794600000,"doc_count":13},{"key_as_string":"2017-02-11T06:31:00.000Z","key":1486794660000,"doc_count":10},{"key_as_string":"2017-02-11T06:32:00.000Z","key":1486794720000,"doc_count":13},{"key_as_string":"2017-02-11T06:33:00.000Z","key":1486794780000,"doc_count":14},{"key_as_string":"2017-02-11T06:34:00.000Z","key":1486794840000,"doc_count":15},{"key_as_string":"2017-02-11T06:35:00.000Z","key":1486794900000,"doc_count":11},{"key_as_string":"2017-02-11T06:36:00.000Z","key":1486794960000,"doc_count":14},{"key_as_string":"2017-02-11T06:37:00.000Z","key":1486795020000,"doc_count":10},{"key_as_string":"2017-02-11T06:38:00.000Z","key":1486795080000,"doc_count":13},{"key_as_string":"2017-02-11T06:39:00.000Z","key":1486795140000,"doc_count":7},{"key_as_string":"2017-02-11T06:40:00.000Z","key":1486795200000,"doc_count":12},{"key_as_string":"2017-02-11T06:41:00.000Z","key":1486795260000,"doc_count":12},{"key_as_string":"2017-02-11T06:42:00.000Z","key":1486795320000,"doc_count":10},{"key_as_string":"2017-02-11T06:43:00.000Z","key":1486795380000,"doc_count":14},{"key_as_string":"2017-02-11T06:44:00.000Z","key":1486795440000,"doc_count":15},{"key_as_string":"2017-02-11T06:45:00.000Z","key":1486795500000,"doc_count":10},{"key_as_string":"2017-02-11T06:46:00.000Z","key":1486795560000,"doc_count":12},{"key_as_string":"2017-02-11T06:47:00.000Z","key":1486795620000,"doc_count":14},{"key_as_string":"2017-02-11T06:48:00.000Z","key":1486795680000,"doc_count":15},{"key_as_string":"2017-02-11T06:49:00.000Z","key":1486795740000,"doc_count":11},{"key_as_string":"2017-02-11T06:50:00.000Z","key":1486795800000,"doc_count":14},{"key_as_string":"2017-02-11T06:51:00.000Z","key":1486795860000,"doc_count":9},{"key_as_string":"2017-02-11T06:52:00.000Z","key":1486795920000,"doc_count":15},{"key_as_string":"2017-02-11T06:53:00.000Z","key":1486795980000,"doc_count":6},{"key_as_string":"2017-02-11T06:54:00.000Z","key":1486796040000,"doc_count":15},{"key_as_string":"2017-02-11T06:55:00.000Z","key":1486796100000,"doc_count":12},{"key_as_string":"2017-02-11T06:56:00.000Z","key":1486796160000,"doc_count":11},{"key_as_string":"2017-02-11T06:57:00.000Z","key":1486796220000,"doc_count":15},{"key_as_string":"2017-02-11T06:58:00.000Z","key":1486796280000,"doc_count":12},{"key_as_string":"2017-02-11T06:59:00.000Z","key":1486796340000,"doc_count":9},{"key_as_string":"2017-02-11T07:00:00.000Z","key":1486796400000,"doc_count":17},{"key_as_string":"2017-02-11T07:01:00.000Z","key":1486796460000,"doc_count":11},{"key_as_string":"2017-02-11T07:02:00.000Z","key":1486796520000,"doc_count":12},{"key_as_string":"2017-02-11T07:03:00.000Z","key":1486796580000,"doc_count":15},{"key_as_string":"2017-02-11T07:04:00.000Z","key":1486796640000,"doc_count":16},{"key_as_string":"2017-02-11T07:05:00.000Z","key":1486796700000,"doc_count":13},{"key_as_string":"2017-02-11T07:06:00.000Z","key":1486796760000,"doc_count":12},{"key_as_string":"2017-02-11T07:07:00.000Z","key":1486796820000,"doc_count":10},{"key_as_string":"2017-02-11T07:08:00.000Z","key":1486796880000,"doc_count":18},{"key_as_string":"2017-02-11T07:09:00.000Z","key":1486796940000,"doc_count":10},{"key_as_string":"2017-02-11T07:10:00.000Z","key":1486797000000,"doc_count":12},{"key_as_string":"2017-02-11T07:11:00.000Z","key":1486797060000,"doc_count":16},{"key_as_string":"2017-02-11T07:12:00.000Z","key":1486797120000,"doc_count":13},{"key_as_string":"2017-02-11T07:13:00.000Z","key":1486797180000,"doc_count":9},{"key_as_string":"2017-02-11T07:14:00.000Z","key":1486797240000,"doc_count":12},{"key_as_string":"2017-02-11T07:15:00.000Z","key":1486797300000,"doc_count":9},{"key_as_string":"2017-02-11T07:16:00.000Z","key":1486797360000,"doc_count":11},{"key_as_string":"2017-02-11T07:17:00.000Z","key":1486797420000,"doc_count":12},{"key_as_string":"2017-02-11T07:18:00.000Z","key":1486797480000,"doc_count":13},{"key_as_string":"2017-02-11T07:19:00.000Z","key":1486797540000,"doc_count":14},{"key_as_string":"2017-02-11T07:20:00.000Z","key":1486797600000,"doc_count":11},{"key_as_string":"2017-02-11T07:21:00.000Z","key":1486797660000,"doc_count":16},{"key_as_string":"2017-02-11T07:22:00.000Z","key":1486797720000,"doc_count":9},{"key_as_string":"2017-02-11T07:23:00.000Z","key":1486797780000,"doc_count":14},{"key_as_string":"2017-02-11T07:24:00.000Z","key":1486797840000,"doc_count":11},{"key_as_string":"2017-02-11T07:25:00.000Z","key":1486797900000,"doc_count":14},{"key_as_string":"2017-02-11T07:26:00.000Z","key":1486797960000,"doc_count":12},{"key_as_string":"2017-02-11T07:27:00.000Z","key":1486798020000,"doc_count":15},{"key_as_string":"2017-02-11T07:28:00.000Z","key":1486798080000,"doc_count":8},{"key_as_string":"2017-02-11T07:29:00.000Z","key":1486798140000,"doc_count":12},{"key_as_string":"2017-02-11T07:30:00.000Z","key":1486798200000,"doc_count":13},{"key_as_string":"2017-02-11T07:31:00.000Z","key":1486798260000,"doc_count":11},{"key_as_string":"2017-02-11T07:32:00.000Z","key":1486798320000,"doc_count":12},{"key_as_string":"2017-02-11T07:33:00.000Z","key":1486798380000,"doc_count":12},{"key_as_string":"2017-02-11T07:34:00.000Z","key":1486798440000,"doc_count":12},{"key_as_string":"2017-02-11T07:35:00.000Z","key":1486798500000,"doc_count":12},{"key_as_string":"2017-02-11T07:36:00.000Z","key":1486798560000,"doc_count":13},{"key_as_string":"2017-02-11T07:37:00.000Z","key":1486798620000,"doc_count":9},{"key_as_string":"2017-02-11T07:38:00.000Z","key":1486798680000,"doc_count":13},{"key_as_string":"2017-02-11T07:39:00.000Z","key":1486798740000,"doc_count":9},{"key_as_string":"2017-02-11T07:40:00.000Z","key":1486798800000,"doc_count":12},{"key_as_string":"2017-02-11T07:41:00.000Z","key":1486798860000,"doc_count":12},{"key_as_string":"2017-02-11T07:42:00.000Z","key":1486798920000,"doc_count":17},{"key_as_string":"2017-02-11T07:43:00.000Z","key":1486798980000,"doc_count":12},{"key_as_string":"2017-02-11T07:44:00.000Z","key":1486799040000,"doc_count":11},{"key_as_string":"2017-02-11T07:45:00.000Z","key":1486799100000,"doc_count":14},{"key_as_string":"2017-02-11T07:46:00.000Z","key":1486799160000,"doc_count":14},{"key_as_string":"2017-02-11T07:47:00.000Z","key":1486799220000,"doc_count":9},{"key_as_string":"2017-02-11T07:48:00.000Z","key":1486799280000,"doc_count":11},{"key_as_string":"2017-02-11T07:49:00.000Z","key":1486799340000,"doc_count":11},{"key_as_string":"2017-02-11T07:50:00.000Z","key":1486799400000,"doc_count":9},{"key_as_string":"2017-02-11T07:51:00.000Z","key":1486799460000,"doc_count":12},{"key_as_string":"2017-02-11T07:52:00.000Z","key":1486799520000,"doc_count":12},{"key_as_string":"2017-02-11T07:53:00.000Z","key":1486799580000,"doc_count":7},{"key_as_string":"2017-02-11T07:54:00.000Z","key":1486799640000,"doc_count":17},{"key_as_string":"2017-02-11T07:55:00.000Z","key":1486799700000,"doc_count":13},{"key_as_string":"2017-02-11T07:56:00.000Z","key":1486799760000,"doc_count":12},{"key_as_string":"2017-02-11T07:57:00.000Z","key":1486799820000,"doc_count":11},{"key_as_string":"2017-02-11T07:58:00.000Z","key":1486799880000,"doc_count":13},{"key_as_string":"2017-02-11T07:59:00.000Z","key":1486799940000,"doc_count":11},{"key_as_string":"2017-02-11T08:00:00.000Z","key":1486800000000,"doc_count":16},{"key_as_string":"2017-02-11T08:01:00.000Z","key":1486800060000,"doc_count":15},{"key_as_string":"2017-02-11T08:02:00.000Z","key":1486800120000,"doc_count":14},{"key_as_string":"2017-02-11T08:03:00.000Z","key":1486800180000,"doc_count":16},{"key_as_string":"2017-02-11T08:04:00.000Z","key":1486800240000,"doc_count":12},{"key_as_string":"2017-02-11T08:05:00.000Z","key":1486800300000,"doc_count":14},{"key_as_string":"2017-02-11T08:06:00.000Z","key":1486800360000,"doc_count":13},{"key_as_string":"2017-02-11T08:07:00.000Z","key":1486800420000,"doc_count":16},{"key_as_string":"2017-02-11T08:08:00.000Z","key":1486800480000,"doc_count":17},{"key_as_string":"2017-02-11T08:09:00.000Z","key":1486800540000,"doc_count":20},{"key_as_string":"2017-02-11T08:10:00.000Z","key":1486800600000,"doc_count":13},{"key_as_string":"2017-02-11T08:11:00.000Z","key":1486800660000,"doc_count":15},{"key_as_string":"2017-02-11T08:12:00.000Z","key":1486800720000,"doc_count":10},{"key_as_string":"2017-02-11T08:13:00.000Z","key":1486800780000,"doc_count":16},{"key_as_string":"2017-02-11T08:14:00.000Z","key":1486800840000,"doc_count":5},{"key_as_string":"2017-02-11T08:15:00.000Z","key":1486800900000,"doc_count":14},{"key_as_string":"2017-02-11T08:16:00.000Z","key":1486800960000,"doc_count":18},{"key_as_string":"2017-02-11T08:17:00.000Z","key":1486801020000,"doc_count":11},{"key_as_string":"2017-02-11T08:18:00.000Z","key":1486801080000,"doc_count":16},{"key_as_string":"2017-02-11T08:19:00.000Z","key":1486801140000,"doc_count":10},{"key_as_string":"2017-02-11T08:20:00.000Z","key":1486801200000,"doc_count":15},{"key_as_string":"2017-02-11T08:21:00.000Z","key":1486801260000,"doc_count":10},{"key_as_string":"2017-02-11T08:22:00.000Z","key":1486801320000,"doc_count":14},{"key_as_string":"2017-02-11T08:23:00.000Z","key":1486801380000,"doc_count":10},{"key_as_string":"2017-02-11T08:24:00.000Z","key":1486801440000,"doc_count":19},{"key_as_string":"2017-02-11T08:25:00.000Z","key":1486801500000,"doc_count":14},{"key_as_string":"2017-02-11T08:26:00.000Z","key":1486801560000,"doc_count":13},{"key_as_string":"2017-02-11T08:27:00.000Z","key":1486801620000,"doc_count":10},{"key_as_string":"2017-02-11T08:28:00.000Z","key":1486801680000,"doc_count":15},{"key_as_string":"2017-02-11T08:29:00.000Z","key":1486801740000,"doc_count":10},{"key_as_string":"2017-02-11T08:30:00.000Z","key":1486801800000,"doc_count":11},{"key_as_string":"2017-02-11T08:31:00.000Z","key":1486801860000,"doc_count":9},{"key_as_string":"2017-02-11T08:32:00.000Z","key":1486801920000,"doc_count":14},{"key_as_string":"2017-02-11T08:33:00.000Z","key":1486801980000,"doc_count":10},{"key_as_string":"2017-02-11T08:34:00.000Z","key":1486802040000,"doc_count":12},{"key_as_string":"2017-02-11T08:35:00.000Z","key":1486802100000,"doc_count":16},{"key_as_string":"2017-02-11T08:36:00.000Z","key":1486802160000,"doc_count":19},{"key_as_string":"2017-02-11T08:37:00.000Z","key":1486802220000,"doc_count":13},{"key_as_string":"2017-02-11T08:38:00.000Z","key":1486802280000,"doc_count":11},{"key_as_string":"2017-02-11T08:39:00.000Z","key":1486802340000,"doc_count":16},{"key_as_string":"2017-02-11T08:40:00.000Z","key":1486802400000,"doc_count":13},{"key_as_string":"2017-02-11T08:41:00.000Z","key":1486802460000,"doc_count":10},{"key_as_string":"2017-02-11T08:42:00.000Z","key":1486802520000,"doc_count":12},{"key_as_string":"2017-02-11T08:43:00.000Z","key":1486802580000,"doc_count":11},{"key_as_string":"2017-02-11T08:44:00.000Z","key":1486802640000,"doc_count":9},{"key_as_string":"2017-02-11T08:45:00.000Z","key":1486802700000,"doc_count":12},{"key_as_string":"2017-02-11T08:46:00.000Z","key":1486802760000,"doc_count":11},{"key_as_string":"2017-02-11T08:47:00.000Z","key":1486802820000,"doc_count":15},{"key_as_string":"2017-02-11T08:48:00.000Z","key":1486802880000,"doc_count":9},{"key_as_string":"2017-02-11T08:49:00.000Z","key":1486802940000,"doc_count":17},{"key_as_string":"2017-02-11T08:50:00.000Z","key":1486803000000,"doc_count":14},{"key_as_string":"2017-02-11T08:51:00.000Z","key":1486803060000,"doc_count":14},{"key_as_string":"2017-02-11T08:52:00.000Z","key":1486803120000,"doc_count":11},{"key_as_string":"2017-02-11T08:53:00.000Z","key":1486803180000,"doc_count":13},{"key_as_string":"2017-02-11T08:54:00.000Z","key":1486803240000,"doc_count":17},{"key_as_string":"2017-02-11T08:55:00.000Z","key":1486803300000,"doc_count":13},{"key_as_string":"2017-02-11T08:56:00.000Z","key":1486803360000,"doc_count":15},{"key_as_string":"2017-02-11T08:57:00.000Z","key":1486803420000,"doc_count":15},{"key_as_string":"2017-02-11T08:58:00.000Z","key":1486803480000,"doc_count":14},{"key_as_string":"2017-02-11T08:59:00.000Z","key":1486803540000,"doc_count":6},{"key_as_string":"2017-02-11T09:00:00.000Z","key":1486803600000,"doc_count":15},{"key_as_string":"2017-02-11T09:01:00.000Z","key":1486803660000,"doc_count":9},{"key_as_string":"2017-02-11T09:02:00.000Z","key":1486803720000,"doc_count":15},{"key_as_string":"2017-02-11T09:03:00.000Z","key":1486803780000,"doc_count":10},{"key_as_string":"2017-02-11T09:04:00.000Z","key":1486803840000,"doc_count":11},{"key_as_string":"2017-02-11T09:05:00.000Z","key":1486803900000,"doc_count":17},{"key_as_string":"2017-02-11T09:06:00.000Z","key":1486803960000,"doc_count":10},{"key_as_string":"2017-02-11T09:07:00.000Z","key":1486804020000,"doc_count":13},{"key_as_string":"2017-02-11T09:08:00.000Z","key":1486804080000,"doc_count":15},{"key_as_string":"2017-02-11T09:09:00.000Z","key":1486804140000,"doc_count":10},{"key_as_string":"2017-02-11T09:10:00.000Z","key":1486804200000,"doc_count":16},{"key_as_string":"2017-02-11T09:11:00.000Z","key":1486804260000,"doc_count":18},{"key_as_string":"2017-02-11T09:12:00.000Z","key":1486804320000,"doc_count":10},{"key_as_string":"2017-02-11T09:13:00.000Z","key":1486804380000,"doc_count":14},{"key_as_string":"2017-02-11T09:14:00.000Z","key":1486804440000,"doc_count":9},{"key_as_string":"2017-02-11T09:15:00.000Z","key":1486804500000,"doc_count":17},{"key_as_string":"2017-02-11T09:16:00.000Z","key":1486804560000,"doc_count":18},{"key_as_string":"2017-02-11T09:17:00.000Z","key":1486804620000,"doc_count":12},{"key_as_string":"2017-02-11T09:18:00.000Z","key":1486804680000,"doc_count":15},{"key_as_string":"2017-02-11T09:19:00.000Z","key":1486804740000,"doc_count":10},{"key_as_string":"2017-02-11T09:20:00.000Z","key":1486804800000,"doc_count":14},{"key_as_string":"2017-02-11T09:21:00.000Z","key":1486804860000,"doc_count":15},{"key_as_string":"2017-02-11T09:22:00.000Z","key":1486804920000,"doc_count":12},{"key_as_string":"2017-02-11T09:23:00.000Z","key":1486804980000,"doc_count":17},{"key_as_string":"2017-02-11T09:24:00.000Z","key":1486805040000,"doc_count":13},{"key_as_string":"2017-02-11T09:25:00.000Z","key":1486805100000,"doc_count":17},{"key_as_string":"2017-02-11T09:26:00.000Z","key":1486805160000,"doc_count":11},{"key_as_string":"2017-02-11T09:27:00.000Z","key":1486805220000,"doc_count":11},{"key_as_string":"2017-02-11T09:28:00.000Z","key":1486805280000,"doc_count":13},{"key_as_string":"2017-02-11T09:29:00.000Z","key":1486805340000,"doc_count":9},{"key_as_string":"2017-02-11T09:30:00.000Z","key":1486805400000,"doc_count":20},{"key_as_string":"2017-02-11T09:31:00.000Z","key":1486805460000,"doc_count":13},{"key_as_string":"2017-02-11T09:32:00.000Z","key":1486805520000,"doc_count":17},{"key_as_string":"2017-02-11T09:33:00.000Z","key":1486805580000,"doc_count":16},{"key_as_string":"2017-02-11T09:34:00.000Z","key":1486805640000,"doc_count":11},{"key_as_string":"2017-02-11T09:35:00.000Z","key":1486805700000,"doc_count":18},{"key_as_string":"2017-02-11T09:36:00.000Z","key":1486805760000,"doc_count":14},{"key_as_string":"2017-02-11T09:37:00.000Z","key":1486805820000,"doc_count":17},{"key_as_string":"2017-02-11T09:38:00.000Z","key":1486805880000,"doc_count":12},{"key_as_string":"2017-02-11T09:39:00.000Z","key":1486805940000,"doc_count":12},{"key_as_string":"2017-02-11T09:40:00.000Z","key":1486806000000,"doc_count":14},{"key_as_string":"2017-02-11T09:41:00.000Z","key":1486806060000,"doc_count":11},{"key_as_string":"2017-02-11T09:42:00.000Z","key":1486806120000,"doc_count":12},{"key_as_string":"2017-02-11T09:43:00.000Z","key":1486806180000,"doc_count":14},{"key_as_string":"2017-02-11T09:44:00.000Z","key":1486806240000,"doc_count":16},{"key_as_string":"2017-02-11T09:45:00.000Z","key":1486806300000,"doc_count":17},{"key_as_string":"2017-02-11T09:46:00.000Z","key":1486806360000,"doc_count":12},{"key_as_string":"2017-02-11T09:47:00.000Z","key":1486806420000,"doc_count":15},{"key_as_string":"2017-02-11T09:48:00.000Z","key":1486806480000,"doc_count":13},{"key_as_string":"2017-02-11T09:49:00.000Z","key":1486806540000,"doc_count":14},{"key_as_string":"2017-02-11T09:50:00.000Z","key":1486806600000,"doc_count":17},{"key_as_string":"2017-02-11T09:51:00.000Z","key":1486806660000,"doc_count":15},{"key_as_string":"2017-02-11T09:52:00.000Z","key":1486806720000,"doc_count":9},{"key_as_string":"2017-02-11T09:53:00.000Z","key":1486806780000,"doc_count":20},{"key_as_string":"2017-02-11T09:54:00.000Z","key":1486806840000,"doc_count":15},{"key_as_string":"2017-02-11T09:55:00.000Z","key":1486806900000,"doc_count":19},{"key_as_string":"2017-02-11T09:56:00.000Z","key":1486806960000,"doc_count":10},{"key_as_string":"2017-02-11T09:57:00.000Z","key":1486807020000,"doc_count":14},{"key_as_string":"2017-02-11T09:58:00.000Z","key":1486807080000,"doc_count":15},{"key_as_string":"2017-02-11T09:59:00.000Z","key":1486807140000,"doc_count":20},{"key_as_string":"2017-02-11T10:00:00.000Z","key":1486807200000,"doc_count":14},{"key_as_string":"2017-02-11T10:01:00.000Z","key":1486807260000,"doc_count":14},{"key_as_string":"2017-02-11T10:02:00.000Z","key":1486807320000,"doc_count":13},{"key_as_string":"2017-02-11T10:03:00.000Z","key":1486807380000,"doc_count":13},{"key_as_string":"2017-02-11T10:04:00.000Z","key":1486807440000,"doc_count":17},{"key_as_string":"2017-02-11T10:05:00.000Z","key":1486807500000,"doc_count":10},{"key_as_string":"2017-02-11T10:06:00.000Z","key":1486807560000,"doc_count":20},{"key_as_string":"2017-02-11T10:07:00.000Z","key":1486807620000,"doc_count":14},{"key_as_string":"2017-02-11T10:08:00.000Z","key":1486807680000,"doc_count":12},{"key_as_string":"2017-02-11T10:09:00.000Z","key":1486807740000,"doc_count":22},{"key_as_string":"2017-02-11T10:10:00.000Z","key":1486807800000,"doc_count":18},{"key_as_string":"2017-02-11T10:11:00.000Z","key":1486807860000,"doc_count":9},{"key_as_string":"2017-02-11T10:12:00.000Z","key":1486807920000,"doc_count":16},{"key_as_string":"2017-02-11T10:13:00.000Z","key":1486807980000,"doc_count":13},{"key_as_string":"2017-02-11T10:14:00.000Z","key":1486808040000,"doc_count":14},{"key_as_string":"2017-02-11T10:15:00.000Z","key":1486808100000,"doc_count":13},{"key_as_string":"2017-02-11T10:16:00.000Z","key":1486808160000,"doc_count":15},{"key_as_string":"2017-02-11T10:17:00.000Z","key":1486808220000,"doc_count":15},{"key_as_string":"2017-02-11T10:18:00.000Z","key":1486808280000,"doc_count":13},{"key_as_string":"2017-02-11T10:19:00.000Z","key":1486808340000,"doc_count":12},{"key_as_string":"2017-02-11T10:20:00.000Z","key":1486808400000,"doc_count":8},{"key_as_string":"2017-02-11T10:21:00.000Z","key":1486808460000,"doc_count":18},{"key_as_string":"2017-02-11T10:22:00.000Z","key":1486808520000,"doc_count":14},{"key_as_string":"2017-02-11T10:23:00.000Z","key":1486808580000,"doc_count":17},{"key_as_string":"2017-02-11T10:24:00.000Z","key":1486808640000,"doc_count":22},{"key_as_string":"2017-02-11T10:25:00.000Z","key":1486808700000,"doc_count":12},{"key_as_string":"2017-02-11T10:26:00.000Z","key":1486808760000,"doc_count":13},{"key_as_string":"2017-02-11T10:27:00.000Z","key":1486808820000,"doc_count":17},{"key_as_string":"2017-02-11T10:28:00.000Z","key":1486808880000,"doc_count":14},{"key_as_string":"2017-02-11T10:29:00.000Z","key":1486808940000,"doc_count":13},{"key_as_string":"2017-02-11T10:30:00.000Z","key":1486809000000,"doc_count":11},{"key_as_string":"2017-02-11T10:31:00.000Z","key":1486809060000,"doc_count":15},{"key_as_string":"2017-02-11T10:32:00.000Z","key":1486809120000,"doc_count":17},{"key_as_string":"2017-02-11T10:33:00.000Z","key":1486809180000,"doc_count":14},{"key_as_string":"2017-02-11T10:34:00.000Z","key":1486809240000,"doc_count":12},{"key_as_string":"2017-02-11T10:35:00.000Z","key":1486809300000,"doc_count":10},{"key_as_string":"2017-02-11T10:36:00.000Z","key":1486809360000,"doc_count":12},{"key_as_string":"2017-02-11T10:37:00.000Z","key":1486809420000,"doc_count":16},{"key_as_string":"2017-02-11T10:38:00.000Z","key":1486809480000,"doc_count":18},{"key_as_string":"2017-02-11T10:39:00.000Z","key":1486809540000,"doc_count":15},{"key_as_string":"2017-02-11T10:40:00.000Z","key":1486809600000,"doc_count":16},{"key_as_string":"2017-02-11T10:41:00.000Z","key":1486809660000,"doc_count":15},{"key_as_string":"2017-02-11T10:42:00.000Z","key":1486809720000,"doc_count":15},{"key_as_string":"2017-02-11T10:43:00.000Z","key":1486809780000,"doc_count":11},{"key_as_string":"2017-02-11T10:44:00.000Z","key":1486809840000,"doc_count":11},{"key_as_string":"2017-02-11T10:45:00.000Z","key":1486809900000,"doc_count":19},{"key_as_string":"2017-02-11T10:46:00.000Z","key":1486809960000,"doc_count":12},{"key_as_string":"2017-02-11T10:47:00.000Z","key":1486810020000,"doc_count":12},{"key_as_string":"2017-02-11T10:48:00.000Z","key":1486810080000,"doc_count":12},{"key_as_string":"2017-02-11T10:49:00.000Z","key":1486810140000,"doc_count":12},{"key_as_string":"2017-02-11T10:50:00.000Z","key":1486810200000,"doc_count":21},{"key_as_string":"2017-02-11T10:51:00.000Z","key":1486810260000,"doc_count":13},{"key_as_string":"2017-02-11T10:52:00.000Z","key":1486810320000,"doc_count":13},{"key_as_string":"2017-02-11T10:53:00.000Z","key":1486810380000,"doc_count":14},{"key_as_string":"2017-02-11T10:54:00.000Z","key":1486810440000,"doc_count":14},{"key_as_string":"2017-02-11T10:55:00.000Z","key":1486810500000,"doc_count":10},{"key_as_string":"2017-02-11T10:56:00.000Z","key":1486810560000,"doc_count":12},{"key_as_string":"2017-02-11T10:57:00.000Z","key":1486810620000,"doc_count":15},{"key_as_string":"2017-02-11T10:58:00.000Z","key":1486810680000,"doc_count":13},{"key_as_string":"2017-02-11T10:59:00.000Z","key":1486810740000,"doc_count":11},{"key_as_string":"2017-02-11T11:00:00.000Z","key":1486810800000,"doc_count":18},{"key_as_string":"2017-02-11T11:01:00.000Z","key":1486810860000,"doc_count":14},{"key_as_string":"2017-02-11T11:02:00.000Z","key":1486810920000,"doc_count":18},{"key_as_string":"2017-02-11T11:03:00.000Z","key":1486810980000,"doc_count":18},{"key_as_string":"2017-02-11T11:04:00.000Z","key":1486811040000,"doc_count":14},{"key_as_string":"2017-02-11T11:05:00.000Z","key":1486811100000,"doc_count":21},{"key_as_string":"2017-02-11T11:06:00.000Z","key":1486811160000,"doc_count":8},{"key_as_string":"2017-02-11T11:07:00.000Z","key":1486811220000,"doc_count":14},{"key_as_string":"2017-02-11T11:08:00.000Z","key":1486811280000,"doc_count":9},{"key_as_string":"2017-02-11T11:09:00.000Z","key":1486811340000,"doc_count":13},{"key_as_string":"2017-02-11T11:10:00.000Z","key":1486811400000,"doc_count":19},{"key_as_string":"2017-02-11T11:11:00.000Z","key":1486811460000,"doc_count":12},{"key_as_string":"2017-02-11T11:12:00.000Z","key":1486811520000,"doc_count":15},{"key_as_string":"2017-02-11T11:13:00.000Z","key":1486811580000,"doc_count":16},{"key_as_string":"2017-02-11T11:14:00.000Z","key":1486811640000,"doc_count":11},{"key_as_string":"2017-02-11T11:15:00.000Z","key":1486811700000,"doc_count":12},{"key_as_string":"2017-02-11T11:16:00.000Z","key":1486811760000,"doc_count":16},{"key_as_string":"2017-02-11T11:17:00.000Z","key":1486811820000,"doc_count":14},{"key_as_string":"2017-02-11T11:18:00.000Z","key":1486811880000,"doc_count":13},{"key_as_string":"2017-02-11T11:19:00.000Z","key":1486811940000,"doc_count":14},{"key_as_string":"2017-02-11T11:20:00.000Z","key":1486812000000,"doc_count":14},{"key_as_string":"2017-02-11T11:21:00.000Z","key":1486812060000,"doc_count":11},{"key_as_string":"2017-02-11T11:22:00.000Z","key":1486812120000,"doc_count":14},{"key_as_string":"2017-02-11T11:23:00.000Z","key":1486812180000,"doc_count":13},{"key_as_string":"2017-02-11T11:24:00.000Z","key":1486812240000,"doc_count":13},{"key_as_string":"2017-02-11T11:25:00.000Z","key":1486812300000,"doc_count":13},{"key_as_string":"2017-02-11T11:26:00.000Z","key":1486812360000,"doc_count":6},{"key_as_string":"2017-02-11T11:27:00.000Z","key":1486812420000,"doc_count":21},{"key_as_string":"2017-02-11T11:28:00.000Z","key":1486812480000,"doc_count":10},{"key_as_string":"2017-02-11T11:29:00.000Z","key":1486812540000,"doc_count":19},{"key_as_string":"2017-02-11T11:30:00.000Z","key":1486812600000,"doc_count":10},{"key_as_string":"2017-02-11T11:31:00.000Z","key":1486812660000,"doc_count":10},{"key_as_string":"2017-02-11T11:32:00.000Z","key":1486812720000,"doc_count":14},{"key_as_string":"2017-02-11T11:33:00.000Z","key":1486812780000,"doc_count":13},{"key_as_string":"2017-02-11T11:34:00.000Z","key":1486812840000,"doc_count":9},{"key_as_string":"2017-02-11T11:35:00.000Z","key":1486812900000,"doc_count":16},{"key_as_string":"2017-02-11T11:36:00.000Z","key":1486812960000,"doc_count":9},{"key_as_string":"2017-02-11T11:37:00.000Z","key":1486813020000,"doc_count":14},{"key_as_string":"2017-02-11T11:38:00.000Z","key":1486813080000,"doc_count":8},{"key_as_string":"2017-02-11T11:39:00.000Z","key":1486813140000,"doc_count":16},{"key_as_string":"2017-02-11T11:40:00.000Z","key":1486813200000,"doc_count":17},{"key_as_string":"2017-02-11T11:41:00.000Z","key":1486813260000,"doc_count":11},{"key_as_string":"2017-02-11T11:42:00.000Z","key":1486813320000,"doc_count":13},{"key_as_string":"2017-02-11T11:43:00.000Z","key":1486813380000,"doc_count":14},{"key_as_string":"2017-02-11T11:44:00.000Z","key":1486813440000,"doc_count":17},{"key_as_string":"2017-02-11T11:45:00.000Z","key":1486813500000,"doc_count":11},{"key_as_string":"2017-02-11T11:46:00.000Z","key":1486813560000,"doc_count":16},{"key_as_string":"2017-02-11T11:47:00.000Z","key":1486813620000,"doc_count":12},{"key_as_string":"2017-02-11T11:48:00.000Z","key":1486813680000,"doc_count":13},{"key_as_string":"2017-02-11T11:49:00.000Z","key":1486813740000,"doc_count":19},{"key_as_string":"2017-02-11T11:50:00.000Z","key":1486813800000,"doc_count":12},{"key_as_string":"2017-02-11T11:51:00.000Z","key":1486813860000,"doc_count":15},{"key_as_string":"2017-02-11T11:52:00.000Z","key":1486813920000,"doc_count":12},{"key_as_string":"2017-02-11T11:53:00.000Z","key":1486813980000,"doc_count":8},{"key_as_string":"2017-02-11T11:54:00.000Z","key":1486814040000,"doc_count":15},{"key_as_string":"2017-02-11T11:55:00.000Z","key":1486814100000,"doc_count":16},{"key_as_string":"2017-02-11T11:56:00.000Z","key":1486814160000,"doc_count":10},{"key_as_string":"2017-02-11T11:57:00.000Z","key":1486814220000,"doc_count":12},{"key_as_string":"2017-02-11T11:58:00.000Z","key":1486814280000,"doc_count":17},{"key_as_string":"2017-02-11T11:59:00.000Z","key":1486814340000,"doc_count":18},{"key_as_string":"2017-02-11T12:00:00.000Z","key":1486814400000,"doc_count":13},{"key_as_string":"2017-02-11T12:01:00.000Z","key":1486814460000,"doc_count":13},{"key_as_string":"2017-02-11T12:02:00.000Z","key":1486814520000,"doc_count":9},{"key_as_string":"2017-02-11T12:03:00.000Z","key":1486814580000,"doc_count":14},{"key_as_string":"2017-02-11T12:04:00.000Z","key":1486814640000,"doc_count":11},{"key_as_string":"2017-02-11T12:05:00.000Z","key":1486814700000,"doc_count":9},{"key_as_string":"2017-02-11T12:06:00.000Z","key":1486814760000,"doc_count":18},{"key_as_string":"2017-02-11T12:07:00.000Z","key":1486814820000,"doc_count":14},{"key_as_string":"2017-02-11T12:08:00.000Z","key":1486814880000,"doc_count":9},{"key_as_string":"2017-02-11T12:09:00.000Z","key":1486814940000,"doc_count":15},{"key_as_string":"2017-02-11T12:10:00.000Z","key":1486815000000,"doc_count":18},{"key_as_string":"2017-02-11T12:11:00.000Z","key":1486815060000,"doc_count":14},{"key_as_string":"2017-02-11T12:12:00.000Z","key":1486815120000,"doc_count":16},{"key_as_string":"2017-02-11T12:13:00.000Z","key":1486815180000,"doc_count":14},{"key_as_string":"2017-02-11T12:14:00.000Z","key":1486815240000,"doc_count":12},{"key_as_string":"2017-02-11T12:15:00.000Z","key":1486815300000,"doc_count":15},{"key_as_string":"2017-02-11T12:16:00.000Z","key":1486815360000,"doc_count":12},{"key_as_string":"2017-02-11T12:17:00.000Z","key":1486815420000,"doc_count":12},{"key_as_string":"2017-02-11T12:18:00.000Z","key":1486815480000,"doc_count":16},{"key_as_string":"2017-02-11T12:19:00.000Z","key":1486815540000,"doc_count":9},{"key_as_string":"2017-02-11T12:20:00.000Z","key":1486815600000,"doc_count":14},{"key_as_string":"2017-02-11T12:21:00.000Z","key":1486815660000,"doc_count":11},{"key_as_string":"2017-02-11T12:22:00.000Z","key":1486815720000,"doc_count":16},{"key_as_string":"2017-02-11T12:23:00.000Z","key":1486815780000,"doc_count":14},{"key_as_string":"2017-02-11T12:24:00.000Z","key":1486815840000,"doc_count":10},{"key_as_string":"2017-02-11T12:25:00.000Z","key":1486815900000,"doc_count":16},{"key_as_string":"2017-02-11T12:26:00.000Z","key":1486815960000,"doc_count":18},{"key_as_string":"2017-02-11T12:27:00.000Z","key":1486816020000,"doc_count":15},{"key_as_string":"2017-02-11T12:28:00.000Z","key":1486816080000,"doc_count":10},{"key_as_string":"2017-02-11T12:29:00.000Z","key":1486816140000,"doc_count":12},{"key_as_string":"2017-02-11T12:30:00.000Z","key":1486816200000,"doc_count":11},{"key_as_string":"2017-02-11T12:31:00.000Z","key":1486816260000,"doc_count":16},{"key_as_string":"2017-02-11T12:32:00.000Z","key":1486816320000,"doc_count":11},{"key_as_string":"2017-02-11T12:33:00.000Z","key":1486816380000,"doc_count":11},{"key_as_string":"2017-02-11T12:34:00.000Z","key":1486816440000,"doc_count":19},{"key_as_string":"2017-02-11T12:35:00.000Z","key":1486816500000,"doc_count":17},{"key_as_string":"2017-02-11T12:36:00.000Z","key":1486816560000,"doc_count":19},{"key_as_string":"2017-02-11T12:37:00.000Z","key":1486816620000,"doc_count":11},{"key_as_string":"2017-02-11T12:38:00.000Z","key":1486816680000,"doc_count":18},{"key_as_string":"2017-02-11T12:39:00.000Z","key":1486816740000,"doc_count":11},{"key_as_string":"2017-02-11T12:40:00.000Z","key":1486816800000,"doc_count":12},{"key_as_string":"2017-02-11T12:41:00.000Z","key":1486816860000,"doc_count":15},{"key_as_string":"2017-02-11T12:42:00.000Z","key":1486816920000,"doc_count":15},{"key_as_string":"2017-02-11T12:43:00.000Z","key":1486816980000,"doc_count":7},{"key_as_string":"2017-02-11T12:44:00.000Z","key":1486817040000,"doc_count":19},{"key_as_string":"2017-02-11T12:45:00.000Z","key":1486817100000,"doc_count":12},{"key_as_string":"2017-02-11T12:46:00.000Z","key":1486817160000,"doc_count":16},{"key_as_string":"2017-02-11T12:47:00.000Z","key":1486817220000,"doc_count":8},{"key_as_string":"2017-02-11T12:48:00.000Z","key":1486817280000,"doc_count":15},{"key_as_string":"2017-02-11T12:49:00.000Z","key":1486817340000,"doc_count":12},{"key_as_string":"2017-02-11T12:50:00.000Z","key":1486817400000,"doc_count":12},{"key_as_string":"2017-02-11T12:51:00.000Z","key":1486817460000,"doc_count":16},{"key_as_string":"2017-02-11T12:52:00.000Z","key":1486817520000,"doc_count":13},{"key_as_string":"2017-02-11T12:53:00.000Z","key":1486817580000,"doc_count":13},{"key_as_string":"2017-02-11T12:54:00.000Z","key":1486817640000,"doc_count":15},{"key_as_string":"2017-02-11T12:55:00.000Z","key":1486817700000,"doc_count":16},{"key_as_string":"2017-02-11T12:56:00.000Z","key":1486817760000,"doc_count":17},{"key_as_string":"2017-02-11T12:57:00.000Z","key":1486817820000,"doc_count":13},{"key_as_string":"2017-02-11T12:58:00.000Z","key":1486817880000,"doc_count":12},{"key_as_string":"2017-02-11T12:59:00.000Z","key":1486817940000,"doc_count":17},{"key_as_string":"2017-02-11T13:00:00.000Z","key":1486818000000,"doc_count":16},{"key_as_string":"2017-02-11T13:01:00.000Z","key":1486818060000,"doc_count":14},{"key_as_string":"2017-02-11T13:02:00.000Z","key":1486818120000,"doc_count":8},{"key_as_string":"2017-02-11T13:03:00.000Z","key":1486818180000,"doc_count":15},{"key_as_string":"2017-02-11T13:04:00.000Z","key":1486818240000,"doc_count":14},{"key_as_string":"2017-02-11T13:05:00.000Z","key":1486818300000,"doc_count":16},{"key_as_string":"2017-02-11T13:06:00.000Z","key":1486818360000,"doc_count":20},{"key_as_string":"2017-02-11T13:07:00.000Z","key":1486818420000,"doc_count":10},{"key_as_string":"2017-02-11T13:08:00.000Z","key":1486818480000,"doc_count":15},{"key_as_string":"2017-02-11T13:09:00.000Z","key":1486818540000,"doc_count":12},{"key_as_string":"2017-02-11T13:10:00.000Z","key":1486818600000,"doc_count":12},{"key_as_string":"2017-02-11T13:11:00.000Z","key":1486818660000,"doc_count":8},{"key_as_string":"2017-02-11T13:12:00.000Z","key":1486818720000,"doc_count":17},{"key_as_string":"2017-02-11T13:13:00.000Z","key":1486818780000,"doc_count":8},{"key_as_string":"2017-02-11T13:14:00.000Z","key":1486818840000,"doc_count":15},{"key_as_string":"2017-02-11T13:15:00.000Z","key":1486818900000,"doc_count":13},{"key_as_string":"2017-02-11T13:16:00.000Z","key":1486818960000,"doc_count":15},{"key_as_string":"2017-02-11T13:17:00.000Z","key":1486819020000,"doc_count":15},{"key_as_string":"2017-02-11T13:18:00.000Z","key":1486819080000,"doc_count":11},{"key_as_string":"2017-02-11T13:19:00.000Z","key":1486819140000,"doc_count":17},{"key_as_string":"2017-02-11T13:20:00.000Z","key":1486819200000,"doc_count":11},{"key_as_string":"2017-02-11T13:21:00.000Z","key":1486819260000,"doc_count":14},{"key_as_string":"2017-02-11T13:22:00.000Z","key":1486819320000,"doc_count":10},{"key_as_string":"2017-02-11T13:23:00.000Z","key":1486819380000,"doc_count":15},{"key_as_string":"2017-02-11T13:24:00.000Z","key":1486819440000,"doc_count":14},{"key_as_string":"2017-02-11T13:25:00.000Z","key":1486819500000,"doc_count":11},{"key_as_string":"2017-02-11T13:26:00.000Z","key":1486819560000,"doc_count":12},{"key_as_string":"2017-02-11T13:27:00.000Z","key":1486819620000,"doc_count":13},{"key_as_string":"2017-02-11T13:28:00.000Z","key":1486819680000,"doc_count":16},{"key_as_string":"2017-02-11T13:29:00.000Z","key":1486819740000,"doc_count":8},{"key_as_string":"2017-02-11T13:30:00.000Z","key":1486819800000,"doc_count":12},{"key_as_string":"2017-02-11T13:31:00.000Z","key":1486819860000,"doc_count":10},{"key_as_string":"2017-02-11T13:32:00.000Z","key":1486819920000,"doc_count":15},{"key_as_string":"2017-02-11T13:33:00.000Z","key":1486819980000,"doc_count":13},{"key_as_string":"2017-02-11T13:34:00.000Z","key":1486820040000,"doc_count":15},{"key_as_string":"2017-02-11T13:35:00.000Z","key":1486820100000,"doc_count":13},{"key_as_string":"2017-02-11T13:36:00.000Z","key":1486820160000,"doc_count":15},{"key_as_string":"2017-02-11T13:37:00.000Z","key":1486820220000,"doc_count":19},{"key_as_string":"2017-02-11T13:38:00.000Z","key":1486820280000,"doc_count":13},{"key_as_string":"2017-02-11T13:39:00.000Z","key":1486820340000,"doc_count":15},{"key_as_string":"2017-02-11T13:40:00.000Z","key":1486820400000,"doc_count":16},{"key_as_string":"2017-02-11T13:41:00.000Z","key":1486820460000,"doc_count":14},{"key_as_string":"2017-02-11T13:42:00.000Z","key":1486820520000,"doc_count":18},{"key_as_string":"2017-02-11T13:43:00.000Z","key":1486820580000,"doc_count":11},{"key_as_string":"2017-02-11T13:44:00.000Z","key":1486820640000,"doc_count":14},{"key_as_string":"2017-02-11T13:45:00.000Z","key":1486820700000,"doc_count":14},{"key_as_string":"2017-02-11T13:46:00.000Z","key":1486820760000,"doc_count":13},{"key_as_string":"2017-02-11T13:47:00.000Z","key":1486820820000,"doc_count":9},{"key_as_string":"2017-02-11T13:48:00.000Z","key":1486820880000,"doc_count":11},{"key_as_string":"2017-02-11T13:49:00.000Z","key":1486820940000,"doc_count":20},{"key_as_string":"2017-02-11T13:50:00.000Z","key":1486821000000,"doc_count":9},{"key_as_string":"2017-02-11T13:51:00.000Z","key":1486821060000,"doc_count":8},{"key_as_string":"2017-02-11T13:52:00.000Z","key":1486821120000,"doc_count":20},{"key_as_string":"2017-02-11T13:53:00.000Z","key":1486821180000,"doc_count":11},{"key_as_string":"2017-02-11T13:54:00.000Z","key":1486821240000,"doc_count":16},{"key_as_string":"2017-02-11T13:55:00.000Z","key":1486821300000,"doc_count":15},{"key_as_string":"2017-02-11T13:56:00.000Z","key":1486821360000,"doc_count":14},{"key_as_string":"2017-02-11T13:57:00.000Z","key":1486821420000,"doc_count":15},{"key_as_string":"2017-02-11T13:58:00.000Z","key":1486821480000,"doc_count":15},{"key_as_string":"2017-02-11T13:59:00.000Z","key":1486821540000,"doc_count":9},{"key_as_string":"2017-02-11T14:00:00.000Z","key":1486821600000,"doc_count":12},{"key_as_string":"2017-02-11T14:01:00.000Z","key":1486821660000,"doc_count":13},{"key_as_string":"2017-02-11T14:02:00.000Z","key":1486821720000,"doc_count":15},{"key_as_string":"2017-02-11T14:03:00.000Z","key":1486821780000,"doc_count":12},{"key_as_string":"2017-02-11T14:04:00.000Z","key":1486821840000,"doc_count":16},{"key_as_string":"2017-02-11T14:05:00.000Z","key":1486821900000,"doc_count":10},{"key_as_string":"2017-02-11T14:06:00.000Z","key":1486821960000,"doc_count":12},{"key_as_string":"2017-02-11T14:07:00.000Z","key":1486822020000,"doc_count":13},{"key_as_string":"2017-02-11T14:08:00.000Z","key":1486822080000,"doc_count":9},{"key_as_string":"2017-02-11T14:09:00.000Z","key":1486822140000,"doc_count":16},{"key_as_string":"2017-02-11T14:10:00.000Z","key":1486822200000,"doc_count":15},{"key_as_string":"2017-02-11T14:11:00.000Z","key":1486822260000,"doc_count":14},{"key_as_string":"2017-02-11T14:12:00.000Z","key":1486822320000,"doc_count":10},{"key_as_string":"2017-02-11T14:13:00.000Z","key":1486822380000,"doc_count":10},{"key_as_string":"2017-02-11T14:14:00.000Z","key":1486822440000,"doc_count":15},{"key_as_string":"2017-02-11T14:15:00.000Z","key":1486822500000,"doc_count":10},{"key_as_string":"2017-02-11T14:16:00.000Z","key":1486822560000,"doc_count":13},{"key_as_string":"2017-02-11T14:17:00.000Z","key":1486822620000,"doc_count":14},{"key_as_string":"2017-02-11T14:18:00.000Z","key":1486822680000,"doc_count":14},{"key_as_string":"2017-02-11T14:19:00.000Z","key":1486822740000,"doc_count":17},{"key_as_string":"2017-02-11T14:20:00.000Z","key":1486822800000,"doc_count":13},{"key_as_string":"2017-02-11T14:21:00.000Z","key":1486822860000,"doc_count":14},{"key_as_string":"2017-02-11T14:22:00.000Z","key":1486822920000,"doc_count":12},{"key_as_string":"2017-02-11T14:23:00.000Z","key":1486822980000,"doc_count":21},{"key_as_string":"2017-02-11T14:24:00.000Z","key":1486823040000,"doc_count":14},{"key_as_string":"2017-02-11T14:25:00.000Z","key":1486823100000,"doc_count":9},{"key_as_string":"2017-02-11T14:26:00.000Z","key":1486823160000,"doc_count":8},{"key_as_string":"2017-02-11T14:27:00.000Z","key":1486823220000,"doc_count":14},{"key_as_string":"2017-02-11T14:28:00.000Z","key":1486823280000,"doc_count":10},{"key_as_string":"2017-02-11T14:29:00.000Z","key":1486823340000,"doc_count":12},{"key_as_string":"2017-02-11T14:30:00.000Z","key":1486823400000,"doc_count":12},{"key_as_string":"2017-02-11T14:31:00.000Z","key":1486823460000,"doc_count":14},{"key_as_string":"2017-02-11T14:32:00.000Z","key":1486823520000,"doc_count":15},{"key_as_string":"2017-02-11T14:33:00.000Z","key":1486823580000,"doc_count":14},{"key_as_string":"2017-02-11T14:34:00.000Z","key":1486823640000,"doc_count":9},{"key_as_string":"2017-02-11T14:35:00.000Z","key":1486823700000,"doc_count":14},{"key_as_string":"2017-02-11T14:36:00.000Z","key":1486823760000,"doc_count":12},{"key_as_string":"2017-02-11T14:37:00.000Z","key":1486823820000,"doc_count":17},{"key_as_string":"2017-02-11T14:38:00.000Z","key":1486823880000,"doc_count":11},{"key_as_string":"2017-02-11T14:39:00.000Z","key":1486823940000,"doc_count":12},{"key_as_string":"2017-02-11T14:40:00.000Z","key":1486824000000,"doc_count":15},{"key_as_string":"2017-02-11T14:41:00.000Z","key":1486824060000,"doc_count":11},{"key_as_string":"2017-02-11T14:42:00.000Z","key":1486824120000,"doc_count":13},{"key_as_string":"2017-02-11T14:43:00.000Z","key":1486824180000,"doc_count":18},{"key_as_string":"2017-02-11T14:44:00.000Z","key":1486824240000,"doc_count":10},{"key_as_string":"2017-02-11T14:45:00.000Z","key":1486824300000,"doc_count":13},{"key_as_string":"2017-02-11T14:46:00.000Z","key":1486824360000,"doc_count":9},{"key_as_string":"2017-02-11T14:47:00.000Z","key":1486824420000,"doc_count":14},{"key_as_string":"2017-02-11T14:48:00.000Z","key":1486824480000,"doc_count":16},{"key_as_string":"2017-02-11T14:49:00.000Z","key":1486824540000,"doc_count":14},{"key_as_string":"2017-02-11T14:50:00.000Z","key":1486824600000,"doc_count":13},{"key_as_string":"2017-02-11T14:51:00.000Z","key":1486824660000,"doc_count":12},{"key_as_string":"2017-02-11T14:52:00.000Z","key":1486824720000,"doc_count":11},{"key_as_string":"2017-02-11T14:53:00.000Z","key":1486824780000,"doc_count":16},{"key_as_string":"2017-02-11T14:54:00.000Z","key":1486824840000,"doc_count":12},{"key_as_string":"2017-02-11T14:55:00.000Z","key":1486824900000,"doc_count":11},{"key_as_string":"2017-02-11T14:56:00.000Z","key":1486824960000,"doc_count":14},{"key_as_string":"2017-02-11T14:57:00.000Z","key":1486825020000,"doc_count":15},{"key_as_string":"2017-02-11T14:58:00.000Z","key":1486825080000,"doc_count":10},{"key_as_string":"2017-02-11T14:59:00.000Z","key":1486825140000,"doc_count":18},{"key_as_string":"2017-02-11T15:00:00.000Z","key":1486825200000,"doc_count":15},{"key_as_string":"2017-02-11T15:01:00.000Z","key":1486825260000,"doc_count":10},{"key_as_string":"2017-02-11T15:02:00.000Z","key":1486825320000,"doc_count":17},{"key_as_string":"2017-02-11T15:03:00.000Z","key":1486825380000,"doc_count":12},{"key_as_string":"2017-02-11T15:04:00.000Z","key":1486825440000,"doc_count":13},{"key_as_string":"2017-02-11T15:05:00.000Z","key":1486825500000,"doc_count":14},{"key_as_string":"2017-02-11T15:06:00.000Z","key":1486825560000,"doc_count":10},{"key_as_string":"2017-02-11T15:07:00.000Z","key":1486825620000,"doc_count":13},{"key_as_string":"2017-02-11T15:08:00.000Z","key":1486825680000,"doc_count":12},{"key_as_string":"2017-02-11T15:09:00.000Z","key":1486825740000,"doc_count":13},{"key_as_string":"2017-02-11T15:10:00.000Z","key":1486825800000,"doc_count":11},{"key_as_string":"2017-02-11T15:11:00.000Z","key":1486825860000,"doc_count":16},{"key_as_string":"2017-02-11T15:12:00.000Z","key":1486825920000,"doc_count":10},{"key_as_string":"2017-02-11T15:13:00.000Z","key":1486825980000,"doc_count":11},{"key_as_string":"2017-02-11T15:14:00.000Z","key":1486826040000,"doc_count":18},{"key_as_string":"2017-02-11T15:15:00.000Z","key":1486826100000,"doc_count":15},{"key_as_string":"2017-02-11T15:16:00.000Z","key":1486826160000,"doc_count":12},{"key_as_string":"2017-02-11T15:17:00.000Z","key":1486826220000,"doc_count":18},{"key_as_string":"2017-02-11T15:18:00.000Z","key":1486826280000,"doc_count":11},{"key_as_string":"2017-02-11T15:19:00.000Z","key":1486826340000,"doc_count":9},{"key_as_string":"2017-02-11T15:20:00.000Z","key":1486826400000,"doc_count":19},{"key_as_string":"2017-02-11T15:21:00.000Z","key":1486826460000,"doc_count":11},{"key_as_string":"2017-02-11T15:22:00.000Z","key":1486826520000,"doc_count":9},{"key_as_string":"2017-02-11T15:23:00.000Z","key":1486826580000,"doc_count":16},{"key_as_string":"2017-02-11T15:24:00.000Z","key":1486826640000,"doc_count":14},{"key_as_string":"2017-02-11T15:25:00.000Z","key":1486826700000,"doc_count":17},{"key_as_string":"2017-02-11T15:26:00.000Z","key":1486826760000,"doc_count":14},{"key_as_string":"2017-02-11T15:27:00.000Z","key":1486826820000,"doc_count":17},{"key_as_string":"2017-02-11T15:28:00.000Z","key":1486826880000,"doc_count":10},{"key_as_string":"2017-02-11T15:29:00.000Z","key":1486826940000,"doc_count":20},{"key_as_string":"2017-02-11T15:30:00.000Z","key":1486827000000,"doc_count":7},{"key_as_string":"2017-02-11T15:31:00.000Z","key":1486827060000,"doc_count":12},{"key_as_string":"2017-02-11T15:32:00.000Z","key":1486827120000,"doc_count":12},{"key_as_string":"2017-02-11T15:33:00.000Z","key":1486827180000,"doc_count":10},{"key_as_string":"2017-02-11T15:34:00.000Z","key":1486827240000,"doc_count":16},{"key_as_string":"2017-02-11T15:35:00.000Z","key":1486827300000,"doc_count":13},{"key_as_string":"2017-02-11T15:36:00.000Z","key":1486827360000,"doc_count":9},{"key_as_string":"2017-02-11T15:37:00.000Z","key":1486827420000,"doc_count":12},{"key_as_string":"2017-02-11T15:38:00.000Z","key":1486827480000,"doc_count":17},{"key_as_string":"2017-02-11T15:39:00.000Z","key":1486827540000,"doc_count":11},{"key_as_string":"2017-02-11T15:40:00.000Z","key":1486827600000,"doc_count":17},{"key_as_string":"2017-02-11T15:41:00.000Z","key":1486827660000,"doc_count":12},{"key_as_string":"2017-02-11T15:42:00.000Z","key":1486827720000,"doc_count":11},{"key_as_string":"2017-02-11T15:43:00.000Z","key":1486827780000,"doc_count":10},{"key_as_string":"2017-02-11T15:44:00.000Z","key":1486827840000,"doc_count":15},{"key_as_string":"2017-02-11T15:45:00.000Z","key":1486827900000,"doc_count":11},{"key_as_string":"2017-02-11T15:46:00.000Z","key":1486827960000,"doc_count":19},{"key_as_string":"2017-02-11T15:47:00.000Z","key":1486828020000,"doc_count":12},{"key_as_string":"2017-02-11T15:48:00.000Z","key":1486828080000,"doc_count":9},{"key_as_string":"2017-02-11T15:49:00.000Z","key":1486828140000,"doc_count":12},{"key_as_string":"2017-02-11T15:50:00.000Z","key":1486828200000,"doc_count":15},{"key_as_string":"2017-02-11T15:51:00.000Z","key":1486828260000,"doc_count":11},{"key_as_string":"2017-02-11T15:52:00.000Z","key":1486828320000,"doc_count":19},{"key_as_string":"2017-02-11T15:53:00.000Z","key":1486828380000,"doc_count":8},{"key_as_string":"2017-02-11T15:54:00.000Z","key":1486828440000,"doc_count":14},{"key_as_string":"2017-02-11T15:55:00.000Z","key":1486828500000,"doc_count":22},{"key_as_string":"2017-02-11T15:56:00.000Z","key":1486828560000,"doc_count":12},{"key_as_string":"2017-02-11T15:57:00.000Z","key":1486828620000,"doc_count":15},{"key_as_string":"2017-02-11T15:58:00.000Z","key":1486828680000,"doc_count":15},{"key_as_string":"2017-02-11T15:59:00.000Z","key":1486828740000,"doc_count":12},{"key_as_string":"2017-02-11T16:00:00.000Z","key":1486828800000,"doc_count":13},{"key_as_string":"2017-02-11T16:01:00.000Z","key":1486828860000,"doc_count":19},{"key_as_string":"2017-02-11T16:02:00.000Z","key":1486828920000,"doc_count":18},{"key_as_string":"2017-02-11T16:03:00.000Z","key":1486828980000,"doc_count":11},{"key_as_string":"2017-02-11T16:04:00.000Z","key":1486829040000,"doc_count":12},{"key_as_string":"2017-02-11T16:05:00.000Z","key":1486829100000,"doc_count":14},{"key_as_string":"2017-02-11T16:06:00.000Z","key":1486829160000,"doc_count":18},{"key_as_string":"2017-02-11T16:07:00.000Z","key":1486829220000,"doc_count":14},{"key_as_string":"2017-02-11T16:08:00.000Z","key":1486829280000,"doc_count":13},{"key_as_string":"2017-02-11T16:09:00.000Z","key":1486829340000,"doc_count":12},{"key_as_string":"2017-02-11T16:10:00.000Z","key":1486829400000,"doc_count":8},{"key_as_string":"2017-02-11T16:11:00.000Z","key":1486829460000,"doc_count":12},{"key_as_string":"2017-02-11T16:12:00.000Z","key":1486829520000,"doc_count":18},{"key_as_string":"2017-02-11T16:13:00.000Z","key":1486829580000,"doc_count":11},{"key_as_string":"2017-02-11T16:14:00.000Z","key":1486829640000,"doc_count":13},{"key_as_string":"2017-02-11T16:15:00.000Z","key":1486829700000,"doc_count":9},{"key_as_string":"2017-02-11T16:16:00.000Z","key":1486829760000,"doc_count":12},{"key_as_string":"2017-02-11T16:17:00.000Z","key":1486829820000,"doc_count":8},{"key_as_string":"2017-02-11T16:18:00.000Z","key":1486829880000,"doc_count":15},{"key_as_string":"2017-02-11T16:19:00.000Z","key":1486829940000,"doc_count":12},{"key_as_string":"2017-02-11T16:20:00.000Z","key":1486830000000,"doc_count":18},{"key_as_string":"2017-02-11T16:21:00.000Z","key":1486830060000,"doc_count":12},{"key_as_string":"2017-02-11T16:22:00.000Z","key":1486830120000,"doc_count":15},{"key_as_string":"2017-02-11T16:23:00.000Z","key":1486830180000,"doc_count":9},{"key_as_string":"2017-02-11T16:24:00.000Z","key":1486830240000,"doc_count":19},{"key_as_string":"2017-02-11T16:25:00.000Z","key":1486830300000,"doc_count":10},{"key_as_string":"2017-02-11T16:26:00.000Z","key":1486830360000,"doc_count":13},{"key_as_string":"2017-02-11T16:27:00.000Z","key":1486830420000,"doc_count":11},{"key_as_string":"2017-02-11T16:28:00.000Z","key":1486830480000,"doc_count":8},{"key_as_string":"2017-02-11T16:29:00.000Z","key":1486830540000,"doc_count":16},{"key_as_string":"2017-02-11T16:30:00.000Z","key":1486830600000,"doc_count":14},{"key_as_string":"2017-02-11T16:31:00.000Z","key":1486830660000,"doc_count":12},{"key_as_string":"2017-02-11T16:32:00.000Z","key":1486830720000,"doc_count":6},{"key_as_string":"2017-02-11T16:33:00.000Z","key":1486830780000,"doc_count":13},{"key_as_string":"2017-02-11T16:34:00.000Z","key":1486830840000,"doc_count":12},{"key_as_string":"2017-02-11T16:35:00.000Z","key":1486830900000,"doc_count":15},{"key_as_string":"2017-02-11T16:36:00.000Z","key":1486830960000,"doc_count":8},{"key_as_string":"2017-02-11T16:37:00.000Z","key":1486831020000,"doc_count":11},{"key_as_string":"2017-02-11T16:38:00.000Z","key":1486831080000,"doc_count":17},{"key_as_string":"2017-02-11T16:39:00.000Z","key":1486831140000,"doc_count":11},{"key_as_string":"2017-02-11T16:40:00.000Z","key":1486831200000,"doc_count":15},{"key_as_string":"2017-02-11T16:41:00.000Z","key":1486831260000,"doc_count":15},{"key_as_string":"2017-02-11T16:42:00.000Z","key":1486831320000,"doc_count":14},{"key_as_string":"2017-02-11T16:43:00.000Z","key":1486831380000,"doc_count":11},{"key_as_string":"2017-02-11T16:44:00.000Z","key":1486831440000,"doc_count":13},{"key_as_string":"2017-02-11T16:45:00.000Z","key":1486831500000,"doc_count":12},{"key_as_string":"2017-02-11T16:46:00.000Z","key":1486831560000,"doc_count":14},{"key_as_string":"2017-02-11T16:47:00.000Z","key":1486831620000,"doc_count":10},{"key_as_string":"2017-02-11T16:48:00.000Z","key":1486831680000,"doc_count":11},{"key_as_string":"2017-02-11T16:49:00.000Z","key":1486831740000,"doc_count":14},{"key_as_string":"2017-02-11T16:50:00.000Z","key":1486831800000,"doc_count":16},{"key_as_string":"2017-02-11T16:51:00.000Z","key":1486831860000,"doc_count":11},{"key_as_string":"2017-02-11T16:52:00.000Z","key":1486831920000,"doc_count":9},{"key_as_string":"2017-02-11T16:53:00.000Z","key":1486831980000,"doc_count":13},{"key_as_string":"2017-02-11T16:54:00.000Z","key":1486832040000,"doc_count":13},{"key_as_string":"2017-02-11T16:55:00.000Z","key":1486832100000,"doc_count":16},{"key_as_string":"2017-02-11T16:56:00.000Z","key":1486832160000,"doc_count":10},{"key_as_string":"2017-02-11T16:57:00.000Z","key":1486832220000,"doc_count":9},{"key_as_string":"2017-02-11T16:58:00.000Z","key":1486832280000,"doc_count":22},{"key_as_string":"2017-02-11T16:59:00.000Z","key":1486832340000,"doc_count":12},{"key_as_string":"2017-02-11T17:00:00.000Z","key":1486832400000,"doc_count":8},{"key_as_string":"2017-02-11T17:01:00.000Z","key":1486832460000,"doc_count":13},{"key_as_string":"2017-02-11T17:02:00.000Z","key":1486832520000,"doc_count":13},{"key_as_string":"2017-02-11T17:03:00.000Z","key":1486832580000,"doc_count":9},{"key_as_string":"2017-02-11T17:04:00.000Z","key":1486832640000,"doc_count":11},{"key_as_string":"2017-02-11T17:05:00.000Z","key":1486832700000,"doc_count":10},{"key_as_string":"2017-02-11T17:06:00.000Z","key":1486832760000,"doc_count":15},{"key_as_string":"2017-02-11T17:07:00.000Z","key":1486832820000,"doc_count":12},{"key_as_string":"2017-02-11T17:08:00.000Z","key":1486832880000,"doc_count":10},{"key_as_string":"2017-02-11T17:09:00.000Z","key":1486832940000,"doc_count":16},{"key_as_string":"2017-02-11T17:10:00.000Z","key":1486833000000,"doc_count":14},{"key_as_string":"2017-02-11T17:11:00.000Z","key":1486833060000,"doc_count":13},{"key_as_string":"2017-02-11T17:12:00.000Z","key":1486833120000,"doc_count":16},{"key_as_string":"2017-02-11T17:13:00.000Z","key":1486833180000,"doc_count":9},{"key_as_string":"2017-02-11T17:14:00.000Z","key":1486833240000,"doc_count":5},{"key_as_string":"2017-02-11T17:15:00.000Z","key":1486833300000,"doc_count":15},{"key_as_string":"2017-02-11T17:16:00.000Z","key":1486833360000,"doc_count":14},{"key_as_string":"2017-02-11T17:17:00.000Z","key":1486833420000,"doc_count":8},{"key_as_string":"2017-02-11T17:18:00.000Z","key":1486833480000,"doc_count":12},{"key_as_string":"2017-02-11T17:19:00.000Z","key":1486833540000,"doc_count":13},{"key_as_string":"2017-02-11T17:20:00.000Z","key":1486833600000,"doc_count":13},{"key_as_string":"2017-02-11T17:21:00.000Z","key":1486833660000,"doc_count":13},{"key_as_string":"2017-02-11T17:22:00.000Z","key":1486833720000,"doc_count":11},{"key_as_string":"2017-02-11T17:23:00.000Z","key":1486833780000,"doc_count":11},{"key_as_string":"2017-02-11T17:24:00.000Z","key":1486833840000,"doc_count":14},{"key_as_string":"2017-02-11T17:25:00.000Z","key":1486833900000,"doc_count":7},{"key_as_string":"2017-02-11T17:26:00.000Z","key":1486833960000,"doc_count":15},{"key_as_string":"2017-02-11T17:27:00.000Z","key":1486834020000,"doc_count":11},{"key_as_string":"2017-02-11T17:28:00.000Z","key":1486834080000,"doc_count":9},{"key_as_string":"2017-02-11T17:29:00.000Z","key":1486834140000,"doc_count":13},{"key_as_string":"2017-02-11T17:30:00.000Z","key":1486834200000,"doc_count":11},{"key_as_string":"2017-02-11T17:31:00.000Z","key":1486834260000,"doc_count":7},{"key_as_string":"2017-02-11T17:32:00.000Z","key":1486834320000,"doc_count":14},{"key_as_string":"2017-02-11T17:33:00.000Z","key":1486834380000,"doc_count":13},{"key_as_string":"2017-02-11T17:34:00.000Z","key":1486834440000,"doc_count":10},{"key_as_string":"2017-02-11T17:35:00.000Z","key":1486834500000,"doc_count":13},{"key_as_string":"2017-02-11T17:36:00.000Z","key":1486834560000,"doc_count":12},{"key_as_string":"2017-02-11T17:37:00.000Z","key":1486834620000,"doc_count":13},{"key_as_string":"2017-02-11T17:38:00.000Z","key":1486834680000,"doc_count":12},{"key_as_string":"2017-02-11T17:39:00.000Z","key":1486834740000,"doc_count":11},{"key_as_string":"2017-02-11T17:40:00.000Z","key":1486834800000,"doc_count":15},{"key_as_string":"2017-02-11T17:41:00.000Z","key":1486834860000,"doc_count":15},{"key_as_string":"2017-02-11T17:42:00.000Z","key":1486834920000,"doc_count":14},{"key_as_string":"2017-02-11T17:43:00.000Z","key":1486834980000,"doc_count":10},{"key_as_string":"2017-02-11T17:44:00.000Z","key":1486835040000,"doc_count":8},{"key_as_string":"2017-02-11T17:45:00.000Z","key":1486835100000,"doc_count":14},{"key_as_string":"2017-02-11T17:46:00.000Z","key":1486835160000,"doc_count":8},{"key_as_string":"2017-02-11T17:47:00.000Z","key":1486835220000,"doc_count":11},{"key_as_string":"2017-02-11T17:48:00.000Z","key":1486835280000,"doc_count":13},{"key_as_string":"2017-02-11T17:49:00.000Z","key":1486835340000,"doc_count":13},{"key_as_string":"2017-02-11T17:50:00.000Z","key":1486835400000,"doc_count":10},{"key_as_string":"2017-02-11T17:51:00.000Z","key":1486835460000,"doc_count":11},{"key_as_string":"2017-02-11T17:52:00.000Z","key":1486835520000,"doc_count":22},{"key_as_string":"2017-02-11T17:53:00.000Z","key":1486835580000,"doc_count":14},{"key_as_string":"2017-02-11T17:54:00.000Z","key":1486835640000,"doc_count":11},{"key_as_string":"2017-02-11T17:55:00.000Z","key":1486835700000,"doc_count":11},{"key_as_string":"2017-02-11T17:56:00.000Z","key":1486835760000,"doc_count":10},{"key_as_string":"2017-02-11T17:57:00.000Z","key":1486835820000,"doc_count":13},{"key_as_string":"2017-02-11T17:58:00.000Z","key":1486835880000,"doc_count":6},{"key_as_string":"2017-02-11T17:59:00.000Z","key":1486835940000,"doc_count":16},{"key_as_string":"2017-02-11T18:00:00.000Z","key":1486836000000,"doc_count":11},{"key_as_string":"2017-02-11T18:01:00.000Z","key":1486836060000,"doc_count":15},{"key_as_string":"2017-02-11T18:02:00.000Z","key":1486836120000,"doc_count":8},{"key_as_string":"2017-02-11T18:03:00.000Z","key":1486836180000,"doc_count":12},{"key_as_string":"2017-02-11T18:04:00.000Z","key":1486836240000,"doc_count":14},{"key_as_string":"2017-02-11T18:05:00.000Z","key":1486836300000,"doc_count":11},{"key_as_string":"2017-02-11T18:06:00.000Z","key":1486836360000,"doc_count":15},{"key_as_string":"2017-02-11T18:07:00.000Z","key":1486836420000,"doc_count":9},{"key_as_string":"2017-02-11T18:08:00.000Z","key":1486836480000,"doc_count":11},{"key_as_string":"2017-02-11T18:09:00.000Z","key":1486836540000,"doc_count":9},{"key_as_string":"2017-02-11T18:10:00.000Z","key":1486836600000,"doc_count":10},{"key_as_string":"2017-02-11T18:11:00.000Z","key":1486836660000,"doc_count":12},{"key_as_string":"2017-02-11T18:12:00.000Z","key":1486836720000,"doc_count":10},{"key_as_string":"2017-02-11T18:13:00.000Z","key":1486836780000,"doc_count":11},{"key_as_string":"2017-02-11T18:14:00.000Z","key":1486836840000,"doc_count":12},{"key_as_string":"2017-02-11T18:15:00.000Z","key":1486836900000,"doc_count":11},{"key_as_string":"2017-02-11T18:16:00.000Z","key":1486836960000,"doc_count":9},{"key_as_string":"2017-02-11T18:17:00.000Z","key":1486837020000,"doc_count":7},{"key_as_string":"2017-02-11T18:18:00.000Z","key":1486837080000,"doc_count":16},{"key_as_string":"2017-02-11T18:19:00.000Z","key":1486837140000,"doc_count":10},{"key_as_string":"2017-02-11T18:20:00.000Z","key":1486837200000,"doc_count":14},{"key_as_string":"2017-02-11T18:21:00.000Z","key":1486837260000,"doc_count":5},{"key_as_string":"2017-02-11T18:22:00.000Z","key":1486837320000,"doc_count":12},{"key_as_string":"2017-02-11T18:23:00.000Z","key":1486837380000,"doc_count":13},{"key_as_string":"2017-02-11T18:24:00.000Z","key":1486837440000,"doc_count":12},{"key_as_string":"2017-02-11T18:25:00.000Z","key":1486837500000,"doc_count":9},{"key_as_string":"2017-02-11T18:26:00.000Z","key":1486837560000,"doc_count":12},{"key_as_string":"2017-02-11T18:27:00.000Z","key":1486837620000,"doc_count":11},{"key_as_string":"2017-02-11T18:28:00.000Z","key":1486837680000,"doc_count":12},{"key_as_string":"2017-02-11T18:29:00.000Z","key":1486837740000,"doc_count":10},{"key_as_string":"2017-02-11T18:30:00.000Z","key":1486837800000,"doc_count":11},{"key_as_string":"2017-02-11T18:31:00.000Z","key":1486837860000,"doc_count":9},{"key_as_string":"2017-02-11T18:32:00.000Z","key":1486837920000,"doc_count":13},{"key_as_string":"2017-02-11T18:33:00.000Z","key":1486837980000,"doc_count":11},{"key_as_string":"2017-02-11T18:34:00.000Z","key":1486838040000,"doc_count":13},{"key_as_string":"2017-02-11T18:35:00.000Z","key":1486838100000,"doc_count":12},{"key_as_string":"2017-02-11T18:36:00.000Z","key":1486838160000,"doc_count":8},{"key_as_string":"2017-02-11T18:37:00.000Z","key":1486838220000,"doc_count":10},{"key_as_string":"2017-02-11T18:38:00.000Z","key":1486838280000,"doc_count":10},{"key_as_string":"2017-02-11T18:39:00.000Z","key":1486838340000,"doc_count":10},{"key_as_string":"2017-02-11T18:40:00.000Z","key":1486838400000,"doc_count":14},{"key_as_string":"2017-02-11T18:41:00.000Z","key":1486838460000,"doc_count":13},{"key_as_string":"2017-02-11T18:42:00.000Z","key":1486838520000,"doc_count":15},{"key_as_string":"2017-02-11T18:43:00.000Z","key":1486838580000,"doc_count":9},{"key_as_string":"2017-02-11T18:44:00.000Z","key":1486838640000,"doc_count":10},{"key_as_string":"2017-02-11T18:45:00.000Z","key":1486838700000,"doc_count":14},{"key_as_string":"2017-02-11T18:46:00.000Z","key":1486838760000,"doc_count":9},{"key_as_string":"2017-02-11T18:47:00.000Z","key":1486838820000,"doc_count":14},{"key_as_string":"2017-02-11T18:48:00.000Z","key":1486838880000,"doc_count":8},{"key_as_string":"2017-02-11T18:49:00.000Z","key":1486838940000,"doc_count":10},{"key_as_string":"2017-02-11T18:50:00.000Z","key":1486839000000,"doc_count":15},{"key_as_string":"2017-02-11T18:51:00.000Z","key":1486839060000,"doc_count":9},{"key_as_string":"2017-02-11T18:52:00.000Z","key":1486839120000,"doc_count":13},{"key_as_string":"2017-02-11T18:53:00.000Z","key":1486839180000,"doc_count":14},{"key_as_string":"2017-02-11T18:54:00.000Z","key":1486839240000,"doc_count":9},{"key_as_string":"2017-02-11T18:55:00.000Z","key":1486839300000,"doc_count":9},{"key_as_string":"2017-02-11T18:56:00.000Z","key":1486839360000,"doc_count":9},{"key_as_string":"2017-02-11T18:57:00.000Z","key":1486839420000,"doc_count":12},{"key_as_string":"2017-02-11T18:58:00.000Z","key":1486839480000,"doc_count":14},{"key_as_string":"2017-02-11T18:59:00.000Z","key":1486839540000,"doc_count":9},{"key_as_string":"2017-02-11T19:00:00.000Z","key":1486839600000,"doc_count":14},{"key_as_string":"2017-02-11T19:01:00.000Z","key":1486839660000,"doc_count":13},{"key_as_string":"2017-02-11T19:02:00.000Z","key":1486839720000,"doc_count":13},{"key_as_string":"2017-02-11T19:03:00.000Z","key":1486839780000,"doc_count":15},{"key_as_string":"2017-02-11T19:04:00.000Z","key":1486839840000,"doc_count":11},{"key_as_string":"2017-02-11T19:05:00.000Z","key":1486839900000,"doc_count":11},{"key_as_string":"2017-02-11T19:06:00.000Z","key":1486839960000,"doc_count":10},{"key_as_string":"2017-02-11T19:07:00.000Z","key":1486840020000,"doc_count":11},{"key_as_string":"2017-02-11T19:08:00.000Z","key":1486840080000,"doc_count":15},{"key_as_string":"2017-02-11T19:09:00.000Z","key":1486840140000,"doc_count":13},{"key_as_string":"2017-02-11T19:10:00.000Z","key":1486840200000,"doc_count":17},{"key_as_string":"2017-02-11T19:11:00.000Z","key":1486840260000,"doc_count":9},{"key_as_string":"2017-02-11T19:12:00.000Z","key":1486840320000,"doc_count":10},{"key_as_string":"2017-02-11T19:13:00.000Z","key":1486840380000,"doc_count":8},{"key_as_string":"2017-02-11T19:14:00.000Z","key":1486840440000,"doc_count":17},{"key_as_string":"2017-02-11T19:15:00.000Z","key":1486840500000,"doc_count":8},{"key_as_string":"2017-02-11T19:16:00.000Z","key":1486840560000,"doc_count":13},{"key_as_string":"2017-02-11T19:17:00.000Z","key":1486840620000,"doc_count":10},{"key_as_string":"2017-02-11T19:18:00.000Z","key":1486840680000,"doc_count":9},{"key_as_string":"2017-02-11T19:19:00.000Z","key":1486840740000,"doc_count":13},{"key_as_string":"2017-02-11T19:20:00.000Z","key":1486840800000,"doc_count":12},{"key_as_string":"2017-02-11T19:21:00.000Z","key":1486840860000,"doc_count":18},{"key_as_string":"2017-02-11T19:22:00.000Z","key":1486840920000,"doc_count":14},{"key_as_string":"2017-02-11T19:23:00.000Z","key":1486840980000,"doc_count":10},{"key_as_string":"2017-02-11T19:24:00.000Z","key":1486841040000,"doc_count":11},{"key_as_string":"2017-02-11T19:25:00.000Z","key":1486841100000,"doc_count":12},{"key_as_string":"2017-02-11T19:26:00.000Z","key":1486841160000,"doc_count":16},{"key_as_string":"2017-02-11T19:27:00.000Z","key":1486841220000,"doc_count":10},{"key_as_string":"2017-02-11T19:28:00.000Z","key":1486841280000,"doc_count":16},{"key_as_string":"2017-02-11T19:29:00.000Z","key":1486841340000,"doc_count":6},{"key_as_string":"2017-02-11T19:30:00.000Z","key":1486841400000,"doc_count":12},{"key_as_string":"2017-02-11T19:31:00.000Z","key":1486841460000,"doc_count":10},{"key_as_string":"2017-02-11T19:32:00.000Z","key":1486841520000,"doc_count":15},{"key_as_string":"2017-02-11T19:33:00.000Z","key":1486841580000,"doc_count":16},{"key_as_string":"2017-02-11T19:34:00.000Z","key":1486841640000,"doc_count":14},{"key_as_string":"2017-02-11T19:35:00.000Z","key":1486841700000,"doc_count":5},{"key_as_string":"2017-02-11T19:36:00.000Z","key":1486841760000,"doc_count":15},{"key_as_string":"2017-02-11T19:37:00.000Z","key":1486841820000,"doc_count":9},{"key_as_string":"2017-02-11T19:38:00.000Z","key":1486841880000,"doc_count":11},{"key_as_string":"2017-02-11T19:39:00.000Z","key":1486841940000,"doc_count":9},{"key_as_string":"2017-02-11T19:40:00.000Z","key":1486842000000,"doc_count":14},{"key_as_string":"2017-02-11T19:41:00.000Z","key":1486842060000,"doc_count":8},{"key_as_string":"2017-02-11T19:42:00.000Z","key":1486842120000,"doc_count":7},{"key_as_string":"2017-02-11T19:43:00.000Z","key":1486842180000,"doc_count":8},{"key_as_string":"2017-02-11T19:44:00.000Z","key":1486842240000,"doc_count":12},{"key_as_string":"2017-02-11T19:45:00.000Z","key":1486842300000,"doc_count":12},{"key_as_string":"2017-02-11T19:46:00.000Z","key":1486842360000,"doc_count":11},{"key_as_string":"2017-02-11T19:47:00.000Z","key":1486842420000,"doc_count":10},{"key_as_string":"2017-02-11T19:48:00.000Z","key":1486842480000,"doc_count":8},{"key_as_string":"2017-02-11T19:49:00.000Z","key":1486842540000,"doc_count":11},{"key_as_string":"2017-02-11T19:50:00.000Z","key":1486842600000,"doc_count":12},{"key_as_string":"2017-02-11T19:51:00.000Z","key":1486842660000,"doc_count":10},{"key_as_string":"2017-02-11T19:52:00.000Z","key":1486842720000,"doc_count":11},{"key_as_string":"2017-02-11T19:53:00.000Z","key":1486842780000,"doc_count":17},{"key_as_string":"2017-02-11T19:54:00.000Z","key":1486842840000,"doc_count":11},{"key_as_string":"2017-02-11T19:55:00.000Z","key":1486842900000,"doc_count":11},{"key_as_string":"2017-02-11T19:56:00.000Z","key":1486842960000,"doc_count":14},{"key_as_string":"2017-02-11T19:57:00.000Z","key":1486843020000,"doc_count":5},{"key_as_string":"2017-02-11T19:58:00.000Z","key":1486843080000,"doc_count":17},{"key_as_string":"2017-02-11T19:59:00.000Z","key":1486843140000,"doc_count":7},{"key_as_string":"2017-02-11T20:00:00.000Z","key":1486843200000,"doc_count":12},{"key_as_string":"2017-02-11T20:01:00.000Z","key":1486843260000,"doc_count":12},{"key_as_string":"2017-02-11T20:02:00.000Z","key":1486843320000,"doc_count":15},{"key_as_string":"2017-02-11T20:03:00.000Z","key":1486843380000,"doc_count":8},{"key_as_string":"2017-02-11T20:04:00.000Z","key":1486843440000,"doc_count":10},{"key_as_string":"2017-02-11T20:05:00.000Z","key":1486843500000,"doc_count":10},{"key_as_string":"2017-02-11T20:06:00.000Z","key":1486843560000,"doc_count":10},{"key_as_string":"2017-02-11T20:07:00.000Z","key":1486843620000,"doc_count":14},{"key_as_string":"2017-02-11T20:08:00.000Z","key":1486843680000,"doc_count":11},{"key_as_string":"2017-02-11T20:09:00.000Z","key":1486843740000,"doc_count":9},{"key_as_string":"2017-02-11T20:10:00.000Z","key":1486843800000,"doc_count":7},{"key_as_string":"2017-02-11T20:11:00.000Z","key":1486843860000,"doc_count":17},{"key_as_string":"2017-02-11T20:12:00.000Z","key":1486843920000,"doc_count":11},{"key_as_string":"2017-02-11T20:13:00.000Z","key":1486843980000,"doc_count":15},{"key_as_string":"2017-02-11T20:14:00.000Z","key":1486844040000,"doc_count":12},{"key_as_string":"2017-02-11T20:15:00.000Z","key":1486844100000,"doc_count":9},{"key_as_string":"2017-02-11T20:16:00.000Z","key":1486844160000,"doc_count":7},{"key_as_string":"2017-02-11T20:17:00.000Z","key":1486844220000,"doc_count":9},{"key_as_string":"2017-02-11T20:18:00.000Z","key":1486844280000,"doc_count":14},{"key_as_string":"2017-02-11T20:19:00.000Z","key":1486844340000,"doc_count":9},{"key_as_string":"2017-02-11T20:20:00.000Z","key":1486844400000,"doc_count":13},{"key_as_string":"2017-02-11T20:21:00.000Z","key":1486844460000,"doc_count":11},{"key_as_string":"2017-02-11T20:22:00.000Z","key":1486844520000,"doc_count":15},{"key_as_string":"2017-02-11T20:23:00.000Z","key":1486844580000,"doc_count":13},{"key_as_string":"2017-02-11T20:24:00.000Z","key":1486844640000,"doc_count":11},{"key_as_string":"2017-02-11T20:25:00.000Z","key":1486844700000,"doc_count":7},{"key_as_string":"2017-02-11T20:26:00.000Z","key":1486844760000,"doc_count":7},{"key_as_string":"2017-02-11T20:27:00.000Z","key":1486844820000,"doc_count":13},{"key_as_string":"2017-02-11T20:28:00.000Z","key":1486844880000,"doc_count":8},{"key_as_string":"2017-02-11T20:29:00.000Z","key":1486844940000,"doc_count":12},{"key_as_string":"2017-02-11T20:30:00.000Z","key":1486845000000,"doc_count":12},{"key_as_string":"2017-02-11T20:31:00.000Z","key":1486845060000,"doc_count":11},{"key_as_string":"2017-02-11T20:32:00.000Z","key":1486845120000,"doc_count":11},{"key_as_string":"2017-02-11T20:33:00.000Z","key":1486845180000,"doc_count":10},{"key_as_string":"2017-02-11T20:34:00.000Z","key":1486845240000,"doc_count":15},{"key_as_string":"2017-02-11T20:35:00.000Z","key":1486845300000,"doc_count":5},{"key_as_string":"2017-02-11T20:36:00.000Z","key":1486845360000,"doc_count":9},{"key_as_string":"2017-02-11T20:37:00.000Z","key":1486845420000,"doc_count":11},{"key_as_string":"2017-02-11T20:38:00.000Z","key":1486845480000,"doc_count":9},{"key_as_string":"2017-02-11T20:39:00.000Z","key":1486845540000,"doc_count":12},{"key_as_string":"2017-02-11T20:40:00.000Z","key":1486845600000,"doc_count":16},{"key_as_string":"2017-02-11T20:41:00.000Z","key":1486845660000,"doc_count":6},{"key_as_string":"2017-02-11T20:42:00.000Z","key":1486845720000,"doc_count":11},{"key_as_string":"2017-02-11T20:43:00.000Z","key":1486845780000,"doc_count":13},{"key_as_string":"2017-02-11T20:44:00.000Z","key":1486845840000,"doc_count":7},{"key_as_string":"2017-02-11T20:45:00.000Z","key":1486845900000,"doc_count":11},{"key_as_string":"2017-02-11T20:46:00.000Z","key":1486845960000,"doc_count":7},{"key_as_string":"2017-02-11T20:47:00.000Z","key":1486846020000,"doc_count":9},{"key_as_string":"2017-02-11T20:48:00.000Z","key":1486846080000,"doc_count":14},{"key_as_string":"2017-02-11T20:49:00.000Z","key":1486846140000,"doc_count":9},{"key_as_string":"2017-02-11T20:50:00.000Z","key":1486846200000,"doc_count":12},{"key_as_string":"2017-02-11T20:51:00.000Z","key":1486846260000,"doc_count":17},{"key_as_string":"2017-02-11T20:52:00.000Z","key":1486846320000,"doc_count":13},{"key_as_string":"2017-02-11T20:53:00.000Z","key":1486846380000,"doc_count":7},{"key_as_string":"2017-02-11T20:54:00.000Z","key":1486846440000,"doc_count":15},{"key_as_string":"2017-02-11T20:55:00.000Z","key":1486846500000,"doc_count":13},{"key_as_string":"2017-02-11T20:56:00.000Z","key":1486846560000,"doc_count":16},{"key_as_string":"2017-02-11T20:57:00.000Z","key":1486846620000,"doc_count":12},{"key_as_string":"2017-02-11T20:58:00.000Z","key":1486846680000,"doc_count":8},{"key_as_string":"2017-02-11T20:59:00.000Z","key":1486846740000,"doc_count":14},{"key_as_string":"2017-02-11T21:00:00.000Z","key":1486846800000,"doc_count":11},{"key_as_string":"2017-02-11T21:01:00.000Z","key":1486846860000,"doc_count":8},{"key_as_string":"2017-02-11T21:02:00.000Z","key":1486846920000,"doc_count":13},{"key_as_string":"2017-02-11T21:03:00.000Z","key":1486846980000,"doc_count":8},{"key_as_string":"2017-02-11T21:04:00.000Z","key":1486847040000,"doc_count":9},{"key_as_string":"2017-02-11T21:05:00.000Z","key":1486847100000,"doc_count":12},{"key_as_string":"2017-02-11T21:06:00.000Z","key":1486847160000,"doc_count":11},{"key_as_string":"2017-02-11T21:07:00.000Z","key":1486847220000,"doc_count":15},{"key_as_string":"2017-02-11T21:08:00.000Z","key":1486847280000,"doc_count":6},{"key_as_string":"2017-02-11T21:09:00.000Z","key":1486847340000,"doc_count":14},{"key_as_string":"2017-02-11T21:10:00.000Z","key":1486847400000,"doc_count":5},{"key_as_string":"2017-02-11T21:11:00.000Z","key":1486847460000,"doc_count":11},{"key_as_string":"2017-02-11T21:12:00.000Z","key":1486847520000,"doc_count":12},{"key_as_string":"2017-02-11T21:13:00.000Z","key":1486847580000,"doc_count":10},{"key_as_string":"2017-02-11T21:14:00.000Z","key":1486847640000,"doc_count":7},{"key_as_string":"2017-02-11T21:15:00.000Z","key":1486847700000,"doc_count":9},{"key_as_string":"2017-02-11T21:16:00.000Z","key":1486847760000,"doc_count":12},{"key_as_string":"2017-02-11T21:17:00.000Z","key":1486847820000,"doc_count":11},{"key_as_string":"2017-02-11T21:18:00.000Z","key":1486847880000,"doc_count":12},{"key_as_string":"2017-02-11T21:19:00.000Z","key":1486847940000,"doc_count":14},{"key_as_string":"2017-02-11T21:20:00.000Z","key":1486848000000,"doc_count":10},{"key_as_string":"2017-02-11T21:21:00.000Z","key":1486848060000,"doc_count":9},{"key_as_string":"2017-02-11T21:22:00.000Z","key":1486848120000,"doc_count":16},{"key_as_string":"2017-02-11T21:23:00.000Z","key":1486848180000,"doc_count":10},{"key_as_string":"2017-02-11T21:24:00.000Z","key":1486848240000,"doc_count":10},{"key_as_string":"2017-02-11T21:25:00.000Z","key":1486848300000,"doc_count":11},{"key_as_string":"2017-02-11T21:26:00.000Z","key":1486848360000,"doc_count":12},{"key_as_string":"2017-02-11T21:27:00.000Z","key":1486848420000,"doc_count":6},{"key_as_string":"2017-02-11T21:28:00.000Z","key":1486848480000,"doc_count":14},{"key_as_string":"2017-02-11T21:29:00.000Z","key":1486848540000,"doc_count":10},{"key_as_string":"2017-02-11T21:30:00.000Z","key":1486848600000,"doc_count":12},{"key_as_string":"2017-02-11T21:31:00.000Z","key":1486848660000,"doc_count":7},{"key_as_string":"2017-02-11T21:32:00.000Z","key":1486848720000,"doc_count":11},{"key_as_string":"2017-02-11T21:33:00.000Z","key":1486848780000,"doc_count":11},{"key_as_string":"2017-02-11T21:34:00.000Z","key":1486848840000,"doc_count":11},{"key_as_string":"2017-02-11T21:35:00.000Z","key":1486848900000,"doc_count":5},{"key_as_string":"2017-02-11T21:36:00.000Z","key":1486848960000,"doc_count":15},{"key_as_string":"2017-02-11T21:37:00.000Z","key":1486849020000,"doc_count":8},{"key_as_string":"2017-02-11T21:38:00.000Z","key":1486849080000,"doc_count":11},{"key_as_string":"2017-02-11T21:39:00.000Z","key":1486849140000,"doc_count":9},{"key_as_string":"2017-02-11T21:40:00.000Z","key":1486849200000,"doc_count":9},{"key_as_string":"2017-02-11T21:41:00.000Z","key":1486849260000,"doc_count":10},{"key_as_string":"2017-02-11T21:42:00.000Z","key":1486849320000,"doc_count":7},{"key_as_string":"2017-02-11T21:43:00.000Z","key":1486849380000,"doc_count":13},{"key_as_string":"2017-02-11T21:44:00.000Z","key":1486849440000,"doc_count":10},{"key_as_string":"2017-02-11T21:45:00.000Z","key":1486849500000,"doc_count":10},{"key_as_string":"2017-02-11T21:46:00.000Z","key":1486849560000,"doc_count":11},{"key_as_string":"2017-02-11T21:47:00.000Z","key":1486849620000,"doc_count":10},{"key_as_string":"2017-02-11T21:48:00.000Z","key":1486849680000,"doc_count":7},{"key_as_string":"2017-02-11T21:49:00.000Z","key":1486849740000,"doc_count":8},{"key_as_string":"2017-02-11T21:50:00.000Z","key":1486849800000,"doc_count":12},{"key_as_string":"2017-02-11T21:51:00.000Z","key":1486849860000,"doc_count":8},{"key_as_string":"2017-02-11T21:52:00.000Z","key":1486849920000,"doc_count":7},{"key_as_string":"2017-02-11T21:53:00.000Z","key":1486849980000,"doc_count":15},{"key_as_string":"2017-02-11T21:54:00.000Z","key":1486850040000,"doc_count":14},{"key_as_string":"2017-02-11T21:55:00.000Z","key":1486850100000,"doc_count":9},{"key_as_string":"2017-02-11T21:56:00.000Z","key":1486850160000,"doc_count":9},{"key_as_string":"2017-02-11T21:57:00.000Z","key":1486850220000,"doc_count":9},{"key_as_string":"2017-02-11T21:58:00.000Z","key":1486850280000,"doc_count":13},{"key_as_string":"2017-02-11T21:59:00.000Z","key":1486850340000,"doc_count":13},{"key_as_string":"2017-02-11T22:00:00.000Z","key":1486850400000,"doc_count":11},{"key_as_string":"2017-02-11T22:01:00.000Z","key":1486850460000,"doc_count":12},{"key_as_string":"2017-02-11T22:02:00.000Z","key":1486850520000,"doc_count":12},{"key_as_string":"2017-02-11T22:03:00.000Z","key":1486850580000,"doc_count":11},{"key_as_string":"2017-02-11T22:04:00.000Z","key":1486850640000,"doc_count":7},{"key_as_string":"2017-02-11T22:05:00.000Z","key":1486850700000,"doc_count":9},{"key_as_string":"2017-02-11T22:06:00.000Z","key":1486850760000,"doc_count":12},{"key_as_string":"2017-02-11T22:07:00.000Z","key":1486850820000,"doc_count":13},{"key_as_string":"2017-02-11T22:08:00.000Z","key":1486850880000,"doc_count":11},{"key_as_string":"2017-02-11T22:09:00.000Z","key":1486850940000,"doc_count":8},{"key_as_string":"2017-02-11T22:10:00.000Z","key":1486851000000,"doc_count":6},{"key_as_string":"2017-02-11T22:11:00.000Z","key":1486851060000,"doc_count":9},{"key_as_string":"2017-02-11T22:12:00.000Z","key":1486851120000,"doc_count":15},{"key_as_string":"2017-02-11T22:13:00.000Z","key":1486851180000,"doc_count":12},{"key_as_string":"2017-02-11T22:14:00.000Z","key":1486851240000,"doc_count":12},{"key_as_string":"2017-02-11T22:15:00.000Z","key":1486851300000,"doc_count":9},{"key_as_string":"2017-02-11T22:16:00.000Z","key":1486851360000,"doc_count":11},{"key_as_string":"2017-02-11T22:17:00.000Z","key":1486851420000,"doc_count":9},{"key_as_string":"2017-02-11T22:18:00.000Z","key":1486851480000,"doc_count":13},{"key_as_string":"2017-02-11T22:19:00.000Z","key":1486851540000,"doc_count":10},{"key_as_string":"2017-02-11T22:20:00.000Z","key":1486851600000,"doc_count":16},{"key_as_string":"2017-02-11T22:21:00.000Z","key":1486851660000,"doc_count":10},{"key_as_string":"2017-02-11T22:22:00.000Z","key":1486851720000,"doc_count":7},{"key_as_string":"2017-02-11T22:23:00.000Z","key":1486851780000,"doc_count":8},{"key_as_string":"2017-02-11T22:24:00.000Z","key":1486851840000,"doc_count":13},{"key_as_string":"2017-02-11T22:25:00.000Z","key":1486851900000,"doc_count":11},{"key_as_string":"2017-02-11T22:26:00.000Z","key":1486851960000,"doc_count":11},{"key_as_string":"2017-02-11T22:27:00.000Z","key":1486852020000,"doc_count":15},{"key_as_string":"2017-02-11T22:28:00.000Z","key":1486852080000,"doc_count":10},{"key_as_string":"2017-02-11T22:29:00.000Z","key":1486852140000,"doc_count":13},{"key_as_string":"2017-02-11T22:30:00.000Z","key":1486852200000,"doc_count":3},{"key_as_string":"2017-02-11T22:31:00.000Z","key":1486852260000,"doc_count":16},{"key_as_string":"2017-02-11T22:32:00.000Z","key":1486852320000,"doc_count":8},{"key_as_string":"2017-02-11T22:33:00.000Z","key":1486852380000,"doc_count":13},{"key_as_string":"2017-02-11T22:34:00.000Z","key":1486852440000,"doc_count":10},{"key_as_string":"2017-02-11T22:35:00.000Z","key":1486852500000,"doc_count":10},{"key_as_string":"2017-02-11T22:36:00.000Z","key":1486852560000,"doc_count":15},{"key_as_string":"2017-02-11T22:37:00.000Z","key":1486852620000,"doc_count":10},{"key_as_string":"2017-02-11T22:38:00.000Z","key":1486852680000,"doc_count":9},{"key_as_string":"2017-02-11T22:39:00.000Z","key":1486852740000,"doc_count":11},{"key_as_string":"2017-02-11T22:40:00.000Z","key":1486852800000,"doc_count":11},{"key_as_string":"2017-02-11T22:41:00.000Z","key":1486852860000,"doc_count":8},{"key_as_string":"2017-02-11T22:42:00.000Z","key":1486852920000,"doc_count":10},{"key_as_string":"2017-02-11T22:43:00.000Z","key":1486852980000,"doc_count":12},{"key_as_string":"2017-02-11T22:44:00.000Z","key":1486853040000,"doc_count":8},{"key_as_string":"2017-02-11T22:45:00.000Z","key":1486853100000,"doc_count":14},{"key_as_string":"2017-02-11T22:46:00.000Z","key":1486853160000,"doc_count":9},{"key_as_string":"2017-02-11T22:47:00.000Z","key":1486853220000,"doc_count":10},{"key_as_string":"2017-02-11T22:48:00.000Z","key":1486853280000,"doc_count":12},{"key_as_string":"2017-02-11T22:49:00.000Z","key":1486853340000,"doc_count":13},{"key_as_string":"2017-02-11T22:50:00.000Z","key":1486853400000,"doc_count":13},{"key_as_string":"2017-02-11T22:51:00.000Z","key":1486853460000,"doc_count":5},{"key_as_string":"2017-02-11T22:52:00.000Z","key":1486853520000,"doc_count":10},{"key_as_string":"2017-02-11T22:53:00.000Z","key":1486853580000,"doc_count":8},{"key_as_string":"2017-02-11T22:54:00.000Z","key":1486853640000,"doc_count":12},{"key_as_string":"2017-02-11T22:55:00.000Z","key":1486853700000,"doc_count":6},{"key_as_string":"2017-02-11T22:56:00.000Z","key":1486853760000,"doc_count":15},{"key_as_string":"2017-02-11T22:57:00.000Z","key":1486853820000,"doc_count":8},{"key_as_string":"2017-02-11T22:58:00.000Z","key":1486853880000,"doc_count":11},{"key_as_string":"2017-02-11T22:59:00.000Z","key":1486853940000,"doc_count":10},{"key_as_string":"2017-02-11T23:00:00.000Z","key":1486854000000,"doc_count":8},{"key_as_string":"2017-02-11T23:01:00.000Z","key":1486854060000,"doc_count":9},{"key_as_string":"2017-02-11T23:02:00.000Z","key":1486854120000,"doc_count":11},{"key_as_string":"2017-02-11T23:03:00.000Z","key":1486854180000,"doc_count":15},{"key_as_string":"2017-02-11T23:04:00.000Z","key":1486854240000,"doc_count":9},{"key_as_string":"2017-02-11T23:05:00.000Z","key":1486854300000,"doc_count":14},{"key_as_string":"2017-02-11T23:06:00.000Z","key":1486854360000,"doc_count":8},{"key_as_string":"2017-02-11T23:07:00.000Z","key":1486854420000,"doc_count":10},{"key_as_string":"2017-02-11T23:08:00.000Z","key":1486854480000,"doc_count":8},{"key_as_string":"2017-02-11T23:09:00.000Z","key":1486854540000,"doc_count":13},{"key_as_string":"2017-02-11T23:10:00.000Z","key":1486854600000,"doc_count":11},{"key_as_string":"2017-02-11T23:11:00.000Z","key":1486854660000,"doc_count":12},{"key_as_string":"2017-02-11T23:12:00.000Z","key":1486854720000,"doc_count":11},{"key_as_string":"2017-02-11T23:13:00.000Z","key":1486854780000,"doc_count":6},{"key_as_string":"2017-02-11T23:14:00.000Z","key":1486854840000,"doc_count":14},{"key_as_string":"2017-02-11T23:15:00.000Z","key":1486854900000,"doc_count":14},{"key_as_string":"2017-02-11T23:16:00.000Z","key":1486854960000,"doc_count":14},{"key_as_string":"2017-02-11T23:17:00.000Z","key":1486855020000,"doc_count":11},{"key_as_string":"2017-02-11T23:18:00.000Z","key":1486855080000,"doc_count":9},{"key_as_string":"2017-02-11T23:19:00.000Z","key":1486855140000,"doc_count":10},{"key_as_string":"2017-02-11T23:20:00.000Z","key":1486855200000,"doc_count":8},{"key_as_string":"2017-02-11T23:21:00.000Z","key":1486855260000,"doc_count":13},{"key_as_string":"2017-02-11T23:22:00.000Z","key":1486855320000,"doc_count":12},{"key_as_string":"2017-02-11T23:23:00.000Z","key":1486855380000,"doc_count":10},{"key_as_string":"2017-02-11T23:24:00.000Z","key":1486855440000,"doc_count":13},{"key_as_string":"2017-02-11T23:25:00.000Z","key":1486855500000,"doc_count":11},{"key_as_string":"2017-02-11T23:26:00.000Z","key":1486855560000,"doc_count":11},{"key_as_string":"2017-02-11T23:27:00.000Z","key":1486855620000,"doc_count":9},{"key_as_string":"2017-02-11T23:28:00.000Z","key":1486855680000,"doc_count":13},{"key_as_string":"2017-02-11T23:29:00.000Z","key":1486855740000,"doc_count":3},{"key_as_string":"2017-02-11T23:30:00.000Z","key":1486855800000,"doc_count":10},{"key_as_string":"2017-02-11T23:31:00.000Z","key":1486855860000,"doc_count":9},{"key_as_string":"2017-02-11T23:32:00.000Z","key":1486855920000,"doc_count":7},{"key_as_string":"2017-02-11T23:33:00.000Z","key":1486855980000,"doc_count":15},{"key_as_string":"2017-02-11T23:34:00.000Z","key":1486856040000,"doc_count":12},{"key_as_string":"2017-02-11T23:35:00.000Z","key":1486856100000,"doc_count":17},{"key_as_string":"2017-02-11T23:36:00.000Z","key":1486856160000,"doc_count":9},{"key_as_string":"2017-02-11T23:37:00.000Z","key":1486856220000,"doc_count":8},{"key_as_string":"2017-02-11T23:38:00.000Z","key":1486856280000,"doc_count":9},{"key_as_string":"2017-02-11T23:39:00.000Z","key":1486856340000,"doc_count":14},{"key_as_string":"2017-02-11T23:40:00.000Z","key":1486856400000,"doc_count":9},{"key_as_string":"2017-02-11T23:41:00.000Z","key":1486856460000,"doc_count":7},{"key_as_string":"2017-02-11T23:42:00.000Z","key":1486856520000,"doc_count":10},{"key_as_string":"2017-02-11T23:43:00.000Z","key":1486856580000,"doc_count":7},{"key_as_string":"2017-02-11T23:44:00.000Z","key":1486856640000,"doc_count":12},{"key_as_string":"2017-02-11T23:45:00.000Z","key":1486856700000,"doc_count":10},{"key_as_string":"2017-02-11T23:46:00.000Z","key":1486856760000,"doc_count":10},{"key_as_string":"2017-02-11T23:47:00.000Z","key":1486856820000,"doc_count":9},{"key_as_string":"2017-02-11T23:48:00.000Z","key":1486856880000,"doc_count":7},{"key_as_string":"2017-02-11T23:49:00.000Z","key":1486856940000,"doc_count":9},{"key_as_string":"2017-02-11T23:50:00.000Z","key":1486857000000,"doc_count":11},{"key_as_string":"2017-02-11T23:51:00.000Z","key":1486857060000,"doc_count":10},{"key_as_string":"2017-02-11T23:52:00.000Z","key":1486857120000,"doc_count":11},{"key_as_string":"2017-02-11T23:53:00.000Z","key":1486857180000,"doc_count":10},{"key_as_string":"2017-02-11T23:54:00.000Z","key":1486857240000,"doc_count":15},{"key_as_string":"2017-02-11T23:55:00.000Z","key":1486857300000,"doc_count":5},{"key_as_string":"2017-02-11T23:56:00.000Z","key":1486857360000,"doc_count":7},{"key_as_string":"2017-02-11T23:57:00.000Z","key":1486857420000,"doc_count":14},{"key_as_string":"2017-02-11T23:58:00.000Z","key":1486857480000,"doc_count":10},{"key_as_string":"2017-02-11T23:59:00.000Z","key":1486857540000,"doc_count":9}]}}} +{"took":41,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value": 86274,"relation":"eq"},"max_score":0,"hits":[]},"aggregations":{"non_empty_buckets":{"buckets":[{"key_as_string":"2017-02-07T00:00:00.000Z","key":1486425600000,"doc_count":23},{"key_as_string":"2017-02-07T00:01:00.000Z","key":1486425660000,"doc_count":10},{"key_as_string":"2017-02-07T00:02:00.000Z","key":1486425720000,"doc_count":6},{"key_as_string":"2017-02-07T00:03:00.000Z","key":1486425780000,"doc_count":11},{"key_as_string":"2017-02-07T00:04:00.000Z","key":1486425840000,"doc_count":11},{"key_as_string":"2017-02-07T00:05:00.000Z","key":1486425900000,"doc_count":11},{"key_as_string":"2017-02-07T00:06:00.000Z","key":1486425960000,"doc_count":11},{"key_as_string":"2017-02-07T00:07:00.000Z","key":1486426020000,"doc_count":11},{"key_as_string":"2017-02-07T00:08:00.000Z","key":1486426080000,"doc_count":8},{"key_as_string":"2017-02-07T00:09:00.000Z","key":1486426140000,"doc_count":11},{"key_as_string":"2017-02-07T00:10:00.000Z","key":1486426200000,"doc_count":10},{"key_as_string":"2017-02-07T00:11:00.000Z","key":1486426260000,"doc_count":9},{"key_as_string":"2017-02-07T00:12:00.000Z","key":1486426320000,"doc_count":12},{"key_as_string":"2017-02-07T00:13:00.000Z","key":1486426380000,"doc_count":9},{"key_as_string":"2017-02-07T00:14:00.000Z","key":1486426440000,"doc_count":8},{"key_as_string":"2017-02-07T00:15:00.000Z","key":1486426500000,"doc_count":14},{"key_as_string":"2017-02-07T00:16:00.000Z","key":1486426560000,"doc_count":9},{"key_as_string":"2017-02-07T00:17:00.000Z","key":1486426620000,"doc_count":8},{"key_as_string":"2017-02-07T00:18:00.000Z","key":1486426680000,"doc_count":13},{"key_as_string":"2017-02-07T00:19:00.000Z","key":1486426740000,"doc_count":9},{"key_as_string":"2017-02-07T00:20:00.000Z","key":1486426800000,"doc_count":11},{"key_as_string":"2017-02-07T00:21:00.000Z","key":1486426860000,"doc_count":9},{"key_as_string":"2017-02-07T00:22:00.000Z","key":1486426920000,"doc_count":9},{"key_as_string":"2017-02-07T00:23:00.000Z","key":1486426980000,"doc_count":12},{"key_as_string":"2017-02-07T00:24:00.000Z","key":1486427040000,"doc_count":11},{"key_as_string":"2017-02-07T00:25:00.000Z","key":1486427100000,"doc_count":11},{"key_as_string":"2017-02-07T00:26:00.000Z","key":1486427160000,"doc_count":8},{"key_as_string":"2017-02-07T00:27:00.000Z","key":1486427220000,"doc_count":12},{"key_as_string":"2017-02-07T00:28:00.000Z","key":1486427280000,"doc_count":7},{"key_as_string":"2017-02-07T00:29:00.000Z","key":1486427340000,"doc_count":12},{"key_as_string":"2017-02-07T00:30:00.000Z","key":1486427400000,"doc_count":13},{"key_as_string":"2017-02-07T00:31:00.000Z","key":1486427460000,"doc_count":10},{"key_as_string":"2017-02-07T00:32:00.000Z","key":1486427520000,"doc_count":13},{"key_as_string":"2017-02-07T00:33:00.000Z","key":1486427580000,"doc_count":13},{"key_as_string":"2017-02-07T00:34:00.000Z","key":1486427640000,"doc_count":11},{"key_as_string":"2017-02-07T00:35:00.000Z","key":1486427700000,"doc_count":9},{"key_as_string":"2017-02-07T00:36:00.000Z","key":1486427760000,"doc_count":11},{"key_as_string":"2017-02-07T00:37:00.000Z","key":1486427820000,"doc_count":15},{"key_as_string":"2017-02-07T00:38:00.000Z","key":1486427880000,"doc_count":7},{"key_as_string":"2017-02-07T00:39:00.000Z","key":1486427940000,"doc_count":13},{"key_as_string":"2017-02-07T00:40:00.000Z","key":1486428000000,"doc_count":9},{"key_as_string":"2017-02-07T00:41:00.000Z","key":1486428060000,"doc_count":12},{"key_as_string":"2017-02-07T00:42:00.000Z","key":1486428120000,"doc_count":16},{"key_as_string":"2017-02-07T00:43:00.000Z","key":1486428180000,"doc_count":7},{"key_as_string":"2017-02-07T00:44:00.000Z","key":1486428240000,"doc_count":6},{"key_as_string":"2017-02-07T00:45:00.000Z","key":1486428300000,"doc_count":12},{"key_as_string":"2017-02-07T00:46:00.000Z","key":1486428360000,"doc_count":11},{"key_as_string":"2017-02-07T00:47:00.000Z","key":1486428420000,"doc_count":12},{"key_as_string":"2017-02-07T00:48:00.000Z","key":1486428480000,"doc_count":13},{"key_as_string":"2017-02-07T00:49:00.000Z","key":1486428540000,"doc_count":10},{"key_as_string":"2017-02-07T00:50:00.000Z","key":1486428600000,"doc_count":13},{"key_as_string":"2017-02-07T00:51:00.000Z","key":1486428660000,"doc_count":7},{"key_as_string":"2017-02-07T00:52:00.000Z","key":1486428720000,"doc_count":11},{"key_as_string":"2017-02-07T00:53:00.000Z","key":1486428780000,"doc_count":12},{"key_as_string":"2017-02-07T00:54:00.000Z","key":1486428840000,"doc_count":16},{"key_as_string":"2017-02-07T00:55:00.000Z","key":1486428900000,"doc_count":8},{"key_as_string":"2017-02-07T00:56:00.000Z","key":1486428960000,"doc_count":12},{"key_as_string":"2017-02-07T00:57:00.000Z","key":1486429020000,"doc_count":12},{"key_as_string":"2017-02-07T00:58:00.000Z","key":1486429080000,"doc_count":8},{"key_as_string":"2017-02-07T00:59:00.000Z","key":1486429140000,"doc_count":11},{"key_as_string":"2017-02-07T01:00:00.000Z","key":1486429200000,"doc_count":8},{"key_as_string":"2017-02-07T01:01:00.000Z","key":1486429260000,"doc_count":7},{"key_as_string":"2017-02-07T01:02:00.000Z","key":1486429320000,"doc_count":6},{"key_as_string":"2017-02-07T01:03:00.000Z","key":1486429380000,"doc_count":15},{"key_as_string":"2017-02-07T01:04:00.000Z","key":1486429440000,"doc_count":12},{"key_as_string":"2017-02-07T01:05:00.000Z","key":1486429500000,"doc_count":5},{"key_as_string":"2017-02-07T01:06:00.000Z","key":1486429560000,"doc_count":11},{"key_as_string":"2017-02-07T01:07:00.000Z","key":1486429620000,"doc_count":15},{"key_as_string":"2017-02-07T01:08:00.000Z","key":1486429680000,"doc_count":8},{"key_as_string":"2017-02-07T01:09:00.000Z","key":1486429740000,"doc_count":14},{"key_as_string":"2017-02-07T01:10:00.000Z","key":1486429800000,"doc_count":8},{"key_as_string":"2017-02-07T01:11:00.000Z","key":1486429860000,"doc_count":6},{"key_as_string":"2017-02-07T01:12:00.000Z","key":1486429920000,"doc_count":16},{"key_as_string":"2017-02-07T01:13:00.000Z","key":1486429980000,"doc_count":10},{"key_as_string":"2017-02-07T01:14:00.000Z","key":1486430040000,"doc_count":8},{"key_as_string":"2017-02-07T01:15:00.000Z","key":1486430100000,"doc_count":12},{"key_as_string":"2017-02-07T01:16:00.000Z","key":1486430160000,"doc_count":13},{"key_as_string":"2017-02-07T01:17:00.000Z","key":1486430220000,"doc_count":10},{"key_as_string":"2017-02-07T01:18:00.000Z","key":1486430280000,"doc_count":11},{"key_as_string":"2017-02-07T01:19:00.000Z","key":1486430340000,"doc_count":12},{"key_as_string":"2017-02-07T01:20:00.000Z","key":1486430400000,"doc_count":12},{"key_as_string":"2017-02-07T01:21:00.000Z","key":1486430460000,"doc_count":12},{"key_as_string":"2017-02-07T01:22:00.000Z","key":1486430520000,"doc_count":7},{"key_as_string":"2017-02-07T01:23:00.000Z","key":1486430580000,"doc_count":13},{"key_as_string":"2017-02-07T01:24:00.000Z","key":1486430640000,"doc_count":5},{"key_as_string":"2017-02-07T01:25:00.000Z","key":1486430700000,"doc_count":11},{"key_as_string":"2017-02-07T01:26:00.000Z","key":1486430760000,"doc_count":11},{"key_as_string":"2017-02-07T01:27:00.000Z","key":1486430820000,"doc_count":9},{"key_as_string":"2017-02-07T01:28:00.000Z","key":1486430880000,"doc_count":11},{"key_as_string":"2017-02-07T01:29:00.000Z","key":1486430940000,"doc_count":10},{"key_as_string":"2017-02-07T01:30:00.000Z","key":1486431000000,"doc_count":10},{"key_as_string":"2017-02-07T01:31:00.000Z","key":1486431060000,"doc_count":12},{"key_as_string":"2017-02-07T01:32:00.000Z","key":1486431120000,"doc_count":12},{"key_as_string":"2017-02-07T01:33:00.000Z","key":1486431180000,"doc_count":10},{"key_as_string":"2017-02-07T01:34:00.000Z","key":1486431240000,"doc_count":10},{"key_as_string":"2017-02-07T01:35:00.000Z","key":1486431300000,"doc_count":10},{"key_as_string":"2017-02-07T01:36:00.000Z","key":1486431360000,"doc_count":14},{"key_as_string":"2017-02-07T01:37:00.000Z","key":1486431420000,"doc_count":9},{"key_as_string":"2017-02-07T01:38:00.000Z","key":1486431480000,"doc_count":8},{"key_as_string":"2017-02-07T01:39:00.000Z","key":1486431540000,"doc_count":16},{"key_as_string":"2017-02-07T01:40:00.000Z","key":1486431600000,"doc_count":8},{"key_as_string":"2017-02-07T01:41:00.000Z","key":1486431660000,"doc_count":11},{"key_as_string":"2017-02-07T01:42:00.000Z","key":1486431720000,"doc_count":12},{"key_as_string":"2017-02-07T01:43:00.000Z","key":1486431780000,"doc_count":10},{"key_as_string":"2017-02-07T01:44:00.000Z","key":1486431840000,"doc_count":16},{"key_as_string":"2017-02-07T01:45:00.000Z","key":1486431900000,"doc_count":10},{"key_as_string":"2017-02-07T01:46:00.000Z","key":1486431960000,"doc_count":7},{"key_as_string":"2017-02-07T01:47:00.000Z","key":1486432020000,"doc_count":10},{"key_as_string":"2017-02-07T01:48:00.000Z","key":1486432080000,"doc_count":5},{"key_as_string":"2017-02-07T01:49:00.000Z","key":1486432140000,"doc_count":11},{"key_as_string":"2017-02-07T01:50:00.000Z","key":1486432200000,"doc_count":7},{"key_as_string":"2017-02-07T01:51:00.000Z","key":1486432260000,"doc_count":16},{"key_as_string":"2017-02-07T01:52:00.000Z","key":1486432320000,"doc_count":8},{"key_as_string":"2017-02-07T01:53:00.000Z","key":1486432380000,"doc_count":14},{"key_as_string":"2017-02-07T01:54:00.000Z","key":1486432440000,"doc_count":10},{"key_as_string":"2017-02-07T01:55:00.000Z","key":1486432500000,"doc_count":8},{"key_as_string":"2017-02-07T01:56:00.000Z","key":1486432560000,"doc_count":12},{"key_as_string":"2017-02-07T01:57:00.000Z","key":1486432620000,"doc_count":14},{"key_as_string":"2017-02-07T01:58:00.000Z","key":1486432680000,"doc_count":9},{"key_as_string":"2017-02-07T01:59:00.000Z","key":1486432740000,"doc_count":10},{"key_as_string":"2017-02-07T02:00:00.000Z","key":1486432800000,"doc_count":9},{"key_as_string":"2017-02-07T02:01:00.000Z","key":1486432860000,"doc_count":14},{"key_as_string":"2017-02-07T02:02:00.000Z","key":1486432920000,"doc_count":10},{"key_as_string":"2017-02-07T02:03:00.000Z","key":1486432980000,"doc_count":7},{"key_as_string":"2017-02-07T02:04:00.000Z","key":1486433040000,"doc_count":8},{"key_as_string":"2017-02-07T02:05:00.000Z","key":1486433100000,"doc_count":8},{"key_as_string":"2017-02-07T02:06:00.000Z","key":1486433160000,"doc_count":14},{"key_as_string":"2017-02-07T02:07:00.000Z","key":1486433220000,"doc_count":10},{"key_as_string":"2017-02-07T02:08:00.000Z","key":1486433280000,"doc_count":7},{"key_as_string":"2017-02-07T02:09:00.000Z","key":1486433340000,"doc_count":11},{"key_as_string":"2017-02-07T02:10:00.000Z","key":1486433400000,"doc_count":6},{"key_as_string":"2017-02-07T02:11:00.000Z","key":1486433460000,"doc_count":8},{"key_as_string":"2017-02-07T02:12:00.000Z","key":1486433520000,"doc_count":7},{"key_as_string":"2017-02-07T02:13:00.000Z","key":1486433580000,"doc_count":15},{"key_as_string":"2017-02-07T02:14:00.000Z","key":1486433640000,"doc_count":8},{"key_as_string":"2017-02-07T02:15:00.000Z","key":1486433700000,"doc_count":14},{"key_as_string":"2017-02-07T02:16:00.000Z","key":1486433760000,"doc_count":5},{"key_as_string":"2017-02-07T02:17:00.000Z","key":1486433820000,"doc_count":9},{"key_as_string":"2017-02-07T02:18:00.000Z","key":1486433880000,"doc_count":7},{"key_as_string":"2017-02-07T02:19:00.000Z","key":1486433940000,"doc_count":8},{"key_as_string":"2017-02-07T02:20:00.000Z","key":1486434000000,"doc_count":13},{"key_as_string":"2017-02-07T02:21:00.000Z","key":1486434060000,"doc_count":13},{"key_as_string":"2017-02-07T02:22:00.000Z","key":1486434120000,"doc_count":13},{"key_as_string":"2017-02-07T02:23:00.000Z","key":1486434180000,"doc_count":8},{"key_as_string":"2017-02-07T02:24:00.000Z","key":1486434240000,"doc_count":11},{"key_as_string":"2017-02-07T02:25:00.000Z","key":1486434300000,"doc_count":9},{"key_as_string":"2017-02-07T02:26:00.000Z","key":1486434360000,"doc_count":11},{"key_as_string":"2017-02-07T02:27:00.000Z","key":1486434420000,"doc_count":14},{"key_as_string":"2017-02-07T02:28:00.000Z","key":1486434480000,"doc_count":9},{"key_as_string":"2017-02-07T02:29:00.000Z","key":1486434540000,"doc_count":15},{"key_as_string":"2017-02-07T02:30:00.000Z","key":1486434600000,"doc_count":13},{"key_as_string":"2017-02-07T02:31:00.000Z","key":1486434660000,"doc_count":6},{"key_as_string":"2017-02-07T02:32:00.000Z","key":1486434720000,"doc_count":16},{"key_as_string":"2017-02-07T02:33:00.000Z","key":1486434780000,"doc_count":11},{"key_as_string":"2017-02-07T02:34:00.000Z","key":1486434840000,"doc_count":9},{"key_as_string":"2017-02-07T02:35:00.000Z","key":1486434900000,"doc_count":11},{"key_as_string":"2017-02-07T02:36:00.000Z","key":1486434960000,"doc_count":15},{"key_as_string":"2017-02-07T02:37:00.000Z","key":1486435020000,"doc_count":6},{"key_as_string":"2017-02-07T02:38:00.000Z","key":1486435080000,"doc_count":11},{"key_as_string":"2017-02-07T02:39:00.000Z","key":1486435140000,"doc_count":5},{"key_as_string":"2017-02-07T02:40:00.000Z","key":1486435200000,"doc_count":14},{"key_as_string":"2017-02-07T02:41:00.000Z","key":1486435260000,"doc_count":9},{"key_as_string":"2017-02-07T02:42:00.000Z","key":1486435320000,"doc_count":9},{"key_as_string":"2017-02-07T02:43:00.000Z","key":1486435380000,"doc_count":9},{"key_as_string":"2017-02-07T02:44:00.000Z","key":1486435440000,"doc_count":16},{"key_as_string":"2017-02-07T02:45:00.000Z","key":1486435500000,"doc_count":10},{"key_as_string":"2017-02-07T02:46:00.000Z","key":1486435560000,"doc_count":8},{"key_as_string":"2017-02-07T02:47:00.000Z","key":1486435620000,"doc_count":10},{"key_as_string":"2017-02-07T02:48:00.000Z","key":1486435680000,"doc_count":11},{"key_as_string":"2017-02-07T02:49:00.000Z","key":1486435740000,"doc_count":13},{"key_as_string":"2017-02-07T02:50:00.000Z","key":1486435800000,"doc_count":9},{"key_as_string":"2017-02-07T02:51:00.000Z","key":1486435860000,"doc_count":14},{"key_as_string":"2017-02-07T02:52:00.000Z","key":1486435920000,"doc_count":17},{"key_as_string":"2017-02-07T02:53:00.000Z","key":1486435980000,"doc_count":10},{"key_as_string":"2017-02-07T02:54:00.000Z","key":1486436040000,"doc_count":8},{"key_as_string":"2017-02-07T02:55:00.000Z","key":1486436100000,"doc_count":10},{"key_as_string":"2017-02-07T02:56:00.000Z","key":1486436160000,"doc_count":9},{"key_as_string":"2017-02-07T02:57:00.000Z","key":1486436220000,"doc_count":9},{"key_as_string":"2017-02-07T02:58:00.000Z","key":1486436280000,"doc_count":12},{"key_as_string":"2017-02-07T02:59:00.000Z","key":1486436340000,"doc_count":8},{"key_as_string":"2017-02-07T03:00:00.000Z","key":1486436400000,"doc_count":11},{"key_as_string":"2017-02-07T03:01:00.000Z","key":1486436460000,"doc_count":12},{"key_as_string":"2017-02-07T03:02:00.000Z","key":1486436520000,"doc_count":7},{"key_as_string":"2017-02-07T03:03:00.000Z","key":1486436580000,"doc_count":16},{"key_as_string":"2017-02-07T03:04:00.000Z","key":1486436640000,"doc_count":13},{"key_as_string":"2017-02-07T03:05:00.000Z","key":1486436700000,"doc_count":10},{"key_as_string":"2017-02-07T03:06:00.000Z","key":1486436760000,"doc_count":11},{"key_as_string":"2017-02-07T03:07:00.000Z","key":1486436820000,"doc_count":6},{"key_as_string":"2017-02-07T03:08:00.000Z","key":1486436880000,"doc_count":9},{"key_as_string":"2017-02-07T03:09:00.000Z","key":1486436940000,"doc_count":7},{"key_as_string":"2017-02-07T03:10:00.000Z","key":1486437000000,"doc_count":14},{"key_as_string":"2017-02-07T03:11:00.000Z","key":1486437060000,"doc_count":9},{"key_as_string":"2017-02-07T03:12:00.000Z","key":1486437120000,"doc_count":12},{"key_as_string":"2017-02-07T03:13:00.000Z","key":1486437180000,"doc_count":10},{"key_as_string":"2017-02-07T03:14:00.000Z","key":1486437240000,"doc_count":9},{"key_as_string":"2017-02-07T03:15:00.000Z","key":1486437300000,"doc_count":12},{"key_as_string":"2017-02-07T03:16:00.000Z","key":1486437360000,"doc_count":12},{"key_as_string":"2017-02-07T03:17:00.000Z","key":1486437420000,"doc_count":8},{"key_as_string":"2017-02-07T03:18:00.000Z","key":1486437480000,"doc_count":13},{"key_as_string":"2017-02-07T03:19:00.000Z","key":1486437540000,"doc_count":12},{"key_as_string":"2017-02-07T03:20:00.000Z","key":1486437600000,"doc_count":8},{"key_as_string":"2017-02-07T03:21:00.000Z","key":1486437660000,"doc_count":20},{"key_as_string":"2017-02-07T03:22:00.000Z","key":1486437720000,"doc_count":8},{"key_as_string":"2017-02-07T03:23:00.000Z","key":1486437780000,"doc_count":9},{"key_as_string":"2017-02-07T03:24:00.000Z","key":1486437840000,"doc_count":12},{"key_as_string":"2017-02-07T03:25:00.000Z","key":1486437900000,"doc_count":9},{"key_as_string":"2017-02-07T03:26:00.000Z","key":1486437960000,"doc_count":9},{"key_as_string":"2017-02-07T03:27:00.000Z","key":1486438020000,"doc_count":12},{"key_as_string":"2017-02-07T03:28:00.000Z","key":1486438080000,"doc_count":12},{"key_as_string":"2017-02-07T03:29:00.000Z","key":1486438140000,"doc_count":7},{"key_as_string":"2017-02-07T03:30:00.000Z","key":1486438200000,"doc_count":12},{"key_as_string":"2017-02-07T03:31:00.000Z","key":1486438260000,"doc_count":15},{"key_as_string":"2017-02-07T03:32:00.000Z","key":1486438320000,"doc_count":12},{"key_as_string":"2017-02-07T03:33:00.000Z","key":1486438380000,"doc_count":9},{"key_as_string":"2017-02-07T03:34:00.000Z","key":1486438440000,"doc_count":9},{"key_as_string":"2017-02-07T03:35:00.000Z","key":1486438500000,"doc_count":12},{"key_as_string":"2017-02-07T03:36:00.000Z","key":1486438560000,"doc_count":8},{"key_as_string":"2017-02-07T03:37:00.000Z","key":1486438620000,"doc_count":12},{"key_as_string":"2017-02-07T03:38:00.000Z","key":1486438680000,"doc_count":13},{"key_as_string":"2017-02-07T03:39:00.000Z","key":1486438740000,"doc_count":10},{"key_as_string":"2017-02-07T03:40:00.000Z","key":1486438800000,"doc_count":8},{"key_as_string":"2017-02-07T03:41:00.000Z","key":1486438860000,"doc_count":10},{"key_as_string":"2017-02-07T03:42:00.000Z","key":1486438920000,"doc_count":12},{"key_as_string":"2017-02-07T03:43:00.000Z","key":1486438980000,"doc_count":9},{"key_as_string":"2017-02-07T03:44:00.000Z","key":1486439040000,"doc_count":13},{"key_as_string":"2017-02-07T03:45:00.000Z","key":1486439100000,"doc_count":11},{"key_as_string":"2017-02-07T03:46:00.000Z","key":1486439160000,"doc_count":16},{"key_as_string":"2017-02-07T03:47:00.000Z","key":1486439220000,"doc_count":10},{"key_as_string":"2017-02-07T03:48:00.000Z","key":1486439280000,"doc_count":10},{"key_as_string":"2017-02-07T03:49:00.000Z","key":1486439340000,"doc_count":10},{"key_as_string":"2017-02-07T03:50:00.000Z","key":1486439400000,"doc_count":10},{"key_as_string":"2017-02-07T03:51:00.000Z","key":1486439460000,"doc_count":8},{"key_as_string":"2017-02-07T03:52:00.000Z","key":1486439520000,"doc_count":8},{"key_as_string":"2017-02-07T03:53:00.000Z","key":1486439580000,"doc_count":14},{"key_as_string":"2017-02-07T03:54:00.000Z","key":1486439640000,"doc_count":12},{"key_as_string":"2017-02-07T03:55:00.000Z","key":1486439700000,"doc_count":9},{"key_as_string":"2017-02-07T03:56:00.000Z","key":1486439760000,"doc_count":10},{"key_as_string":"2017-02-07T03:57:00.000Z","key":1486439820000,"doc_count":15},{"key_as_string":"2017-02-07T03:58:00.000Z","key":1486439880000,"doc_count":8},{"key_as_string":"2017-02-07T03:59:00.000Z","key":1486439940000,"doc_count":13},{"key_as_string":"2017-02-07T04:00:00.000Z","key":1486440000000,"doc_count":9},{"key_as_string":"2017-02-07T04:01:00.000Z","key":1486440060000,"doc_count":13},{"key_as_string":"2017-02-07T04:02:00.000Z","key":1486440120000,"doc_count":7},{"key_as_string":"2017-02-07T04:03:00.000Z","key":1486440180000,"doc_count":10},{"key_as_string":"2017-02-07T04:04:00.000Z","key":1486440240000,"doc_count":15},{"key_as_string":"2017-02-07T04:05:00.000Z","key":1486440300000,"doc_count":12},{"key_as_string":"2017-02-07T04:06:00.000Z","key":1486440360000,"doc_count":10},{"key_as_string":"2017-02-07T04:07:00.000Z","key":1486440420000,"doc_count":9},{"key_as_string":"2017-02-07T04:08:00.000Z","key":1486440480000,"doc_count":8},{"key_as_string":"2017-02-07T04:09:00.000Z","key":1486440540000,"doc_count":12},{"key_as_string":"2017-02-07T04:10:00.000Z","key":1486440600000,"doc_count":10},{"key_as_string":"2017-02-07T04:11:00.000Z","key":1486440660000,"doc_count":11},{"key_as_string":"2017-02-07T04:12:00.000Z","key":1486440720000,"doc_count":9},{"key_as_string":"2017-02-07T04:13:00.000Z","key":1486440780000,"doc_count":14},{"key_as_string":"2017-02-07T04:14:00.000Z","key":1486440840000,"doc_count":16},{"key_as_string":"2017-02-07T04:15:00.000Z","key":1486440900000,"doc_count":12},{"key_as_string":"2017-02-07T04:16:00.000Z","key":1486440960000,"doc_count":12},{"key_as_string":"2017-02-07T04:17:00.000Z","key":1486441020000,"doc_count":12},{"key_as_string":"2017-02-07T04:18:00.000Z","key":1486441080000,"doc_count":10},{"key_as_string":"2017-02-07T04:19:00.000Z","key":1486441140000,"doc_count":14},{"key_as_string":"2017-02-07T04:20:00.000Z","key":1486441200000,"doc_count":10},{"key_as_string":"2017-02-07T04:21:00.000Z","key":1486441260000,"doc_count":13},{"key_as_string":"2017-02-07T04:22:00.000Z","key":1486441320000,"doc_count":13},{"key_as_string":"2017-02-07T04:23:00.000Z","key":1486441380000,"doc_count":8},{"key_as_string":"2017-02-07T04:24:00.000Z","key":1486441440000,"doc_count":10},{"key_as_string":"2017-02-07T04:25:00.000Z","key":1486441500000,"doc_count":14},{"key_as_string":"2017-02-07T04:26:00.000Z","key":1486441560000,"doc_count":6},{"key_as_string":"2017-02-07T04:27:00.000Z","key":1486441620000,"doc_count":15},{"key_as_string":"2017-02-07T04:28:00.000Z","key":1486441680000,"doc_count":12},{"key_as_string":"2017-02-07T04:29:00.000Z","key":1486441740000,"doc_count":11},{"key_as_string":"2017-02-07T04:30:00.000Z","key":1486441800000,"doc_count":8},{"key_as_string":"2017-02-07T04:31:00.000Z","key":1486441860000,"doc_count":8},{"key_as_string":"2017-02-07T04:32:00.000Z","key":1486441920000,"doc_count":14},{"key_as_string":"2017-02-07T04:33:00.000Z","key":1486441980000,"doc_count":10},{"key_as_string":"2017-02-07T04:34:00.000Z","key":1486442040000,"doc_count":12},{"key_as_string":"2017-02-07T04:35:00.000Z","key":1486442100000,"doc_count":13},{"key_as_string":"2017-02-07T04:36:00.000Z","key":1486442160000,"doc_count":7},{"key_as_string":"2017-02-07T04:37:00.000Z","key":1486442220000,"doc_count":11},{"key_as_string":"2017-02-07T04:38:00.000Z","key":1486442280000,"doc_count":10},{"key_as_string":"2017-02-07T04:39:00.000Z","key":1486442340000,"doc_count":13},{"key_as_string":"2017-02-07T04:40:00.000Z","key":1486442400000,"doc_count":10},{"key_as_string":"2017-02-07T04:41:00.000Z","key":1486442460000,"doc_count":17},{"key_as_string":"2017-02-07T04:42:00.000Z","key":1486442520000,"doc_count":9},{"key_as_string":"2017-02-07T04:43:00.000Z","key":1486442580000,"doc_count":14},{"key_as_string":"2017-02-07T04:44:00.000Z","key":1486442640000,"doc_count":11},{"key_as_string":"2017-02-07T04:45:00.000Z","key":1486442700000,"doc_count":12},{"key_as_string":"2017-02-07T04:46:00.000Z","key":1486442760000,"doc_count":10},{"key_as_string":"2017-02-07T04:47:00.000Z","key":1486442820000,"doc_count":17},{"key_as_string":"2017-02-07T04:48:00.000Z","key":1486442880000,"doc_count":7},{"key_as_string":"2017-02-07T04:49:00.000Z","key":1486442940000,"doc_count":12},{"key_as_string":"2017-02-07T04:50:00.000Z","key":1486443000000,"doc_count":7},{"key_as_string":"2017-02-07T04:51:00.000Z","key":1486443060000,"doc_count":12},{"key_as_string":"2017-02-07T04:52:00.000Z","key":1486443120000,"doc_count":14},{"key_as_string":"2017-02-07T04:53:00.000Z","key":1486443180000,"doc_count":6},{"key_as_string":"2017-02-07T04:54:00.000Z","key":1486443240000,"doc_count":10},{"key_as_string":"2017-02-07T04:55:00.000Z","key":1486443300000,"doc_count":16},{"key_as_string":"2017-02-07T04:56:00.000Z","key":1486443360000,"doc_count":7},{"key_as_string":"2017-02-07T04:57:00.000Z","key":1486443420000,"doc_count":6},{"key_as_string":"2017-02-07T04:58:00.000Z","key":1486443480000,"doc_count":11},{"key_as_string":"2017-02-07T04:59:00.000Z","key":1486443540000,"doc_count":14},{"key_as_string":"2017-02-07T05:00:00.000Z","key":1486443600000,"doc_count":10},{"key_as_string":"2017-02-07T05:01:00.000Z","key":1486443660000,"doc_count":9},{"key_as_string":"2017-02-07T05:02:00.000Z","key":1486443720000,"doc_count":6},{"key_as_string":"2017-02-07T05:03:00.000Z","key":1486443780000,"doc_count":11},{"key_as_string":"2017-02-07T05:04:00.000Z","key":1486443840000,"doc_count":14},{"key_as_string":"2017-02-07T05:05:00.000Z","key":1486443900000,"doc_count":12},{"key_as_string":"2017-02-07T05:06:00.000Z","key":1486443960000,"doc_count":7},{"key_as_string":"2017-02-07T05:07:00.000Z","key":1486444020000,"doc_count":15},{"key_as_string":"2017-02-07T05:08:00.000Z","key":1486444080000,"doc_count":12},{"key_as_string":"2017-02-07T05:09:00.000Z","key":1486444140000,"doc_count":7},{"key_as_string":"2017-02-07T05:10:00.000Z","key":1486444200000,"doc_count":14},{"key_as_string":"2017-02-07T05:11:00.000Z","key":1486444260000,"doc_count":10},{"key_as_string":"2017-02-07T05:12:00.000Z","key":1486444320000,"doc_count":12},{"key_as_string":"2017-02-07T05:13:00.000Z","key":1486444380000,"doc_count":12},{"key_as_string":"2017-02-07T05:14:00.000Z","key":1486444440000,"doc_count":12},{"key_as_string":"2017-02-07T05:15:00.000Z","key":1486444500000,"doc_count":11},{"key_as_string":"2017-02-07T05:16:00.000Z","key":1486444560000,"doc_count":10},{"key_as_string":"2017-02-07T05:17:00.000Z","key":1486444620000,"doc_count":12},{"key_as_string":"2017-02-07T05:18:00.000Z","key":1486444680000,"doc_count":9},{"key_as_string":"2017-02-07T05:19:00.000Z","key":1486444740000,"doc_count":14},{"key_as_string":"2017-02-07T05:20:00.000Z","key":1486444800000,"doc_count":7},{"key_as_string":"2017-02-07T05:21:00.000Z","key":1486444860000,"doc_count":12},{"key_as_string":"2017-02-07T05:22:00.000Z","key":1486444920000,"doc_count":10},{"key_as_string":"2017-02-07T05:23:00.000Z","key":1486444980000,"doc_count":14},{"key_as_string":"2017-02-07T05:24:00.000Z","key":1486445040000,"doc_count":14},{"key_as_string":"2017-02-07T05:25:00.000Z","key":1486445100000,"doc_count":5},{"key_as_string":"2017-02-07T05:26:00.000Z","key":1486445160000,"doc_count":10},{"key_as_string":"2017-02-07T05:27:00.000Z","key":1486445220000,"doc_count":10},{"key_as_string":"2017-02-07T05:28:00.000Z","key":1486445280000,"doc_count":13},{"key_as_string":"2017-02-07T05:29:00.000Z","key":1486445340000,"doc_count":12},{"key_as_string":"2017-02-07T05:30:00.000Z","key":1486445400000,"doc_count":13},{"key_as_string":"2017-02-07T05:31:00.000Z","key":1486445460000,"doc_count":13},{"key_as_string":"2017-02-07T05:32:00.000Z","key":1486445520000,"doc_count":13},{"key_as_string":"2017-02-07T05:33:00.000Z","key":1486445580000,"doc_count":16},{"key_as_string":"2017-02-07T05:34:00.000Z","key":1486445640000,"doc_count":10},{"key_as_string":"2017-02-07T05:35:00.000Z","key":1486445700000,"doc_count":16},{"key_as_string":"2017-02-07T05:36:00.000Z","key":1486445760000,"doc_count":14},{"key_as_string":"2017-02-07T05:37:00.000Z","key":1486445820000,"doc_count":10},{"key_as_string":"2017-02-07T05:38:00.000Z","key":1486445880000,"doc_count":11},{"key_as_string":"2017-02-07T05:39:00.000Z","key":1486445940000,"doc_count":13},{"key_as_string":"2017-02-07T05:40:00.000Z","key":1486446000000,"doc_count":16},{"key_as_string":"2017-02-07T05:41:00.000Z","key":1486446060000,"doc_count":9},{"key_as_string":"2017-02-07T05:42:00.000Z","key":1486446120000,"doc_count":10},{"key_as_string":"2017-02-07T05:43:00.000Z","key":1486446180000,"doc_count":16},{"key_as_string":"2017-02-07T05:44:00.000Z","key":1486446240000,"doc_count":18},{"key_as_string":"2017-02-07T05:45:00.000Z","key":1486446300000,"doc_count":10},{"key_as_string":"2017-02-07T05:46:00.000Z","key":1486446360000,"doc_count":9},{"key_as_string":"2017-02-07T05:47:00.000Z","key":1486446420000,"doc_count":7},{"key_as_string":"2017-02-07T05:48:00.000Z","key":1486446480000,"doc_count":10},{"key_as_string":"2017-02-07T05:49:00.000Z","key":1486446540000,"doc_count":17},{"key_as_string":"2017-02-07T05:50:00.000Z","key":1486446600000,"doc_count":8},{"key_as_string":"2017-02-07T05:51:00.000Z","key":1486446660000,"doc_count":10},{"key_as_string":"2017-02-07T05:52:00.000Z","key":1486446720000,"doc_count":10},{"key_as_string":"2017-02-07T05:53:00.000Z","key":1486446780000,"doc_count":13},{"key_as_string":"2017-02-07T05:54:00.000Z","key":1486446840000,"doc_count":9},{"key_as_string":"2017-02-07T05:55:00.000Z","key":1486446900000,"doc_count":11},{"key_as_string":"2017-02-07T05:56:00.000Z","key":1486446960000,"doc_count":14},{"key_as_string":"2017-02-07T05:57:00.000Z","key":1486447020000,"doc_count":15},{"key_as_string":"2017-02-07T05:58:00.000Z","key":1486447080000,"doc_count":14},{"key_as_string":"2017-02-07T05:59:00.000Z","key":1486447140000,"doc_count":6},{"key_as_string":"2017-02-07T06:00:00.000Z","key":1486447200000,"doc_count":14},{"key_as_string":"2017-02-07T06:01:00.000Z","key":1486447260000,"doc_count":18},{"key_as_string":"2017-02-07T06:02:00.000Z","key":1486447320000,"doc_count":9},{"key_as_string":"2017-02-07T06:03:00.000Z","key":1486447380000,"doc_count":14},{"key_as_string":"2017-02-07T06:04:00.000Z","key":1486447440000,"doc_count":12},{"key_as_string":"2017-02-07T06:05:00.000Z","key":1486447500000,"doc_count":14},{"key_as_string":"2017-02-07T06:06:00.000Z","key":1486447560000,"doc_count":11},{"key_as_string":"2017-02-07T06:07:00.000Z","key":1486447620000,"doc_count":12},{"key_as_string":"2017-02-07T06:08:00.000Z","key":1486447680000,"doc_count":20},{"key_as_string":"2017-02-07T06:09:00.000Z","key":1486447740000,"doc_count":9},{"key_as_string":"2017-02-07T06:10:00.000Z","key":1486447800000,"doc_count":10},{"key_as_string":"2017-02-07T06:11:00.000Z","key":1486447860000,"doc_count":13},{"key_as_string":"2017-02-07T06:12:00.000Z","key":1486447920000,"doc_count":10},{"key_as_string":"2017-02-07T06:13:00.000Z","key":1486447980000,"doc_count":13},{"key_as_string":"2017-02-07T06:14:00.000Z","key":1486448040000,"doc_count":10},{"key_as_string":"2017-02-07T06:15:00.000Z","key":1486448100000,"doc_count":17},{"key_as_string":"2017-02-07T06:16:00.000Z","key":1486448160000,"doc_count":7},{"key_as_string":"2017-02-07T06:17:00.000Z","key":1486448220000,"doc_count":9},{"key_as_string":"2017-02-07T06:18:00.000Z","key":1486448280000,"doc_count":12},{"key_as_string":"2017-02-07T06:19:00.000Z","key":1486448340000,"doc_count":8},{"key_as_string":"2017-02-07T06:20:00.000Z","key":1486448400000,"doc_count":21},{"key_as_string":"2017-02-07T06:21:00.000Z","key":1486448460000,"doc_count":10},{"key_as_string":"2017-02-07T06:22:00.000Z","key":1486448520000,"doc_count":13},{"key_as_string":"2017-02-07T06:23:00.000Z","key":1486448580000,"doc_count":12},{"key_as_string":"2017-02-07T06:24:00.000Z","key":1486448640000,"doc_count":13},{"key_as_string":"2017-02-07T06:25:00.000Z","key":1486448700000,"doc_count":11},{"key_as_string":"2017-02-07T06:26:00.000Z","key":1486448760000,"doc_count":16},{"key_as_string":"2017-02-07T06:27:00.000Z","key":1486448820000,"doc_count":5},{"key_as_string":"2017-02-07T06:28:00.000Z","key":1486448880000,"doc_count":11},{"key_as_string":"2017-02-07T06:29:00.000Z","key":1486448940000,"doc_count":14},{"key_as_string":"2017-02-07T06:30:00.000Z","key":1486449000000,"doc_count":8},{"key_as_string":"2017-02-07T06:31:00.000Z","key":1486449060000,"doc_count":13},{"key_as_string":"2017-02-07T06:32:00.000Z","key":1486449120000,"doc_count":17},{"key_as_string":"2017-02-07T06:33:00.000Z","key":1486449180000,"doc_count":15},{"key_as_string":"2017-02-07T06:34:00.000Z","key":1486449240000,"doc_count":6},{"key_as_string":"2017-02-07T06:35:00.000Z","key":1486449300000,"doc_count":13},{"key_as_string":"2017-02-07T06:36:00.000Z","key":1486449360000,"doc_count":8},{"key_as_string":"2017-02-07T06:37:00.000Z","key":1486449420000,"doc_count":12},{"key_as_string":"2017-02-07T06:38:00.000Z","key":1486449480000,"doc_count":13},{"key_as_string":"2017-02-07T06:39:00.000Z","key":1486449540000,"doc_count":12},{"key_as_string":"2017-02-07T06:40:00.000Z","key":1486449600000,"doc_count":11},{"key_as_string":"2017-02-07T06:41:00.000Z","key":1486449660000,"doc_count":14},{"key_as_string":"2017-02-07T06:42:00.000Z","key":1486449720000,"doc_count":6},{"key_as_string":"2017-02-07T06:43:00.000Z","key":1486449780000,"doc_count":13},{"key_as_string":"2017-02-07T06:44:00.000Z","key":1486449840000,"doc_count":11},{"key_as_string":"2017-02-07T06:45:00.000Z","key":1486449900000,"doc_count":11},{"key_as_string":"2017-02-07T06:46:00.000Z","key":1486449960000,"doc_count":21},{"key_as_string":"2017-02-07T06:47:00.000Z","key":1486450020000,"doc_count":9},{"key_as_string":"2017-02-07T06:48:00.000Z","key":1486450080000,"doc_count":11},{"key_as_string":"2017-02-07T06:49:00.000Z","key":1486450140000,"doc_count":10},{"key_as_string":"2017-02-07T06:50:00.000Z","key":1486450200000,"doc_count":11},{"key_as_string":"2017-02-07T06:51:00.000Z","key":1486450260000,"doc_count":11},{"key_as_string":"2017-02-07T06:52:00.000Z","key":1486450320000,"doc_count":12},{"key_as_string":"2017-02-07T06:53:00.000Z","key":1486450380000,"doc_count":8},{"key_as_string":"2017-02-07T06:54:00.000Z","key":1486450440000,"doc_count":13},{"key_as_string":"2017-02-07T06:55:00.000Z","key":1486450500000,"doc_count":7},{"key_as_string":"2017-02-07T06:56:00.000Z","key":1486450560000,"doc_count":9},{"key_as_string":"2017-02-07T06:57:00.000Z","key":1486450620000,"doc_count":7},{"key_as_string":"2017-02-07T06:58:00.000Z","key":1486450680000,"doc_count":10},{"key_as_string":"2017-02-07T06:59:00.000Z","key":1486450740000,"doc_count":19},{"key_as_string":"2017-02-07T07:00:00.000Z","key":1486450800000,"doc_count":11},{"key_as_string":"2017-02-07T07:01:00.000Z","key":1486450860000,"doc_count":9},{"key_as_string":"2017-02-07T07:02:00.000Z","key":1486450920000,"doc_count":14},{"key_as_string":"2017-02-07T07:03:00.000Z","key":1486450980000,"doc_count":13},{"key_as_string":"2017-02-07T07:04:00.000Z","key":1486451040000,"doc_count":14},{"key_as_string":"2017-02-07T07:05:00.000Z","key":1486451100000,"doc_count":10},{"key_as_string":"2017-02-07T07:06:00.000Z","key":1486451160000,"doc_count":14},{"key_as_string":"2017-02-07T07:07:00.000Z","key":1486451220000,"doc_count":8},{"key_as_string":"2017-02-07T07:08:00.000Z","key":1486451280000,"doc_count":10},{"key_as_string":"2017-02-07T07:09:00.000Z","key":1486451340000,"doc_count":15},{"key_as_string":"2017-02-07T07:10:00.000Z","key":1486451400000,"doc_count":17},{"key_as_string":"2017-02-07T07:11:00.000Z","key":1486451460000,"doc_count":10},{"key_as_string":"2017-02-07T07:12:00.000Z","key":1486451520000,"doc_count":10},{"key_as_string":"2017-02-07T07:13:00.000Z","key":1486451580000,"doc_count":10},{"key_as_string":"2017-02-07T07:14:00.000Z","key":1486451640000,"doc_count":10},{"key_as_string":"2017-02-07T07:15:00.000Z","key":1486451700000,"doc_count":12},{"key_as_string":"2017-02-07T07:16:00.000Z","key":1486451760000,"doc_count":12},{"key_as_string":"2017-02-07T07:17:00.000Z","key":1486451820000,"doc_count":17},{"key_as_string":"2017-02-07T07:18:00.000Z","key":1486451880000,"doc_count":10},{"key_as_string":"2017-02-07T07:19:00.000Z","key":1486451940000,"doc_count":13},{"key_as_string":"2017-02-07T07:20:00.000Z","key":1486452000000,"doc_count":12},{"key_as_string":"2017-02-07T07:21:00.000Z","key":1486452060000,"doc_count":13},{"key_as_string":"2017-02-07T07:22:00.000Z","key":1486452120000,"doc_count":15},{"key_as_string":"2017-02-07T07:23:00.000Z","key":1486452180000,"doc_count":13},{"key_as_string":"2017-02-07T07:24:00.000Z","key":1486452240000,"doc_count":12},{"key_as_string":"2017-02-07T07:25:00.000Z","key":1486452300000,"doc_count":12},{"key_as_string":"2017-02-07T07:26:00.000Z","key":1486452360000,"doc_count":11},{"key_as_string":"2017-02-07T07:27:00.000Z","key":1486452420000,"doc_count":11},{"key_as_string":"2017-02-07T07:28:00.000Z","key":1486452480000,"doc_count":14},{"key_as_string":"2017-02-07T07:29:00.000Z","key":1486452540000,"doc_count":16},{"key_as_string":"2017-02-07T07:30:00.000Z","key":1486452600000,"doc_count":9},{"key_as_string":"2017-02-07T07:31:00.000Z","key":1486452660000,"doc_count":12},{"key_as_string":"2017-02-07T07:32:00.000Z","key":1486452720000,"doc_count":17},{"key_as_string":"2017-02-07T07:33:00.000Z","key":1486452780000,"doc_count":9},{"key_as_string":"2017-02-07T07:34:00.000Z","key":1486452840000,"doc_count":15},{"key_as_string":"2017-02-07T07:35:00.000Z","key":1486452900000,"doc_count":13},{"key_as_string":"2017-02-07T07:36:00.000Z","key":1486452960000,"doc_count":14},{"key_as_string":"2017-02-07T07:37:00.000Z","key":1486453020000,"doc_count":14},{"key_as_string":"2017-02-07T07:38:00.000Z","key":1486453080000,"doc_count":9},{"key_as_string":"2017-02-07T07:39:00.000Z","key":1486453140000,"doc_count":10},{"key_as_string":"2017-02-07T07:40:00.000Z","key":1486453200000,"doc_count":12},{"key_as_string":"2017-02-07T07:41:00.000Z","key":1486453260000,"doc_count":11},{"key_as_string":"2017-02-07T07:42:00.000Z","key":1486453320000,"doc_count":18},{"key_as_string":"2017-02-07T07:43:00.000Z","key":1486453380000,"doc_count":7},{"key_as_string":"2017-02-07T07:44:00.000Z","key":1486453440000,"doc_count":13},{"key_as_string":"2017-02-07T07:45:00.000Z","key":1486453500000,"doc_count":14},{"key_as_string":"2017-02-07T07:46:00.000Z","key":1486453560000,"doc_count":13},{"key_as_string":"2017-02-07T07:47:00.000Z","key":1486453620000,"doc_count":15},{"key_as_string":"2017-02-07T07:48:00.000Z","key":1486453680000,"doc_count":13},{"key_as_string":"2017-02-07T07:49:00.000Z","key":1486453740000,"doc_count":15},{"key_as_string":"2017-02-07T07:50:00.000Z","key":1486453800000,"doc_count":12},{"key_as_string":"2017-02-07T07:51:00.000Z","key":1486453860000,"doc_count":15},{"key_as_string":"2017-02-07T07:52:00.000Z","key":1486453920000,"doc_count":12},{"key_as_string":"2017-02-07T07:53:00.000Z","key":1486453980000,"doc_count":9},{"key_as_string":"2017-02-07T07:54:00.000Z","key":1486454040000,"doc_count":12},{"key_as_string":"2017-02-07T07:55:00.000Z","key":1486454100000,"doc_count":13},{"key_as_string":"2017-02-07T07:56:00.000Z","key":1486454160000,"doc_count":12},{"key_as_string":"2017-02-07T07:57:00.000Z","key":1486454220000,"doc_count":9},{"key_as_string":"2017-02-07T07:58:00.000Z","key":1486454280000,"doc_count":12},{"key_as_string":"2017-02-07T07:59:00.000Z","key":1486454340000,"doc_count":12},{"key_as_string":"2017-02-07T08:00:00.000Z","key":1486454400000,"doc_count":14},{"key_as_string":"2017-02-07T08:01:00.000Z","key":1486454460000,"doc_count":13},{"key_as_string":"2017-02-07T08:02:00.000Z","key":1486454520000,"doc_count":11},{"key_as_string":"2017-02-07T08:03:00.000Z","key":1486454580000,"doc_count":14},{"key_as_string":"2017-02-07T08:04:00.000Z","key":1486454640000,"doc_count":6},{"key_as_string":"2017-02-07T08:05:00.000Z","key":1486454700000,"doc_count":13},{"key_as_string":"2017-02-07T08:06:00.000Z","key":1486454760000,"doc_count":11},{"key_as_string":"2017-02-07T08:07:00.000Z","key":1486454820000,"doc_count":14},{"key_as_string":"2017-02-07T08:08:00.000Z","key":1486454880000,"doc_count":14},{"key_as_string":"2017-02-07T08:09:00.000Z","key":1486454940000,"doc_count":9},{"key_as_string":"2017-02-07T08:10:00.000Z","key":1486455000000,"doc_count":11},{"key_as_string":"2017-02-07T08:11:00.000Z","key":1486455060000,"doc_count":8},{"key_as_string":"2017-02-07T08:12:00.000Z","key":1486455120000,"doc_count":14},{"key_as_string":"2017-02-07T08:13:00.000Z","key":1486455180000,"doc_count":9},{"key_as_string":"2017-02-07T08:14:00.000Z","key":1486455240000,"doc_count":10},{"key_as_string":"2017-02-07T08:15:00.000Z","key":1486455300000,"doc_count":14},{"key_as_string":"2017-02-07T08:16:00.000Z","key":1486455360000,"doc_count":12},{"key_as_string":"2017-02-07T08:17:00.000Z","key":1486455420000,"doc_count":11},{"key_as_string":"2017-02-07T08:18:00.000Z","key":1486455480000,"doc_count":18},{"key_as_string":"2017-02-07T08:19:00.000Z","key":1486455540000,"doc_count":13},{"key_as_string":"2017-02-07T08:20:00.000Z","key":1486455600000,"doc_count":13},{"key_as_string":"2017-02-07T08:21:00.000Z","key":1486455660000,"doc_count":10},{"key_as_string":"2017-02-07T08:22:00.000Z","key":1486455720000,"doc_count":10},{"key_as_string":"2017-02-07T08:23:00.000Z","key":1486455780000,"doc_count":13},{"key_as_string":"2017-02-07T08:24:00.000Z","key":1486455840000,"doc_count":11},{"key_as_string":"2017-02-07T08:25:00.000Z","key":1486455900000,"doc_count":12},{"key_as_string":"2017-02-07T08:26:00.000Z","key":1486455960000,"doc_count":20},{"key_as_string":"2017-02-07T08:27:00.000Z","key":1486456020000,"doc_count":15},{"key_as_string":"2017-02-07T08:28:00.000Z","key":1486456080000,"doc_count":12},{"key_as_string":"2017-02-07T08:29:00.000Z","key":1486456140000,"doc_count":14},{"key_as_string":"2017-02-07T08:30:00.000Z","key":1486456200000,"doc_count":9},{"key_as_string":"2017-02-07T08:31:00.000Z","key":1486456260000,"doc_count":17},{"key_as_string":"2017-02-07T08:32:00.000Z","key":1486456320000,"doc_count":11},{"key_as_string":"2017-02-07T08:33:00.000Z","key":1486456380000,"doc_count":15},{"key_as_string":"2017-02-07T08:34:00.000Z","key":1486456440000,"doc_count":11},{"key_as_string":"2017-02-07T08:35:00.000Z","key":1486456500000,"doc_count":15},{"key_as_string":"2017-02-07T08:36:00.000Z","key":1486456560000,"doc_count":17},{"key_as_string":"2017-02-07T08:37:00.000Z","key":1486456620000,"doc_count":8},{"key_as_string":"2017-02-07T08:38:00.000Z","key":1486456680000,"doc_count":13},{"key_as_string":"2017-02-07T08:39:00.000Z","key":1486456740000,"doc_count":10},{"key_as_string":"2017-02-07T08:40:00.000Z","key":1486456800000,"doc_count":11},{"key_as_string":"2017-02-07T08:41:00.000Z","key":1486456860000,"doc_count":12},{"key_as_string":"2017-02-07T08:42:00.000Z","key":1486456920000,"doc_count":15},{"key_as_string":"2017-02-07T08:43:00.000Z","key":1486456980000,"doc_count":12},{"key_as_string":"2017-02-07T08:44:00.000Z","key":1486457040000,"doc_count":14},{"key_as_string":"2017-02-07T08:45:00.000Z","key":1486457100000,"doc_count":14},{"key_as_string":"2017-02-07T08:46:00.000Z","key":1486457160000,"doc_count":15},{"key_as_string":"2017-02-07T08:47:00.000Z","key":1486457220000,"doc_count":13},{"key_as_string":"2017-02-07T08:48:00.000Z","key":1486457280000,"doc_count":10},{"key_as_string":"2017-02-07T08:49:00.000Z","key":1486457340000,"doc_count":12},{"key_as_string":"2017-02-07T08:50:00.000Z","key":1486457400000,"doc_count":14},{"key_as_string":"2017-02-07T08:51:00.000Z","key":1486457460000,"doc_count":13},{"key_as_string":"2017-02-07T08:52:00.000Z","key":1486457520000,"doc_count":11},{"key_as_string":"2017-02-07T08:53:00.000Z","key":1486457580000,"doc_count":14},{"key_as_string":"2017-02-07T08:54:00.000Z","key":1486457640000,"doc_count":14},{"key_as_string":"2017-02-07T08:55:00.000Z","key":1486457700000,"doc_count":9},{"key_as_string":"2017-02-07T08:56:00.000Z","key":1486457760000,"doc_count":13},{"key_as_string":"2017-02-07T08:57:00.000Z","key":1486457820000,"doc_count":16},{"key_as_string":"2017-02-07T08:58:00.000Z","key":1486457880000,"doc_count":14},{"key_as_string":"2017-02-07T08:59:00.000Z","key":1486457940000,"doc_count":9},{"key_as_string":"2017-02-07T09:00:00.000Z","key":1486458000000,"doc_count":15},{"key_as_string":"2017-02-07T09:01:00.000Z","key":1486458060000,"doc_count":13},{"key_as_string":"2017-02-07T09:02:00.000Z","key":1486458120000,"doc_count":11},{"key_as_string":"2017-02-07T09:03:00.000Z","key":1486458180000,"doc_count":23},{"key_as_string":"2017-02-07T09:04:00.000Z","key":1486458240000,"doc_count":14},{"key_as_string":"2017-02-07T09:05:00.000Z","key":1486458300000,"doc_count":6},{"key_as_string":"2017-02-07T09:06:00.000Z","key":1486458360000,"doc_count":14},{"key_as_string":"2017-02-07T09:07:00.000Z","key":1486458420000,"doc_count":15},{"key_as_string":"2017-02-07T09:08:00.000Z","key":1486458480000,"doc_count":15},{"key_as_string":"2017-02-07T09:09:00.000Z","key":1486458540000,"doc_count":11},{"key_as_string":"2017-02-07T09:10:00.000Z","key":1486458600000,"doc_count":17},{"key_as_string":"2017-02-07T09:11:00.000Z","key":1486458660000,"doc_count":16},{"key_as_string":"2017-02-07T09:12:00.000Z","key":1486458720000,"doc_count":15},{"key_as_string":"2017-02-07T09:13:00.000Z","key":1486458780000,"doc_count":15},{"key_as_string":"2017-02-07T09:14:00.000Z","key":1486458840000,"doc_count":18},{"key_as_string":"2017-02-07T09:15:00.000Z","key":1486458900000,"doc_count":13},{"key_as_string":"2017-02-07T09:16:00.000Z","key":1486458960000,"doc_count":9},{"key_as_string":"2017-02-07T09:17:00.000Z","key":1486459020000,"doc_count":19},{"key_as_string":"2017-02-07T09:18:00.000Z","key":1486459080000,"doc_count":11},{"key_as_string":"2017-02-07T09:19:00.000Z","key":1486459140000,"doc_count":8},{"key_as_string":"2017-02-07T09:20:00.000Z","key":1486459200000,"doc_count":18},{"key_as_string":"2017-02-07T09:21:00.000Z","key":1486459260000,"doc_count":16},{"key_as_string":"2017-02-07T09:22:00.000Z","key":1486459320000,"doc_count":13},{"key_as_string":"2017-02-07T09:23:00.000Z","key":1486459380000,"doc_count":14},{"key_as_string":"2017-02-07T09:24:00.000Z","key":1486459440000,"doc_count":16},{"key_as_string":"2017-02-07T09:25:00.000Z","key":1486459500000,"doc_count":13},{"key_as_string":"2017-02-07T09:26:00.000Z","key":1486459560000,"doc_count":13},{"key_as_string":"2017-02-07T09:27:00.000Z","key":1486459620000,"doc_count":16},{"key_as_string":"2017-02-07T09:28:00.000Z","key":1486459680000,"doc_count":13},{"key_as_string":"2017-02-07T09:29:00.000Z","key":1486459740000,"doc_count":14},{"key_as_string":"2017-02-07T09:30:00.000Z","key":1486459800000,"doc_count":13},{"key_as_string":"2017-02-07T09:31:00.000Z","key":1486459860000,"doc_count":16},{"key_as_string":"2017-02-07T09:32:00.000Z","key":1486459920000,"doc_count":18},{"key_as_string":"2017-02-07T09:33:00.000Z","key":1486459980000,"doc_count":7},{"key_as_string":"2017-02-07T09:34:00.000Z","key":1486460040000,"doc_count":14},{"key_as_string":"2017-02-07T09:35:00.000Z","key":1486460100000,"doc_count":15},{"key_as_string":"2017-02-07T09:36:00.000Z","key":1486460160000,"doc_count":13},{"key_as_string":"2017-02-07T09:37:00.000Z","key":1486460220000,"doc_count":16},{"key_as_string":"2017-02-07T09:38:00.000Z","key":1486460280000,"doc_count":15},{"key_as_string":"2017-02-07T09:39:00.000Z","key":1486460340000,"doc_count":12},{"key_as_string":"2017-02-07T09:40:00.000Z","key":1486460400000,"doc_count":15},{"key_as_string":"2017-02-07T09:41:00.000Z","key":1486460460000,"doc_count":13},{"key_as_string":"2017-02-07T09:42:00.000Z","key":1486460520000,"doc_count":10},{"key_as_string":"2017-02-07T09:43:00.000Z","key":1486460580000,"doc_count":17},{"key_as_string":"2017-02-07T09:44:00.000Z","key":1486460640000,"doc_count":16},{"key_as_string":"2017-02-07T09:45:00.000Z","key":1486460700000,"doc_count":16},{"key_as_string":"2017-02-07T09:46:00.000Z","key":1486460760000,"doc_count":12},{"key_as_string":"2017-02-07T09:47:00.000Z","key":1486460820000,"doc_count":14},{"key_as_string":"2017-02-07T09:48:00.000Z","key":1486460880000,"doc_count":14},{"key_as_string":"2017-02-07T09:49:00.000Z","key":1486460940000,"doc_count":10},{"key_as_string":"2017-02-07T09:50:00.000Z","key":1486461000000,"doc_count":14},{"key_as_string":"2017-02-07T09:51:00.000Z","key":1486461060000,"doc_count":16},{"key_as_string":"2017-02-07T09:52:00.000Z","key":1486461120000,"doc_count":14},{"key_as_string":"2017-02-07T09:53:00.000Z","key":1486461180000,"doc_count":11},{"key_as_string":"2017-02-07T09:54:00.000Z","key":1486461240000,"doc_count":11},{"key_as_string":"2017-02-07T09:55:00.000Z","key":1486461300000,"doc_count":14},{"key_as_string":"2017-02-07T09:56:00.000Z","key":1486461360000,"doc_count":14},{"key_as_string":"2017-02-07T09:57:00.000Z","key":1486461420000,"doc_count":13},{"key_as_string":"2017-02-07T09:58:00.000Z","key":1486461480000,"doc_count":14},{"key_as_string":"2017-02-07T09:59:00.000Z","key":1486461540000,"doc_count":13},{"key_as_string":"2017-02-07T10:00:00.000Z","key":1486461600000,"doc_count":17},{"key_as_string":"2017-02-07T10:01:00.000Z","key":1486461660000,"doc_count":17},{"key_as_string":"2017-02-07T10:02:00.000Z","key":1486461720000,"doc_count":6},{"key_as_string":"2017-02-07T10:03:00.000Z","key":1486461780000,"doc_count":13},{"key_as_string":"2017-02-07T10:04:00.000Z","key":1486461840000,"doc_count":15},{"key_as_string":"2017-02-07T10:05:00.000Z","key":1486461900000,"doc_count":10},{"key_as_string":"2017-02-07T10:06:00.000Z","key":1486461960000,"doc_count":11},{"key_as_string":"2017-02-07T10:07:00.000Z","key":1486462020000,"doc_count":15},{"key_as_string":"2017-02-07T10:08:00.000Z","key":1486462080000,"doc_count":14},{"key_as_string":"2017-02-07T10:09:00.000Z","key":1486462140000,"doc_count":11},{"key_as_string":"2017-02-07T10:10:00.000Z","key":1486462200000,"doc_count":19},{"key_as_string":"2017-02-07T10:11:00.000Z","key":1486462260000,"doc_count":10},{"key_as_string":"2017-02-07T10:12:00.000Z","key":1486462320000,"doc_count":12},{"key_as_string":"2017-02-07T10:13:00.000Z","key":1486462380000,"doc_count":12},{"key_as_string":"2017-02-07T10:14:00.000Z","key":1486462440000,"doc_count":20},{"key_as_string":"2017-02-07T10:15:00.000Z","key":1486462500000,"doc_count":15},{"key_as_string":"2017-02-07T10:16:00.000Z","key":1486462560000,"doc_count":13},{"key_as_string":"2017-02-07T10:17:00.000Z","key":1486462620000,"doc_count":16},{"key_as_string":"2017-02-07T10:18:00.000Z","key":1486462680000,"doc_count":14},{"key_as_string":"2017-02-07T10:19:00.000Z","key":1486462740000,"doc_count":11},{"key_as_string":"2017-02-07T10:20:00.000Z","key":1486462800000,"doc_count":15},{"key_as_string":"2017-02-07T10:21:00.000Z","key":1486462860000,"doc_count":14},{"key_as_string":"2017-02-07T10:22:00.000Z","key":1486462920000,"doc_count":11},{"key_as_string":"2017-02-07T10:23:00.000Z","key":1486462980000,"doc_count":12},{"key_as_string":"2017-02-07T10:24:00.000Z","key":1486463040000,"doc_count":16},{"key_as_string":"2017-02-07T10:25:00.000Z","key":1486463100000,"doc_count":14},{"key_as_string":"2017-02-07T10:26:00.000Z","key":1486463160000,"doc_count":18},{"key_as_string":"2017-02-07T10:27:00.000Z","key":1486463220000,"doc_count":13},{"key_as_string":"2017-02-07T10:28:00.000Z","key":1486463280000,"doc_count":18},{"key_as_string":"2017-02-07T10:29:00.000Z","key":1486463340000,"doc_count":14},{"key_as_string":"2017-02-07T10:30:00.000Z","key":1486463400000,"doc_count":15},{"key_as_string":"2017-02-07T10:31:00.000Z","key":1486463460000,"doc_count":16},{"key_as_string":"2017-02-07T10:32:00.000Z","key":1486463520000,"doc_count":16},{"key_as_string":"2017-02-07T10:33:00.000Z","key":1486463580000,"doc_count":16},{"key_as_string":"2017-02-07T10:34:00.000Z","key":1486463640000,"doc_count":9},{"key_as_string":"2017-02-07T10:35:00.000Z","key":1486463700000,"doc_count":13},{"key_as_string":"2017-02-07T10:36:00.000Z","key":1486463760000,"doc_count":16},{"key_as_string":"2017-02-07T10:37:00.000Z","key":1486463820000,"doc_count":14},{"key_as_string":"2017-02-07T10:38:00.000Z","key":1486463880000,"doc_count":14},{"key_as_string":"2017-02-07T10:39:00.000Z","key":1486463940000,"doc_count":12},{"key_as_string":"2017-02-07T10:40:00.000Z","key":1486464000000,"doc_count":12},{"key_as_string":"2017-02-07T10:41:00.000Z","key":1486464060000,"doc_count":15},{"key_as_string":"2017-02-07T10:42:00.000Z","key":1486464120000,"doc_count":10},{"key_as_string":"2017-02-07T10:43:00.000Z","key":1486464180000,"doc_count":11},{"key_as_string":"2017-02-07T10:44:00.000Z","key":1486464240000,"doc_count":14},{"key_as_string":"2017-02-07T10:45:00.000Z","key":1486464300000,"doc_count":11},{"key_as_string":"2017-02-07T10:46:00.000Z","key":1486464360000,"doc_count":16},{"key_as_string":"2017-02-07T10:47:00.000Z","key":1486464420000,"doc_count":17},{"key_as_string":"2017-02-07T10:48:00.000Z","key":1486464480000,"doc_count":14},{"key_as_string":"2017-02-07T10:49:00.000Z","key":1486464540000,"doc_count":17},{"key_as_string":"2017-02-07T10:50:00.000Z","key":1486464600000,"doc_count":14},{"key_as_string":"2017-02-07T10:51:00.000Z","key":1486464660000,"doc_count":14},{"key_as_string":"2017-02-07T10:52:00.000Z","key":1486464720000,"doc_count":13},{"key_as_string":"2017-02-07T10:53:00.000Z","key":1486464780000,"doc_count":14},{"key_as_string":"2017-02-07T10:54:00.000Z","key":1486464840000,"doc_count":13},{"key_as_string":"2017-02-07T10:55:00.000Z","key":1486464900000,"doc_count":10},{"key_as_string":"2017-02-07T10:56:00.000Z","key":1486464960000,"doc_count":14},{"key_as_string":"2017-02-07T10:57:00.000Z","key":1486465020000,"doc_count":9},{"key_as_string":"2017-02-07T10:58:00.000Z","key":1486465080000,"doc_count":19},{"key_as_string":"2017-02-07T10:59:00.000Z","key":1486465140000,"doc_count":12},{"key_as_string":"2017-02-07T11:00:00.000Z","key":1486465200000,"doc_count":20},{"key_as_string":"2017-02-07T11:01:00.000Z","key":1486465260000,"doc_count":11},{"key_as_string":"2017-02-07T11:02:00.000Z","key":1486465320000,"doc_count":16},{"key_as_string":"2017-02-07T11:03:00.000Z","key":1486465380000,"doc_count":14},{"key_as_string":"2017-02-07T11:04:00.000Z","key":1486465440000,"doc_count":14},{"key_as_string":"2017-02-07T11:05:00.000Z","key":1486465500000,"doc_count":11},{"key_as_string":"2017-02-07T11:06:00.000Z","key":1486465560000,"doc_count":11},{"key_as_string":"2017-02-07T11:07:00.000Z","key":1486465620000,"doc_count":18},{"key_as_string":"2017-02-07T11:08:00.000Z","key":1486465680000,"doc_count":14},{"key_as_string":"2017-02-07T11:09:00.000Z","key":1486465740000,"doc_count":14},{"key_as_string":"2017-02-07T11:10:00.000Z","key":1486465800000,"doc_count":9},{"key_as_string":"2017-02-07T11:11:00.000Z","key":1486465860000,"doc_count":18},{"key_as_string":"2017-02-07T11:12:00.000Z","key":1486465920000,"doc_count":18},{"key_as_string":"2017-02-07T11:13:00.000Z","key":1486465980000,"doc_count":10},{"key_as_string":"2017-02-07T11:14:00.000Z","key":1486466040000,"doc_count":10},{"key_as_string":"2017-02-07T11:15:00.000Z","key":1486466100000,"doc_count":17},{"key_as_string":"2017-02-07T11:16:00.000Z","key":1486466160000,"doc_count":16},{"key_as_string":"2017-02-07T11:17:00.000Z","key":1486466220000,"doc_count":15},{"key_as_string":"2017-02-07T11:18:00.000Z","key":1486466280000,"doc_count":17},{"key_as_string":"2017-02-07T11:19:00.000Z","key":1486466340000,"doc_count":18},{"key_as_string":"2017-02-07T11:20:00.000Z","key":1486466400000,"doc_count":11},{"key_as_string":"2017-02-07T11:21:00.000Z","key":1486466460000,"doc_count":18},{"key_as_string":"2017-02-07T11:22:00.000Z","key":1486466520000,"doc_count":13},{"key_as_string":"2017-02-07T11:23:00.000Z","key":1486466580000,"doc_count":10},{"key_as_string":"2017-02-07T11:24:00.000Z","key":1486466640000,"doc_count":12},{"key_as_string":"2017-02-07T11:25:00.000Z","key":1486466700000,"doc_count":13},{"key_as_string":"2017-02-07T11:26:00.000Z","key":1486466760000,"doc_count":16},{"key_as_string":"2017-02-07T11:27:00.000Z","key":1486466820000,"doc_count":12},{"key_as_string":"2017-02-07T11:28:00.000Z","key":1486466880000,"doc_count":12},{"key_as_string":"2017-02-07T11:29:00.000Z","key":1486466940000,"doc_count":18},{"key_as_string":"2017-02-07T11:30:00.000Z","key":1486467000000,"doc_count":11},{"key_as_string":"2017-02-07T11:31:00.000Z","key":1486467060000,"doc_count":13},{"key_as_string":"2017-02-07T11:32:00.000Z","key":1486467120000,"doc_count":13},{"key_as_string":"2017-02-07T11:33:00.000Z","key":1486467180000,"doc_count":24},{"key_as_string":"2017-02-07T11:34:00.000Z","key":1486467240000,"doc_count":12},{"key_as_string":"2017-02-07T11:35:00.000Z","key":1486467300000,"doc_count":13},{"key_as_string":"2017-02-07T11:36:00.000Z","key":1486467360000,"doc_count":16},{"key_as_string":"2017-02-07T11:37:00.000Z","key":1486467420000,"doc_count":16},{"key_as_string":"2017-02-07T11:38:00.000Z","key":1486467480000,"doc_count":14},{"key_as_string":"2017-02-07T11:39:00.000Z","key":1486467540000,"doc_count":12},{"key_as_string":"2017-02-07T11:40:00.000Z","key":1486467600000,"doc_count":14},{"key_as_string":"2017-02-07T11:41:00.000Z","key":1486467660000,"doc_count":14},{"key_as_string":"2017-02-07T11:42:00.000Z","key":1486467720000,"doc_count":16},{"key_as_string":"2017-02-07T11:43:00.000Z","key":1486467780000,"doc_count":19},{"key_as_string":"2017-02-07T11:44:00.000Z","key":1486467840000,"doc_count":9},{"key_as_string":"2017-02-07T11:45:00.000Z","key":1486467900000,"doc_count":14},{"key_as_string":"2017-02-07T11:46:00.000Z","key":1486467960000,"doc_count":8},{"key_as_string":"2017-02-07T11:47:00.000Z","key":1486468020000,"doc_count":14},{"key_as_string":"2017-02-07T11:48:00.000Z","key":1486468080000,"doc_count":11},{"key_as_string":"2017-02-07T11:49:00.000Z","key":1486468140000,"doc_count":10},{"key_as_string":"2017-02-07T11:50:00.000Z","key":1486468200000,"doc_count":13},{"key_as_string":"2017-02-07T11:51:00.000Z","key":1486468260000,"doc_count":14},{"key_as_string":"2017-02-07T11:52:00.000Z","key":1486468320000,"doc_count":13},{"key_as_string":"2017-02-07T11:53:00.000Z","key":1486468380000,"doc_count":15},{"key_as_string":"2017-02-07T11:54:00.000Z","key":1486468440000,"doc_count":11},{"key_as_string":"2017-02-07T11:55:00.000Z","key":1486468500000,"doc_count":11},{"key_as_string":"2017-02-07T11:56:00.000Z","key":1486468560000,"doc_count":13},{"key_as_string":"2017-02-07T11:57:00.000Z","key":1486468620000,"doc_count":17},{"key_as_string":"2017-02-07T11:58:00.000Z","key":1486468680000,"doc_count":19},{"key_as_string":"2017-02-07T11:59:00.000Z","key":1486468740000,"doc_count":15},{"key_as_string":"2017-02-07T12:00:00.000Z","key":1486468800000,"doc_count":14},{"key_as_string":"2017-02-07T12:01:00.000Z","key":1486468860000,"doc_count":14},{"key_as_string":"2017-02-07T12:02:00.000Z","key":1486468920000,"doc_count":19},{"key_as_string":"2017-02-07T12:03:00.000Z","key":1486468980000,"doc_count":16},{"key_as_string":"2017-02-07T12:04:00.000Z","key":1486469040000,"doc_count":13},{"key_as_string":"2017-02-07T12:05:00.000Z","key":1486469100000,"doc_count":20},{"key_as_string":"2017-02-07T12:06:00.000Z","key":1486469160000,"doc_count":9},{"key_as_string":"2017-02-07T12:07:00.000Z","key":1486469220000,"doc_count":12},{"key_as_string":"2017-02-07T12:08:00.000Z","key":1486469280000,"doc_count":14},{"key_as_string":"2017-02-07T12:09:00.000Z","key":1486469340000,"doc_count":18},{"key_as_string":"2017-02-07T12:10:00.000Z","key":1486469400000,"doc_count":10},{"key_as_string":"2017-02-07T12:11:00.000Z","key":1486469460000,"doc_count":11},{"key_as_string":"2017-02-07T12:12:00.000Z","key":1486469520000,"doc_count":15},{"key_as_string":"2017-02-07T12:13:00.000Z","key":1486469580000,"doc_count":10},{"key_as_string":"2017-02-07T12:14:00.000Z","key":1486469640000,"doc_count":14},{"key_as_string":"2017-02-07T12:15:00.000Z","key":1486469700000,"doc_count":18},{"key_as_string":"2017-02-07T12:16:00.000Z","key":1486469760000,"doc_count":15},{"key_as_string":"2017-02-07T12:17:00.000Z","key":1486469820000,"doc_count":12},{"key_as_string":"2017-02-07T12:18:00.000Z","key":1486469880000,"doc_count":7},{"key_as_string":"2017-02-07T12:19:00.000Z","key":1486469940000,"doc_count":17},{"key_as_string":"2017-02-07T12:20:00.000Z","key":1486470000000,"doc_count":14},{"key_as_string":"2017-02-07T12:21:00.000Z","key":1486470060000,"doc_count":15},{"key_as_string":"2017-02-07T12:22:00.000Z","key":1486470120000,"doc_count":17},{"key_as_string":"2017-02-07T12:23:00.000Z","key":1486470180000,"doc_count":17},{"key_as_string":"2017-02-07T12:24:00.000Z","key":1486470240000,"doc_count":12},{"key_as_string":"2017-02-07T12:25:00.000Z","key":1486470300000,"doc_count":15},{"key_as_string":"2017-02-07T12:26:00.000Z","key":1486470360000,"doc_count":8},{"key_as_string":"2017-02-07T12:27:00.000Z","key":1486470420000,"doc_count":19},{"key_as_string":"2017-02-07T12:28:00.000Z","key":1486470480000,"doc_count":10},{"key_as_string":"2017-02-07T12:29:00.000Z","key":1486470540000,"doc_count":13},{"key_as_string":"2017-02-07T12:30:00.000Z","key":1486470600000,"doc_count":14},{"key_as_string":"2017-02-07T12:31:00.000Z","key":1486470660000,"doc_count":17},{"key_as_string":"2017-02-07T12:32:00.000Z","key":1486470720000,"doc_count":12},{"key_as_string":"2017-02-07T12:33:00.000Z","key":1486470780000,"doc_count":11},{"key_as_string":"2017-02-07T12:34:00.000Z","key":1486470840000,"doc_count":18},{"key_as_string":"2017-02-07T12:35:00.000Z","key":1486470900000,"doc_count":16},{"key_as_string":"2017-02-07T12:36:00.000Z","key":1486470960000,"doc_count":17},{"key_as_string":"2017-02-07T12:37:00.000Z","key":1486471020000,"doc_count":18},{"key_as_string":"2017-02-07T12:38:00.000Z","key":1486471080000,"doc_count":16},{"key_as_string":"2017-02-07T12:39:00.000Z","key":1486471140000,"doc_count":15},{"key_as_string":"2017-02-07T12:40:00.000Z","key":1486471200000,"doc_count":16},{"key_as_string":"2017-02-07T12:41:00.000Z","key":1486471260000,"doc_count":22},{"key_as_string":"2017-02-07T12:42:00.000Z","key":1486471320000,"doc_count":14},{"key_as_string":"2017-02-07T12:43:00.000Z","key":1486471380000,"doc_count":13},{"key_as_string":"2017-02-07T12:44:00.000Z","key":1486471440000,"doc_count":10},{"key_as_string":"2017-02-07T12:45:00.000Z","key":1486471500000,"doc_count":13},{"key_as_string":"2017-02-07T12:46:00.000Z","key":1486471560000,"doc_count":19},{"key_as_string":"2017-02-07T12:47:00.000Z","key":1486471620000,"doc_count":12},{"key_as_string":"2017-02-07T12:48:00.000Z","key":1486471680000,"doc_count":12},{"key_as_string":"2017-02-07T12:49:00.000Z","key":1486471740000,"doc_count":14},{"key_as_string":"2017-02-07T12:50:00.000Z","key":1486471800000,"doc_count":17},{"key_as_string":"2017-02-07T12:51:00.000Z","key":1486471860000,"doc_count":14},{"key_as_string":"2017-02-07T12:52:00.000Z","key":1486471920000,"doc_count":9},{"key_as_string":"2017-02-07T12:53:00.000Z","key":1486471980000,"doc_count":21},{"key_as_string":"2017-02-07T12:54:00.000Z","key":1486472040000,"doc_count":14},{"key_as_string":"2017-02-07T12:55:00.000Z","key":1486472100000,"doc_count":11},{"key_as_string":"2017-02-07T12:56:00.000Z","key":1486472160000,"doc_count":13},{"key_as_string":"2017-02-07T12:57:00.000Z","key":1486472220000,"doc_count":13},{"key_as_string":"2017-02-07T12:58:00.000Z","key":1486472280000,"doc_count":12},{"key_as_string":"2017-02-07T12:59:00.000Z","key":1486472340000,"doc_count":19},{"key_as_string":"2017-02-07T13:00:00.000Z","key":1486472400000,"doc_count":10},{"key_as_string":"2017-02-07T13:01:00.000Z","key":1486472460000,"doc_count":13},{"key_as_string":"2017-02-07T13:02:00.000Z","key":1486472520000,"doc_count":12},{"key_as_string":"2017-02-07T13:03:00.000Z","key":1486472580000,"doc_count":9},{"key_as_string":"2017-02-07T13:04:00.000Z","key":1486472640000,"doc_count":17},{"key_as_string":"2017-02-07T13:05:00.000Z","key":1486472700000,"doc_count":14},{"key_as_string":"2017-02-07T13:06:00.000Z","key":1486472760000,"doc_count":13},{"key_as_string":"2017-02-07T13:07:00.000Z","key":1486472820000,"doc_count":18},{"key_as_string":"2017-02-07T13:08:00.000Z","key":1486472880000,"doc_count":16},{"key_as_string":"2017-02-07T13:09:00.000Z","key":1486472940000,"doc_count":11},{"key_as_string":"2017-02-07T13:10:00.000Z","key":1486473000000,"doc_count":9},{"key_as_string":"2017-02-07T13:11:00.000Z","key":1486473060000,"doc_count":14},{"key_as_string":"2017-02-07T13:12:00.000Z","key":1486473120000,"doc_count":11},{"key_as_string":"2017-02-07T13:13:00.000Z","key":1486473180000,"doc_count":17},{"key_as_string":"2017-02-07T13:14:00.000Z","key":1486473240000,"doc_count":14},{"key_as_string":"2017-02-07T13:15:00.000Z","key":1486473300000,"doc_count":17},{"key_as_string":"2017-02-07T13:16:00.000Z","key":1486473360000,"doc_count":14},{"key_as_string":"2017-02-07T13:17:00.000Z","key":1486473420000,"doc_count":18},{"key_as_string":"2017-02-07T13:18:00.000Z","key":1486473480000,"doc_count":13},{"key_as_string":"2017-02-07T13:19:00.000Z","key":1486473540000,"doc_count":24},{"key_as_string":"2017-02-07T13:20:00.000Z","key":1486473600000,"doc_count":6},{"key_as_string":"2017-02-07T13:21:00.000Z","key":1486473660000,"doc_count":16},{"key_as_string":"2017-02-07T13:22:00.000Z","key":1486473720000,"doc_count":19},{"key_as_string":"2017-02-07T13:23:00.000Z","key":1486473780000,"doc_count":12},{"key_as_string":"2017-02-07T13:24:00.000Z","key":1486473840000,"doc_count":18},{"key_as_string":"2017-02-07T13:25:00.000Z","key":1486473900000,"doc_count":11},{"key_as_string":"2017-02-07T13:26:00.000Z","key":1486473960000,"doc_count":14},{"key_as_string":"2017-02-07T13:27:00.000Z","key":1486474020000,"doc_count":13},{"key_as_string":"2017-02-07T13:28:00.000Z","key":1486474080000,"doc_count":13},{"key_as_string":"2017-02-07T13:29:00.000Z","key":1486474140000,"doc_count":12},{"key_as_string":"2017-02-07T13:30:00.000Z","key":1486474200000,"doc_count":12},{"key_as_string":"2017-02-07T13:31:00.000Z","key":1486474260000,"doc_count":10},{"key_as_string":"2017-02-07T13:32:00.000Z","key":1486474320000,"doc_count":15},{"key_as_string":"2017-02-07T13:33:00.000Z","key":1486474380000,"doc_count":11},{"key_as_string":"2017-02-07T13:34:00.000Z","key":1486474440000,"doc_count":15},{"key_as_string":"2017-02-07T13:35:00.000Z","key":1486474500000,"doc_count":6},{"key_as_string":"2017-02-07T13:36:00.000Z","key":1486474560000,"doc_count":20},{"key_as_string":"2017-02-07T13:37:00.000Z","key":1486474620000,"doc_count":9},{"key_as_string":"2017-02-07T13:38:00.000Z","key":1486474680000,"doc_count":15},{"key_as_string":"2017-02-07T13:39:00.000Z","key":1486474740000,"doc_count":18},{"key_as_string":"2017-02-07T13:40:00.000Z","key":1486474800000,"doc_count":14},{"key_as_string":"2017-02-07T13:41:00.000Z","key":1486474860000,"doc_count":11},{"key_as_string":"2017-02-07T13:42:00.000Z","key":1486474920000,"doc_count":15},{"key_as_string":"2017-02-07T13:43:00.000Z","key":1486474980000,"doc_count":10},{"key_as_string":"2017-02-07T13:44:00.000Z","key":1486475040000,"doc_count":14},{"key_as_string":"2017-02-07T13:45:00.000Z","key":1486475100000,"doc_count":13},{"key_as_string":"2017-02-07T13:46:00.000Z","key":1486475160000,"doc_count":16},{"key_as_string":"2017-02-07T13:47:00.000Z","key":1486475220000,"doc_count":10},{"key_as_string":"2017-02-07T13:48:00.000Z","key":1486475280000,"doc_count":13},{"key_as_string":"2017-02-07T13:49:00.000Z","key":1486475340000,"doc_count":14},{"key_as_string":"2017-02-07T13:50:00.000Z","key":1486475400000,"doc_count":12},{"key_as_string":"2017-02-07T13:51:00.000Z","key":1486475460000,"doc_count":12},{"key_as_string":"2017-02-07T13:52:00.000Z","key":1486475520000,"doc_count":11},{"key_as_string":"2017-02-07T13:53:00.000Z","key":1486475580000,"doc_count":15},{"key_as_string":"2017-02-07T13:54:00.000Z","key":1486475640000,"doc_count":13},{"key_as_string":"2017-02-07T13:55:00.000Z","key":1486475700000,"doc_count":14},{"key_as_string":"2017-02-07T13:56:00.000Z","key":1486475760000,"doc_count":18},{"key_as_string":"2017-02-07T13:57:00.000Z","key":1486475820000,"doc_count":6},{"key_as_string":"2017-02-07T13:58:00.000Z","key":1486475880000,"doc_count":19},{"key_as_string":"2017-02-07T13:59:00.000Z","key":1486475940000,"doc_count":13},{"key_as_string":"2017-02-07T14:00:00.000Z","key":1486476000000,"doc_count":9},{"key_as_string":"2017-02-07T14:01:00.000Z","key":1486476060000,"doc_count":10},{"key_as_string":"2017-02-07T14:02:00.000Z","key":1486476120000,"doc_count":14},{"key_as_string":"2017-02-07T14:03:00.000Z","key":1486476180000,"doc_count":13},{"key_as_string":"2017-02-07T14:04:00.000Z","key":1486476240000,"doc_count":19},{"key_as_string":"2017-02-07T14:05:00.000Z","key":1486476300000,"doc_count":15},{"key_as_string":"2017-02-07T14:06:00.000Z","key":1486476360000,"doc_count":12},{"key_as_string":"2017-02-07T14:07:00.000Z","key":1486476420000,"doc_count":11},{"key_as_string":"2017-02-07T14:08:00.000Z","key":1486476480000,"doc_count":15},{"key_as_string":"2017-02-07T14:09:00.000Z","key":1486476540000,"doc_count":10},{"key_as_string":"2017-02-07T14:10:00.000Z","key":1486476600000,"doc_count":13},{"key_as_string":"2017-02-07T14:11:00.000Z","key":1486476660000,"doc_count":18},{"key_as_string":"2017-02-07T14:12:00.000Z","key":1486476720000,"doc_count":10},{"key_as_string":"2017-02-07T14:13:00.000Z","key":1486476780000,"doc_count":13},{"key_as_string":"2017-02-07T14:14:00.000Z","key":1486476840000,"doc_count":15},{"key_as_string":"2017-02-07T14:15:00.000Z","key":1486476900000,"doc_count":18},{"key_as_string":"2017-02-07T14:16:00.000Z","key":1486476960000,"doc_count":14},{"key_as_string":"2017-02-07T14:17:00.000Z","key":1486477020000,"doc_count":13},{"key_as_string":"2017-02-07T14:18:00.000Z","key":1486477080000,"doc_count":12},{"key_as_string":"2017-02-07T14:19:00.000Z","key":1486477140000,"doc_count":18},{"key_as_string":"2017-02-07T14:20:00.000Z","key":1486477200000,"doc_count":13},{"key_as_string":"2017-02-07T14:21:00.000Z","key":1486477260000,"doc_count":14},{"key_as_string":"2017-02-07T14:22:00.000Z","key":1486477320000,"doc_count":8},{"key_as_string":"2017-02-07T14:23:00.000Z","key":1486477380000,"doc_count":16},{"key_as_string":"2017-02-07T14:24:00.000Z","key":1486477440000,"doc_count":12},{"key_as_string":"2017-02-07T14:25:00.000Z","key":1486477500000,"doc_count":17},{"key_as_string":"2017-02-07T14:26:00.000Z","key":1486477560000,"doc_count":11},{"key_as_string":"2017-02-07T14:27:00.000Z","key":1486477620000,"doc_count":17},{"key_as_string":"2017-02-07T14:28:00.000Z","key":1486477680000,"doc_count":17},{"key_as_string":"2017-02-07T14:29:00.000Z","key":1486477740000,"doc_count":14},{"key_as_string":"2017-02-07T14:30:00.000Z","key":1486477800000,"doc_count":15},{"key_as_string":"2017-02-07T14:31:00.000Z","key":1486477860000,"doc_count":13},{"key_as_string":"2017-02-07T14:32:00.000Z","key":1486477920000,"doc_count":9},{"key_as_string":"2017-02-07T14:33:00.000Z","key":1486477980000,"doc_count":17},{"key_as_string":"2017-02-07T14:34:00.000Z","key":1486478040000,"doc_count":12},{"key_as_string":"2017-02-07T14:35:00.000Z","key":1486478100000,"doc_count":14},{"key_as_string":"2017-02-07T14:36:00.000Z","key":1486478160000,"doc_count":14},{"key_as_string":"2017-02-07T14:37:00.000Z","key":1486478220000,"doc_count":13},{"key_as_string":"2017-02-07T14:38:00.000Z","key":1486478280000,"doc_count":13},{"key_as_string":"2017-02-07T14:39:00.000Z","key":1486478340000,"doc_count":11},{"key_as_string":"2017-02-07T14:40:00.000Z","key":1486478400000,"doc_count":20},{"key_as_string":"2017-02-07T14:41:00.000Z","key":1486478460000,"doc_count":12},{"key_as_string":"2017-02-07T14:42:00.000Z","key":1486478520000,"doc_count":14},{"key_as_string":"2017-02-07T14:43:00.000Z","key":1486478580000,"doc_count":14},{"key_as_string":"2017-02-07T14:44:00.000Z","key":1486478640000,"doc_count":13},{"key_as_string":"2017-02-07T14:45:00.000Z","key":1486478700000,"doc_count":16},{"key_as_string":"2017-02-07T14:46:00.000Z","key":1486478760000,"doc_count":16},{"key_as_string":"2017-02-07T14:47:00.000Z","key":1486478820000,"doc_count":12},{"key_as_string":"2017-02-07T14:48:00.000Z","key":1486478880000,"doc_count":11},{"key_as_string":"2017-02-07T14:49:00.000Z","key":1486478940000,"doc_count":16},{"key_as_string":"2017-02-07T14:50:00.000Z","key":1486479000000,"doc_count":12},{"key_as_string":"2017-02-07T14:51:00.000Z","key":1486479060000,"doc_count":9},{"key_as_string":"2017-02-07T14:52:00.000Z","key":1486479120000,"doc_count":13},{"key_as_string":"2017-02-07T14:53:00.000Z","key":1486479180000,"doc_count":12},{"key_as_string":"2017-02-07T14:54:00.000Z","key":1486479240000,"doc_count":19},{"key_as_string":"2017-02-07T14:55:00.000Z","key":1486479300000,"doc_count":10},{"key_as_string":"2017-02-07T14:56:00.000Z","key":1486479360000,"doc_count":15},{"key_as_string":"2017-02-07T14:57:00.000Z","key":1486479420000,"doc_count":16},{"key_as_string":"2017-02-07T14:58:00.000Z","key":1486479480000,"doc_count":14},{"key_as_string":"2017-02-07T14:59:00.000Z","key":1486479540000,"doc_count":12},{"key_as_string":"2017-02-07T15:00:00.000Z","key":1486479600000,"doc_count":14},{"key_as_string":"2017-02-07T15:01:00.000Z","key":1486479660000,"doc_count":12},{"key_as_string":"2017-02-07T15:02:00.000Z","key":1486479720000,"doc_count":11},{"key_as_string":"2017-02-07T15:03:00.000Z","key":1486479780000,"doc_count":13},{"key_as_string":"2017-02-07T15:04:00.000Z","key":1486479840000,"doc_count":14},{"key_as_string":"2017-02-07T15:05:00.000Z","key":1486479900000,"doc_count":10},{"key_as_string":"2017-02-07T15:06:00.000Z","key":1486479960000,"doc_count":9},{"key_as_string":"2017-02-07T15:07:00.000Z","key":1486480020000,"doc_count":10},{"key_as_string":"2017-02-07T15:08:00.000Z","key":1486480080000,"doc_count":15},{"key_as_string":"2017-02-07T15:09:00.000Z","key":1486480140000,"doc_count":13},{"key_as_string":"2017-02-07T15:10:00.000Z","key":1486480200000,"doc_count":12},{"key_as_string":"2017-02-07T15:11:00.000Z","key":1486480260000,"doc_count":13},{"key_as_string":"2017-02-07T15:12:00.000Z","key":1486480320000,"doc_count":12},{"key_as_string":"2017-02-07T15:13:00.000Z","key":1486480380000,"doc_count":13},{"key_as_string":"2017-02-07T15:14:00.000Z","key":1486480440000,"doc_count":15},{"key_as_string":"2017-02-07T15:15:00.000Z","key":1486480500000,"doc_count":15},{"key_as_string":"2017-02-07T15:16:00.000Z","key":1486480560000,"doc_count":14},{"key_as_string":"2017-02-07T15:17:00.000Z","key":1486480620000,"doc_count":7},{"key_as_string":"2017-02-07T15:18:00.000Z","key":1486480680000,"doc_count":16},{"key_as_string":"2017-02-07T15:19:00.000Z","key":1486480740000,"doc_count":13},{"key_as_string":"2017-02-07T15:20:00.000Z","key":1486480800000,"doc_count":14},{"key_as_string":"2017-02-07T15:21:00.000Z","key":1486480860000,"doc_count":13},{"key_as_string":"2017-02-07T15:22:00.000Z","key":1486480920000,"doc_count":12},{"key_as_string":"2017-02-07T15:23:00.000Z","key":1486480980000,"doc_count":16},{"key_as_string":"2017-02-07T15:24:00.000Z","key":1486481040000,"doc_count":15},{"key_as_string":"2017-02-07T15:25:00.000Z","key":1486481100000,"doc_count":8},{"key_as_string":"2017-02-07T15:26:00.000Z","key":1486481160000,"doc_count":15},{"key_as_string":"2017-02-07T15:27:00.000Z","key":1486481220000,"doc_count":11},{"key_as_string":"2017-02-07T15:28:00.000Z","key":1486481280000,"doc_count":14},{"key_as_string":"2017-02-07T15:29:00.000Z","key":1486481340000,"doc_count":14},{"key_as_string":"2017-02-07T15:30:00.000Z","key":1486481400000,"doc_count":12},{"key_as_string":"2017-02-07T15:31:00.000Z","key":1486481460000,"doc_count":19},{"key_as_string":"2017-02-07T15:32:00.000Z","key":1486481520000,"doc_count":15},{"key_as_string":"2017-02-07T15:33:00.000Z","key":1486481580000,"doc_count":15},{"key_as_string":"2017-02-07T15:34:00.000Z","key":1486481640000,"doc_count":11},{"key_as_string":"2017-02-07T15:35:00.000Z","key":1486481700000,"doc_count":14},{"key_as_string":"2017-02-07T15:36:00.000Z","key":1486481760000,"doc_count":13},{"key_as_string":"2017-02-07T15:37:00.000Z","key":1486481820000,"doc_count":18},{"key_as_string":"2017-02-07T15:38:00.000Z","key":1486481880000,"doc_count":8},{"key_as_string":"2017-02-07T15:39:00.000Z","key":1486481940000,"doc_count":14},{"key_as_string":"2017-02-07T15:40:00.000Z","key":1486482000000,"doc_count":11},{"key_as_string":"2017-02-07T15:41:00.000Z","key":1486482060000,"doc_count":10},{"key_as_string":"2017-02-07T15:42:00.000Z","key":1486482120000,"doc_count":10},{"key_as_string":"2017-02-07T15:43:00.000Z","key":1486482180000,"doc_count":14},{"key_as_string":"2017-02-07T15:44:00.000Z","key":1486482240000,"doc_count":10},{"key_as_string":"2017-02-07T15:45:00.000Z","key":1486482300000,"doc_count":13},{"key_as_string":"2017-02-07T15:46:00.000Z","key":1486482360000,"doc_count":15},{"key_as_string":"2017-02-07T15:47:00.000Z","key":1486482420000,"doc_count":11},{"key_as_string":"2017-02-07T15:48:00.000Z","key":1486482480000,"doc_count":13},{"key_as_string":"2017-02-07T15:49:00.000Z","key":1486482540000,"doc_count":10},{"key_as_string":"2017-02-07T15:50:00.000Z","key":1486482600000,"doc_count":17},{"key_as_string":"2017-02-07T15:51:00.000Z","key":1486482660000,"doc_count":11},{"key_as_string":"2017-02-07T15:52:00.000Z","key":1486482720000,"doc_count":15},{"key_as_string":"2017-02-07T15:53:00.000Z","key":1486482780000,"doc_count":10},{"key_as_string":"2017-02-07T15:54:00.000Z","key":1486482840000,"doc_count":11},{"key_as_string":"2017-02-07T15:55:00.000Z","key":1486482900000,"doc_count":14},{"key_as_string":"2017-02-07T15:56:00.000Z","key":1486482960000,"doc_count":16},{"key_as_string":"2017-02-07T15:57:00.000Z","key":1486483020000,"doc_count":15},{"key_as_string":"2017-02-07T15:58:00.000Z","key":1486483080000,"doc_count":13},{"key_as_string":"2017-02-07T15:59:00.000Z","key":1486483140000,"doc_count":10},{"key_as_string":"2017-02-07T16:00:00.000Z","key":1486483200000,"doc_count":18},{"key_as_string":"2017-02-07T16:01:00.000Z","key":1486483260000,"doc_count":11},{"key_as_string":"2017-02-07T16:02:00.000Z","key":1486483320000,"doc_count":14},{"key_as_string":"2017-02-07T16:03:00.000Z","key":1486483380000,"doc_count":16},{"key_as_string":"2017-02-07T16:04:00.000Z","key":1486483440000,"doc_count":10},{"key_as_string":"2017-02-07T16:05:00.000Z","key":1486483500000,"doc_count":12},{"key_as_string":"2017-02-07T16:06:00.000Z","key":1486483560000,"doc_count":11},{"key_as_string":"2017-02-07T16:07:00.000Z","key":1486483620000,"doc_count":14},{"key_as_string":"2017-02-07T16:08:00.000Z","key":1486483680000,"doc_count":12},{"key_as_string":"2017-02-07T16:09:00.000Z","key":1486483740000,"doc_count":8},{"key_as_string":"2017-02-07T16:10:00.000Z","key":1486483800000,"doc_count":13},{"key_as_string":"2017-02-07T16:11:00.000Z","key":1486483860000,"doc_count":15},{"key_as_string":"2017-02-07T16:12:00.000Z","key":1486483920000,"doc_count":9},{"key_as_string":"2017-02-07T16:13:00.000Z","key":1486483980000,"doc_count":14},{"key_as_string":"2017-02-07T16:14:00.000Z","key":1486484040000,"doc_count":11},{"key_as_string":"2017-02-07T16:15:00.000Z","key":1486484100000,"doc_count":10},{"key_as_string":"2017-02-07T16:16:00.000Z","key":1486484160000,"doc_count":14},{"key_as_string":"2017-02-07T16:17:00.000Z","key":1486484220000,"doc_count":10},{"key_as_string":"2017-02-07T16:18:00.000Z","key":1486484280000,"doc_count":10},{"key_as_string":"2017-02-07T16:19:00.000Z","key":1486484340000,"doc_count":17},{"key_as_string":"2017-02-07T16:20:00.000Z","key":1486484400000,"doc_count":11},{"key_as_string":"2017-02-07T16:21:00.000Z","key":1486484460000,"doc_count":14},{"key_as_string":"2017-02-07T16:22:00.000Z","key":1486484520000,"doc_count":15},{"key_as_string":"2017-02-07T16:23:00.000Z","key":1486484580000,"doc_count":8},{"key_as_string":"2017-02-07T16:24:00.000Z","key":1486484640000,"doc_count":14},{"key_as_string":"2017-02-07T16:25:00.000Z","key":1486484700000,"doc_count":10},{"key_as_string":"2017-02-07T16:26:00.000Z","key":1486484760000,"doc_count":10},{"key_as_string":"2017-02-07T16:27:00.000Z","key":1486484820000,"doc_count":14},{"key_as_string":"2017-02-07T16:28:00.000Z","key":1486484880000,"doc_count":19},{"key_as_string":"2017-02-07T16:29:00.000Z","key":1486484940000,"doc_count":9},{"key_as_string":"2017-02-07T16:30:00.000Z","key":1486485000000,"doc_count":15},{"key_as_string":"2017-02-07T16:31:00.000Z","key":1486485060000,"doc_count":13},{"key_as_string":"2017-02-07T16:32:00.000Z","key":1486485120000,"doc_count":10},{"key_as_string":"2017-02-07T16:33:00.000Z","key":1486485180000,"doc_count":12},{"key_as_string":"2017-02-07T16:34:00.000Z","key":1486485240000,"doc_count":12},{"key_as_string":"2017-02-07T16:35:00.000Z","key":1486485300000,"doc_count":17},{"key_as_string":"2017-02-07T16:36:00.000Z","key":1486485360000,"doc_count":8},{"key_as_string":"2017-02-07T16:37:00.000Z","key":1486485420000,"doc_count":17},{"key_as_string":"2017-02-07T16:38:00.000Z","key":1486485480000,"doc_count":13},{"key_as_string":"2017-02-07T16:39:00.000Z","key":1486485540000,"doc_count":7},{"key_as_string":"2017-02-07T16:40:00.000Z","key":1486485600000,"doc_count":11},{"key_as_string":"2017-02-07T16:41:00.000Z","key":1486485660000,"doc_count":14},{"key_as_string":"2017-02-07T16:42:00.000Z","key":1486485720000,"doc_count":16},{"key_as_string":"2017-02-07T16:43:00.000Z","key":1486485780000,"doc_count":11},{"key_as_string":"2017-02-07T16:44:00.000Z","key":1486485840000,"doc_count":15},{"key_as_string":"2017-02-07T16:45:00.000Z","key":1486485900000,"doc_count":15},{"key_as_string":"2017-02-07T16:46:00.000Z","key":1486485960000,"doc_count":11},{"key_as_string":"2017-02-07T16:47:00.000Z","key":1486486020000,"doc_count":11},{"key_as_string":"2017-02-07T16:48:00.000Z","key":1486486080000,"doc_count":12},{"key_as_string":"2017-02-07T16:49:00.000Z","key":1486486140000,"doc_count":12},{"key_as_string":"2017-02-07T16:50:00.000Z","key":1486486200000,"doc_count":11},{"key_as_string":"2017-02-07T16:51:00.000Z","key":1486486260000,"doc_count":12},{"key_as_string":"2017-02-07T16:52:00.000Z","key":1486486320000,"doc_count":12},{"key_as_string":"2017-02-07T16:53:00.000Z","key":1486486380000,"doc_count":14},{"key_as_string":"2017-02-07T16:54:00.000Z","key":1486486440000,"doc_count":10},{"key_as_string":"2017-02-07T16:55:00.000Z","key":1486486500000,"doc_count":12},{"key_as_string":"2017-02-07T16:56:00.000Z","key":1486486560000,"doc_count":15},{"key_as_string":"2017-02-07T16:57:00.000Z","key":1486486620000,"doc_count":14},{"key_as_string":"2017-02-07T16:58:00.000Z","key":1486486680000,"doc_count":9},{"key_as_string":"2017-02-07T16:59:00.000Z","key":1486486740000,"doc_count":15},{"key_as_string":"2017-02-07T17:00:00.000Z","key":1486486800000,"doc_count":10},{"key_as_string":"2017-02-07T17:01:00.000Z","key":1486486860000,"doc_count":9},{"key_as_string":"2017-02-07T17:02:00.000Z","key":1486486920000,"doc_count":15},{"key_as_string":"2017-02-07T17:03:00.000Z","key":1486486980000,"doc_count":11},{"key_as_string":"2017-02-07T17:04:00.000Z","key":1486487040000,"doc_count":11},{"key_as_string":"2017-02-07T17:05:00.000Z","key":1486487100000,"doc_count":6},{"key_as_string":"2017-02-07T17:06:00.000Z","key":1486487160000,"doc_count":20},{"key_as_string":"2017-02-07T17:07:00.000Z","key":1486487220000,"doc_count":12},{"key_as_string":"2017-02-07T17:08:00.000Z","key":1486487280000,"doc_count":10},{"key_as_string":"2017-02-07T17:09:00.000Z","key":1486487340000,"doc_count":15},{"key_as_string":"2017-02-07T17:10:00.000Z","key":1486487400000,"doc_count":15},{"key_as_string":"2017-02-07T17:11:00.000Z","key":1486487460000,"doc_count":12},{"key_as_string":"2017-02-07T17:12:00.000Z","key":1486487520000,"doc_count":10},{"key_as_string":"2017-02-07T17:13:00.000Z","key":1486487580000,"doc_count":14},{"key_as_string":"2017-02-07T17:14:00.000Z","key":1486487640000,"doc_count":11},{"key_as_string":"2017-02-07T17:15:00.000Z","key":1486487700000,"doc_count":15},{"key_as_string":"2017-02-07T17:16:00.000Z","key":1486487760000,"doc_count":9},{"key_as_string":"2017-02-07T17:17:00.000Z","key":1486487820000,"doc_count":15},{"key_as_string":"2017-02-07T17:18:00.000Z","key":1486487880000,"doc_count":10},{"key_as_string":"2017-02-07T17:19:00.000Z","key":1486487940000,"doc_count":15},{"key_as_string":"2017-02-07T17:20:00.000Z","key":1486488000000,"doc_count":8},{"key_as_string":"2017-02-07T17:21:00.000Z","key":1486488060000,"doc_count":9},{"key_as_string":"2017-02-07T17:22:00.000Z","key":1486488120000,"doc_count":13},{"key_as_string":"2017-02-07T17:23:00.000Z","key":1486488180000,"doc_count":12},{"key_as_string":"2017-02-07T17:24:00.000Z","key":1486488240000,"doc_count":12},{"key_as_string":"2017-02-07T17:25:00.000Z","key":1486488300000,"doc_count":13},{"key_as_string":"2017-02-07T17:26:00.000Z","key":1486488360000,"doc_count":12},{"key_as_string":"2017-02-07T17:27:00.000Z","key":1486488420000,"doc_count":13},{"key_as_string":"2017-02-07T17:28:00.000Z","key":1486488480000,"doc_count":13},{"key_as_string":"2017-02-07T17:29:00.000Z","key":1486488540000,"doc_count":13},{"key_as_string":"2017-02-07T17:30:00.000Z","key":1486488600000,"doc_count":15},{"key_as_string":"2017-02-07T17:31:00.000Z","key":1486488660000,"doc_count":11},{"key_as_string":"2017-02-07T17:32:00.000Z","key":1486488720000,"doc_count":10},{"key_as_string":"2017-02-07T17:33:00.000Z","key":1486488780000,"doc_count":10},{"key_as_string":"2017-02-07T17:34:00.000Z","key":1486488840000,"doc_count":10},{"key_as_string":"2017-02-07T17:35:00.000Z","key":1486488900000,"doc_count":12},{"key_as_string":"2017-02-07T17:36:00.000Z","key":1486488960000,"doc_count":15},{"key_as_string":"2017-02-07T17:37:00.000Z","key":1486489020000,"doc_count":8},{"key_as_string":"2017-02-07T17:38:00.000Z","key":1486489080000,"doc_count":15},{"key_as_string":"2017-02-07T17:39:00.000Z","key":1486489140000,"doc_count":11},{"key_as_string":"2017-02-07T17:40:00.000Z","key":1486489200000,"doc_count":8},{"key_as_string":"2017-02-07T17:41:00.000Z","key":1486489260000,"doc_count":17},{"key_as_string":"2017-02-07T17:42:00.000Z","key":1486489320000,"doc_count":16},{"key_as_string":"2017-02-07T17:43:00.000Z","key":1486489380000,"doc_count":12},{"key_as_string":"2017-02-07T17:44:00.000Z","key":1486489440000,"doc_count":8},{"key_as_string":"2017-02-07T17:45:00.000Z","key":1486489500000,"doc_count":12},{"key_as_string":"2017-02-07T17:46:00.000Z","key":1486489560000,"doc_count":13},{"key_as_string":"2017-02-07T17:47:00.000Z","key":1486489620000,"doc_count":8},{"key_as_string":"2017-02-07T17:48:00.000Z","key":1486489680000,"doc_count":7},{"key_as_string":"2017-02-07T17:49:00.000Z","key":1486489740000,"doc_count":16},{"key_as_string":"2017-02-07T17:50:00.000Z","key":1486489800000,"doc_count":13},{"key_as_string":"2017-02-07T17:51:00.000Z","key":1486489860000,"doc_count":11},{"key_as_string":"2017-02-07T17:52:00.000Z","key":1486489920000,"doc_count":14},{"key_as_string":"2017-02-07T17:53:00.000Z","key":1486489980000,"doc_count":8},{"key_as_string":"2017-02-07T17:54:00.000Z","key":1486490040000,"doc_count":10},{"key_as_string":"2017-02-07T17:55:00.000Z","key":1486490100000,"doc_count":12},{"key_as_string":"2017-02-07T17:56:00.000Z","key":1486490160000,"doc_count":11},{"key_as_string":"2017-02-07T17:57:00.000Z","key":1486490220000,"doc_count":9},{"key_as_string":"2017-02-07T17:58:00.000Z","key":1486490280000,"doc_count":10},{"key_as_string":"2017-02-07T17:59:00.000Z","key":1486490340000,"doc_count":11},{"key_as_string":"2017-02-07T18:00:00.000Z","key":1486490400000,"doc_count":8},{"key_as_string":"2017-02-07T18:01:00.000Z","key":1486490460000,"doc_count":13},{"key_as_string":"2017-02-07T18:02:00.000Z","key":1486490520000,"doc_count":19},{"key_as_string":"2017-02-07T18:03:00.000Z","key":1486490580000,"doc_count":7},{"key_as_string":"2017-02-07T18:04:00.000Z","key":1486490640000,"doc_count":11},{"key_as_string":"2017-02-07T18:05:00.000Z","key":1486490700000,"doc_count":11},{"key_as_string":"2017-02-07T18:06:00.000Z","key":1486490760000,"doc_count":9},{"key_as_string":"2017-02-07T18:07:00.000Z","key":1486490820000,"doc_count":16},{"key_as_string":"2017-02-07T18:08:00.000Z","key":1486490880000,"doc_count":13},{"key_as_string":"2017-02-07T18:09:00.000Z","key":1486490940000,"doc_count":9},{"key_as_string":"2017-02-07T18:10:00.000Z","key":1486491000000,"doc_count":14},{"key_as_string":"2017-02-07T18:11:00.000Z","key":1486491060000,"doc_count":9},{"key_as_string":"2017-02-07T18:12:00.000Z","key":1486491120000,"doc_count":12},{"key_as_string":"2017-02-07T18:13:00.000Z","key":1486491180000,"doc_count":12},{"key_as_string":"2017-02-07T18:14:00.000Z","key":1486491240000,"doc_count":10},{"key_as_string":"2017-02-07T18:15:00.000Z","key":1486491300000,"doc_count":13},{"key_as_string":"2017-02-07T18:16:00.000Z","key":1486491360000,"doc_count":11},{"key_as_string":"2017-02-07T18:17:00.000Z","key":1486491420000,"doc_count":13},{"key_as_string":"2017-02-07T18:18:00.000Z","key":1486491480000,"doc_count":10},{"key_as_string":"2017-02-07T18:19:00.000Z","key":1486491540000,"doc_count":10},{"key_as_string":"2017-02-07T18:20:00.000Z","key":1486491600000,"doc_count":8},{"key_as_string":"2017-02-07T18:21:00.000Z","key":1486491660000,"doc_count":15},{"key_as_string":"2017-02-07T18:22:00.000Z","key":1486491720000,"doc_count":16},{"key_as_string":"2017-02-07T18:23:00.000Z","key":1486491780000,"doc_count":14},{"key_as_string":"2017-02-07T18:24:00.000Z","key":1486491840000,"doc_count":17},{"key_as_string":"2017-02-07T18:25:00.000Z","key":1486491900000,"doc_count":11},{"key_as_string":"2017-02-07T18:26:00.000Z","key":1486491960000,"doc_count":13},{"key_as_string":"2017-02-07T18:27:00.000Z","key":1486492020000,"doc_count":15},{"key_as_string":"2017-02-07T18:28:00.000Z","key":1486492080000,"doc_count":13},{"key_as_string":"2017-02-07T18:29:00.000Z","key":1486492140000,"doc_count":13},{"key_as_string":"2017-02-07T18:30:00.000Z","key":1486492200000,"doc_count":12},{"key_as_string":"2017-02-07T18:31:00.000Z","key":1486492260000,"doc_count":14},{"key_as_string":"2017-02-07T18:32:00.000Z","key":1486492320000,"doc_count":13},{"key_as_string":"2017-02-07T18:33:00.000Z","key":1486492380000,"doc_count":6},{"key_as_string":"2017-02-07T18:34:00.000Z","key":1486492440000,"doc_count":14},{"key_as_string":"2017-02-07T18:35:00.000Z","key":1486492500000,"doc_count":14},{"key_as_string":"2017-02-07T18:36:00.000Z","key":1486492560000,"doc_count":9},{"key_as_string":"2017-02-07T18:37:00.000Z","key":1486492620000,"doc_count":12},{"key_as_string":"2017-02-07T18:38:00.000Z","key":1486492680000,"doc_count":8},{"key_as_string":"2017-02-07T18:39:00.000Z","key":1486492740000,"doc_count":13},{"key_as_string":"2017-02-07T18:40:00.000Z","key":1486492800000,"doc_count":6},{"key_as_string":"2017-02-07T18:41:00.000Z","key":1486492860000,"doc_count":16},{"key_as_string":"2017-02-07T18:42:00.000Z","key":1486492920000,"doc_count":12},{"key_as_string":"2017-02-07T18:43:00.000Z","key":1486492980000,"doc_count":9},{"key_as_string":"2017-02-07T18:44:00.000Z","key":1486493040000,"doc_count":14},{"key_as_string":"2017-02-07T18:45:00.000Z","key":1486493100000,"doc_count":14},{"key_as_string":"2017-02-07T18:46:00.000Z","key":1486493160000,"doc_count":8},{"key_as_string":"2017-02-07T18:47:00.000Z","key":1486493220000,"doc_count":12},{"key_as_string":"2017-02-07T18:48:00.000Z","key":1486493280000,"doc_count":11},{"key_as_string":"2017-02-07T18:49:00.000Z","key":1486493340000,"doc_count":14},{"key_as_string":"2017-02-07T18:50:00.000Z","key":1486493400000,"doc_count":10},{"key_as_string":"2017-02-07T18:51:00.000Z","key":1486493460000,"doc_count":11},{"key_as_string":"2017-02-07T18:52:00.000Z","key":1486493520000,"doc_count":17},{"key_as_string":"2017-02-07T18:53:00.000Z","key":1486493580000,"doc_count":11},{"key_as_string":"2017-02-07T18:54:00.000Z","key":1486493640000,"doc_count":12},{"key_as_string":"2017-02-07T18:55:00.000Z","key":1486493700000,"doc_count":10},{"key_as_string":"2017-02-07T18:56:00.000Z","key":1486493760000,"doc_count":10},{"key_as_string":"2017-02-07T18:57:00.000Z","key":1486493820000,"doc_count":11},{"key_as_string":"2017-02-07T18:58:00.000Z","key":1486493880000,"doc_count":11},{"key_as_string":"2017-02-07T18:59:00.000Z","key":1486493940000,"doc_count":13},{"key_as_string":"2017-02-07T19:00:00.000Z","key":1486494000000,"doc_count":9},{"key_as_string":"2017-02-07T19:01:00.000Z","key":1486494060000,"doc_count":15},{"key_as_string":"2017-02-07T19:02:00.000Z","key":1486494120000,"doc_count":10},{"key_as_string":"2017-02-07T19:03:00.000Z","key":1486494180000,"doc_count":11},{"key_as_string":"2017-02-07T19:04:00.000Z","key":1486494240000,"doc_count":10},{"key_as_string":"2017-02-07T19:05:00.000Z","key":1486494300000,"doc_count":10},{"key_as_string":"2017-02-07T19:06:00.000Z","key":1486494360000,"doc_count":15},{"key_as_string":"2017-02-07T19:07:00.000Z","key":1486494420000,"doc_count":14},{"key_as_string":"2017-02-07T19:08:00.000Z","key":1486494480000,"doc_count":7},{"key_as_string":"2017-02-07T19:09:00.000Z","key":1486494540000,"doc_count":14},{"key_as_string":"2017-02-07T19:10:00.000Z","key":1486494600000,"doc_count":8},{"key_as_string":"2017-02-07T19:11:00.000Z","key":1486494660000,"doc_count":11},{"key_as_string":"2017-02-07T19:12:00.000Z","key":1486494720000,"doc_count":10},{"key_as_string":"2017-02-07T19:13:00.000Z","key":1486494780000,"doc_count":11},{"key_as_string":"2017-02-07T19:14:00.000Z","key":1486494840000,"doc_count":13},{"key_as_string":"2017-02-07T19:15:00.000Z","key":1486494900000,"doc_count":16},{"key_as_string":"2017-02-07T19:16:00.000Z","key":1486494960000,"doc_count":5},{"key_as_string":"2017-02-07T19:17:00.000Z","key":1486495020000,"doc_count":14},{"key_as_string":"2017-02-07T19:18:00.000Z","key":1486495080000,"doc_count":13},{"key_as_string":"2017-02-07T19:19:00.000Z","key":1486495140000,"doc_count":10},{"key_as_string":"2017-02-07T19:20:00.000Z","key":1486495200000,"doc_count":13},{"key_as_string":"2017-02-07T19:21:00.000Z","key":1486495260000,"doc_count":10},{"key_as_string":"2017-02-07T19:22:00.000Z","key":1486495320000,"doc_count":12},{"key_as_string":"2017-02-07T19:23:00.000Z","key":1486495380000,"doc_count":13},{"key_as_string":"2017-02-07T19:24:00.000Z","key":1486495440000,"doc_count":10},{"key_as_string":"2017-02-07T19:25:00.000Z","key":1486495500000,"doc_count":10},{"key_as_string":"2017-02-07T19:26:00.000Z","key":1486495560000,"doc_count":11},{"key_as_string":"2017-02-07T19:27:00.000Z","key":1486495620000,"doc_count":9},{"key_as_string":"2017-02-07T19:28:00.000Z","key":1486495680000,"doc_count":10},{"key_as_string":"2017-02-07T19:29:00.000Z","key":1486495740000,"doc_count":14},{"key_as_string":"2017-02-07T19:30:00.000Z","key":1486495800000,"doc_count":14},{"key_as_string":"2017-02-07T19:31:00.000Z","key":1486495860000,"doc_count":12},{"key_as_string":"2017-02-07T19:32:00.000Z","key":1486495920000,"doc_count":6},{"key_as_string":"2017-02-07T19:33:00.000Z","key":1486495980000,"doc_count":11},{"key_as_string":"2017-02-07T19:34:00.000Z","key":1486496040000,"doc_count":12},{"key_as_string":"2017-02-07T19:35:00.000Z","key":1486496100000,"doc_count":9},{"key_as_string":"2017-02-07T19:36:00.000Z","key":1486496160000,"doc_count":11},{"key_as_string":"2017-02-07T19:37:00.000Z","key":1486496220000,"doc_count":14},{"key_as_string":"2017-02-07T19:38:00.000Z","key":1486496280000,"doc_count":9},{"key_as_string":"2017-02-07T19:39:00.000Z","key":1486496340000,"doc_count":10},{"key_as_string":"2017-02-07T19:40:00.000Z","key":1486496400000,"doc_count":10},{"key_as_string":"2017-02-07T19:41:00.000Z","key":1486496460000,"doc_count":9},{"key_as_string":"2017-02-07T19:42:00.000Z","key":1486496520000,"doc_count":12},{"key_as_string":"2017-02-07T19:43:00.000Z","key":1486496580000,"doc_count":10},{"key_as_string":"2017-02-07T19:44:00.000Z","key":1486496640000,"doc_count":10},{"key_as_string":"2017-02-07T19:45:00.000Z","key":1486496700000,"doc_count":14},{"key_as_string":"2017-02-07T19:46:00.000Z","key":1486496760000,"doc_count":7},{"key_as_string":"2017-02-07T19:47:00.000Z","key":1486496820000,"doc_count":14},{"key_as_string":"2017-02-07T19:48:00.000Z","key":1486496880000,"doc_count":12},{"key_as_string":"2017-02-07T19:49:00.000Z","key":1486496940000,"doc_count":8},{"key_as_string":"2017-02-07T19:50:00.000Z","key":1486497000000,"doc_count":14},{"key_as_string":"2017-02-07T19:51:00.000Z","key":1486497060000,"doc_count":7},{"key_as_string":"2017-02-07T19:52:00.000Z","key":1486497120000,"doc_count":14},{"key_as_string":"2017-02-07T19:53:00.000Z","key":1486497180000,"doc_count":10},{"key_as_string":"2017-02-07T19:54:00.000Z","key":1486497240000,"doc_count":9},{"key_as_string":"2017-02-07T19:55:00.000Z","key":1486497300000,"doc_count":13},{"key_as_string":"2017-02-07T19:56:00.000Z","key":1486497360000,"doc_count":6},{"key_as_string":"2017-02-07T19:57:00.000Z","key":1486497420000,"doc_count":7},{"key_as_string":"2017-02-07T19:58:00.000Z","key":1486497480000,"doc_count":13},{"key_as_string":"2017-02-07T19:59:00.000Z","key":1486497540000,"doc_count":14},{"key_as_string":"2017-02-07T20:00:00.000Z","key":1486497600000,"doc_count":9},{"key_as_string":"2017-02-07T20:01:00.000Z","key":1486497660000,"doc_count":12},{"key_as_string":"2017-02-07T20:02:00.000Z","key":1486497720000,"doc_count":9},{"key_as_string":"2017-02-07T20:03:00.000Z","key":1486497780000,"doc_count":11},{"key_as_string":"2017-02-07T20:04:00.000Z","key":1486497840000,"doc_count":12},{"key_as_string":"2017-02-07T20:05:00.000Z","key":1486497900000,"doc_count":15},{"key_as_string":"2017-02-07T20:06:00.000Z","key":1486497960000,"doc_count":8},{"key_as_string":"2017-02-07T20:07:00.000Z","key":1486498020000,"doc_count":3},{"key_as_string":"2017-02-07T20:08:00.000Z","key":1486498080000,"doc_count":12},{"key_as_string":"2017-02-07T20:09:00.000Z","key":1486498140000,"doc_count":12},{"key_as_string":"2017-02-07T20:10:00.000Z","key":1486498200000,"doc_count":10},{"key_as_string":"2017-02-07T20:11:00.000Z","key":1486498260000,"doc_count":16},{"key_as_string":"2017-02-07T20:12:00.000Z","key":1486498320000,"doc_count":12},{"key_as_string":"2017-02-07T20:13:00.000Z","key":1486498380000,"doc_count":6},{"key_as_string":"2017-02-07T20:14:00.000Z","key":1486498440000,"doc_count":12},{"key_as_string":"2017-02-07T20:15:00.000Z","key":1486498500000,"doc_count":7},{"key_as_string":"2017-02-07T20:16:00.000Z","key":1486498560000,"doc_count":12},{"key_as_string":"2017-02-07T20:17:00.000Z","key":1486498620000,"doc_count":9},{"key_as_string":"2017-02-07T20:18:00.000Z","key":1486498680000,"doc_count":13},{"key_as_string":"2017-02-07T20:19:00.000Z","key":1486498740000,"doc_count":11},{"key_as_string":"2017-02-07T20:20:00.000Z","key":1486498800000,"doc_count":8},{"key_as_string":"2017-02-07T20:21:00.000Z","key":1486498860000,"doc_count":11},{"key_as_string":"2017-02-07T20:22:00.000Z","key":1486498920000,"doc_count":7},{"key_as_string":"2017-02-07T20:23:00.000Z","key":1486498980000,"doc_count":11},{"key_as_string":"2017-02-07T20:24:00.000Z","key":1486499040000,"doc_count":11},{"key_as_string":"2017-02-07T20:25:00.000Z","key":1486499100000,"doc_count":7},{"key_as_string":"2017-02-07T20:26:00.000Z","key":1486499160000,"doc_count":11},{"key_as_string":"2017-02-07T20:27:00.000Z","key":1486499220000,"doc_count":12},{"key_as_string":"2017-02-07T20:28:00.000Z","key":1486499280000,"doc_count":13},{"key_as_string":"2017-02-07T20:29:00.000Z","key":1486499340000,"doc_count":11},{"key_as_string":"2017-02-07T20:30:00.000Z","key":1486499400000,"doc_count":6},{"key_as_string":"2017-02-07T20:31:00.000Z","key":1486499460000,"doc_count":12},{"key_as_string":"2017-02-07T20:32:00.000Z","key":1486499520000,"doc_count":9},{"key_as_string":"2017-02-07T20:33:00.000Z","key":1486499580000,"doc_count":13},{"key_as_string":"2017-02-07T20:34:00.000Z","key":1486499640000,"doc_count":11},{"key_as_string":"2017-02-07T20:35:00.000Z","key":1486499700000,"doc_count":16},{"key_as_string":"2017-02-07T20:36:00.000Z","key":1486499760000,"doc_count":9},{"key_as_string":"2017-02-07T20:37:00.000Z","key":1486499820000,"doc_count":7},{"key_as_string":"2017-02-07T20:38:00.000Z","key":1486499880000,"doc_count":14},{"key_as_string":"2017-02-07T20:39:00.000Z","key":1486499940000,"doc_count":10},{"key_as_string":"2017-02-07T20:40:00.000Z","key":1486500000000,"doc_count":9},{"key_as_string":"2017-02-07T20:41:00.000Z","key":1486500060000,"doc_count":11},{"key_as_string":"2017-02-07T20:42:00.000Z","key":1486500120000,"doc_count":15},{"key_as_string":"2017-02-07T20:43:00.000Z","key":1486500180000,"doc_count":8},{"key_as_string":"2017-02-07T20:44:00.000Z","key":1486500240000,"doc_count":16},{"key_as_string":"2017-02-07T20:45:00.000Z","key":1486500300000,"doc_count":8},{"key_as_string":"2017-02-07T20:46:00.000Z","key":1486500360000,"doc_count":12},{"key_as_string":"2017-02-07T20:47:00.000Z","key":1486500420000,"doc_count":11},{"key_as_string":"2017-02-07T20:48:00.000Z","key":1486500480000,"doc_count":6},{"key_as_string":"2017-02-07T20:49:00.000Z","key":1486500540000,"doc_count":10},{"key_as_string":"2017-02-07T20:50:00.000Z","key":1486500600000,"doc_count":8},{"key_as_string":"2017-02-07T20:51:00.000Z","key":1486500660000,"doc_count":15},{"key_as_string":"2017-02-07T20:52:00.000Z","key":1486500720000,"doc_count":9},{"key_as_string":"2017-02-07T20:53:00.000Z","key":1486500780000,"doc_count":11},{"key_as_string":"2017-02-07T20:54:00.000Z","key":1486500840000,"doc_count":13},{"key_as_string":"2017-02-07T20:55:00.000Z","key":1486500900000,"doc_count":9},{"key_as_string":"2017-02-07T20:56:00.000Z","key":1486500960000,"doc_count":5},{"key_as_string":"2017-02-07T20:57:00.000Z","key":1486501020000,"doc_count":10},{"key_as_string":"2017-02-07T20:58:00.000Z","key":1486501080000,"doc_count":13},{"key_as_string":"2017-02-07T20:59:00.000Z","key":1486501140000,"doc_count":14},{"key_as_string":"2017-02-07T21:00:00.000Z","key":1486501200000,"doc_count":13},{"key_as_string":"2017-02-07T21:01:00.000Z","key":1486501260000,"doc_count":8},{"key_as_string":"2017-02-07T21:02:00.000Z","key":1486501320000,"doc_count":11},{"key_as_string":"2017-02-07T21:03:00.000Z","key":1486501380000,"doc_count":9},{"key_as_string":"2017-02-07T21:04:00.000Z","key":1486501440000,"doc_count":16},{"key_as_string":"2017-02-07T21:05:00.000Z","key":1486501500000,"doc_count":10},{"key_as_string":"2017-02-07T21:06:00.000Z","key":1486501560000,"doc_count":8},{"key_as_string":"2017-02-07T21:07:00.000Z","key":1486501620000,"doc_count":16},{"key_as_string":"2017-02-07T21:08:00.000Z","key":1486501680000,"doc_count":13},{"key_as_string":"2017-02-07T21:09:00.000Z","key":1486501740000,"doc_count":10},{"key_as_string":"2017-02-07T21:10:00.000Z","key":1486501800000,"doc_count":11},{"key_as_string":"2017-02-07T21:11:00.000Z","key":1486501860000,"doc_count":8},{"key_as_string":"2017-02-07T21:12:00.000Z","key":1486501920000,"doc_count":12},{"key_as_string":"2017-02-07T21:13:00.000Z","key":1486501980000,"doc_count":17},{"key_as_string":"2017-02-07T21:14:00.000Z","key":1486502040000,"doc_count":6},{"key_as_string":"2017-02-07T21:15:00.000Z","key":1486502100000,"doc_count":12},{"key_as_string":"2017-02-07T21:16:00.000Z","key":1486502160000,"doc_count":9},{"key_as_string":"2017-02-07T21:17:00.000Z","key":1486502220000,"doc_count":8},{"key_as_string":"2017-02-07T21:18:00.000Z","key":1486502280000,"doc_count":8},{"key_as_string":"2017-02-07T21:19:00.000Z","key":1486502340000,"doc_count":11},{"key_as_string":"2017-02-07T21:20:00.000Z","key":1486502400000,"doc_count":11},{"key_as_string":"2017-02-07T21:21:00.000Z","key":1486502460000,"doc_count":10},{"key_as_string":"2017-02-07T21:22:00.000Z","key":1486502520000,"doc_count":10},{"key_as_string":"2017-02-07T21:23:00.000Z","key":1486502580000,"doc_count":13},{"key_as_string":"2017-02-07T21:24:00.000Z","key":1486502640000,"doc_count":10},{"key_as_string":"2017-02-07T21:25:00.000Z","key":1486502700000,"doc_count":11},{"key_as_string":"2017-02-07T21:26:00.000Z","key":1486502760000,"doc_count":7},{"key_as_string":"2017-02-07T21:27:00.000Z","key":1486502820000,"doc_count":15},{"key_as_string":"2017-02-07T21:28:00.000Z","key":1486502880000,"doc_count":14},{"key_as_string":"2017-02-07T21:29:00.000Z","key":1486502940000,"doc_count":8},{"key_as_string":"2017-02-07T21:30:00.000Z","key":1486503000000,"doc_count":7},{"key_as_string":"2017-02-07T21:31:00.000Z","key":1486503060000,"doc_count":12},{"key_as_string":"2017-02-07T21:32:00.000Z","key":1486503120000,"doc_count":10},{"key_as_string":"2017-02-07T21:33:00.000Z","key":1486503180000,"doc_count":10},{"key_as_string":"2017-02-07T21:34:00.000Z","key":1486503240000,"doc_count":14},{"key_as_string":"2017-02-07T21:35:00.000Z","key":1486503300000,"doc_count":9},{"key_as_string":"2017-02-07T21:36:00.000Z","key":1486503360000,"doc_count":9},{"key_as_string":"2017-02-07T21:37:00.000Z","key":1486503420000,"doc_count":13},{"key_as_string":"2017-02-07T21:38:00.000Z","key":1486503480000,"doc_count":7},{"key_as_string":"2017-02-07T21:39:00.000Z","key":1486503540000,"doc_count":6},{"key_as_string":"2017-02-07T21:40:00.000Z","key":1486503600000,"doc_count":16},{"key_as_string":"2017-02-07T21:41:00.000Z","key":1486503660000,"doc_count":13},{"key_as_string":"2017-02-07T21:42:00.000Z","key":1486503720000,"doc_count":9},{"key_as_string":"2017-02-07T21:43:00.000Z","key":1486503780000,"doc_count":10},{"key_as_string":"2017-02-07T21:44:00.000Z","key":1486503840000,"doc_count":9},{"key_as_string":"2017-02-07T21:45:00.000Z","key":1486503900000,"doc_count":10},{"key_as_string":"2017-02-07T21:46:00.000Z","key":1486503960000,"doc_count":13},{"key_as_string":"2017-02-07T21:47:00.000Z","key":1486504020000,"doc_count":11},{"key_as_string":"2017-02-07T21:48:00.000Z","key":1486504080000,"doc_count":8},{"key_as_string":"2017-02-07T21:49:00.000Z","key":1486504140000,"doc_count":11},{"key_as_string":"2017-02-07T21:50:00.000Z","key":1486504200000,"doc_count":14},{"key_as_string":"2017-02-07T21:51:00.000Z","key":1486504260000,"doc_count":7},{"key_as_string":"2017-02-07T21:52:00.000Z","key":1486504320000,"doc_count":11},{"key_as_string":"2017-02-07T21:53:00.000Z","key":1486504380000,"doc_count":9},{"key_as_string":"2017-02-07T21:54:00.000Z","key":1486504440000,"doc_count":10},{"key_as_string":"2017-02-07T21:55:00.000Z","key":1486504500000,"doc_count":11},{"key_as_string":"2017-02-07T21:56:00.000Z","key":1486504560000,"doc_count":12},{"key_as_string":"2017-02-07T21:57:00.000Z","key":1486504620000,"doc_count":14},{"key_as_string":"2017-02-07T21:58:00.000Z","key":1486504680000,"doc_count":9},{"key_as_string":"2017-02-07T21:59:00.000Z","key":1486504740000,"doc_count":7},{"key_as_string":"2017-02-07T22:00:00.000Z","key":1486504800000,"doc_count":14},{"key_as_string":"2017-02-07T22:01:00.000Z","key":1486504860000,"doc_count":12},{"key_as_string":"2017-02-07T22:02:00.000Z","key":1486504920000,"doc_count":7},{"key_as_string":"2017-02-07T22:03:00.000Z","key":1486504980000,"doc_count":16},{"key_as_string":"2017-02-07T22:04:00.000Z","key":1486505040000,"doc_count":9},{"key_as_string":"2017-02-07T22:05:00.000Z","key":1486505100000,"doc_count":10},{"key_as_string":"2017-02-07T22:06:00.000Z","key":1486505160000,"doc_count":11},{"key_as_string":"2017-02-07T22:07:00.000Z","key":1486505220000,"doc_count":16},{"key_as_string":"2017-02-07T22:08:00.000Z","key":1486505280000,"doc_count":9},{"key_as_string":"2017-02-07T22:09:00.000Z","key":1486505340000,"doc_count":7},{"key_as_string":"2017-02-07T22:10:00.000Z","key":1486505400000,"doc_count":15},{"key_as_string":"2017-02-07T22:11:00.000Z","key":1486505460000,"doc_count":12},{"key_as_string":"2017-02-07T22:12:00.000Z","key":1486505520000,"doc_count":8},{"key_as_string":"2017-02-07T22:13:00.000Z","key":1486505580000,"doc_count":12},{"key_as_string":"2017-02-07T22:14:00.000Z","key":1486505640000,"doc_count":15},{"key_as_string":"2017-02-07T22:15:00.000Z","key":1486505700000,"doc_count":10},{"key_as_string":"2017-02-07T22:16:00.000Z","key":1486505760000,"doc_count":11},{"key_as_string":"2017-02-07T22:17:00.000Z","key":1486505820000,"doc_count":6},{"key_as_string":"2017-02-07T22:18:00.000Z","key":1486505880000,"doc_count":13},{"key_as_string":"2017-02-07T22:19:00.000Z","key":1486505940000,"doc_count":8},{"key_as_string":"2017-02-07T22:20:00.000Z","key":1486506000000,"doc_count":5},{"key_as_string":"2017-02-07T22:21:00.000Z","key":1486506060000,"doc_count":15},{"key_as_string":"2017-02-07T22:22:00.000Z","key":1486506120000,"doc_count":10},{"key_as_string":"2017-02-07T22:23:00.000Z","key":1486506180000,"doc_count":10},{"key_as_string":"2017-02-07T22:24:00.000Z","key":1486506240000,"doc_count":14},{"key_as_string":"2017-02-07T22:25:00.000Z","key":1486506300000,"doc_count":8},{"key_as_string":"2017-02-07T22:26:00.000Z","key":1486506360000,"doc_count":12},{"key_as_string":"2017-02-07T22:27:00.000Z","key":1486506420000,"doc_count":6},{"key_as_string":"2017-02-07T22:28:00.000Z","key":1486506480000,"doc_count":12},{"key_as_string":"2017-02-07T22:29:00.000Z","key":1486506540000,"doc_count":14},{"key_as_string":"2017-02-07T22:30:00.000Z","key":1486506600000,"doc_count":8},{"key_as_string":"2017-02-07T22:31:00.000Z","key":1486506660000,"doc_count":10},{"key_as_string":"2017-02-07T22:32:00.000Z","key":1486506720000,"doc_count":15},{"key_as_string":"2017-02-07T22:33:00.000Z","key":1486506780000,"doc_count":9},{"key_as_string":"2017-02-07T22:34:00.000Z","key":1486506840000,"doc_count":7},{"key_as_string":"2017-02-07T22:35:00.000Z","key":1486506900000,"doc_count":12},{"key_as_string":"2017-02-07T22:36:00.000Z","key":1486506960000,"doc_count":9},{"key_as_string":"2017-02-07T22:37:00.000Z","key":1486507020000,"doc_count":15},{"key_as_string":"2017-02-07T22:38:00.000Z","key":1486507080000,"doc_count":6},{"key_as_string":"2017-02-07T22:39:00.000Z","key":1486507140000,"doc_count":12},{"key_as_string":"2017-02-07T22:40:00.000Z","key":1486507200000,"doc_count":13},{"key_as_string":"2017-02-07T22:41:00.000Z","key":1486507260000,"doc_count":8},{"key_as_string":"2017-02-07T22:42:00.000Z","key":1486507320000,"doc_count":13},{"key_as_string":"2017-02-07T22:43:00.000Z","key":1486507380000,"doc_count":7},{"key_as_string":"2017-02-07T22:44:00.000Z","key":1486507440000,"doc_count":10},{"key_as_string":"2017-02-07T22:45:00.000Z","key":1486507500000,"doc_count":7},{"key_as_string":"2017-02-07T22:46:00.000Z","key":1486507560000,"doc_count":9},{"key_as_string":"2017-02-07T22:47:00.000Z","key":1486507620000,"doc_count":12},{"key_as_string":"2017-02-07T22:48:00.000Z","key":1486507680000,"doc_count":9},{"key_as_string":"2017-02-07T22:49:00.000Z","key":1486507740000,"doc_count":6},{"key_as_string":"2017-02-07T22:50:00.000Z","key":1486507800000,"doc_count":12},{"key_as_string":"2017-02-07T22:51:00.000Z","key":1486507860000,"doc_count":12},{"key_as_string":"2017-02-07T22:52:00.000Z","key":1486507920000,"doc_count":9},{"key_as_string":"2017-02-07T22:53:00.000Z","key":1486507980000,"doc_count":10},{"key_as_string":"2017-02-07T22:54:00.000Z","key":1486508040000,"doc_count":12},{"key_as_string":"2017-02-07T22:55:00.000Z","key":1486508100000,"doc_count":8},{"key_as_string":"2017-02-07T22:56:00.000Z","key":1486508160000,"doc_count":9},{"key_as_string":"2017-02-07T22:57:00.000Z","key":1486508220000,"doc_count":10},{"key_as_string":"2017-02-07T22:58:00.000Z","key":1486508280000,"doc_count":13},{"key_as_string":"2017-02-07T22:59:00.000Z","key":1486508340000,"doc_count":12},{"key_as_string":"2017-02-07T23:00:00.000Z","key":1486508400000,"doc_count":9},{"key_as_string":"2017-02-07T23:01:00.000Z","key":1486508460000,"doc_count":9},{"key_as_string":"2017-02-07T23:02:00.000Z","key":1486508520000,"doc_count":10},{"key_as_string":"2017-02-07T23:03:00.000Z","key":1486508580000,"doc_count":14},{"key_as_string":"2017-02-07T23:04:00.000Z","key":1486508640000,"doc_count":9},{"key_as_string":"2017-02-07T23:05:00.000Z","key":1486508700000,"doc_count":11},{"key_as_string":"2017-02-07T23:06:00.000Z","key":1486508760000,"doc_count":10},{"key_as_string":"2017-02-07T23:07:00.000Z","key":1486508820000,"doc_count":16},{"key_as_string":"2017-02-07T23:08:00.000Z","key":1486508880000,"doc_count":12},{"key_as_string":"2017-02-07T23:09:00.000Z","key":1486508940000,"doc_count":11},{"key_as_string":"2017-02-07T23:10:00.000Z","key":1486509000000,"doc_count":9},{"key_as_string":"2017-02-07T23:11:00.000Z","key":1486509060000,"doc_count":13},{"key_as_string":"2017-02-07T23:12:00.000Z","key":1486509120000,"doc_count":5},{"key_as_string":"2017-02-07T23:13:00.000Z","key":1486509180000,"doc_count":9},{"key_as_string":"2017-02-07T23:14:00.000Z","key":1486509240000,"doc_count":11},{"key_as_string":"2017-02-07T23:15:00.000Z","key":1486509300000,"doc_count":14},{"key_as_string":"2017-02-07T23:16:00.000Z","key":1486509360000,"doc_count":11},{"key_as_string":"2017-02-07T23:17:00.000Z","key":1486509420000,"doc_count":8},{"key_as_string":"2017-02-07T23:18:00.000Z","key":1486509480000,"doc_count":12},{"key_as_string":"2017-02-07T23:19:00.000Z","key":1486509540000,"doc_count":8},{"key_as_string":"2017-02-07T23:20:00.000Z","key":1486509600000,"doc_count":7},{"key_as_string":"2017-02-07T23:21:00.000Z","key":1486509660000,"doc_count":13},{"key_as_string":"2017-02-07T23:22:00.000Z","key":1486509720000,"doc_count":13},{"key_as_string":"2017-02-07T23:23:00.000Z","key":1486509780000,"doc_count":5},{"key_as_string":"2017-02-07T23:24:00.000Z","key":1486509840000,"doc_count":13},{"key_as_string":"2017-02-07T23:25:00.000Z","key":1486509900000,"doc_count":5},{"key_as_string":"2017-02-07T23:26:00.000Z","key":1486509960000,"doc_count":11},{"key_as_string":"2017-02-07T23:27:00.000Z","key":1486510020000,"doc_count":11},{"key_as_string":"2017-02-07T23:28:00.000Z","key":1486510080000,"doc_count":12},{"key_as_string":"2017-02-07T23:29:00.000Z","key":1486510140000,"doc_count":5},{"key_as_string":"2017-02-07T23:30:00.000Z","key":1486510200000,"doc_count":11},{"key_as_string":"2017-02-07T23:31:00.000Z","key":1486510260000,"doc_count":6},{"key_as_string":"2017-02-07T23:32:00.000Z","key":1486510320000,"doc_count":15},{"key_as_string":"2017-02-07T23:33:00.000Z","key":1486510380000,"doc_count":13},{"key_as_string":"2017-02-07T23:34:00.000Z","key":1486510440000,"doc_count":15},{"key_as_string":"2017-02-07T23:35:00.000Z","key":1486510500000,"doc_count":8},{"key_as_string":"2017-02-07T23:36:00.000Z","key":1486510560000,"doc_count":11},{"key_as_string":"2017-02-07T23:37:00.000Z","key":1486510620000,"doc_count":15},{"key_as_string":"2017-02-07T23:38:00.000Z","key":1486510680000,"doc_count":7},{"key_as_string":"2017-02-07T23:39:00.000Z","key":1486510740000,"doc_count":11},{"key_as_string":"2017-02-07T23:40:00.000Z","key":1486510800000,"doc_count":7},{"key_as_string":"2017-02-07T23:41:00.000Z","key":1486510860000,"doc_count":9},{"key_as_string":"2017-02-07T23:42:00.000Z","key":1486510920000,"doc_count":11},{"key_as_string":"2017-02-07T23:43:00.000Z","key":1486510980000,"doc_count":12},{"key_as_string":"2017-02-07T23:44:00.000Z","key":1486511040000,"doc_count":19},{"key_as_string":"2017-02-07T23:45:00.000Z","key":1486511100000,"doc_count":6},{"key_as_string":"2017-02-07T23:46:00.000Z","key":1486511160000,"doc_count":12},{"key_as_string":"2017-02-07T23:47:00.000Z","key":1486511220000,"doc_count":7},{"key_as_string":"2017-02-07T23:48:00.000Z","key":1486511280000,"doc_count":19},{"key_as_string":"2017-02-07T23:49:00.000Z","key":1486511340000,"doc_count":4},{"key_as_string":"2017-02-07T23:50:00.000Z","key":1486511400000,"doc_count":15},{"key_as_string":"2017-02-07T23:51:00.000Z","key":1486511460000,"doc_count":9},{"key_as_string":"2017-02-07T23:52:00.000Z","key":1486511520000,"doc_count":7},{"key_as_string":"2017-02-07T23:53:00.000Z","key":1486511580000,"doc_count":11},{"key_as_string":"2017-02-07T23:54:00.000Z","key":1486511640000,"doc_count":11},{"key_as_string":"2017-02-07T23:55:00.000Z","key":1486511700000,"doc_count":10},{"key_as_string":"2017-02-07T23:56:00.000Z","key":1486511760000,"doc_count":7},{"key_as_string":"2017-02-07T23:57:00.000Z","key":1486511820000,"doc_count":16},{"key_as_string":"2017-02-07T23:58:00.000Z","key":1486511880000,"doc_count":9},{"key_as_string":"2017-02-07T23:59:00.000Z","key":1486511940000,"doc_count":13},{"key_as_string":"2017-02-08T00:00:00.000Z","key":1486512000000,"doc_count":11},{"key_as_string":"2017-02-08T00:01:00.000Z","key":1486512060000,"doc_count":8},{"key_as_string":"2017-02-08T00:02:00.000Z","key":1486512120000,"doc_count":11},{"key_as_string":"2017-02-08T00:03:00.000Z","key":1486512180000,"doc_count":11},{"key_as_string":"2017-02-08T00:04:00.000Z","key":1486512240000,"doc_count":10},{"key_as_string":"2017-02-08T00:05:00.000Z","key":1486512300000,"doc_count":11},{"key_as_string":"2017-02-08T00:06:00.000Z","key":1486512360000,"doc_count":9},{"key_as_string":"2017-02-08T00:07:00.000Z","key":1486512420000,"doc_count":10},{"key_as_string":"2017-02-08T00:08:00.000Z","key":1486512480000,"doc_count":9},{"key_as_string":"2017-02-08T00:09:00.000Z","key":1486512540000,"doc_count":12},{"key_as_string":"2017-02-08T00:10:00.000Z","key":1486512600000,"doc_count":7},{"key_as_string":"2017-02-08T00:11:00.000Z","key":1486512660000,"doc_count":14},{"key_as_string":"2017-02-08T00:12:00.000Z","key":1486512720000,"doc_count":10},{"key_as_string":"2017-02-08T00:13:00.000Z","key":1486512780000,"doc_count":8},{"key_as_string":"2017-02-08T00:14:00.000Z","key":1486512840000,"doc_count":7},{"key_as_string":"2017-02-08T00:15:00.000Z","key":1486512900000,"doc_count":10},{"key_as_string":"2017-02-08T00:16:00.000Z","key":1486512960000,"doc_count":12},{"key_as_string":"2017-02-08T00:17:00.000Z","key":1486513020000,"doc_count":13},{"key_as_string":"2017-02-08T00:18:00.000Z","key":1486513080000,"doc_count":7},{"key_as_string":"2017-02-08T00:19:00.000Z","key":1486513140000,"doc_count":7},{"key_as_string":"2017-02-08T00:20:00.000Z","key":1486513200000,"doc_count":7},{"key_as_string":"2017-02-08T00:21:00.000Z","key":1486513260000,"doc_count":9},{"key_as_string":"2017-02-08T00:22:00.000Z","key":1486513320000,"doc_count":13},{"key_as_string":"2017-02-08T00:23:00.000Z","key":1486513380000,"doc_count":10},{"key_as_string":"2017-02-08T00:24:00.000Z","key":1486513440000,"doc_count":8},{"key_as_string":"2017-02-08T00:25:00.000Z","key":1486513500000,"doc_count":13},{"key_as_string":"2017-02-08T00:26:00.000Z","key":1486513560000,"doc_count":10},{"key_as_string":"2017-02-08T00:27:00.000Z","key":1486513620000,"doc_count":8},{"key_as_string":"2017-02-08T00:28:00.000Z","key":1486513680000,"doc_count":15},{"key_as_string":"2017-02-08T00:29:00.000Z","key":1486513740000,"doc_count":7},{"key_as_string":"2017-02-08T00:30:00.000Z","key":1486513800000,"doc_count":9},{"key_as_string":"2017-02-08T00:31:00.000Z","key":1486513860000,"doc_count":13},{"key_as_string":"2017-02-08T00:32:00.000Z","key":1486513920000,"doc_count":8},{"key_as_string":"2017-02-08T00:33:00.000Z","key":1486513980000,"doc_count":12},{"key_as_string":"2017-02-08T00:34:00.000Z","key":1486514040000,"doc_count":13},{"key_as_string":"2017-02-08T00:35:00.000Z","key":1486514100000,"doc_count":9},{"key_as_string":"2017-02-08T00:36:00.000Z","key":1486514160000,"doc_count":12},{"key_as_string":"2017-02-08T00:37:00.000Z","key":1486514220000,"doc_count":9},{"key_as_string":"2017-02-08T00:38:00.000Z","key":1486514280000,"doc_count":9},{"key_as_string":"2017-02-08T00:39:00.000Z","key":1486514340000,"doc_count":16},{"key_as_string":"2017-02-08T00:40:00.000Z","key":1486514400000,"doc_count":10},{"key_as_string":"2017-02-08T00:41:00.000Z","key":1486514460000,"doc_count":13},{"key_as_string":"2017-02-08T00:42:00.000Z","key":1486514520000,"doc_count":6},{"key_as_string":"2017-02-08T00:43:00.000Z","key":1486514580000,"doc_count":16},{"key_as_string":"2017-02-08T00:44:00.000Z","key":1486514640000,"doc_count":16},{"key_as_string":"2017-02-08T00:45:00.000Z","key":1486514700000,"doc_count":6},{"key_as_string":"2017-02-08T00:46:00.000Z","key":1486514760000,"doc_count":11},{"key_as_string":"2017-02-08T00:47:00.000Z","key":1486514820000,"doc_count":11},{"key_as_string":"2017-02-08T00:48:00.000Z","key":1486514880000,"doc_count":9},{"key_as_string":"2017-02-08T00:49:00.000Z","key":1486514940000,"doc_count":11},{"key_as_string":"2017-02-08T00:50:00.000Z","key":1486515000000,"doc_count":9},{"key_as_string":"2017-02-08T00:51:00.000Z","key":1486515060000,"doc_count":12},{"key_as_string":"2017-02-08T00:52:00.000Z","key":1486515120000,"doc_count":10},{"key_as_string":"2017-02-08T00:53:00.000Z","key":1486515180000,"doc_count":13},{"key_as_string":"2017-02-08T00:54:00.000Z","key":1486515240000,"doc_count":9},{"key_as_string":"2017-02-08T00:55:00.000Z","key":1486515300000,"doc_count":15},{"key_as_string":"2017-02-08T00:56:00.000Z","key":1486515360000,"doc_count":11},{"key_as_string":"2017-02-08T00:57:00.000Z","key":1486515420000,"doc_count":12},{"key_as_string":"2017-02-08T00:58:00.000Z","key":1486515480000,"doc_count":17},{"key_as_string":"2017-02-08T00:59:00.000Z","key":1486515540000,"doc_count":11},{"key_as_string":"2017-02-08T01:00:00.000Z","key":1486515600000,"doc_count":14},{"key_as_string":"2017-02-08T01:01:00.000Z","key":1486515660000,"doc_count":12},{"key_as_string":"2017-02-08T01:02:00.000Z","key":1486515720000,"doc_count":8},{"key_as_string":"2017-02-08T01:03:00.000Z","key":1486515780000,"doc_count":12},{"key_as_string":"2017-02-08T01:04:00.000Z","key":1486515840000,"doc_count":8},{"key_as_string":"2017-02-08T01:05:00.000Z","key":1486515900000,"doc_count":13},{"key_as_string":"2017-02-08T01:06:00.000Z","key":1486515960000,"doc_count":9},{"key_as_string":"2017-02-08T01:07:00.000Z","key":1486516020000,"doc_count":7},{"key_as_string":"2017-02-08T01:08:00.000Z","key":1486516080000,"doc_count":14},{"key_as_string":"2017-02-08T01:09:00.000Z","key":1486516140000,"doc_count":9},{"key_as_string":"2017-02-08T01:10:00.000Z","key":1486516200000,"doc_count":10},{"key_as_string":"2017-02-08T01:11:00.000Z","key":1486516260000,"doc_count":12},{"key_as_string":"2017-02-08T01:12:00.000Z","key":1486516320000,"doc_count":8},{"key_as_string":"2017-02-08T01:13:00.000Z","key":1486516380000,"doc_count":9},{"key_as_string":"2017-02-08T01:14:00.000Z","key":1486516440000,"doc_count":11},{"key_as_string":"2017-02-08T01:15:00.000Z","key":1486516500000,"doc_count":10},{"key_as_string":"2017-02-08T01:16:00.000Z","key":1486516560000,"doc_count":16},{"key_as_string":"2017-02-08T01:17:00.000Z","key":1486516620000,"doc_count":12},{"key_as_string":"2017-02-08T01:18:00.000Z","key":1486516680000,"doc_count":7},{"key_as_string":"2017-02-08T01:19:00.000Z","key":1486516740000,"doc_count":7},{"key_as_string":"2017-02-08T01:20:00.000Z","key":1486516800000,"doc_count":12},{"key_as_string":"2017-02-08T01:21:00.000Z","key":1486516860000,"doc_count":10},{"key_as_string":"2017-02-08T01:22:00.000Z","key":1486516920000,"doc_count":15},{"key_as_string":"2017-02-08T01:23:00.000Z","key":1486516980000,"doc_count":9},{"key_as_string":"2017-02-08T01:24:00.000Z","key":1486517040000,"doc_count":15},{"key_as_string":"2017-02-08T01:25:00.000Z","key":1486517100000,"doc_count":9},{"key_as_string":"2017-02-08T01:26:00.000Z","key":1486517160000,"doc_count":15},{"key_as_string":"2017-02-08T01:27:00.000Z","key":1486517220000,"doc_count":11},{"key_as_string":"2017-02-08T01:28:00.000Z","key":1486517280000,"doc_count":15},{"key_as_string":"2017-02-08T01:29:00.000Z","key":1486517340000,"doc_count":17},{"key_as_string":"2017-02-08T01:30:00.000Z","key":1486517400000,"doc_count":5},{"key_as_string":"2017-02-08T01:31:00.000Z","key":1486517460000,"doc_count":10},{"key_as_string":"2017-02-08T01:32:00.000Z","key":1486517520000,"doc_count":9},{"key_as_string":"2017-02-08T01:33:00.000Z","key":1486517580000,"doc_count":13},{"key_as_string":"2017-02-08T01:34:00.000Z","key":1486517640000,"doc_count":17},{"key_as_string":"2017-02-08T01:35:00.000Z","key":1486517700000,"doc_count":8},{"key_as_string":"2017-02-08T01:36:00.000Z","key":1486517760000,"doc_count":7},{"key_as_string":"2017-02-08T01:37:00.000Z","key":1486517820000,"doc_count":14},{"key_as_string":"2017-02-08T01:38:00.000Z","key":1486517880000,"doc_count":11},{"key_as_string":"2017-02-08T01:39:00.000Z","key":1486517940000,"doc_count":4},{"key_as_string":"2017-02-08T01:40:00.000Z","key":1486518000000,"doc_count":13},{"key_as_string":"2017-02-08T01:41:00.000Z","key":1486518060000,"doc_count":13},{"key_as_string":"2017-02-08T01:42:00.000Z","key":1486518120000,"doc_count":6},{"key_as_string":"2017-02-08T01:43:00.000Z","key":1486518180000,"doc_count":12},{"key_as_string":"2017-02-08T01:44:00.000Z","key":1486518240000,"doc_count":13},{"key_as_string":"2017-02-08T01:45:00.000Z","key":1486518300000,"doc_count":9},{"key_as_string":"2017-02-08T01:46:00.000Z","key":1486518360000,"doc_count":15},{"key_as_string":"2017-02-08T01:47:00.000Z","key":1486518420000,"doc_count":14},{"key_as_string":"2017-02-08T01:48:00.000Z","key":1486518480000,"doc_count":7},{"key_as_string":"2017-02-08T01:49:00.000Z","key":1486518540000,"doc_count":15},{"key_as_string":"2017-02-08T01:50:00.000Z","key":1486518600000,"doc_count":10},{"key_as_string":"2017-02-08T01:51:00.000Z","key":1486518660000,"doc_count":9},{"key_as_string":"2017-02-08T01:52:00.000Z","key":1486518720000,"doc_count":7},{"key_as_string":"2017-02-08T01:53:00.000Z","key":1486518780000,"doc_count":14},{"key_as_string":"2017-02-08T01:54:00.000Z","key":1486518840000,"doc_count":10},{"key_as_string":"2017-02-08T01:55:00.000Z","key":1486518900000,"doc_count":9},{"key_as_string":"2017-02-08T01:56:00.000Z","key":1486518960000,"doc_count":11},{"key_as_string":"2017-02-08T01:57:00.000Z","key":1486519020000,"doc_count":7},{"key_as_string":"2017-02-08T01:58:00.000Z","key":1486519080000,"doc_count":12},{"key_as_string":"2017-02-08T01:59:00.000Z","key":1486519140000,"doc_count":7},{"key_as_string":"2017-02-08T02:00:00.000Z","key":1486519200000,"doc_count":16},{"key_as_string":"2017-02-08T02:01:00.000Z","key":1486519260000,"doc_count":8},{"key_as_string":"2017-02-08T02:02:00.000Z","key":1486519320000,"doc_count":5},{"key_as_string":"2017-02-08T02:03:00.000Z","key":1486519380000,"doc_count":12},{"key_as_string":"2017-02-08T02:04:00.000Z","key":1486519440000,"doc_count":11},{"key_as_string":"2017-02-08T02:05:00.000Z","key":1486519500000,"doc_count":12},{"key_as_string":"2017-02-08T02:06:00.000Z","key":1486519560000,"doc_count":12},{"key_as_string":"2017-02-08T02:07:00.000Z","key":1486519620000,"doc_count":9},{"key_as_string":"2017-02-08T02:08:00.000Z","key":1486519680000,"doc_count":11},{"key_as_string":"2017-02-08T02:09:00.000Z","key":1486519740000,"doc_count":16},{"key_as_string":"2017-02-08T02:10:00.000Z","key":1486519800000,"doc_count":9},{"key_as_string":"2017-02-08T02:11:00.000Z","key":1486519860000,"doc_count":8},{"key_as_string":"2017-02-08T02:12:00.000Z","key":1486519920000,"doc_count":9},{"key_as_string":"2017-02-08T02:13:00.000Z","key":1486519980000,"doc_count":8},{"key_as_string":"2017-02-08T02:14:00.000Z","key":1486520040000,"doc_count":12},{"key_as_string":"2017-02-08T02:15:00.000Z","key":1486520100000,"doc_count":8},{"key_as_string":"2017-02-08T02:16:00.000Z","key":1486520160000,"doc_count":9},{"key_as_string":"2017-02-08T02:17:00.000Z","key":1486520220000,"doc_count":11},{"key_as_string":"2017-02-08T02:18:00.000Z","key":1486520280000,"doc_count":8},{"key_as_string":"2017-02-08T02:19:00.000Z","key":1486520340000,"doc_count":9},{"key_as_string":"2017-02-08T02:20:00.000Z","key":1486520400000,"doc_count":7},{"key_as_string":"2017-02-08T02:21:00.000Z","key":1486520460000,"doc_count":15},{"key_as_string":"2017-02-08T02:22:00.000Z","key":1486520520000,"doc_count":6},{"key_as_string":"2017-02-08T02:23:00.000Z","key":1486520580000,"doc_count":11},{"key_as_string":"2017-02-08T02:24:00.000Z","key":1486520640000,"doc_count":14},{"key_as_string":"2017-02-08T02:25:00.000Z","key":1486520700000,"doc_count":8},{"key_as_string":"2017-02-08T02:26:00.000Z","key":1486520760000,"doc_count":11},{"key_as_string":"2017-02-08T02:27:00.000Z","key":1486520820000,"doc_count":15},{"key_as_string":"2017-02-08T02:28:00.000Z","key":1486520880000,"doc_count":6},{"key_as_string":"2017-02-08T02:29:00.000Z","key":1486520940000,"doc_count":5},{"key_as_string":"2017-02-08T02:30:00.000Z","key":1486521000000,"doc_count":18},{"key_as_string":"2017-02-08T02:31:00.000Z","key":1486521060000,"doc_count":7},{"key_as_string":"2017-02-08T02:32:00.000Z","key":1486521120000,"doc_count":6},{"key_as_string":"2017-02-08T02:33:00.000Z","key":1486521180000,"doc_count":15},{"key_as_string":"2017-02-08T02:34:00.000Z","key":1486521240000,"doc_count":11},{"key_as_string":"2017-02-08T02:35:00.000Z","key":1486521300000,"doc_count":13},{"key_as_string":"2017-02-08T02:36:00.000Z","key":1486521360000,"doc_count":12},{"key_as_string":"2017-02-08T02:37:00.000Z","key":1486521420000,"doc_count":9},{"key_as_string":"2017-02-08T02:38:00.000Z","key":1486521480000,"doc_count":14},{"key_as_string":"2017-02-08T02:39:00.000Z","key":1486521540000,"doc_count":9},{"key_as_string":"2017-02-08T02:40:00.000Z","key":1486521600000,"doc_count":12},{"key_as_string":"2017-02-08T02:41:00.000Z","key":1486521660000,"doc_count":10},{"key_as_string":"2017-02-08T02:42:00.000Z","key":1486521720000,"doc_count":12},{"key_as_string":"2017-02-08T02:43:00.000Z","key":1486521780000,"doc_count":8},{"key_as_string":"2017-02-08T02:44:00.000Z","key":1486521840000,"doc_count":15},{"key_as_string":"2017-02-08T02:45:00.000Z","key":1486521900000,"doc_count":6},{"key_as_string":"2017-02-08T02:46:00.000Z","key":1486521960000,"doc_count":12},{"key_as_string":"2017-02-08T02:47:00.000Z","key":1486522020000,"doc_count":10},{"key_as_string":"2017-02-08T02:48:00.000Z","key":1486522080000,"doc_count":13},{"key_as_string":"2017-02-08T02:49:00.000Z","key":1486522140000,"doc_count":14},{"key_as_string":"2017-02-08T02:50:00.000Z","key":1486522200000,"doc_count":8},{"key_as_string":"2017-02-08T02:51:00.000Z","key":1486522260000,"doc_count":12},{"key_as_string":"2017-02-08T02:52:00.000Z","key":1486522320000,"doc_count":6},{"key_as_string":"2017-02-08T02:53:00.000Z","key":1486522380000,"doc_count":14},{"key_as_string":"2017-02-08T02:54:00.000Z","key":1486522440000,"doc_count":12},{"key_as_string":"2017-02-08T02:55:00.000Z","key":1486522500000,"doc_count":11},{"key_as_string":"2017-02-08T02:56:00.000Z","key":1486522560000,"doc_count":14},{"key_as_string":"2017-02-08T02:57:00.000Z","key":1486522620000,"doc_count":13},{"key_as_string":"2017-02-08T02:58:00.000Z","key":1486522680000,"doc_count":7},{"key_as_string":"2017-02-08T02:59:00.000Z","key":1486522740000,"doc_count":9},{"key_as_string":"2017-02-08T03:00:00.000Z","key":1486522800000,"doc_count":9},{"key_as_string":"2017-02-08T03:01:00.000Z","key":1486522860000,"doc_count":13},{"key_as_string":"2017-02-08T03:02:00.000Z","key":1486522920000,"doc_count":10},{"key_as_string":"2017-02-08T03:03:00.000Z","key":1486522980000,"doc_count":12},{"key_as_string":"2017-02-08T03:04:00.000Z","key":1486523040000,"doc_count":4},{"key_as_string":"2017-02-08T03:05:00.000Z","key":1486523100000,"doc_count":12},{"key_as_string":"2017-02-08T03:06:00.000Z","key":1486523160000,"doc_count":10},{"key_as_string":"2017-02-08T03:07:00.000Z","key":1486523220000,"doc_count":8},{"key_as_string":"2017-02-08T03:08:00.000Z","key":1486523280000,"doc_count":12},{"key_as_string":"2017-02-08T03:09:00.000Z","key":1486523340000,"doc_count":12},{"key_as_string":"2017-02-08T03:10:00.000Z","key":1486523400000,"doc_count":9},{"key_as_string":"2017-02-08T03:11:00.000Z","key":1486523460000,"doc_count":12},{"key_as_string":"2017-02-08T03:12:00.000Z","key":1486523520000,"doc_count":6},{"key_as_string":"2017-02-08T03:13:00.000Z","key":1486523580000,"doc_count":11},{"key_as_string":"2017-02-08T03:14:00.000Z","key":1486523640000,"doc_count":8},{"key_as_string":"2017-02-08T03:15:00.000Z","key":1486523700000,"doc_count":11},{"key_as_string":"2017-02-08T03:16:00.000Z","key":1486523760000,"doc_count":9},{"key_as_string":"2017-02-08T03:17:00.000Z","key":1486523820000,"doc_count":9},{"key_as_string":"2017-02-08T03:18:00.000Z","key":1486523880000,"doc_count":16},{"key_as_string":"2017-02-08T03:19:00.000Z","key":1486523940000,"doc_count":6},{"key_as_string":"2017-02-08T03:20:00.000Z","key":1486524000000,"doc_count":10},{"key_as_string":"2017-02-08T03:21:00.000Z","key":1486524060000,"doc_count":14},{"key_as_string":"2017-02-08T03:22:00.000Z","key":1486524120000,"doc_count":3},{"key_as_string":"2017-02-08T03:23:00.000Z","key":1486524180000,"doc_count":11},{"key_as_string":"2017-02-08T03:24:00.000Z","key":1486524240000,"doc_count":13},{"key_as_string":"2017-02-08T03:25:00.000Z","key":1486524300000,"doc_count":11},{"key_as_string":"2017-02-08T03:26:00.000Z","key":1486524360000,"doc_count":18},{"key_as_string":"2017-02-08T03:27:00.000Z","key":1486524420000,"doc_count":12},{"key_as_string":"2017-02-08T03:28:00.000Z","key":1486524480000,"doc_count":11},{"key_as_string":"2017-02-08T03:29:00.000Z","key":1486524540000,"doc_count":8},{"key_as_string":"2017-02-08T03:30:00.000Z","key":1486524600000,"doc_count":18},{"key_as_string":"2017-02-08T03:31:00.000Z","key":1486524660000,"doc_count":12},{"key_as_string":"2017-02-08T03:32:00.000Z","key":1486524720000,"doc_count":13},{"key_as_string":"2017-02-08T03:33:00.000Z","key":1486524780000,"doc_count":12},{"key_as_string":"2017-02-08T03:34:00.000Z","key":1486524840000,"doc_count":10},{"key_as_string":"2017-02-08T03:35:00.000Z","key":1486524900000,"doc_count":10},{"key_as_string":"2017-02-08T03:36:00.000Z","key":1486524960000,"doc_count":10},{"key_as_string":"2017-02-08T03:37:00.000Z","key":1486525020000,"doc_count":9},{"key_as_string":"2017-02-08T03:38:00.000Z","key":1486525080000,"doc_count":20},{"key_as_string":"2017-02-08T03:39:00.000Z","key":1486525140000,"doc_count":8},{"key_as_string":"2017-02-08T03:40:00.000Z","key":1486525200000,"doc_count":7},{"key_as_string":"2017-02-08T03:41:00.000Z","key":1486525260000,"doc_count":10},{"key_as_string":"2017-02-08T03:42:00.000Z","key":1486525320000,"doc_count":12},{"key_as_string":"2017-02-08T03:43:00.000Z","key":1486525380000,"doc_count":9},{"key_as_string":"2017-02-08T03:44:00.000Z","key":1486525440000,"doc_count":7},{"key_as_string":"2017-02-08T03:45:00.000Z","key":1486525500000,"doc_count":8},{"key_as_string":"2017-02-08T03:46:00.000Z","key":1486525560000,"doc_count":10},{"key_as_string":"2017-02-08T03:47:00.000Z","key":1486525620000,"doc_count":10},{"key_as_string":"2017-02-08T03:48:00.000Z","key":1486525680000,"doc_count":7},{"key_as_string":"2017-02-08T03:49:00.000Z","key":1486525740000,"doc_count":9},{"key_as_string":"2017-02-08T03:50:00.000Z","key":1486525800000,"doc_count":11},{"key_as_string":"2017-02-08T03:51:00.000Z","key":1486525860000,"doc_count":8},{"key_as_string":"2017-02-08T03:52:00.000Z","key":1486525920000,"doc_count":10},{"key_as_string":"2017-02-08T03:53:00.000Z","key":1486525980000,"doc_count":12},{"key_as_string":"2017-02-08T03:54:00.000Z","key":1486526040000,"doc_count":14},{"key_as_string":"2017-02-08T03:55:00.000Z","key":1486526100000,"doc_count":9},{"key_as_string":"2017-02-08T03:56:00.000Z","key":1486526160000,"doc_count":11},{"key_as_string":"2017-02-08T03:57:00.000Z","key":1486526220000,"doc_count":7},{"key_as_string":"2017-02-08T03:58:00.000Z","key":1486526280000,"doc_count":11},{"key_as_string":"2017-02-08T03:59:00.000Z","key":1486526340000,"doc_count":14},{"key_as_string":"2017-02-08T04:00:00.000Z","key":1486526400000,"doc_count":10},{"key_as_string":"2017-02-08T04:01:00.000Z","key":1486526460000,"doc_count":11},{"key_as_string":"2017-02-08T04:02:00.000Z","key":1486526520000,"doc_count":12},{"key_as_string":"2017-02-08T04:03:00.000Z","key":1486526580000,"doc_count":8},{"key_as_string":"2017-02-08T04:04:00.000Z","key":1486526640000,"doc_count":11},{"key_as_string":"2017-02-08T04:05:00.000Z","key":1486526700000,"doc_count":15},{"key_as_string":"2017-02-08T04:06:00.000Z","key":1486526760000,"doc_count":8},{"key_as_string":"2017-02-08T04:07:00.000Z","key":1486526820000,"doc_count":13},{"key_as_string":"2017-02-08T04:08:00.000Z","key":1486526880000,"doc_count":12},{"key_as_string":"2017-02-08T04:09:00.000Z","key":1486526940000,"doc_count":11},{"key_as_string":"2017-02-08T04:10:00.000Z","key":1486527000000,"doc_count":12},{"key_as_string":"2017-02-08T04:11:00.000Z","key":1486527060000,"doc_count":10},{"key_as_string":"2017-02-08T04:12:00.000Z","key":1486527120000,"doc_count":13},{"key_as_string":"2017-02-08T04:13:00.000Z","key":1486527180000,"doc_count":5},{"key_as_string":"2017-02-08T04:14:00.000Z","key":1486527240000,"doc_count":6},{"key_as_string":"2017-02-08T04:15:00.000Z","key":1486527300000,"doc_count":16},{"key_as_string":"2017-02-08T04:16:00.000Z","key":1486527360000,"doc_count":12},{"key_as_string":"2017-02-08T04:17:00.000Z","key":1486527420000,"doc_count":17},{"key_as_string":"2017-02-08T04:18:00.000Z","key":1486527480000,"doc_count":11},{"key_as_string":"2017-02-08T04:19:00.000Z","key":1486527540000,"doc_count":16},{"key_as_string":"2017-02-08T04:20:00.000Z","key":1486527600000,"doc_count":8},{"key_as_string":"2017-02-08T04:21:00.000Z","key":1486527660000,"doc_count":10},{"key_as_string":"2017-02-08T04:22:00.000Z","key":1486527720000,"doc_count":14},{"key_as_string":"2017-02-08T04:23:00.000Z","key":1486527780000,"doc_count":10},{"key_as_string":"2017-02-08T04:24:00.000Z","key":1486527840000,"doc_count":9},{"key_as_string":"2017-02-08T04:25:00.000Z","key":1486527900000,"doc_count":13},{"key_as_string":"2017-02-08T04:26:00.000Z","key":1486527960000,"doc_count":8},{"key_as_string":"2017-02-08T04:27:00.000Z","key":1486528020000,"doc_count":13},{"key_as_string":"2017-02-08T04:28:00.000Z","key":1486528080000,"doc_count":16},{"key_as_string":"2017-02-08T04:29:00.000Z","key":1486528140000,"doc_count":8},{"key_as_string":"2017-02-08T04:30:00.000Z","key":1486528200000,"doc_count":13},{"key_as_string":"2017-02-08T04:31:00.000Z","key":1486528260000,"doc_count":12},{"key_as_string":"2017-02-08T04:32:00.000Z","key":1486528320000,"doc_count":9},{"key_as_string":"2017-02-08T04:33:00.000Z","key":1486528380000,"doc_count":14},{"key_as_string":"2017-02-08T04:34:00.000Z","key":1486528440000,"doc_count":8},{"key_as_string":"2017-02-08T04:35:00.000Z","key":1486528500000,"doc_count":9},{"key_as_string":"2017-02-08T04:36:00.000Z","key":1486528560000,"doc_count":19},{"key_as_string":"2017-02-08T04:37:00.000Z","key":1486528620000,"doc_count":8},{"key_as_string":"2017-02-08T04:38:00.000Z","key":1486528680000,"doc_count":12},{"key_as_string":"2017-02-08T04:39:00.000Z","key":1486528740000,"doc_count":13},{"key_as_string":"2017-02-08T04:40:00.000Z","key":1486528800000,"doc_count":13},{"key_as_string":"2017-02-08T04:41:00.000Z","key":1486528860000,"doc_count":9},{"key_as_string":"2017-02-08T04:42:00.000Z","key":1486528920000,"doc_count":8},{"key_as_string":"2017-02-08T04:43:00.000Z","key":1486528980000,"doc_count":8},{"key_as_string":"2017-02-08T04:44:00.000Z","key":1486529040000,"doc_count":11},{"key_as_string":"2017-02-08T04:45:00.000Z","key":1486529100000,"doc_count":11},{"key_as_string":"2017-02-08T04:46:00.000Z","key":1486529160000,"doc_count":14},{"key_as_string":"2017-02-08T04:47:00.000Z","key":1486529220000,"doc_count":9},{"key_as_string":"2017-02-08T04:48:00.000Z","key":1486529280000,"doc_count":11},{"key_as_string":"2017-02-08T04:49:00.000Z","key":1486529340000,"doc_count":16},{"key_as_string":"2017-02-08T04:50:00.000Z","key":1486529400000,"doc_count":6},{"key_as_string":"2017-02-08T04:51:00.000Z","key":1486529460000,"doc_count":14},{"key_as_string":"2017-02-08T04:52:00.000Z","key":1486529520000,"doc_count":12},{"key_as_string":"2017-02-08T04:53:00.000Z","key":1486529580000,"doc_count":13},{"key_as_string":"2017-02-08T04:54:00.000Z","key":1486529640000,"doc_count":12},{"key_as_string":"2017-02-08T04:55:00.000Z","key":1486529700000,"doc_count":12},{"key_as_string":"2017-02-08T04:56:00.000Z","key":1486529760000,"doc_count":15},{"key_as_string":"2017-02-08T04:57:00.000Z","key":1486529820000,"doc_count":12},{"key_as_string":"2017-02-08T04:58:00.000Z","key":1486529880000,"doc_count":11},{"key_as_string":"2017-02-08T04:59:00.000Z","key":1486529940000,"doc_count":7},{"key_as_string":"2017-02-08T05:00:00.000Z","key":1486530000000,"doc_count":10},{"key_as_string":"2017-02-08T05:01:00.000Z","key":1486530060000,"doc_count":15},{"key_as_string":"2017-02-08T05:02:00.000Z","key":1486530120000,"doc_count":15},{"key_as_string":"2017-02-08T05:03:00.000Z","key":1486530180000,"doc_count":11},{"key_as_string":"2017-02-08T05:04:00.000Z","key":1486530240000,"doc_count":11},{"key_as_string":"2017-02-08T05:05:00.000Z","key":1486530300000,"doc_count":14},{"key_as_string":"2017-02-08T05:06:00.000Z","key":1486530360000,"doc_count":9},{"key_as_string":"2017-02-08T05:07:00.000Z","key":1486530420000,"doc_count":15},{"key_as_string":"2017-02-08T05:08:00.000Z","key":1486530480000,"doc_count":8},{"key_as_string":"2017-02-08T05:09:00.000Z","key":1486530540000,"doc_count":13},{"key_as_string":"2017-02-08T05:10:00.000Z","key":1486530600000,"doc_count":12},{"key_as_string":"2017-02-08T05:11:00.000Z","key":1486530660000,"doc_count":7},{"key_as_string":"2017-02-08T05:12:00.000Z","key":1486530720000,"doc_count":9},{"key_as_string":"2017-02-08T05:13:00.000Z","key":1486530780000,"doc_count":12},{"key_as_string":"2017-02-08T05:14:00.000Z","key":1486530840000,"doc_count":14},{"key_as_string":"2017-02-08T05:15:00.000Z","key":1486530900000,"doc_count":15},{"key_as_string":"2017-02-08T05:16:00.000Z","key":1486530960000,"doc_count":7},{"key_as_string":"2017-02-08T05:17:00.000Z","key":1486531020000,"doc_count":10},{"key_as_string":"2017-02-08T05:18:00.000Z","key":1486531080000,"doc_count":10},{"key_as_string":"2017-02-08T05:19:00.000Z","key":1486531140000,"doc_count":12},{"key_as_string":"2017-02-08T05:20:00.000Z","key":1486531200000,"doc_count":7},{"key_as_string":"2017-02-08T05:21:00.000Z","key":1486531260000,"doc_count":9},{"key_as_string":"2017-02-08T05:22:00.000Z","key":1486531320000,"doc_count":13},{"key_as_string":"2017-02-08T05:23:00.000Z","key":1486531380000,"doc_count":9},{"key_as_string":"2017-02-08T05:24:00.000Z","key":1486531440000,"doc_count":10},{"key_as_string":"2017-02-08T05:25:00.000Z","key":1486531500000,"doc_count":12},{"key_as_string":"2017-02-08T05:26:00.000Z","key":1486531560000,"doc_count":7},{"key_as_string":"2017-02-08T05:27:00.000Z","key":1486531620000,"doc_count":16},{"key_as_string":"2017-02-08T05:28:00.000Z","key":1486531680000,"doc_count":12},{"key_as_string":"2017-02-08T05:29:00.000Z","key":1486531740000,"doc_count":13},{"key_as_string":"2017-02-08T05:30:00.000Z","key":1486531800000,"doc_count":10},{"key_as_string":"2017-02-08T05:31:00.000Z","key":1486531860000,"doc_count":12},{"key_as_string":"2017-02-08T05:32:00.000Z","key":1486531920000,"doc_count":6},{"key_as_string":"2017-02-08T05:33:00.000Z","key":1486531980000,"doc_count":16},{"key_as_string":"2017-02-08T05:34:00.000Z","key":1486532040000,"doc_count":11},{"key_as_string":"2017-02-08T05:35:00.000Z","key":1486532100000,"doc_count":13},{"key_as_string":"2017-02-08T05:36:00.000Z","key":1486532160000,"doc_count":12},{"key_as_string":"2017-02-08T05:37:00.000Z","key":1486532220000,"doc_count":14},{"key_as_string":"2017-02-08T05:38:00.000Z","key":1486532280000,"doc_count":9},{"key_as_string":"2017-02-08T05:39:00.000Z","key":1486532340000,"doc_count":9},{"key_as_string":"2017-02-08T05:40:00.000Z","key":1486532400000,"doc_count":11},{"key_as_string":"2017-02-08T05:41:00.000Z","key":1486532460000,"doc_count":17},{"key_as_string":"2017-02-08T05:42:00.000Z","key":1486532520000,"doc_count":13},{"key_as_string":"2017-02-08T05:43:00.000Z","key":1486532580000,"doc_count":10},{"key_as_string":"2017-02-08T05:44:00.000Z","key":1486532640000,"doc_count":12},{"key_as_string":"2017-02-08T05:45:00.000Z","key":1486532700000,"doc_count":17},{"key_as_string":"2017-02-08T05:46:00.000Z","key":1486532760000,"doc_count":7},{"key_as_string":"2017-02-08T05:47:00.000Z","key":1486532820000,"doc_count":11},{"key_as_string":"2017-02-08T05:48:00.000Z","key":1486532880000,"doc_count":10},{"key_as_string":"2017-02-08T05:49:00.000Z","key":1486532940000,"doc_count":7},{"key_as_string":"2017-02-08T05:50:00.000Z","key":1486533000000,"doc_count":12},{"key_as_string":"2017-02-08T05:51:00.000Z","key":1486533060000,"doc_count":12},{"key_as_string":"2017-02-08T05:52:00.000Z","key":1486533120000,"doc_count":6},{"key_as_string":"2017-02-08T05:53:00.000Z","key":1486533180000,"doc_count":11},{"key_as_string":"2017-02-08T05:54:00.000Z","key":1486533240000,"doc_count":14},{"key_as_string":"2017-02-08T05:55:00.000Z","key":1486533300000,"doc_count":10},{"key_as_string":"2017-02-08T05:56:00.000Z","key":1486533360000,"doc_count":11},{"key_as_string":"2017-02-08T05:57:00.000Z","key":1486533420000,"doc_count":14},{"key_as_string":"2017-02-08T05:58:00.000Z","key":1486533480000,"doc_count":5},{"key_as_string":"2017-02-08T05:59:00.000Z","key":1486533540000,"doc_count":16},{"key_as_string":"2017-02-08T06:00:00.000Z","key":1486533600000,"doc_count":9},{"key_as_string":"2017-02-08T06:01:00.000Z","key":1486533660000,"doc_count":12},{"key_as_string":"2017-02-08T06:02:00.000Z","key":1486533720000,"doc_count":10},{"key_as_string":"2017-02-08T06:03:00.000Z","key":1486533780000,"doc_count":13},{"key_as_string":"2017-02-08T06:04:00.000Z","key":1486533840000,"doc_count":14},{"key_as_string":"2017-02-08T06:05:00.000Z","key":1486533900000,"doc_count":11},{"key_as_string":"2017-02-08T06:06:00.000Z","key":1486533960000,"doc_count":9},{"key_as_string":"2017-02-08T06:07:00.000Z","key":1486534020000,"doc_count":10},{"key_as_string":"2017-02-08T06:08:00.000Z","key":1486534080000,"doc_count":7},{"key_as_string":"2017-02-08T06:09:00.000Z","key":1486534140000,"doc_count":14},{"key_as_string":"2017-02-08T06:10:00.000Z","key":1486534200000,"doc_count":13},{"key_as_string":"2017-02-08T06:11:00.000Z","key":1486534260000,"doc_count":15},{"key_as_string":"2017-02-08T06:12:00.000Z","key":1486534320000,"doc_count":9},{"key_as_string":"2017-02-08T06:13:00.000Z","key":1486534380000,"doc_count":8},{"key_as_string":"2017-02-08T06:14:00.000Z","key":1486534440000,"doc_count":7},{"key_as_string":"2017-02-08T06:15:00.000Z","key":1486534500000,"doc_count":15},{"key_as_string":"2017-02-08T06:16:00.000Z","key":1486534560000,"doc_count":11},{"key_as_string":"2017-02-08T06:17:00.000Z","key":1486534620000,"doc_count":15},{"key_as_string":"2017-02-08T06:18:00.000Z","key":1486534680000,"doc_count":14},{"key_as_string":"2017-02-08T06:19:00.000Z","key":1486534740000,"doc_count":12},{"key_as_string":"2017-02-08T06:20:00.000Z","key":1486534800000,"doc_count":15},{"key_as_string":"2017-02-08T06:21:00.000Z","key":1486534860000,"doc_count":13},{"key_as_string":"2017-02-08T06:22:00.000Z","key":1486534920000,"doc_count":10},{"key_as_string":"2017-02-08T06:23:00.000Z","key":1486534980000,"doc_count":14},{"key_as_string":"2017-02-08T06:24:00.000Z","key":1486535040000,"doc_count":15},{"key_as_string":"2017-02-08T06:25:00.000Z","key":1486535100000,"doc_count":14},{"key_as_string":"2017-02-08T06:26:00.000Z","key":1486535160000,"doc_count":11},{"key_as_string":"2017-02-08T06:27:00.000Z","key":1486535220000,"doc_count":13},{"key_as_string":"2017-02-08T06:28:00.000Z","key":1486535280000,"doc_count":11},{"key_as_string":"2017-02-08T06:29:00.000Z","key":1486535340000,"doc_count":16},{"key_as_string":"2017-02-08T06:30:00.000Z","key":1486535400000,"doc_count":12},{"key_as_string":"2017-02-08T06:31:00.000Z","key":1486535460000,"doc_count":11},{"key_as_string":"2017-02-08T06:32:00.000Z","key":1486535520000,"doc_count":10},{"key_as_string":"2017-02-08T06:33:00.000Z","key":1486535580000,"doc_count":8},{"key_as_string":"2017-02-08T06:34:00.000Z","key":1486535640000,"doc_count":14},{"key_as_string":"2017-02-08T06:35:00.000Z","key":1486535700000,"doc_count":9},{"key_as_string":"2017-02-08T06:36:00.000Z","key":1486535760000,"doc_count":16},{"key_as_string":"2017-02-08T06:37:00.000Z","key":1486535820000,"doc_count":13},{"key_as_string":"2017-02-08T06:38:00.000Z","key":1486535880000,"doc_count":10},{"key_as_string":"2017-02-08T06:39:00.000Z","key":1486535940000,"doc_count":13},{"key_as_string":"2017-02-08T06:40:00.000Z","key":1486536000000,"doc_count":13},{"key_as_string":"2017-02-08T06:41:00.000Z","key":1486536060000,"doc_count":10},{"key_as_string":"2017-02-08T06:42:00.000Z","key":1486536120000,"doc_count":12},{"key_as_string":"2017-02-08T06:43:00.000Z","key":1486536180000,"doc_count":10},{"key_as_string":"2017-02-08T06:44:00.000Z","key":1486536240000,"doc_count":15},{"key_as_string":"2017-02-08T06:45:00.000Z","key":1486536300000,"doc_count":10},{"key_as_string":"2017-02-08T06:46:00.000Z","key":1486536360000,"doc_count":8},{"key_as_string":"2017-02-08T06:47:00.000Z","key":1486536420000,"doc_count":15},{"key_as_string":"2017-02-08T06:48:00.000Z","key":1486536480000,"doc_count":14},{"key_as_string":"2017-02-08T06:49:00.000Z","key":1486536540000,"doc_count":8},{"key_as_string":"2017-02-08T06:50:00.000Z","key":1486536600000,"doc_count":10},{"key_as_string":"2017-02-08T06:51:00.000Z","key":1486536660000,"doc_count":12},{"key_as_string":"2017-02-08T06:52:00.000Z","key":1486536720000,"doc_count":19},{"key_as_string":"2017-02-08T06:53:00.000Z","key":1486536780000,"doc_count":10},{"key_as_string":"2017-02-08T06:54:00.000Z","key":1486536840000,"doc_count":12},{"key_as_string":"2017-02-08T06:55:00.000Z","key":1486536900000,"doc_count":13},{"key_as_string":"2017-02-08T06:56:00.000Z","key":1486536960000,"doc_count":12},{"key_as_string":"2017-02-08T06:57:00.000Z","key":1486537020000,"doc_count":10},{"key_as_string":"2017-02-08T06:58:00.000Z","key":1486537080000,"doc_count":13},{"key_as_string":"2017-02-08T06:59:00.000Z","key":1486537140000,"doc_count":9},{"key_as_string":"2017-02-08T07:00:00.000Z","key":1486537200000,"doc_count":17},{"key_as_string":"2017-02-08T07:01:00.000Z","key":1486537260000,"doc_count":14},{"key_as_string":"2017-02-08T07:02:00.000Z","key":1486537320000,"doc_count":11},{"key_as_string":"2017-02-08T07:03:00.000Z","key":1486537380000,"doc_count":13},{"key_as_string":"2017-02-08T07:04:00.000Z","key":1486537440000,"doc_count":15},{"key_as_string":"2017-02-08T07:05:00.000Z","key":1486537500000,"doc_count":16},{"key_as_string":"2017-02-08T07:06:00.000Z","key":1486537560000,"doc_count":11},{"key_as_string":"2017-02-08T07:07:00.000Z","key":1486537620000,"doc_count":7},{"key_as_string":"2017-02-08T07:08:00.000Z","key":1486537680000,"doc_count":12},{"key_as_string":"2017-02-08T07:09:00.000Z","key":1486537740000,"doc_count":14},{"key_as_string":"2017-02-08T07:10:00.000Z","key":1486537800000,"doc_count":9},{"key_as_string":"2017-02-08T07:11:00.000Z","key":1486537860000,"doc_count":11},{"key_as_string":"2017-02-08T07:12:00.000Z","key":1486537920000,"doc_count":12},{"key_as_string":"2017-02-08T07:13:00.000Z","key":1486537980000,"doc_count":7},{"key_as_string":"2017-02-08T07:14:00.000Z","key":1486538040000,"doc_count":15},{"key_as_string":"2017-02-08T07:15:00.000Z","key":1486538100000,"doc_count":13},{"key_as_string":"2017-02-08T07:16:00.000Z","key":1486538160000,"doc_count":10},{"key_as_string":"2017-02-08T07:17:00.000Z","key":1486538220000,"doc_count":8},{"key_as_string":"2017-02-08T07:18:00.000Z","key":1486538280000,"doc_count":16},{"key_as_string":"2017-02-08T07:19:00.000Z","key":1486538340000,"doc_count":12},{"key_as_string":"2017-02-08T07:20:00.000Z","key":1486538400000,"doc_count":13},{"key_as_string":"2017-02-08T07:21:00.000Z","key":1486538460000,"doc_count":15},{"key_as_string":"2017-02-08T07:22:00.000Z","key":1486538520000,"doc_count":12},{"key_as_string":"2017-02-08T07:23:00.000Z","key":1486538580000,"doc_count":17},{"key_as_string":"2017-02-08T07:24:00.000Z","key":1486538640000,"doc_count":10},{"key_as_string":"2017-02-08T07:25:00.000Z","key":1486538700000,"doc_count":11},{"key_as_string":"2017-02-08T07:26:00.000Z","key":1486538760000,"doc_count":11},{"key_as_string":"2017-02-08T07:27:00.000Z","key":1486538820000,"doc_count":13},{"key_as_string":"2017-02-08T07:28:00.000Z","key":1486538880000,"doc_count":10},{"key_as_string":"2017-02-08T07:29:00.000Z","key":1486538940000,"doc_count":13},{"key_as_string":"2017-02-08T07:30:00.000Z","key":1486539000000,"doc_count":11},{"key_as_string":"2017-02-08T07:31:00.000Z","key":1486539060000,"doc_count":17},{"key_as_string":"2017-02-08T07:32:00.000Z","key":1486539120000,"doc_count":12},{"key_as_string":"2017-02-08T07:33:00.000Z","key":1486539180000,"doc_count":11},{"key_as_string":"2017-02-08T07:34:00.000Z","key":1486539240000,"doc_count":11},{"key_as_string":"2017-02-08T07:35:00.000Z","key":1486539300000,"doc_count":17},{"key_as_string":"2017-02-08T07:36:00.000Z","key":1486539360000,"doc_count":12},{"key_as_string":"2017-02-08T07:37:00.000Z","key":1486539420000,"doc_count":15},{"key_as_string":"2017-02-08T07:38:00.000Z","key":1486539480000,"doc_count":12},{"key_as_string":"2017-02-08T07:39:00.000Z","key":1486539540000,"doc_count":19},{"key_as_string":"2017-02-08T07:40:00.000Z","key":1486539600000,"doc_count":10},{"key_as_string":"2017-02-08T07:41:00.000Z","key":1486539660000,"doc_count":10},{"key_as_string":"2017-02-08T07:42:00.000Z","key":1486539720000,"doc_count":13},{"key_as_string":"2017-02-08T07:43:00.000Z","key":1486539780000,"doc_count":17},{"key_as_string":"2017-02-08T07:44:00.000Z","key":1486539840000,"doc_count":15},{"key_as_string":"2017-02-08T07:45:00.000Z","key":1486539900000,"doc_count":8},{"key_as_string":"2017-02-08T07:46:00.000Z","key":1486539960000,"doc_count":13},{"key_as_string":"2017-02-08T07:47:00.000Z","key":1486540020000,"doc_count":9},{"key_as_string":"2017-02-08T07:48:00.000Z","key":1486540080000,"doc_count":10},{"key_as_string":"2017-02-08T07:49:00.000Z","key":1486540140000,"doc_count":10},{"key_as_string":"2017-02-08T07:50:00.000Z","key":1486540200000,"doc_count":15},{"key_as_string":"2017-02-08T07:51:00.000Z","key":1486540260000,"doc_count":13},{"key_as_string":"2017-02-08T07:52:00.000Z","key":1486540320000,"doc_count":14},{"key_as_string":"2017-02-08T07:53:00.000Z","key":1486540380000,"doc_count":13},{"key_as_string":"2017-02-08T07:54:00.000Z","key":1486540440000,"doc_count":14},{"key_as_string":"2017-02-08T07:55:00.000Z","key":1486540500000,"doc_count":11},{"key_as_string":"2017-02-08T07:56:00.000Z","key":1486540560000,"doc_count":10},{"key_as_string":"2017-02-08T07:57:00.000Z","key":1486540620000,"doc_count":9},{"key_as_string":"2017-02-08T07:58:00.000Z","key":1486540680000,"doc_count":16},{"key_as_string":"2017-02-08T07:59:00.000Z","key":1486540740000,"doc_count":17},{"key_as_string":"2017-02-08T08:00:00.000Z","key":1486540800000,"doc_count":14},{"key_as_string":"2017-02-08T08:01:00.000Z","key":1486540860000,"doc_count":12},{"key_as_string":"2017-02-08T08:02:00.000Z","key":1486540920000,"doc_count":15},{"key_as_string":"2017-02-08T08:03:00.000Z","key":1486540980000,"doc_count":15},{"key_as_string":"2017-02-08T08:04:00.000Z","key":1486541040000,"doc_count":10},{"key_as_string":"2017-02-08T08:05:00.000Z","key":1486541100000,"doc_count":12},{"key_as_string":"2017-02-08T08:06:00.000Z","key":1486541160000,"doc_count":6},{"key_as_string":"2017-02-08T08:07:00.000Z","key":1486541220000,"doc_count":17},{"key_as_string":"2017-02-08T08:08:00.000Z","key":1486541280000,"doc_count":15},{"key_as_string":"2017-02-08T08:09:00.000Z","key":1486541340000,"doc_count":14},{"key_as_string":"2017-02-08T08:10:00.000Z","key":1486541400000,"doc_count":12},{"key_as_string":"2017-02-08T08:11:00.000Z","key":1486541460000,"doc_count":18},{"key_as_string":"2017-02-08T08:12:00.000Z","key":1486541520000,"doc_count":9},{"key_as_string":"2017-02-08T08:13:00.000Z","key":1486541580000,"doc_count":12},{"key_as_string":"2017-02-08T08:14:00.000Z","key":1486541640000,"doc_count":11},{"key_as_string":"2017-02-08T08:15:00.000Z","key":1486541700000,"doc_count":19},{"key_as_string":"2017-02-08T08:16:00.000Z","key":1486541760000,"doc_count":12},{"key_as_string":"2017-02-08T08:17:00.000Z","key":1486541820000,"doc_count":10},{"key_as_string":"2017-02-08T08:18:00.000Z","key":1486541880000,"doc_count":16},{"key_as_string":"2017-02-08T08:19:00.000Z","key":1486541940000,"doc_count":12},{"key_as_string":"2017-02-08T08:20:00.000Z","key":1486542000000,"doc_count":15},{"key_as_string":"2017-02-08T08:21:00.000Z","key":1486542060000,"doc_count":14},{"key_as_string":"2017-02-08T08:22:00.000Z","key":1486542120000,"doc_count":15},{"key_as_string":"2017-02-08T08:23:00.000Z","key":1486542180000,"doc_count":12},{"key_as_string":"2017-02-08T08:24:00.000Z","key":1486542240000,"doc_count":15},{"key_as_string":"2017-02-08T08:25:00.000Z","key":1486542300000,"doc_count":7},{"key_as_string":"2017-02-08T08:26:00.000Z","key":1486542360000,"doc_count":10},{"key_as_string":"2017-02-08T08:27:00.000Z","key":1486542420000,"doc_count":12},{"key_as_string":"2017-02-08T08:28:00.000Z","key":1486542480000,"doc_count":10},{"key_as_string":"2017-02-08T08:29:00.000Z","key":1486542540000,"doc_count":12},{"key_as_string":"2017-02-08T08:30:00.000Z","key":1486542600000,"doc_count":17},{"key_as_string":"2017-02-08T08:31:00.000Z","key":1486542660000,"doc_count":13},{"key_as_string":"2017-02-08T08:32:00.000Z","key":1486542720000,"doc_count":14},{"key_as_string":"2017-02-08T08:33:00.000Z","key":1486542780000,"doc_count":10},{"key_as_string":"2017-02-08T08:34:00.000Z","key":1486542840000,"doc_count":12},{"key_as_string":"2017-02-08T08:35:00.000Z","key":1486542900000,"doc_count":14},{"key_as_string":"2017-02-08T08:36:00.000Z","key":1486542960000,"doc_count":11},{"key_as_string":"2017-02-08T08:37:00.000Z","key":1486543020000,"doc_count":16},{"key_as_string":"2017-02-08T08:38:00.000Z","key":1486543080000,"doc_count":13},{"key_as_string":"2017-02-08T08:39:00.000Z","key":1486543140000,"doc_count":11},{"key_as_string":"2017-02-08T08:40:00.000Z","key":1486543200000,"doc_count":9},{"key_as_string":"2017-02-08T08:41:00.000Z","key":1486543260000,"doc_count":15},{"key_as_string":"2017-02-08T08:42:00.000Z","key":1486543320000,"doc_count":12},{"key_as_string":"2017-02-08T08:43:00.000Z","key":1486543380000,"doc_count":9},{"key_as_string":"2017-02-08T08:44:00.000Z","key":1486543440000,"doc_count":15},{"key_as_string":"2017-02-08T08:45:00.000Z","key":1486543500000,"doc_count":17},{"key_as_string":"2017-02-08T08:46:00.000Z","key":1486543560000,"doc_count":5},{"key_as_string":"2017-02-08T08:47:00.000Z","key":1486543620000,"doc_count":19},{"key_as_string":"2017-02-08T08:48:00.000Z","key":1486543680000,"doc_count":14},{"key_as_string":"2017-02-08T08:49:00.000Z","key":1486543740000,"doc_count":13},{"key_as_string":"2017-02-08T08:50:00.000Z","key":1486543800000,"doc_count":16},{"key_as_string":"2017-02-08T08:51:00.000Z","key":1486543860000,"doc_count":14},{"key_as_string":"2017-02-08T08:52:00.000Z","key":1486543920000,"doc_count":17},{"key_as_string":"2017-02-08T08:53:00.000Z","key":1486543980000,"doc_count":12},{"key_as_string":"2017-02-08T08:54:00.000Z","key":1486544040000,"doc_count":13},{"key_as_string":"2017-02-08T08:55:00.000Z","key":1486544100000,"doc_count":17},{"key_as_string":"2017-02-08T08:56:00.000Z","key":1486544160000,"doc_count":11},{"key_as_string":"2017-02-08T08:57:00.000Z","key":1486544220000,"doc_count":10},{"key_as_string":"2017-02-08T08:58:00.000Z","key":1486544280000,"doc_count":13},{"key_as_string":"2017-02-08T08:59:00.000Z","key":1486544340000,"doc_count":11},{"key_as_string":"2017-02-08T09:00:00.000Z","key":1486544400000,"doc_count":12},{"key_as_string":"2017-02-08T09:01:00.000Z","key":1486544460000,"doc_count":15},{"key_as_string":"2017-02-08T09:02:00.000Z","key":1486544520000,"doc_count":8},{"key_as_string":"2017-02-08T09:03:00.000Z","key":1486544580000,"doc_count":14},{"key_as_string":"2017-02-08T09:04:00.000Z","key":1486544640000,"doc_count":13},{"key_as_string":"2017-02-08T09:05:00.000Z","key":1486544700000,"doc_count":12},{"key_as_string":"2017-02-08T09:06:00.000Z","key":1486544760000,"doc_count":15},{"key_as_string":"2017-02-08T09:07:00.000Z","key":1486544820000,"doc_count":13},{"key_as_string":"2017-02-08T09:08:00.000Z","key":1486544880000,"doc_count":19},{"key_as_string":"2017-02-08T09:09:00.000Z","key":1486544940000,"doc_count":14},{"key_as_string":"2017-02-08T09:10:00.000Z","key":1486545000000,"doc_count":11},{"key_as_string":"2017-02-08T09:11:00.000Z","key":1486545060000,"doc_count":15},{"key_as_string":"2017-02-08T09:12:00.000Z","key":1486545120000,"doc_count":15},{"key_as_string":"2017-02-08T09:13:00.000Z","key":1486545180000,"doc_count":10},{"key_as_string":"2017-02-08T09:14:00.000Z","key":1486545240000,"doc_count":17},{"key_as_string":"2017-02-08T09:15:00.000Z","key":1486545300000,"doc_count":18},{"key_as_string":"2017-02-08T09:16:00.000Z","key":1486545360000,"doc_count":15},{"key_as_string":"2017-02-08T09:17:00.000Z","key":1486545420000,"doc_count":13},{"key_as_string":"2017-02-08T09:18:00.000Z","key":1486545480000,"doc_count":9},{"key_as_string":"2017-02-08T09:19:00.000Z","key":1486545540000,"doc_count":15},{"key_as_string":"2017-02-08T09:20:00.000Z","key":1486545600000,"doc_count":10},{"key_as_string":"2017-02-08T09:21:00.000Z","key":1486545660000,"doc_count":9},{"key_as_string":"2017-02-08T09:22:00.000Z","key":1486545720000,"doc_count":13},{"key_as_string":"2017-02-08T09:23:00.000Z","key":1486545780000,"doc_count":18},{"key_as_string":"2017-02-08T09:24:00.000Z","key":1486545840000,"doc_count":12},{"key_as_string":"2017-02-08T09:25:00.000Z","key":1486545900000,"doc_count":15},{"key_as_string":"2017-02-08T09:26:00.000Z","key":1486545960000,"doc_count":10},{"key_as_string":"2017-02-08T09:27:00.000Z","key":1486546020000,"doc_count":16},{"key_as_string":"2017-02-08T09:28:00.000Z","key":1486546080000,"doc_count":17},{"key_as_string":"2017-02-08T09:29:00.000Z","key":1486546140000,"doc_count":14},{"key_as_string":"2017-02-08T09:30:00.000Z","key":1486546200000,"doc_count":13},{"key_as_string":"2017-02-08T09:31:00.000Z","key":1486546260000,"doc_count":14},{"key_as_string":"2017-02-08T09:32:00.000Z","key":1486546320000,"doc_count":11},{"key_as_string":"2017-02-08T09:33:00.000Z","key":1486546380000,"doc_count":13},{"key_as_string":"2017-02-08T09:34:00.000Z","key":1486546440000,"doc_count":10},{"key_as_string":"2017-02-08T09:35:00.000Z","key":1486546500000,"doc_count":15},{"key_as_string":"2017-02-08T09:36:00.000Z","key":1486546560000,"doc_count":15},{"key_as_string":"2017-02-08T09:37:00.000Z","key":1486546620000,"doc_count":11},{"key_as_string":"2017-02-08T09:38:00.000Z","key":1486546680000,"doc_count":13},{"key_as_string":"2017-02-08T09:39:00.000Z","key":1486546740000,"doc_count":12},{"key_as_string":"2017-02-08T09:40:00.000Z","key":1486546800000,"doc_count":12},{"key_as_string":"2017-02-08T09:41:00.000Z","key":1486546860000,"doc_count":11},{"key_as_string":"2017-02-08T09:42:00.000Z","key":1486546920000,"doc_count":10},{"key_as_string":"2017-02-08T09:43:00.000Z","key":1486546980000,"doc_count":15},{"key_as_string":"2017-02-08T09:44:00.000Z","key":1486547040000,"doc_count":12},{"key_as_string":"2017-02-08T09:45:00.000Z","key":1486547100000,"doc_count":11},{"key_as_string":"2017-02-08T09:46:00.000Z","key":1486547160000,"doc_count":12},{"key_as_string":"2017-02-08T09:47:00.000Z","key":1486547220000,"doc_count":12},{"key_as_string":"2017-02-08T09:48:00.000Z","key":1486547280000,"doc_count":10},{"key_as_string":"2017-02-08T09:49:00.000Z","key":1486547340000,"doc_count":18},{"key_as_string":"2017-02-08T09:50:00.000Z","key":1486547400000,"doc_count":16},{"key_as_string":"2017-02-08T09:51:00.000Z","key":1486547460000,"doc_count":20},{"key_as_string":"2017-02-08T09:52:00.000Z","key":1486547520000,"doc_count":12},{"key_as_string":"2017-02-08T09:53:00.000Z","key":1486547580000,"doc_count":13},{"key_as_string":"2017-02-08T09:54:00.000Z","key":1486547640000,"doc_count":16},{"key_as_string":"2017-02-08T09:55:00.000Z","key":1486547700000,"doc_count":14},{"key_as_string":"2017-02-08T09:56:00.000Z","key":1486547760000,"doc_count":12},{"key_as_string":"2017-02-08T09:57:00.000Z","key":1486547820000,"doc_count":18},{"key_as_string":"2017-02-08T09:58:00.000Z","key":1486547880000,"doc_count":11},{"key_as_string":"2017-02-08T09:59:00.000Z","key":1486547940000,"doc_count":17},{"key_as_string":"2017-02-08T10:00:00.000Z","key":1486548000000,"doc_count":12},{"key_as_string":"2017-02-08T10:01:00.000Z","key":1486548060000,"doc_count":13},{"key_as_string":"2017-02-08T10:02:00.000Z","key":1486548120000,"doc_count":21},{"key_as_string":"2017-02-08T10:03:00.000Z","key":1486548180000,"doc_count":17},{"key_as_string":"2017-02-08T10:04:00.000Z","key":1486548240000,"doc_count":16},{"key_as_string":"2017-02-08T10:05:00.000Z","key":1486548300000,"doc_count":11},{"key_as_string":"2017-02-08T10:06:00.000Z","key":1486548360000,"doc_count":16},{"key_as_string":"2017-02-08T10:07:00.000Z","key":1486548420000,"doc_count":11},{"key_as_string":"2017-02-08T10:08:00.000Z","key":1486548480000,"doc_count":15},{"key_as_string":"2017-02-08T10:09:00.000Z","key":1486548540000,"doc_count":12},{"key_as_string":"2017-02-08T10:10:00.000Z","key":1486548600000,"doc_count":14},{"key_as_string":"2017-02-08T10:11:00.000Z","key":1486548660000,"doc_count":11},{"key_as_string":"2017-02-08T10:12:00.000Z","key":1486548720000,"doc_count":19},{"key_as_string":"2017-02-08T10:13:00.000Z","key":1486548780000,"doc_count":13},{"key_as_string":"2017-02-08T10:14:00.000Z","key":1486548840000,"doc_count":16},{"key_as_string":"2017-02-08T10:15:00.000Z","key":1486548900000,"doc_count":10},{"key_as_string":"2017-02-08T10:16:00.000Z","key":1486548960000,"doc_count":13},{"key_as_string":"2017-02-08T10:17:00.000Z","key":1486549020000,"doc_count":8},{"key_as_string":"2017-02-08T10:18:00.000Z","key":1486549080000,"doc_count":15},{"key_as_string":"2017-02-08T10:19:00.000Z","key":1486549140000,"doc_count":14},{"key_as_string":"2017-02-08T10:20:00.000Z","key":1486549200000,"doc_count":14},{"key_as_string":"2017-02-08T10:21:00.000Z","key":1486549260000,"doc_count":10},{"key_as_string":"2017-02-08T10:22:00.000Z","key":1486549320000,"doc_count":15},{"key_as_string":"2017-02-08T10:23:00.000Z","key":1486549380000,"doc_count":10},{"key_as_string":"2017-02-08T10:24:00.000Z","key":1486549440000,"doc_count":13},{"key_as_string":"2017-02-08T10:25:00.000Z","key":1486549500000,"doc_count":14},{"key_as_string":"2017-02-08T10:26:00.000Z","key":1486549560000,"doc_count":14},{"key_as_string":"2017-02-08T10:27:00.000Z","key":1486549620000,"doc_count":17},{"key_as_string":"2017-02-08T10:28:00.000Z","key":1486549680000,"doc_count":10},{"key_as_string":"2017-02-08T10:29:00.000Z","key":1486549740000,"doc_count":13},{"key_as_string":"2017-02-08T10:30:00.000Z","key":1486549800000,"doc_count":16},{"key_as_string":"2017-02-08T10:31:00.000Z","key":1486549860000,"doc_count":14},{"key_as_string":"2017-02-08T10:32:00.000Z","key":1486549920000,"doc_count":16},{"key_as_string":"2017-02-08T10:33:00.000Z","key":1486549980000,"doc_count":15},{"key_as_string":"2017-02-08T10:34:00.000Z","key":1486550040000,"doc_count":15},{"key_as_string":"2017-02-08T10:35:00.000Z","key":1486550100000,"doc_count":15},{"key_as_string":"2017-02-08T10:36:00.000Z","key":1486550160000,"doc_count":10},{"key_as_string":"2017-02-08T10:37:00.000Z","key":1486550220000,"doc_count":15},{"key_as_string":"2017-02-08T10:38:00.000Z","key":1486550280000,"doc_count":14},{"key_as_string":"2017-02-08T10:39:00.000Z","key":1486550340000,"doc_count":17},{"key_as_string":"2017-02-08T10:40:00.000Z","key":1486550400000,"doc_count":15},{"key_as_string":"2017-02-08T10:41:00.000Z","key":1486550460000,"doc_count":19},{"key_as_string":"2017-02-08T10:42:00.000Z","key":1486550520000,"doc_count":9},{"key_as_string":"2017-02-08T10:43:00.000Z","key":1486550580000,"doc_count":14},{"key_as_string":"2017-02-08T10:44:00.000Z","key":1486550640000,"doc_count":10},{"key_as_string":"2017-02-08T10:45:00.000Z","key":1486550700000,"doc_count":20},{"key_as_string":"2017-02-08T10:46:00.000Z","key":1486550760000,"doc_count":10},{"key_as_string":"2017-02-08T10:47:00.000Z","key":1486550820000,"doc_count":16},{"key_as_string":"2017-02-08T10:48:00.000Z","key":1486550880000,"doc_count":13},{"key_as_string":"2017-02-08T10:49:00.000Z","key":1486550940000,"doc_count":14},{"key_as_string":"2017-02-08T10:50:00.000Z","key":1486551000000,"doc_count":10},{"key_as_string":"2017-02-08T10:51:00.000Z","key":1486551060000,"doc_count":17},{"key_as_string":"2017-02-08T10:52:00.000Z","key":1486551120000,"doc_count":16},{"key_as_string":"2017-02-08T10:53:00.000Z","key":1486551180000,"doc_count":9},{"key_as_string":"2017-02-08T10:54:00.000Z","key":1486551240000,"doc_count":15},{"key_as_string":"2017-02-08T10:55:00.000Z","key":1486551300000,"doc_count":16},{"key_as_string":"2017-02-08T10:56:00.000Z","key":1486551360000,"doc_count":5},{"key_as_string":"2017-02-08T10:57:00.000Z","key":1486551420000,"doc_count":15},{"key_as_string":"2017-02-08T10:58:00.000Z","key":1486551480000,"doc_count":9},{"key_as_string":"2017-02-08T10:59:00.000Z","key":1486551540000,"doc_count":14},{"key_as_string":"2017-02-08T11:00:00.000Z","key":1486551600000,"doc_count":16},{"key_as_string":"2017-02-08T11:01:00.000Z","key":1486551660000,"doc_count":9},{"key_as_string":"2017-02-08T11:02:00.000Z","key":1486551720000,"doc_count":17},{"key_as_string":"2017-02-08T11:03:00.000Z","key":1486551780000,"doc_count":9},{"key_as_string":"2017-02-08T11:04:00.000Z","key":1486551840000,"doc_count":18},{"key_as_string":"2017-02-08T11:05:00.000Z","key":1486551900000,"doc_count":12},{"key_as_string":"2017-02-08T11:06:00.000Z","key":1486551960000,"doc_count":16},{"key_as_string":"2017-02-08T11:07:00.000Z","key":1486552020000,"doc_count":13},{"key_as_string":"2017-02-08T11:08:00.000Z","key":1486552080000,"doc_count":14},{"key_as_string":"2017-02-08T11:09:00.000Z","key":1486552140000,"doc_count":13},{"key_as_string":"2017-02-08T11:10:00.000Z","key":1486552200000,"doc_count":17},{"key_as_string":"2017-02-08T11:11:00.000Z","key":1486552260000,"doc_count":12},{"key_as_string":"2017-02-08T11:12:00.000Z","key":1486552320000,"doc_count":11},{"key_as_string":"2017-02-08T11:13:00.000Z","key":1486552380000,"doc_count":15},{"key_as_string":"2017-02-08T11:14:00.000Z","key":1486552440000,"doc_count":10},{"key_as_string":"2017-02-08T11:15:00.000Z","key":1486552500000,"doc_count":9},{"key_as_string":"2017-02-08T11:16:00.000Z","key":1486552560000,"doc_count":14},{"key_as_string":"2017-02-08T11:17:00.000Z","key":1486552620000,"doc_count":16},{"key_as_string":"2017-02-08T11:18:00.000Z","key":1486552680000,"doc_count":19},{"key_as_string":"2017-02-08T11:19:00.000Z","key":1486552740000,"doc_count":14},{"key_as_string":"2017-02-08T11:20:00.000Z","key":1486552800000,"doc_count":10},{"key_as_string":"2017-02-08T11:21:00.000Z","key":1486552860000,"doc_count":14},{"key_as_string":"2017-02-08T11:22:00.000Z","key":1486552920000,"doc_count":13},{"key_as_string":"2017-02-08T11:23:00.000Z","key":1486552980000,"doc_count":16},{"key_as_string":"2017-02-08T11:24:00.000Z","key":1486553040000,"doc_count":15},{"key_as_string":"2017-02-08T11:25:00.000Z","key":1486553100000,"doc_count":16},{"key_as_string":"2017-02-08T11:26:00.000Z","key":1486553160000,"doc_count":18},{"key_as_string":"2017-02-08T11:27:00.000Z","key":1486553220000,"doc_count":13},{"key_as_string":"2017-02-08T11:28:00.000Z","key":1486553280000,"doc_count":13},{"key_as_string":"2017-02-08T11:29:00.000Z","key":1486553340000,"doc_count":16},{"key_as_string":"2017-02-08T11:30:00.000Z","key":1486553400000,"doc_count":13},{"key_as_string":"2017-02-08T11:31:00.000Z","key":1486553460000,"doc_count":16},{"key_as_string":"2017-02-08T11:32:00.000Z","key":1486553520000,"doc_count":13},{"key_as_string":"2017-02-08T11:33:00.000Z","key":1486553580000,"doc_count":18},{"key_as_string":"2017-02-08T11:34:00.000Z","key":1486553640000,"doc_count":12},{"key_as_string":"2017-02-08T11:35:00.000Z","key":1486553700000,"doc_count":11},{"key_as_string":"2017-02-08T11:36:00.000Z","key":1486553760000,"doc_count":16},{"key_as_string":"2017-02-08T11:37:00.000Z","key":1486553820000,"doc_count":18},{"key_as_string":"2017-02-08T11:38:00.000Z","key":1486553880000,"doc_count":10},{"key_as_string":"2017-02-08T11:39:00.000Z","key":1486553940000,"doc_count":17},{"key_as_string":"2017-02-08T11:40:00.000Z","key":1486554000000,"doc_count":11},{"key_as_string":"2017-02-08T11:41:00.000Z","key":1486554060000,"doc_count":20},{"key_as_string":"2017-02-08T11:42:00.000Z","key":1486554120000,"doc_count":10},{"key_as_string":"2017-02-08T11:43:00.000Z","key":1486554180000,"doc_count":17},{"key_as_string":"2017-02-08T11:44:00.000Z","key":1486554240000,"doc_count":21},{"key_as_string":"2017-02-08T11:45:00.000Z","key":1486554300000,"doc_count":13},{"key_as_string":"2017-02-08T11:46:00.000Z","key":1486554360000,"doc_count":12},{"key_as_string":"2017-02-08T11:47:00.000Z","key":1486554420000,"doc_count":11},{"key_as_string":"2017-02-08T11:48:00.000Z","key":1486554480000,"doc_count":14},{"key_as_string":"2017-02-08T11:49:00.000Z","key":1486554540000,"doc_count":11},{"key_as_string":"2017-02-08T11:50:00.000Z","key":1486554600000,"doc_count":9},{"key_as_string":"2017-02-08T11:51:00.000Z","key":1486554660000,"doc_count":14},{"key_as_string":"2017-02-08T11:52:00.000Z","key":1486554720000,"doc_count":13},{"key_as_string":"2017-02-08T11:53:00.000Z","key":1486554780000,"doc_count":12},{"key_as_string":"2017-02-08T11:54:00.000Z","key":1486554840000,"doc_count":13},{"key_as_string":"2017-02-08T11:55:00.000Z","key":1486554900000,"doc_count":18},{"key_as_string":"2017-02-08T11:56:00.000Z","key":1486554960000,"doc_count":18},{"key_as_string":"2017-02-08T11:57:00.000Z","key":1486555020000,"doc_count":13},{"key_as_string":"2017-02-08T11:58:00.000Z","key":1486555080000,"doc_count":13},{"key_as_string":"2017-02-08T11:59:00.000Z","key":1486555140000,"doc_count":14},{"key_as_string":"2017-02-08T12:00:00.000Z","key":1486555200000,"doc_count":18},{"key_as_string":"2017-02-08T12:01:00.000Z","key":1486555260000,"doc_count":14},{"key_as_string":"2017-02-08T12:02:00.000Z","key":1486555320000,"doc_count":14},{"key_as_string":"2017-02-08T12:03:00.000Z","key":1486555380000,"doc_count":13},{"key_as_string":"2017-02-08T12:04:00.000Z","key":1486555440000,"doc_count":18},{"key_as_string":"2017-02-08T12:05:00.000Z","key":1486555500000,"doc_count":13},{"key_as_string":"2017-02-08T12:06:00.000Z","key":1486555560000,"doc_count":16},{"key_as_string":"2017-02-08T12:07:00.000Z","key":1486555620000,"doc_count":13},{"key_as_string":"2017-02-08T12:08:00.000Z","key":1486555680000,"doc_count":14},{"key_as_string":"2017-02-08T12:09:00.000Z","key":1486555740000,"doc_count":16},{"key_as_string":"2017-02-08T12:10:00.000Z","key":1486555800000,"doc_count":13},{"key_as_string":"2017-02-08T12:11:00.000Z","key":1486555860000,"doc_count":13},{"key_as_string":"2017-02-08T12:12:00.000Z","key":1486555920000,"doc_count":15},{"key_as_string":"2017-02-08T12:13:00.000Z","key":1486555980000,"doc_count":11},{"key_as_string":"2017-02-08T12:14:00.000Z","key":1486556040000,"doc_count":15},{"key_as_string":"2017-02-08T12:15:00.000Z","key":1486556100000,"doc_count":12},{"key_as_string":"2017-02-08T12:16:00.000Z","key":1486556160000,"doc_count":14},{"key_as_string":"2017-02-08T12:17:00.000Z","key":1486556220000,"doc_count":13},{"key_as_string":"2017-02-08T12:18:00.000Z","key":1486556280000,"doc_count":19},{"key_as_string":"2017-02-08T12:19:00.000Z","key":1486556340000,"doc_count":13},{"key_as_string":"2017-02-08T12:20:00.000Z","key":1486556400000,"doc_count":14},{"key_as_string":"2017-02-08T12:21:00.000Z","key":1486556460000,"doc_count":12},{"key_as_string":"2017-02-08T12:22:00.000Z","key":1486556520000,"doc_count":15},{"key_as_string":"2017-02-08T12:23:00.000Z","key":1486556580000,"doc_count":17},{"key_as_string":"2017-02-08T12:24:00.000Z","key":1486556640000,"doc_count":14},{"key_as_string":"2017-02-08T12:25:00.000Z","key":1486556700000,"doc_count":10},{"key_as_string":"2017-02-08T12:26:00.000Z","key":1486556760000,"doc_count":13},{"key_as_string":"2017-02-08T12:27:00.000Z","key":1486556820000,"doc_count":14},{"key_as_string":"2017-02-08T12:28:00.000Z","key":1486556880000,"doc_count":10},{"key_as_string":"2017-02-08T12:29:00.000Z","key":1486556940000,"doc_count":13},{"key_as_string":"2017-02-08T12:30:00.000Z","key":1486557000000,"doc_count":16},{"key_as_string":"2017-02-08T12:31:00.000Z","key":1486557060000,"doc_count":15},{"key_as_string":"2017-02-08T12:32:00.000Z","key":1486557120000,"doc_count":9},{"key_as_string":"2017-02-08T12:33:00.000Z","key":1486557180000,"doc_count":16},{"key_as_string":"2017-02-08T12:34:00.000Z","key":1486557240000,"doc_count":16},{"key_as_string":"2017-02-08T12:35:00.000Z","key":1486557300000,"doc_count":9},{"key_as_string":"2017-02-08T12:36:00.000Z","key":1486557360000,"doc_count":11},{"key_as_string":"2017-02-08T12:37:00.000Z","key":1486557420000,"doc_count":12},{"key_as_string":"2017-02-08T12:38:00.000Z","key":1486557480000,"doc_count":16},{"key_as_string":"2017-02-08T12:39:00.000Z","key":1486557540000,"doc_count":13},{"key_as_string":"2017-02-08T12:40:00.000Z","key":1486557600000,"doc_count":12},{"key_as_string":"2017-02-08T12:41:00.000Z","key":1486557660000,"doc_count":15},{"key_as_string":"2017-02-08T12:42:00.000Z","key":1486557720000,"doc_count":12},{"key_as_string":"2017-02-08T12:43:00.000Z","key":1486557780000,"doc_count":13},{"key_as_string":"2017-02-08T12:44:00.000Z","key":1486557840000,"doc_count":13},{"key_as_string":"2017-02-08T12:45:00.000Z","key":1486557900000,"doc_count":15},{"key_as_string":"2017-02-08T12:46:00.000Z","key":1486557960000,"doc_count":15},{"key_as_string":"2017-02-08T12:47:00.000Z","key":1486558020000,"doc_count":12},{"key_as_string":"2017-02-08T12:48:00.000Z","key":1486558080000,"doc_count":13},{"key_as_string":"2017-02-08T12:49:00.000Z","key":1486558140000,"doc_count":15},{"key_as_string":"2017-02-08T12:50:00.000Z","key":1486558200000,"doc_count":16},{"key_as_string":"2017-02-08T12:51:00.000Z","key":1486558260000,"doc_count":14},{"key_as_string":"2017-02-08T12:52:00.000Z","key":1486558320000,"doc_count":11},{"key_as_string":"2017-02-08T12:53:00.000Z","key":1486558380000,"doc_count":10},{"key_as_string":"2017-02-08T12:54:00.000Z","key":1486558440000,"doc_count":14},{"key_as_string":"2017-02-08T12:55:00.000Z","key":1486558500000,"doc_count":11},{"key_as_string":"2017-02-08T12:56:00.000Z","key":1486558560000,"doc_count":9},{"key_as_string":"2017-02-08T12:57:00.000Z","key":1486558620000,"doc_count":13},{"key_as_string":"2017-02-08T12:58:00.000Z","key":1486558680000,"doc_count":13},{"key_as_string":"2017-02-08T12:59:00.000Z","key":1486558740000,"doc_count":13},{"key_as_string":"2017-02-08T13:00:00.000Z","key":1486558800000,"doc_count":18},{"key_as_string":"2017-02-08T13:01:00.000Z","key":1486558860000,"doc_count":13},{"key_as_string":"2017-02-08T13:02:00.000Z","key":1486558920000,"doc_count":20},{"key_as_string":"2017-02-08T13:03:00.000Z","key":1486558980000,"doc_count":10},{"key_as_string":"2017-02-08T13:04:00.000Z","key":1486559040000,"doc_count":16},{"key_as_string":"2017-02-08T13:05:00.000Z","key":1486559100000,"doc_count":11},{"key_as_string":"2017-02-08T13:06:00.000Z","key":1486559160000,"doc_count":18},{"key_as_string":"2017-02-08T13:07:00.000Z","key":1486559220000,"doc_count":10},{"key_as_string":"2017-02-08T13:08:00.000Z","key":1486559280000,"doc_count":15},{"key_as_string":"2017-02-08T13:09:00.000Z","key":1486559340000,"doc_count":17},{"key_as_string":"2017-02-08T13:10:00.000Z","key":1486559400000,"doc_count":6},{"key_as_string":"2017-02-08T13:11:00.000Z","key":1486559460000,"doc_count":19},{"key_as_string":"2017-02-08T13:12:00.000Z","key":1486559520000,"doc_count":12},{"key_as_string":"2017-02-08T13:13:00.000Z","key":1486559580000,"doc_count":11},{"key_as_string":"2017-02-08T13:14:00.000Z","key":1486559640000,"doc_count":15},{"key_as_string":"2017-02-08T13:15:00.000Z","key":1486559700000,"doc_count":10},{"key_as_string":"2017-02-08T13:16:00.000Z","key":1486559760000,"doc_count":16},{"key_as_string":"2017-02-08T13:17:00.000Z","key":1486559820000,"doc_count":16},{"key_as_string":"2017-02-08T13:18:00.000Z","key":1486559880000,"doc_count":14},{"key_as_string":"2017-02-08T13:19:00.000Z","key":1486559940000,"doc_count":12},{"key_as_string":"2017-02-08T13:20:00.000Z","key":1486560000000,"doc_count":10},{"key_as_string":"2017-02-08T13:21:00.000Z","key":1486560060000,"doc_count":18},{"key_as_string":"2017-02-08T13:22:00.000Z","key":1486560120000,"doc_count":14},{"key_as_string":"2017-02-08T13:23:00.000Z","key":1486560180000,"doc_count":11},{"key_as_string":"2017-02-08T13:24:00.000Z","key":1486560240000,"doc_count":15},{"key_as_string":"2017-02-08T13:25:00.000Z","key":1486560300000,"doc_count":17},{"key_as_string":"2017-02-08T13:26:00.000Z","key":1486560360000,"doc_count":10},{"key_as_string":"2017-02-08T13:27:00.000Z","key":1486560420000,"doc_count":14},{"key_as_string":"2017-02-08T13:28:00.000Z","key":1486560480000,"doc_count":14},{"key_as_string":"2017-02-08T13:29:00.000Z","key":1486560540000,"doc_count":13},{"key_as_string":"2017-02-08T13:30:00.000Z","key":1486560600000,"doc_count":15},{"key_as_string":"2017-02-08T13:31:00.000Z","key":1486560660000,"doc_count":16},{"key_as_string":"2017-02-08T13:32:00.000Z","key":1486560720000,"doc_count":13},{"key_as_string":"2017-02-08T13:33:00.000Z","key":1486560780000,"doc_count":13},{"key_as_string":"2017-02-08T13:34:00.000Z","key":1486560840000,"doc_count":15},{"key_as_string":"2017-02-08T13:35:00.000Z","key":1486560900000,"doc_count":8},{"key_as_string":"2017-02-08T13:36:00.000Z","key":1486560960000,"doc_count":18},{"key_as_string":"2017-02-08T13:37:00.000Z","key":1486561020000,"doc_count":13},{"key_as_string":"2017-02-08T13:38:00.000Z","key":1486561080000,"doc_count":14},{"key_as_string":"2017-02-08T13:39:00.000Z","key":1486561140000,"doc_count":14},{"key_as_string":"2017-02-08T13:40:00.000Z","key":1486561200000,"doc_count":17},{"key_as_string":"2017-02-08T13:41:00.000Z","key":1486561260000,"doc_count":12},{"key_as_string":"2017-02-08T13:42:00.000Z","key":1486561320000,"doc_count":10},{"key_as_string":"2017-02-08T13:43:00.000Z","key":1486561380000,"doc_count":17},{"key_as_string":"2017-02-08T13:44:00.000Z","key":1486561440000,"doc_count":12},{"key_as_string":"2017-02-08T13:45:00.000Z","key":1486561500000,"doc_count":9},{"key_as_string":"2017-02-08T13:46:00.000Z","key":1486561560000,"doc_count":21},{"key_as_string":"2017-02-08T13:47:00.000Z","key":1486561620000,"doc_count":16},{"key_as_string":"2017-02-08T13:48:00.000Z","key":1486561680000,"doc_count":17},{"key_as_string":"2017-02-08T13:49:00.000Z","key":1486561740000,"doc_count":11},{"key_as_string":"2017-02-08T13:50:00.000Z","key":1486561800000,"doc_count":17},{"key_as_string":"2017-02-08T13:51:00.000Z","key":1486561860000,"doc_count":9},{"key_as_string":"2017-02-08T13:52:00.000Z","key":1486561920000,"doc_count":14},{"key_as_string":"2017-02-08T13:53:00.000Z","key":1486561980000,"doc_count":10},{"key_as_string":"2017-02-08T13:54:00.000Z","key":1486562040000,"doc_count":9},{"key_as_string":"2017-02-08T13:55:00.000Z","key":1486562100000,"doc_count":21},{"key_as_string":"2017-02-08T13:56:00.000Z","key":1486562160000,"doc_count":14},{"key_as_string":"2017-02-08T13:57:00.000Z","key":1486562220000,"doc_count":11},{"key_as_string":"2017-02-08T13:58:00.000Z","key":1486562280000,"doc_count":15},{"key_as_string":"2017-02-08T13:59:00.000Z","key":1486562340000,"doc_count":10},{"key_as_string":"2017-02-08T14:00:00.000Z","key":1486562400000,"doc_count":12},{"key_as_string":"2017-02-08T14:01:00.000Z","key":1486562460000,"doc_count":15},{"key_as_string":"2017-02-08T14:02:00.000Z","key":1486562520000,"doc_count":11},{"key_as_string":"2017-02-08T14:03:00.000Z","key":1486562580000,"doc_count":14},{"key_as_string":"2017-02-08T14:04:00.000Z","key":1486562640000,"doc_count":18},{"key_as_string":"2017-02-08T14:05:00.000Z","key":1486562700000,"doc_count":11},{"key_as_string":"2017-02-08T14:06:00.000Z","key":1486562760000,"doc_count":11},{"key_as_string":"2017-02-08T14:07:00.000Z","key":1486562820000,"doc_count":16},{"key_as_string":"2017-02-08T14:08:00.000Z","key":1486562880000,"doc_count":10},{"key_as_string":"2017-02-08T14:09:00.000Z","key":1486562940000,"doc_count":14},{"key_as_string":"2017-02-08T14:10:00.000Z","key":1486563000000,"doc_count":14},{"key_as_string":"2017-02-08T14:11:00.000Z","key":1486563060000,"doc_count":9},{"key_as_string":"2017-02-08T14:12:00.000Z","key":1486563120000,"doc_count":15},{"key_as_string":"2017-02-08T14:13:00.000Z","key":1486563180000,"doc_count":17},{"key_as_string":"2017-02-08T14:14:00.000Z","key":1486563240000,"doc_count":5},{"key_as_string":"2017-02-08T14:15:00.000Z","key":1486563300000,"doc_count":15},{"key_as_string":"2017-02-08T14:16:00.000Z","key":1486563360000,"doc_count":15},{"key_as_string":"2017-02-08T14:17:00.000Z","key":1486563420000,"doc_count":13},{"key_as_string":"2017-02-08T14:18:00.000Z","key":1486563480000,"doc_count":15},{"key_as_string":"2017-02-08T14:19:00.000Z","key":1486563540000,"doc_count":14},{"key_as_string":"2017-02-08T14:20:00.000Z","key":1486563600000,"doc_count":8},{"key_as_string":"2017-02-08T14:21:00.000Z","key":1486563660000,"doc_count":14},{"key_as_string":"2017-02-08T14:22:00.000Z","key":1486563720000,"doc_count":11},{"key_as_string":"2017-02-08T14:23:00.000Z","key":1486563780000,"doc_count":14},{"key_as_string":"2017-02-08T14:24:00.000Z","key":1486563840000,"doc_count":15},{"key_as_string":"2017-02-08T14:25:00.000Z","key":1486563900000,"doc_count":9},{"key_as_string":"2017-02-08T14:26:00.000Z","key":1486563960000,"doc_count":16},{"key_as_string":"2017-02-08T14:27:00.000Z","key":1486564020000,"doc_count":15},{"key_as_string":"2017-02-08T14:28:00.000Z","key":1486564080000,"doc_count":13},{"key_as_string":"2017-02-08T14:29:00.000Z","key":1486564140000,"doc_count":14},{"key_as_string":"2017-02-08T14:30:00.000Z","key":1486564200000,"doc_count":10},{"key_as_string":"2017-02-08T14:31:00.000Z","key":1486564260000,"doc_count":15},{"key_as_string":"2017-02-08T14:32:00.000Z","key":1486564320000,"doc_count":15},{"key_as_string":"2017-02-08T14:33:00.000Z","key":1486564380000,"doc_count":11},{"key_as_string":"2017-02-08T14:34:00.000Z","key":1486564440000,"doc_count":13},{"key_as_string":"2017-02-08T14:35:00.000Z","key":1486564500000,"doc_count":14},{"key_as_string":"2017-02-08T14:36:00.000Z","key":1486564560000,"doc_count":11},{"key_as_string":"2017-02-08T14:37:00.000Z","key":1486564620000,"doc_count":10},{"key_as_string":"2017-02-08T14:38:00.000Z","key":1486564680000,"doc_count":18},{"key_as_string":"2017-02-08T14:39:00.000Z","key":1486564740000,"doc_count":12},{"key_as_string":"2017-02-08T14:40:00.000Z","key":1486564800000,"doc_count":14},{"key_as_string":"2017-02-08T14:41:00.000Z","key":1486564860000,"doc_count":15},{"key_as_string":"2017-02-08T14:42:00.000Z","key":1486564920000,"doc_count":17},{"key_as_string":"2017-02-08T14:43:00.000Z","key":1486564980000,"doc_count":9},{"key_as_string":"2017-02-08T14:44:00.000Z","key":1486565040000,"doc_count":10},{"key_as_string":"2017-02-08T14:45:00.000Z","key":1486565100000,"doc_count":9},{"key_as_string":"2017-02-08T14:46:00.000Z","key":1486565160000,"doc_count":15},{"key_as_string":"2017-02-08T14:47:00.000Z","key":1486565220000,"doc_count":12},{"key_as_string":"2017-02-08T14:48:00.000Z","key":1486565280000,"doc_count":10},{"key_as_string":"2017-02-08T14:49:00.000Z","key":1486565340000,"doc_count":18},{"key_as_string":"2017-02-08T14:50:00.000Z","key":1486565400000,"doc_count":9},{"key_as_string":"2017-02-08T14:51:00.000Z","key":1486565460000,"doc_count":15},{"key_as_string":"2017-02-08T14:52:00.000Z","key":1486565520000,"doc_count":19},{"key_as_string":"2017-02-08T14:53:00.000Z","key":1486565580000,"doc_count":11},{"key_as_string":"2017-02-08T14:54:00.000Z","key":1486565640000,"doc_count":12},{"key_as_string":"2017-02-08T14:55:00.000Z","key":1486565700000,"doc_count":10},{"key_as_string":"2017-02-08T14:56:00.000Z","key":1486565760000,"doc_count":9},{"key_as_string":"2017-02-08T14:57:00.000Z","key":1486565820000,"doc_count":21},{"key_as_string":"2017-02-08T14:58:00.000Z","key":1486565880000,"doc_count":13},{"key_as_string":"2017-02-08T14:59:00.000Z","key":1486565940000,"doc_count":16},{"key_as_string":"2017-02-08T15:00:00.000Z","key":1486566000000,"doc_count":9},{"key_as_string":"2017-02-08T15:01:00.000Z","key":1486566060000,"doc_count":16},{"key_as_string":"2017-02-08T15:02:00.000Z","key":1486566120000,"doc_count":11},{"key_as_string":"2017-02-08T15:03:00.000Z","key":1486566180000,"doc_count":14},{"key_as_string":"2017-02-08T15:04:00.000Z","key":1486566240000,"doc_count":16},{"key_as_string":"2017-02-08T15:05:00.000Z","key":1486566300000,"doc_count":10},{"key_as_string":"2017-02-08T15:06:00.000Z","key":1486566360000,"doc_count":14},{"key_as_string":"2017-02-08T15:07:00.000Z","key":1486566420000,"doc_count":9},{"key_as_string":"2017-02-08T15:08:00.000Z","key":1486566480000,"doc_count":13},{"key_as_string":"2017-02-08T15:09:00.000Z","key":1486566540000,"doc_count":13},{"key_as_string":"2017-02-08T15:10:00.000Z","key":1486566600000,"doc_count":14},{"key_as_string":"2017-02-08T15:11:00.000Z","key":1486566660000,"doc_count":15},{"key_as_string":"2017-02-08T15:12:00.000Z","key":1486566720000,"doc_count":15},{"key_as_string":"2017-02-08T15:13:00.000Z","key":1486566780000,"doc_count":11},{"key_as_string":"2017-02-08T15:14:00.000Z","key":1486566840000,"doc_count":7},{"key_as_string":"2017-02-08T15:15:00.000Z","key":1486566900000,"doc_count":20},{"key_as_string":"2017-02-08T15:16:00.000Z","key":1486566960000,"doc_count":11},{"key_as_string":"2017-02-08T15:17:00.000Z","key":1486567020000,"doc_count":15},{"key_as_string":"2017-02-08T15:18:00.000Z","key":1486567080000,"doc_count":14},{"key_as_string":"2017-02-08T15:19:00.000Z","key":1486567140000,"doc_count":11},{"key_as_string":"2017-02-08T15:20:00.000Z","key":1486567200000,"doc_count":18},{"key_as_string":"2017-02-08T15:21:00.000Z","key":1486567260000,"doc_count":11},{"key_as_string":"2017-02-08T15:22:00.000Z","key":1486567320000,"doc_count":12},{"key_as_string":"2017-02-08T15:23:00.000Z","key":1486567380000,"doc_count":12},{"key_as_string":"2017-02-08T15:24:00.000Z","key":1486567440000,"doc_count":8},{"key_as_string":"2017-02-08T15:25:00.000Z","key":1486567500000,"doc_count":11},{"key_as_string":"2017-02-08T15:26:00.000Z","key":1486567560000,"doc_count":12},{"key_as_string":"2017-02-08T15:27:00.000Z","key":1486567620000,"doc_count":12},{"key_as_string":"2017-02-08T15:28:00.000Z","key":1486567680000,"doc_count":14},{"key_as_string":"2017-02-08T15:29:00.000Z","key":1486567740000,"doc_count":13},{"key_as_string":"2017-02-08T15:30:00.000Z","key":1486567800000,"doc_count":13},{"key_as_string":"2017-02-08T15:31:00.000Z","key":1486567860000,"doc_count":14},{"key_as_string":"2017-02-08T15:32:00.000Z","key":1486567920000,"doc_count":15},{"key_as_string":"2017-02-08T15:33:00.000Z","key":1486567980000,"doc_count":12},{"key_as_string":"2017-02-08T15:34:00.000Z","key":1486568040000,"doc_count":15},{"key_as_string":"2017-02-08T15:35:00.000Z","key":1486568100000,"doc_count":20},{"key_as_string":"2017-02-08T15:36:00.000Z","key":1486568160000,"doc_count":11},{"key_as_string":"2017-02-08T15:37:00.000Z","key":1486568220000,"doc_count":13},{"key_as_string":"2017-02-08T15:38:00.000Z","key":1486568280000,"doc_count":13},{"key_as_string":"2017-02-08T15:39:00.000Z","key":1486568340000,"doc_count":10},{"key_as_string":"2017-02-08T15:40:00.000Z","key":1486568400000,"doc_count":14},{"key_as_string":"2017-02-08T15:41:00.000Z","key":1486568460000,"doc_count":16},{"key_as_string":"2017-02-08T15:42:00.000Z","key":1486568520000,"doc_count":17},{"key_as_string":"2017-02-08T15:43:00.000Z","key":1486568580000,"doc_count":15},{"key_as_string":"2017-02-08T15:44:00.000Z","key":1486568640000,"doc_count":14},{"key_as_string":"2017-02-08T15:45:00.000Z","key":1486568700000,"doc_count":14},{"key_as_string":"2017-02-08T15:46:00.000Z","key":1486568760000,"doc_count":12},{"key_as_string":"2017-02-08T15:47:00.000Z","key":1486568820000,"doc_count":16},{"key_as_string":"2017-02-08T15:48:00.000Z","key":1486568880000,"doc_count":16},{"key_as_string":"2017-02-08T15:49:00.000Z","key":1486568940000,"doc_count":12},{"key_as_string":"2017-02-08T15:50:00.000Z","key":1486569000000,"doc_count":15},{"key_as_string":"2017-02-08T15:51:00.000Z","key":1486569060000,"doc_count":10},{"key_as_string":"2017-02-08T15:52:00.000Z","key":1486569120000,"doc_count":12},{"key_as_string":"2017-02-08T15:53:00.000Z","key":1486569180000,"doc_count":12},{"key_as_string":"2017-02-08T15:54:00.000Z","key":1486569240000,"doc_count":16},{"key_as_string":"2017-02-08T15:55:00.000Z","key":1486569300000,"doc_count":12},{"key_as_string":"2017-02-08T15:56:00.000Z","key":1486569360000,"doc_count":9},{"key_as_string":"2017-02-08T15:57:00.000Z","key":1486569420000,"doc_count":11},{"key_as_string":"2017-02-08T15:58:00.000Z","key":1486569480000,"doc_count":10},{"key_as_string":"2017-02-08T15:59:00.000Z","key":1486569540000,"doc_count":12},{"key_as_string":"2017-02-08T16:00:00.000Z","key":1486569600000,"doc_count":12},{"key_as_string":"2017-02-08T16:01:00.000Z","key":1486569660000,"doc_count":14},{"key_as_string":"2017-02-08T16:02:00.000Z","key":1486569720000,"doc_count":13},{"key_as_string":"2017-02-08T16:03:00.000Z","key":1486569780000,"doc_count":11},{"key_as_string":"2017-02-08T16:04:00.000Z","key":1486569840000,"doc_count":12},{"key_as_string":"2017-02-08T16:05:00.000Z","key":1486569900000,"doc_count":16},{"key_as_string":"2017-02-08T16:06:00.000Z","key":1486569960000,"doc_count":13},{"key_as_string":"2017-02-08T16:07:00.000Z","key":1486570020000,"doc_count":12},{"key_as_string":"2017-02-08T16:08:00.000Z","key":1486570080000,"doc_count":15},{"key_as_string":"2017-02-08T16:09:00.000Z","key":1486570140000,"doc_count":7},{"key_as_string":"2017-02-08T16:10:00.000Z","key":1486570200000,"doc_count":15},{"key_as_string":"2017-02-08T16:11:00.000Z","key":1486570260000,"doc_count":13},{"key_as_string":"2017-02-08T16:12:00.000Z","key":1486570320000,"doc_count":10},{"key_as_string":"2017-02-08T16:13:00.000Z","key":1486570380000,"doc_count":13},{"key_as_string":"2017-02-08T16:14:00.000Z","key":1486570440000,"doc_count":13},{"key_as_string":"2017-02-08T16:15:00.000Z","key":1486570500000,"doc_count":7},{"key_as_string":"2017-02-08T16:16:00.000Z","key":1486570560000,"doc_count":12},{"key_as_string":"2017-02-08T16:17:00.000Z","key":1486570620000,"doc_count":11},{"key_as_string":"2017-02-08T16:18:00.000Z","key":1486570680000,"doc_count":10},{"key_as_string":"2017-02-08T16:19:00.000Z","key":1486570740000,"doc_count":8},{"key_as_string":"2017-02-08T16:20:00.000Z","key":1486570800000,"doc_count":13},{"key_as_string":"2017-02-08T16:21:00.000Z","key":1486570860000,"doc_count":12},{"key_as_string":"2017-02-08T16:22:00.000Z","key":1486570920000,"doc_count":12},{"key_as_string":"2017-02-08T16:23:00.000Z","key":1486570980000,"doc_count":9},{"key_as_string":"2017-02-08T16:24:00.000Z","key":1486571040000,"doc_count":12},{"key_as_string":"2017-02-08T16:25:00.000Z","key":1486571100000,"doc_count":13},{"key_as_string":"2017-02-08T16:26:00.000Z","key":1486571160000,"doc_count":17},{"key_as_string":"2017-02-08T16:27:00.000Z","key":1486571220000,"doc_count":15},{"key_as_string":"2017-02-08T16:28:00.000Z","key":1486571280000,"doc_count":14},{"key_as_string":"2017-02-08T16:29:00.000Z","key":1486571340000,"doc_count":15},{"key_as_string":"2017-02-08T16:30:00.000Z","key":1486571400000,"doc_count":12},{"key_as_string":"2017-02-08T16:31:00.000Z","key":1486571460000,"doc_count":11},{"key_as_string":"2017-02-08T16:32:00.000Z","key":1486571520000,"doc_count":16},{"key_as_string":"2017-02-08T16:33:00.000Z","key":1486571580000,"doc_count":9},{"key_as_string":"2017-02-08T16:34:00.000Z","key":1486571640000,"doc_count":10},{"key_as_string":"2017-02-08T16:35:00.000Z","key":1486571700000,"doc_count":16},{"key_as_string":"2017-02-08T16:36:00.000Z","key":1486571760000,"doc_count":18},{"key_as_string":"2017-02-08T16:37:00.000Z","key":1486571820000,"doc_count":13},{"key_as_string":"2017-02-08T16:38:00.000Z","key":1486571880000,"doc_count":12},{"key_as_string":"2017-02-08T16:39:00.000Z","key":1486571940000,"doc_count":12},{"key_as_string":"2017-02-08T16:40:00.000Z","key":1486572000000,"doc_count":15},{"key_as_string":"2017-02-08T16:41:00.000Z","key":1486572060000,"doc_count":14},{"key_as_string":"2017-02-08T16:42:00.000Z","key":1486572120000,"doc_count":9},{"key_as_string":"2017-02-08T16:43:00.000Z","key":1486572180000,"doc_count":10},{"key_as_string":"2017-02-08T16:44:00.000Z","key":1486572240000,"doc_count":14},{"key_as_string":"2017-02-08T16:45:00.000Z","key":1486572300000,"doc_count":15},{"key_as_string":"2017-02-08T16:46:00.000Z","key":1486572360000,"doc_count":18},{"key_as_string":"2017-02-08T16:47:00.000Z","key":1486572420000,"doc_count":8},{"key_as_string":"2017-02-08T16:48:00.000Z","key":1486572480000,"doc_count":14},{"key_as_string":"2017-02-08T16:49:00.000Z","key":1486572540000,"doc_count":11},{"key_as_string":"2017-02-08T16:50:00.000Z","key":1486572600000,"doc_count":12},{"key_as_string":"2017-02-08T16:51:00.000Z","key":1486572660000,"doc_count":8},{"key_as_string":"2017-02-08T16:52:00.000Z","key":1486572720000,"doc_count":13},{"key_as_string":"2017-02-08T16:53:00.000Z","key":1486572780000,"doc_count":12},{"key_as_string":"2017-02-08T16:54:00.000Z","key":1486572840000,"doc_count":15},{"key_as_string":"2017-02-08T16:55:00.000Z","key":1486572900000,"doc_count":15},{"key_as_string":"2017-02-08T16:56:00.000Z","key":1486572960000,"doc_count":12},{"key_as_string":"2017-02-08T16:57:00.000Z","key":1486573020000,"doc_count":10},{"key_as_string":"2017-02-08T16:58:00.000Z","key":1486573080000,"doc_count":11},{"key_as_string":"2017-02-08T16:59:00.000Z","key":1486573140000,"doc_count":18},{"key_as_string":"2017-02-08T17:00:00.000Z","key":1486573200000,"doc_count":11},{"key_as_string":"2017-02-08T17:01:00.000Z","key":1486573260000,"doc_count":10},{"key_as_string":"2017-02-08T17:02:00.000Z","key":1486573320000,"doc_count":14},{"key_as_string":"2017-02-08T17:03:00.000Z","key":1486573380000,"doc_count":11},{"key_as_string":"2017-02-08T17:04:00.000Z","key":1486573440000,"doc_count":14},{"key_as_string":"2017-02-08T17:05:00.000Z","key":1486573500000,"doc_count":7},{"key_as_string":"2017-02-08T17:06:00.000Z","key":1486573560000,"doc_count":17},{"key_as_string":"2017-02-08T17:07:00.000Z","key":1486573620000,"doc_count":6},{"key_as_string":"2017-02-08T17:08:00.000Z","key":1486573680000,"doc_count":12},{"key_as_string":"2017-02-08T17:09:00.000Z","key":1486573740000,"doc_count":7},{"key_as_string":"2017-02-08T17:10:00.000Z","key":1486573800000,"doc_count":17},{"key_as_string":"2017-02-08T17:11:00.000Z","key":1486573860000,"doc_count":19},{"key_as_string":"2017-02-08T17:12:00.000Z","key":1486573920000,"doc_count":13},{"key_as_string":"2017-02-08T17:13:00.000Z","key":1486573980000,"doc_count":9},{"key_as_string":"2017-02-08T17:14:00.000Z","key":1486574040000,"doc_count":16},{"key_as_string":"2017-02-08T17:15:00.000Z","key":1486574100000,"doc_count":15},{"key_as_string":"2017-02-08T17:16:00.000Z","key":1486574160000,"doc_count":11},{"key_as_string":"2017-02-08T17:17:00.000Z","key":1486574220000,"doc_count":18},{"key_as_string":"2017-02-08T17:18:00.000Z","key":1486574280000,"doc_count":13},{"key_as_string":"2017-02-08T17:19:00.000Z","key":1486574340000,"doc_count":16},{"key_as_string":"2017-02-08T17:20:00.000Z","key":1486574400000,"doc_count":14},{"key_as_string":"2017-02-08T17:21:00.000Z","key":1486574460000,"doc_count":13},{"key_as_string":"2017-02-08T17:22:00.000Z","key":1486574520000,"doc_count":13},{"key_as_string":"2017-02-08T17:23:00.000Z","key":1486574580000,"doc_count":11},{"key_as_string":"2017-02-08T17:24:00.000Z","key":1486574640000,"doc_count":8},{"key_as_string":"2017-02-08T17:25:00.000Z","key":1486574700000,"doc_count":9},{"key_as_string":"2017-02-08T17:26:00.000Z","key":1486574760000,"doc_count":16},{"key_as_string":"2017-02-08T17:27:00.000Z","key":1486574820000,"doc_count":13},{"key_as_string":"2017-02-08T17:28:00.000Z","key":1486574880000,"doc_count":9},{"key_as_string":"2017-02-08T17:29:00.000Z","key":1486574940000,"doc_count":13},{"key_as_string":"2017-02-08T17:30:00.000Z","key":1486575000000,"doc_count":13},{"key_as_string":"2017-02-08T17:31:00.000Z","key":1486575060000,"doc_count":15},{"key_as_string":"2017-02-08T17:32:00.000Z","key":1486575120000,"doc_count":10},{"key_as_string":"2017-02-08T17:33:00.000Z","key":1486575180000,"doc_count":14},{"key_as_string":"2017-02-08T17:34:00.000Z","key":1486575240000,"doc_count":10},{"key_as_string":"2017-02-08T17:35:00.000Z","key":1486575300000,"doc_count":14},{"key_as_string":"2017-02-08T17:36:00.000Z","key":1486575360000,"doc_count":10},{"key_as_string":"2017-02-08T17:37:00.000Z","key":1486575420000,"doc_count":9},{"key_as_string":"2017-02-08T17:38:00.000Z","key":1486575480000,"doc_count":11},{"key_as_string":"2017-02-08T17:39:00.000Z","key":1486575540000,"doc_count":12},{"key_as_string":"2017-02-08T17:40:00.000Z","key":1486575600000,"doc_count":10},{"key_as_string":"2017-02-08T17:41:00.000Z","key":1486575660000,"doc_count":15},{"key_as_string":"2017-02-08T17:42:00.000Z","key":1486575720000,"doc_count":18},{"key_as_string":"2017-02-08T17:43:00.000Z","key":1486575780000,"doc_count":9},{"key_as_string":"2017-02-08T17:44:00.000Z","key":1486575840000,"doc_count":14},{"key_as_string":"2017-02-08T17:45:00.000Z","key":1486575900000,"doc_count":9},{"key_as_string":"2017-02-08T17:46:00.000Z","key":1486575960000,"doc_count":11},{"key_as_string":"2017-02-08T17:47:00.000Z","key":1486576020000,"doc_count":13},{"key_as_string":"2017-02-08T17:48:00.000Z","key":1486576080000,"doc_count":10},{"key_as_string":"2017-02-08T17:49:00.000Z","key":1486576140000,"doc_count":9},{"key_as_string":"2017-02-08T17:50:00.000Z","key":1486576200000,"doc_count":13},{"key_as_string":"2017-02-08T17:51:00.000Z","key":1486576260000,"doc_count":12},{"key_as_string":"2017-02-08T17:52:00.000Z","key":1486576320000,"doc_count":11},{"key_as_string":"2017-02-08T17:53:00.000Z","key":1486576380000,"doc_count":12},{"key_as_string":"2017-02-08T17:54:00.000Z","key":1486576440000,"doc_count":11},{"key_as_string":"2017-02-08T17:55:00.000Z","key":1486576500000,"doc_count":14},{"key_as_string":"2017-02-08T17:56:00.000Z","key":1486576560000,"doc_count":17},{"key_as_string":"2017-02-08T17:57:00.000Z","key":1486576620000,"doc_count":12},{"key_as_string":"2017-02-08T17:58:00.000Z","key":1486576680000,"doc_count":8},{"key_as_string":"2017-02-08T17:59:00.000Z","key":1486576740000,"doc_count":12},{"key_as_string":"2017-02-08T18:00:00.000Z","key":1486576800000,"doc_count":15},{"key_as_string":"2017-02-08T18:01:00.000Z","key":1486576860000,"doc_count":10},{"key_as_string":"2017-02-08T18:02:00.000Z","key":1486576920000,"doc_count":11},{"key_as_string":"2017-02-08T18:03:00.000Z","key":1486576980000,"doc_count":11},{"key_as_string":"2017-02-08T18:04:00.000Z","key":1486577040000,"doc_count":13},{"key_as_string":"2017-02-08T18:05:00.000Z","key":1486577100000,"doc_count":11},{"key_as_string":"2017-02-08T18:06:00.000Z","key":1486577160000,"doc_count":10},{"key_as_string":"2017-02-08T18:07:00.000Z","key":1486577220000,"doc_count":12},{"key_as_string":"2017-02-08T18:08:00.000Z","key":1486577280000,"doc_count":13},{"key_as_string":"2017-02-08T18:09:00.000Z","key":1486577340000,"doc_count":8},{"key_as_string":"2017-02-08T18:10:00.000Z","key":1486577400000,"doc_count":6},{"key_as_string":"2017-02-08T18:11:00.000Z","key":1486577460000,"doc_count":17},{"key_as_string":"2017-02-08T18:12:00.000Z","key":1486577520000,"doc_count":11},{"key_as_string":"2017-02-08T18:13:00.000Z","key":1486577580000,"doc_count":13},{"key_as_string":"2017-02-08T18:14:00.000Z","key":1486577640000,"doc_count":10},{"key_as_string":"2017-02-08T18:15:00.000Z","key":1486577700000,"doc_count":11},{"key_as_string":"2017-02-08T18:16:00.000Z","key":1486577760000,"doc_count":13},{"key_as_string":"2017-02-08T18:17:00.000Z","key":1486577820000,"doc_count":12},{"key_as_string":"2017-02-08T18:18:00.000Z","key":1486577880000,"doc_count":15},{"key_as_string":"2017-02-08T18:19:00.000Z","key":1486577940000,"doc_count":10},{"key_as_string":"2017-02-08T18:20:00.000Z","key":1486578000000,"doc_count":10},{"key_as_string":"2017-02-08T18:21:00.000Z","key":1486578060000,"doc_count":12},{"key_as_string":"2017-02-08T18:22:00.000Z","key":1486578120000,"doc_count":16},{"key_as_string":"2017-02-08T18:23:00.000Z","key":1486578180000,"doc_count":7},{"key_as_string":"2017-02-08T18:24:00.000Z","key":1486578240000,"doc_count":12},{"key_as_string":"2017-02-08T18:25:00.000Z","key":1486578300000,"doc_count":10},{"key_as_string":"2017-02-08T18:26:00.000Z","key":1486578360000,"doc_count":8},{"key_as_string":"2017-02-08T18:27:00.000Z","key":1486578420000,"doc_count":15},{"key_as_string":"2017-02-08T18:28:00.000Z","key":1486578480000,"doc_count":10},{"key_as_string":"2017-02-08T18:29:00.000Z","key":1486578540000,"doc_count":13},{"key_as_string":"2017-02-08T18:30:00.000Z","key":1486578600000,"doc_count":10},{"key_as_string":"2017-02-08T18:31:00.000Z","key":1486578660000,"doc_count":11},{"key_as_string":"2017-02-08T18:32:00.000Z","key":1486578720000,"doc_count":12},{"key_as_string":"2017-02-08T18:33:00.000Z","key":1486578780000,"doc_count":10},{"key_as_string":"2017-02-08T18:34:00.000Z","key":1486578840000,"doc_count":15},{"key_as_string":"2017-02-08T18:35:00.000Z","key":1486578900000,"doc_count":13},{"key_as_string":"2017-02-08T18:36:00.000Z","key":1486578960000,"doc_count":13},{"key_as_string":"2017-02-08T18:37:00.000Z","key":1486579020000,"doc_count":11},{"key_as_string":"2017-02-08T18:38:00.000Z","key":1486579080000,"doc_count":9},{"key_as_string":"2017-02-08T18:39:00.000Z","key":1486579140000,"doc_count":14},{"key_as_string":"2017-02-08T18:40:00.000Z","key":1486579200000,"doc_count":12},{"key_as_string":"2017-02-08T18:41:00.000Z","key":1486579260000,"doc_count":14},{"key_as_string":"2017-02-08T18:42:00.000Z","key":1486579320000,"doc_count":13},{"key_as_string":"2017-02-08T18:43:00.000Z","key":1486579380000,"doc_count":11},{"key_as_string":"2017-02-08T18:44:00.000Z","key":1486579440000,"doc_count":11},{"key_as_string":"2017-02-08T18:45:00.000Z","key":1486579500000,"doc_count":11},{"key_as_string":"2017-02-08T18:46:00.000Z","key":1486579560000,"doc_count":9},{"key_as_string":"2017-02-08T18:47:00.000Z","key":1486579620000,"doc_count":14},{"key_as_string":"2017-02-08T18:48:00.000Z","key":1486579680000,"doc_count":9},{"key_as_string":"2017-02-08T18:49:00.000Z","key":1486579740000,"doc_count":13},{"key_as_string":"2017-02-08T18:50:00.000Z","key":1486579800000,"doc_count":16},{"key_as_string":"2017-02-08T18:51:00.000Z","key":1486579860000,"doc_count":10},{"key_as_string":"2017-02-08T18:52:00.000Z","key":1486579920000,"doc_count":9},{"key_as_string":"2017-02-08T18:53:00.000Z","key":1486579980000,"doc_count":9},{"key_as_string":"2017-02-08T18:54:00.000Z","key":1486580040000,"doc_count":11},{"key_as_string":"2017-02-08T18:55:00.000Z","key":1486580100000,"doc_count":13},{"key_as_string":"2017-02-08T18:56:00.000Z","key":1486580160000,"doc_count":11},{"key_as_string":"2017-02-08T18:57:00.000Z","key":1486580220000,"doc_count":16},{"key_as_string":"2017-02-08T18:58:00.000Z","key":1486580280000,"doc_count":11},{"key_as_string":"2017-02-08T18:59:00.000Z","key":1486580340000,"doc_count":14},{"key_as_string":"2017-02-08T19:00:00.000Z","key":1486580400000,"doc_count":14},{"key_as_string":"2017-02-08T19:01:00.000Z","key":1486580460000,"doc_count":7},{"key_as_string":"2017-02-08T19:02:00.000Z","key":1486580520000,"doc_count":12},{"key_as_string":"2017-02-08T19:03:00.000Z","key":1486580580000,"doc_count":12},{"key_as_string":"2017-02-08T19:04:00.000Z","key":1486580640000,"doc_count":8},{"key_as_string":"2017-02-08T19:05:00.000Z","key":1486580700000,"doc_count":7},{"key_as_string":"2017-02-08T19:06:00.000Z","key":1486580760000,"doc_count":17},{"key_as_string":"2017-02-08T19:07:00.000Z","key":1486580820000,"doc_count":8},{"key_as_string":"2017-02-08T19:08:00.000Z","key":1486580880000,"doc_count":15},{"key_as_string":"2017-02-08T19:09:00.000Z","key":1486580940000,"doc_count":11},{"key_as_string":"2017-02-08T19:10:00.000Z","key":1486581000000,"doc_count":9},{"key_as_string":"2017-02-08T19:11:00.000Z","key":1486581060000,"doc_count":14},{"key_as_string":"2017-02-08T19:12:00.000Z","key":1486581120000,"doc_count":15},{"key_as_string":"2017-02-08T19:13:00.000Z","key":1486581180000,"doc_count":12},{"key_as_string":"2017-02-08T19:14:00.000Z","key":1486581240000,"doc_count":7},{"key_as_string":"2017-02-08T19:15:00.000Z","key":1486581300000,"doc_count":10},{"key_as_string":"2017-02-08T19:16:00.000Z","key":1486581360000,"doc_count":13},{"key_as_string":"2017-02-08T19:17:00.000Z","key":1486581420000,"doc_count":13},{"key_as_string":"2017-02-08T19:18:00.000Z","key":1486581480000,"doc_count":8},{"key_as_string":"2017-02-08T19:19:00.000Z","key":1486581540000,"doc_count":9},{"key_as_string":"2017-02-08T19:20:00.000Z","key":1486581600000,"doc_count":12},{"key_as_string":"2017-02-08T19:21:00.000Z","key":1486581660000,"doc_count":8},{"key_as_string":"2017-02-08T19:22:00.000Z","key":1486581720000,"doc_count":16},{"key_as_string":"2017-02-08T19:23:00.000Z","key":1486581780000,"doc_count":10},{"key_as_string":"2017-02-08T19:24:00.000Z","key":1486581840000,"doc_count":12},{"key_as_string":"2017-02-08T19:25:00.000Z","key":1486581900000,"doc_count":11},{"key_as_string":"2017-02-08T19:26:00.000Z","key":1486581960000,"doc_count":8},{"key_as_string":"2017-02-08T19:27:00.000Z","key":1486582020000,"doc_count":11},{"key_as_string":"2017-02-08T19:28:00.000Z","key":1486582080000,"doc_count":19},{"key_as_string":"2017-02-08T19:29:00.000Z","key":1486582140000,"doc_count":8},{"key_as_string":"2017-02-08T19:30:00.000Z","key":1486582200000,"doc_count":13},{"key_as_string":"2017-02-08T19:31:00.000Z","key":1486582260000,"doc_count":17},{"key_as_string":"2017-02-08T19:32:00.000Z","key":1486582320000,"doc_count":11},{"key_as_string":"2017-02-08T19:33:00.000Z","key":1486582380000,"doc_count":9},{"key_as_string":"2017-02-08T19:34:00.000Z","key":1486582440000,"doc_count":9},{"key_as_string":"2017-02-08T19:35:00.000Z","key":1486582500000,"doc_count":18},{"key_as_string":"2017-02-08T19:36:00.000Z","key":1486582560000,"doc_count":8},{"key_as_string":"2017-02-08T19:37:00.000Z","key":1486582620000,"doc_count":9},{"key_as_string":"2017-02-08T19:38:00.000Z","key":1486582680000,"doc_count":12},{"key_as_string":"2017-02-08T19:39:00.000Z","key":1486582740000,"doc_count":11},{"key_as_string":"2017-02-08T19:40:00.000Z","key":1486582800000,"doc_count":13},{"key_as_string":"2017-02-08T19:41:00.000Z","key":1486582860000,"doc_count":8},{"key_as_string":"2017-02-08T19:42:00.000Z","key":1486582920000,"doc_count":10},{"key_as_string":"2017-02-08T19:43:00.000Z","key":1486582980000,"doc_count":10},{"key_as_string":"2017-02-08T19:44:00.000Z","key":1486583040000,"doc_count":15},{"key_as_string":"2017-02-08T19:45:00.000Z","key":1486583100000,"doc_count":7},{"key_as_string":"2017-02-08T19:46:00.000Z","key":1486583160000,"doc_count":12},{"key_as_string":"2017-02-08T19:47:00.000Z","key":1486583220000,"doc_count":8},{"key_as_string":"2017-02-08T19:48:00.000Z","key":1486583280000,"doc_count":11},{"key_as_string":"2017-02-08T19:49:00.000Z","key":1486583340000,"doc_count":10},{"key_as_string":"2017-02-08T19:50:00.000Z","key":1486583400000,"doc_count":10},{"key_as_string":"2017-02-08T19:51:00.000Z","key":1486583460000,"doc_count":9},{"key_as_string":"2017-02-08T19:52:00.000Z","key":1486583520000,"doc_count":13},{"key_as_string":"2017-02-08T19:53:00.000Z","key":1486583580000,"doc_count":6},{"key_as_string":"2017-02-08T19:54:00.000Z","key":1486583640000,"doc_count":16},{"key_as_string":"2017-02-08T19:55:00.000Z","key":1486583700000,"doc_count":15},{"key_as_string":"2017-02-08T19:56:00.000Z","key":1486583760000,"doc_count":14},{"key_as_string":"2017-02-08T19:57:00.000Z","key":1486583820000,"doc_count":6},{"key_as_string":"2017-02-08T19:58:00.000Z","key":1486583880000,"doc_count":13},{"key_as_string":"2017-02-08T19:59:00.000Z","key":1486583940000,"doc_count":11},{"key_as_string":"2017-02-08T20:00:00.000Z","key":1486584000000,"doc_count":9},{"key_as_string":"2017-02-08T20:01:00.000Z","key":1486584060000,"doc_count":11},{"key_as_string":"2017-02-08T20:02:00.000Z","key":1486584120000,"doc_count":16},{"key_as_string":"2017-02-08T20:03:00.000Z","key":1486584180000,"doc_count":8},{"key_as_string":"2017-02-08T20:04:00.000Z","key":1486584240000,"doc_count":9},{"key_as_string":"2017-02-08T20:05:00.000Z","key":1486584300000,"doc_count":8},{"key_as_string":"2017-02-08T20:06:00.000Z","key":1486584360000,"doc_count":13},{"key_as_string":"2017-02-08T20:07:00.000Z","key":1486584420000,"doc_count":15},{"key_as_string":"2017-02-08T20:08:00.000Z","key":1486584480000,"doc_count":7},{"key_as_string":"2017-02-08T20:09:00.000Z","key":1486584540000,"doc_count":13},{"key_as_string":"2017-02-08T20:10:00.000Z","key":1486584600000,"doc_count":12},{"key_as_string":"2017-02-08T20:11:00.000Z","key":1486584660000,"doc_count":6},{"key_as_string":"2017-02-08T20:12:00.000Z","key":1486584720000,"doc_count":9},{"key_as_string":"2017-02-08T20:13:00.000Z","key":1486584780000,"doc_count":12},{"key_as_string":"2017-02-08T20:14:00.000Z","key":1486584840000,"doc_count":13},{"key_as_string":"2017-02-08T20:15:00.000Z","key":1486584900000,"doc_count":13},{"key_as_string":"2017-02-08T20:16:00.000Z","key":1486584960000,"doc_count":10},{"key_as_string":"2017-02-08T20:17:00.000Z","key":1486585020000,"doc_count":8},{"key_as_string":"2017-02-08T20:18:00.000Z","key":1486585080000,"doc_count":12},{"key_as_string":"2017-02-08T20:19:00.000Z","key":1486585140000,"doc_count":12},{"key_as_string":"2017-02-08T20:20:00.000Z","key":1486585200000,"doc_count":14},{"key_as_string":"2017-02-08T20:21:00.000Z","key":1486585260000,"doc_count":11},{"key_as_string":"2017-02-08T20:22:00.000Z","key":1486585320000,"doc_count":13},{"key_as_string":"2017-02-08T20:23:00.000Z","key":1486585380000,"doc_count":13},{"key_as_string":"2017-02-08T20:24:00.000Z","key":1486585440000,"doc_count":9},{"key_as_string":"2017-02-08T20:25:00.000Z","key":1486585500000,"doc_count":11},{"key_as_string":"2017-02-08T20:26:00.000Z","key":1486585560000,"doc_count":9},{"key_as_string":"2017-02-08T20:27:00.000Z","key":1486585620000,"doc_count":20},{"key_as_string":"2017-02-08T20:28:00.000Z","key":1486585680000,"doc_count":6},{"key_as_string":"2017-02-08T20:29:00.000Z","key":1486585740000,"doc_count":12},{"key_as_string":"2017-02-08T20:30:00.000Z","key":1486585800000,"doc_count":11},{"key_as_string":"2017-02-08T20:31:00.000Z","key":1486585860000,"doc_count":9},{"key_as_string":"2017-02-08T20:32:00.000Z","key":1486585920000,"doc_count":12},{"key_as_string":"2017-02-08T20:33:00.000Z","key":1486585980000,"doc_count":8},{"key_as_string":"2017-02-08T20:34:00.000Z","key":1486586040000,"doc_count":12},{"key_as_string":"2017-02-08T20:35:00.000Z","key":1486586100000,"doc_count":11},{"key_as_string":"2017-02-08T20:36:00.000Z","key":1486586160000,"doc_count":9},{"key_as_string":"2017-02-08T20:37:00.000Z","key":1486586220000,"doc_count":14},{"key_as_string":"2017-02-08T20:38:00.000Z","key":1486586280000,"doc_count":12},{"key_as_string":"2017-02-08T20:39:00.000Z","key":1486586340000,"doc_count":8},{"key_as_string":"2017-02-08T20:40:00.000Z","key":1486586400000,"doc_count":11},{"key_as_string":"2017-02-08T20:41:00.000Z","key":1486586460000,"doc_count":10},{"key_as_string":"2017-02-08T20:42:00.000Z","key":1486586520000,"doc_count":8},{"key_as_string":"2017-02-08T20:43:00.000Z","key":1486586580000,"doc_count":11},{"key_as_string":"2017-02-08T20:44:00.000Z","key":1486586640000,"doc_count":16},{"key_as_string":"2017-02-08T20:45:00.000Z","key":1486586700000,"doc_count":9},{"key_as_string":"2017-02-08T20:46:00.000Z","key":1486586760000,"doc_count":9},{"key_as_string":"2017-02-08T20:47:00.000Z","key":1486586820000,"doc_count":8},{"key_as_string":"2017-02-08T20:48:00.000Z","key":1486586880000,"doc_count":13},{"key_as_string":"2017-02-08T20:49:00.000Z","key":1486586940000,"doc_count":10},{"key_as_string":"2017-02-08T20:50:00.000Z","key":1486587000000,"doc_count":9},{"key_as_string":"2017-02-08T20:51:00.000Z","key":1486587060000,"doc_count":10},{"key_as_string":"2017-02-08T20:52:00.000Z","key":1486587120000,"doc_count":10},{"key_as_string":"2017-02-08T20:53:00.000Z","key":1486587180000,"doc_count":10},{"key_as_string":"2017-02-08T20:54:00.000Z","key":1486587240000,"doc_count":12},{"key_as_string":"2017-02-08T20:55:00.000Z","key":1486587300000,"doc_count":8},{"key_as_string":"2017-02-08T20:56:00.000Z","key":1486587360000,"doc_count":10},{"key_as_string":"2017-02-08T20:57:00.000Z","key":1486587420000,"doc_count":11},{"key_as_string":"2017-02-08T20:58:00.000Z","key":1486587480000,"doc_count":9},{"key_as_string":"2017-02-08T20:59:00.000Z","key":1486587540000,"doc_count":15},{"key_as_string":"2017-02-08T21:00:00.000Z","key":1486587600000,"doc_count":12},{"key_as_string":"2017-02-08T21:01:00.000Z","key":1486587660000,"doc_count":13},{"key_as_string":"2017-02-08T21:02:00.000Z","key":1486587720000,"doc_count":10},{"key_as_string":"2017-02-08T21:03:00.000Z","key":1486587780000,"doc_count":7},{"key_as_string":"2017-02-08T21:04:00.000Z","key":1486587840000,"doc_count":9},{"key_as_string":"2017-02-08T21:05:00.000Z","key":1486587900000,"doc_count":13},{"key_as_string":"2017-02-08T21:06:00.000Z","key":1486587960000,"doc_count":9},{"key_as_string":"2017-02-08T21:07:00.000Z","key":1486588020000,"doc_count":12},{"key_as_string":"2017-02-08T21:08:00.000Z","key":1486588080000,"doc_count":6},{"key_as_string":"2017-02-08T21:09:00.000Z","key":1486588140000,"doc_count":17},{"key_as_string":"2017-02-08T21:10:00.000Z","key":1486588200000,"doc_count":4},{"key_as_string":"2017-02-08T21:11:00.000Z","key":1486588260000,"doc_count":13},{"key_as_string":"2017-02-08T21:12:00.000Z","key":1486588320000,"doc_count":9},{"key_as_string":"2017-02-08T21:13:00.000Z","key":1486588380000,"doc_count":13},{"key_as_string":"2017-02-08T21:14:00.000Z","key":1486588440000,"doc_count":10},{"key_as_string":"2017-02-08T21:15:00.000Z","key":1486588500000,"doc_count":8},{"key_as_string":"2017-02-08T21:16:00.000Z","key":1486588560000,"doc_count":8},{"key_as_string":"2017-02-08T21:17:00.000Z","key":1486588620000,"doc_count":10},{"key_as_string":"2017-02-08T21:18:00.000Z","key":1486588680000,"doc_count":12},{"key_as_string":"2017-02-08T21:19:00.000Z","key":1486588740000,"doc_count":10},{"key_as_string":"2017-02-08T21:20:00.000Z","key":1486588800000,"doc_count":13},{"key_as_string":"2017-02-08T21:21:00.000Z","key":1486588860000,"doc_count":14},{"key_as_string":"2017-02-08T21:22:00.000Z","key":1486588920000,"doc_count":9},{"key_as_string":"2017-02-08T21:23:00.000Z","key":1486588980000,"doc_count":9},{"key_as_string":"2017-02-08T21:24:00.000Z","key":1486589040000,"doc_count":12},{"key_as_string":"2017-02-08T21:25:00.000Z","key":1486589100000,"doc_count":12},{"key_as_string":"2017-02-08T21:26:00.000Z","key":1486589160000,"doc_count":19},{"key_as_string":"2017-02-08T21:27:00.000Z","key":1486589220000,"doc_count":6},{"key_as_string":"2017-02-08T21:28:00.000Z","key":1486589280000,"doc_count":15},{"key_as_string":"2017-02-08T21:29:00.000Z","key":1486589340000,"doc_count":10},{"key_as_string":"2017-02-08T21:30:00.000Z","key":1486589400000,"doc_count":9},{"key_as_string":"2017-02-08T21:31:00.000Z","key":1486589460000,"doc_count":9},{"key_as_string":"2017-02-08T21:32:00.000Z","key":1486589520000,"doc_count":12},{"key_as_string":"2017-02-08T21:33:00.000Z","key":1486589580000,"doc_count":10},{"key_as_string":"2017-02-08T21:34:00.000Z","key":1486589640000,"doc_count":11},{"key_as_string":"2017-02-08T21:35:00.000Z","key":1486589700000,"doc_count":10},{"key_as_string":"2017-02-08T21:36:00.000Z","key":1486589760000,"doc_count":15},{"key_as_string":"2017-02-08T21:37:00.000Z","key":1486589820000,"doc_count":8},{"key_as_string":"2017-02-08T21:38:00.000Z","key":1486589880000,"doc_count":11},{"key_as_string":"2017-02-08T21:39:00.000Z","key":1486589940000,"doc_count":9},{"key_as_string":"2017-02-08T21:40:00.000Z","key":1486590000000,"doc_count":9},{"key_as_string":"2017-02-08T21:41:00.000Z","key":1486590060000,"doc_count":10},{"key_as_string":"2017-02-08T21:42:00.000Z","key":1486590120000,"doc_count":8},{"key_as_string":"2017-02-08T21:43:00.000Z","key":1486590180000,"doc_count":13},{"key_as_string":"2017-02-08T21:44:00.000Z","key":1486590240000,"doc_count":13},{"key_as_string":"2017-02-08T21:45:00.000Z","key":1486590300000,"doc_count":15},{"key_as_string":"2017-02-08T21:46:00.000Z","key":1486590360000,"doc_count":8},{"key_as_string":"2017-02-08T21:47:00.000Z","key":1486590420000,"doc_count":7},{"key_as_string":"2017-02-08T21:48:00.000Z","key":1486590480000,"doc_count":14},{"key_as_string":"2017-02-08T21:49:00.000Z","key":1486590540000,"doc_count":8},{"key_as_string":"2017-02-08T21:50:00.000Z","key":1486590600000,"doc_count":11},{"key_as_string":"2017-02-08T21:51:00.000Z","key":1486590660000,"doc_count":12},{"key_as_string":"2017-02-08T21:52:00.000Z","key":1486590720000,"doc_count":9},{"key_as_string":"2017-02-08T21:53:00.000Z","key":1486590780000,"doc_count":11},{"key_as_string":"2017-02-08T21:54:00.000Z","key":1486590840000,"doc_count":9},{"key_as_string":"2017-02-08T21:55:00.000Z","key":1486590900000,"doc_count":7},{"key_as_string":"2017-02-08T21:56:00.000Z","key":1486590960000,"doc_count":13},{"key_as_string":"2017-02-08T21:57:00.000Z","key":1486591020000,"doc_count":10},{"key_as_string":"2017-02-08T21:58:00.000Z","key":1486591080000,"doc_count":12},{"key_as_string":"2017-02-08T21:59:00.000Z","key":1486591140000,"doc_count":15},{"key_as_string":"2017-02-08T22:00:00.000Z","key":1486591200000,"doc_count":13},{"key_as_string":"2017-02-08T22:01:00.000Z","key":1486591260000,"doc_count":14},{"key_as_string":"2017-02-08T22:02:00.000Z","key":1486591320000,"doc_count":7},{"key_as_string":"2017-02-08T22:03:00.000Z","key":1486591380000,"doc_count":12},{"key_as_string":"2017-02-08T22:04:00.000Z","key":1486591440000,"doc_count":11},{"key_as_string":"2017-02-08T22:05:00.000Z","key":1486591500000,"doc_count":11},{"key_as_string":"2017-02-08T22:06:00.000Z","key":1486591560000,"doc_count":11},{"key_as_string":"2017-02-08T22:07:00.000Z","key":1486591620000,"doc_count":8},{"key_as_string":"2017-02-08T22:08:00.000Z","key":1486591680000,"doc_count":14},{"key_as_string":"2017-02-08T22:09:00.000Z","key":1486591740000,"doc_count":11},{"key_as_string":"2017-02-08T22:10:00.000Z","key":1486591800000,"doc_count":16},{"key_as_string":"2017-02-08T22:11:00.000Z","key":1486591860000,"doc_count":8},{"key_as_string":"2017-02-08T22:12:00.000Z","key":1486591920000,"doc_count":15},{"key_as_string":"2017-02-08T22:13:00.000Z","key":1486591980000,"doc_count":11},{"key_as_string":"2017-02-08T22:14:00.000Z","key":1486592040000,"doc_count":6},{"key_as_string":"2017-02-08T22:15:00.000Z","key":1486592100000,"doc_count":11},{"key_as_string":"2017-02-08T22:16:00.000Z","key":1486592160000,"doc_count":9},{"key_as_string":"2017-02-08T22:17:00.000Z","key":1486592220000,"doc_count":15},{"key_as_string":"2017-02-08T22:18:00.000Z","key":1486592280000,"doc_count":10},{"key_as_string":"2017-02-08T22:19:00.000Z","key":1486592340000,"doc_count":7},{"key_as_string":"2017-02-08T22:20:00.000Z","key":1486592400000,"doc_count":11},{"key_as_string":"2017-02-08T22:21:00.000Z","key":1486592460000,"doc_count":8},{"key_as_string":"2017-02-08T22:22:00.000Z","key":1486592520000,"doc_count":11},{"key_as_string":"2017-02-08T22:23:00.000Z","key":1486592580000,"doc_count":5},{"key_as_string":"2017-02-08T22:24:00.000Z","key":1486592640000,"doc_count":13},{"key_as_string":"2017-02-08T22:25:00.000Z","key":1486592700000,"doc_count":11},{"key_as_string":"2017-02-08T22:26:00.000Z","key":1486592760000,"doc_count":13},{"key_as_string":"2017-02-08T22:27:00.000Z","key":1486592820000,"doc_count":15},{"key_as_string":"2017-02-08T22:28:00.000Z","key":1486592880000,"doc_count":12},{"key_as_string":"2017-02-08T22:29:00.000Z","key":1486592940000,"doc_count":7},{"key_as_string":"2017-02-08T22:30:00.000Z","key":1486593000000,"doc_count":14},{"key_as_string":"2017-02-08T22:31:00.000Z","key":1486593060000,"doc_count":13},{"key_as_string":"2017-02-08T22:32:00.000Z","key":1486593120000,"doc_count":13},{"key_as_string":"2017-02-08T22:33:00.000Z","key":1486593180000,"doc_count":9},{"key_as_string":"2017-02-08T22:34:00.000Z","key":1486593240000,"doc_count":13},{"key_as_string":"2017-02-08T22:35:00.000Z","key":1486593300000,"doc_count":14},{"key_as_string":"2017-02-08T22:36:00.000Z","key":1486593360000,"doc_count":9},{"key_as_string":"2017-02-08T22:37:00.000Z","key":1486593420000,"doc_count":11},{"key_as_string":"2017-02-08T22:38:00.000Z","key":1486593480000,"doc_count":8},{"key_as_string":"2017-02-08T22:39:00.000Z","key":1486593540000,"doc_count":14},{"key_as_string":"2017-02-08T22:40:00.000Z","key":1486593600000,"doc_count":16},{"key_as_string":"2017-02-08T22:41:00.000Z","key":1486593660000,"doc_count":7},{"key_as_string":"2017-02-08T22:42:00.000Z","key":1486593720000,"doc_count":14},{"key_as_string":"2017-02-08T22:43:00.000Z","key":1486593780000,"doc_count":10},{"key_as_string":"2017-02-08T22:44:00.000Z","key":1486593840000,"doc_count":12},{"key_as_string":"2017-02-08T22:45:00.000Z","key":1486593900000,"doc_count":7},{"key_as_string":"2017-02-08T22:46:00.000Z","key":1486593960000,"doc_count":13},{"key_as_string":"2017-02-08T22:47:00.000Z","key":1486594020000,"doc_count":11},{"key_as_string":"2017-02-08T22:48:00.000Z","key":1486594080000,"doc_count":18},{"key_as_string":"2017-02-08T22:49:00.000Z","key":1486594140000,"doc_count":4},{"key_as_string":"2017-02-08T22:50:00.000Z","key":1486594200000,"doc_count":5},{"key_as_string":"2017-02-08T22:51:00.000Z","key":1486594260000,"doc_count":16},{"key_as_string":"2017-02-08T22:52:00.000Z","key":1486594320000,"doc_count":8},{"key_as_string":"2017-02-08T22:53:00.000Z","key":1486594380000,"doc_count":11},{"key_as_string":"2017-02-08T22:54:00.000Z","key":1486594440000,"doc_count":10},{"key_as_string":"2017-02-08T22:55:00.000Z","key":1486594500000,"doc_count":10},{"key_as_string":"2017-02-08T22:56:00.000Z","key":1486594560000,"doc_count":15},{"key_as_string":"2017-02-08T22:57:00.000Z","key":1486594620000,"doc_count":7},{"key_as_string":"2017-02-08T22:58:00.000Z","key":1486594680000,"doc_count":14},{"key_as_string":"2017-02-08T22:59:00.000Z","key":1486594740000,"doc_count":14},{"key_as_string":"2017-02-08T23:00:00.000Z","key":1486594800000,"doc_count":6},{"key_as_string":"2017-02-08T23:01:00.000Z","key":1486594860000,"doc_count":9},{"key_as_string":"2017-02-08T23:02:00.000Z","key":1486594920000,"doc_count":14},{"key_as_string":"2017-02-08T23:03:00.000Z","key":1486594980000,"doc_count":9},{"key_as_string":"2017-02-08T23:04:00.000Z","key":1486595040000,"doc_count":11},{"key_as_string":"2017-02-08T23:05:00.000Z","key":1486595100000,"doc_count":14},{"key_as_string":"2017-02-08T23:06:00.000Z","key":1486595160000,"doc_count":6},{"key_as_string":"2017-02-08T23:07:00.000Z","key":1486595220000,"doc_count":10},{"key_as_string":"2017-02-08T23:08:00.000Z","key":1486595280000,"doc_count":9},{"key_as_string":"2017-02-08T23:09:00.000Z","key":1486595340000,"doc_count":5},{"key_as_string":"2017-02-08T23:10:00.000Z","key":1486595400000,"doc_count":12},{"key_as_string":"2017-02-08T23:11:00.000Z","key":1486595460000,"doc_count":11},{"key_as_string":"2017-02-08T23:12:00.000Z","key":1486595520000,"doc_count":8},{"key_as_string":"2017-02-08T23:13:00.000Z","key":1486595580000,"doc_count":10},{"key_as_string":"2017-02-08T23:14:00.000Z","key":1486595640000,"doc_count":14},{"key_as_string":"2017-02-08T23:15:00.000Z","key":1486595700000,"doc_count":6},{"key_as_string":"2017-02-08T23:16:00.000Z","key":1486595760000,"doc_count":9},{"key_as_string":"2017-02-08T23:17:00.000Z","key":1486595820000,"doc_count":12},{"key_as_string":"2017-02-08T23:18:00.000Z","key":1486595880000,"doc_count":12},{"key_as_string":"2017-02-08T23:19:00.000Z","key":1486595940000,"doc_count":5},{"key_as_string":"2017-02-08T23:20:00.000Z","key":1486596000000,"doc_count":12},{"key_as_string":"2017-02-08T23:21:00.000Z","key":1486596060000,"doc_count":10},{"key_as_string":"2017-02-08T23:22:00.000Z","key":1486596120000,"doc_count":13},{"key_as_string":"2017-02-08T23:23:00.000Z","key":1486596180000,"doc_count":10},{"key_as_string":"2017-02-08T23:24:00.000Z","key":1486596240000,"doc_count":8},{"key_as_string":"2017-02-08T23:25:00.000Z","key":1486596300000,"doc_count":11},{"key_as_string":"2017-02-08T23:26:00.000Z","key":1486596360000,"doc_count":11},{"key_as_string":"2017-02-08T23:27:00.000Z","key":1486596420000,"doc_count":5},{"key_as_string":"2017-02-08T23:28:00.000Z","key":1486596480000,"doc_count":9},{"key_as_string":"2017-02-08T23:29:00.000Z","key":1486596540000,"doc_count":12},{"key_as_string":"2017-02-08T23:30:00.000Z","key":1486596600000,"doc_count":7},{"key_as_string":"2017-02-08T23:31:00.000Z","key":1486596660000,"doc_count":14},{"key_as_string":"2017-02-08T23:32:00.000Z","key":1486596720000,"doc_count":12},{"key_as_string":"2017-02-08T23:33:00.000Z","key":1486596780000,"doc_count":12},{"key_as_string":"2017-02-08T23:34:00.000Z","key":1486596840000,"doc_count":18},{"key_as_string":"2017-02-08T23:35:00.000Z","key":1486596900000,"doc_count":6},{"key_as_string":"2017-02-08T23:36:00.000Z","key":1486596960000,"doc_count":7},{"key_as_string":"2017-02-08T23:37:00.000Z","key":1486597020000,"doc_count":12},{"key_as_string":"2017-02-08T23:38:00.000Z","key":1486597080000,"doc_count":11},{"key_as_string":"2017-02-08T23:39:00.000Z","key":1486597140000,"doc_count":7},{"key_as_string":"2017-02-08T23:40:00.000Z","key":1486597200000,"doc_count":12},{"key_as_string":"2017-02-08T23:41:00.000Z","key":1486597260000,"doc_count":16},{"key_as_string":"2017-02-08T23:42:00.000Z","key":1486597320000,"doc_count":8},{"key_as_string":"2017-02-08T23:43:00.000Z","key":1486597380000,"doc_count":11},{"key_as_string":"2017-02-08T23:44:00.000Z","key":1486597440000,"doc_count":8},{"key_as_string":"2017-02-08T23:45:00.000Z","key":1486597500000,"doc_count":11},{"key_as_string":"2017-02-08T23:46:00.000Z","key":1486597560000,"doc_count":11},{"key_as_string":"2017-02-08T23:47:00.000Z","key":1486597620000,"doc_count":9},{"key_as_string":"2017-02-08T23:48:00.000Z","key":1486597680000,"doc_count":7},{"key_as_string":"2017-02-08T23:49:00.000Z","key":1486597740000,"doc_count":11},{"key_as_string":"2017-02-08T23:50:00.000Z","key":1486597800000,"doc_count":11},{"key_as_string":"2017-02-08T23:51:00.000Z","key":1486597860000,"doc_count":8},{"key_as_string":"2017-02-08T23:52:00.000Z","key":1486597920000,"doc_count":11},{"key_as_string":"2017-02-08T23:53:00.000Z","key":1486597980000,"doc_count":10},{"key_as_string":"2017-02-08T23:54:00.000Z","key":1486598040000,"doc_count":11},{"key_as_string":"2017-02-08T23:55:00.000Z","key":1486598100000,"doc_count":9},{"key_as_string":"2017-02-08T23:56:00.000Z","key":1486598160000,"doc_count":6},{"key_as_string":"2017-02-08T23:57:00.000Z","key":1486598220000,"doc_count":13},{"key_as_string":"2017-02-08T23:58:00.000Z","key":1486598280000,"doc_count":10},{"key_as_string":"2017-02-08T23:59:00.000Z","key":1486598340000,"doc_count":9},{"key_as_string":"2017-02-09T00:00:00.000Z","key":1486598400000,"doc_count":14},{"key_as_string":"2017-02-09T00:01:00.000Z","key":1486598460000,"doc_count":7},{"key_as_string":"2017-02-09T00:02:00.000Z","key":1486598520000,"doc_count":11},{"key_as_string":"2017-02-09T00:03:00.000Z","key":1486598580000,"doc_count":14},{"key_as_string":"2017-02-09T00:04:00.000Z","key":1486598640000,"doc_count":7},{"key_as_string":"2017-02-09T00:05:00.000Z","key":1486598700000,"doc_count":15},{"key_as_string":"2017-02-09T00:06:00.000Z","key":1486598760000,"doc_count":4},{"key_as_string":"2017-02-09T00:07:00.000Z","key":1486598820000,"doc_count":14},{"key_as_string":"2017-02-09T00:08:00.000Z","key":1486598880000,"doc_count":11},{"key_as_string":"2017-02-09T00:09:00.000Z","key":1486598940000,"doc_count":8},{"key_as_string":"2017-02-09T00:10:00.000Z","key":1486599000000,"doc_count":9},{"key_as_string":"2017-02-09T00:11:00.000Z","key":1486599060000,"doc_count":13},{"key_as_string":"2017-02-09T00:12:00.000Z","key":1486599120000,"doc_count":8},{"key_as_string":"2017-02-09T00:13:00.000Z","key":1486599180000,"doc_count":9},{"key_as_string":"2017-02-09T00:14:00.000Z","key":1486599240000,"doc_count":14},{"key_as_string":"2017-02-09T00:15:00.000Z","key":1486599300000,"doc_count":13},{"key_as_string":"2017-02-09T00:16:00.000Z","key":1486599360000,"doc_count":8},{"key_as_string":"2017-02-09T00:17:00.000Z","key":1486599420000,"doc_count":6},{"key_as_string":"2017-02-09T00:18:00.000Z","key":1486599480000,"doc_count":14},{"key_as_string":"2017-02-09T00:19:00.000Z","key":1486599540000,"doc_count":15},{"key_as_string":"2017-02-09T00:20:00.000Z","key":1486599600000,"doc_count":9},{"key_as_string":"2017-02-09T00:21:00.000Z","key":1486599660000,"doc_count":6},{"key_as_string":"2017-02-09T00:22:00.000Z","key":1486599720000,"doc_count":9},{"key_as_string":"2017-02-09T00:23:00.000Z","key":1486599780000,"doc_count":15},{"key_as_string":"2017-02-09T00:24:00.000Z","key":1486599840000,"doc_count":10},{"key_as_string":"2017-02-09T00:25:00.000Z","key":1486599900000,"doc_count":9},{"key_as_string":"2017-02-09T00:26:00.000Z","key":1486599960000,"doc_count":11},{"key_as_string":"2017-02-09T00:27:00.000Z","key":1486600020000,"doc_count":10},{"key_as_string":"2017-02-09T00:28:00.000Z","key":1486600080000,"doc_count":11},{"key_as_string":"2017-02-09T00:29:00.000Z","key":1486600140000,"doc_count":8},{"key_as_string":"2017-02-09T00:30:00.000Z","key":1486600200000,"doc_count":5},{"key_as_string":"2017-02-09T00:31:00.000Z","key":1486600260000,"doc_count":15},{"key_as_string":"2017-02-09T00:32:00.000Z","key":1486600320000,"doc_count":5},{"key_as_string":"2017-02-09T00:33:00.000Z","key":1486600380000,"doc_count":12},{"key_as_string":"2017-02-09T00:34:00.000Z","key":1486600440000,"doc_count":11},{"key_as_string":"2017-02-09T00:35:00.000Z","key":1486600500000,"doc_count":8},{"key_as_string":"2017-02-09T00:36:00.000Z","key":1486600560000,"doc_count":10},{"key_as_string":"2017-02-09T00:37:00.000Z","key":1486600620000,"doc_count":11},{"key_as_string":"2017-02-09T00:38:00.000Z","key":1486600680000,"doc_count":11},{"key_as_string":"2017-02-09T00:39:00.000Z","key":1486600740000,"doc_count":7},{"key_as_string":"2017-02-09T00:40:00.000Z","key":1486600800000,"doc_count":8},{"key_as_string":"2017-02-09T00:41:00.000Z","key":1486600860000,"doc_count":10},{"key_as_string":"2017-02-09T00:42:00.000Z","key":1486600920000,"doc_count":11},{"key_as_string":"2017-02-09T00:43:00.000Z","key":1486600980000,"doc_count":10},{"key_as_string":"2017-02-09T00:44:00.000Z","key":1486601040000,"doc_count":9},{"key_as_string":"2017-02-09T00:45:00.000Z","key":1486601100000,"doc_count":10},{"key_as_string":"2017-02-09T00:46:00.000Z","key":1486601160000,"doc_count":9},{"key_as_string":"2017-02-09T00:47:00.000Z","key":1486601220000,"doc_count":9},{"key_as_string":"2017-02-09T00:48:00.000Z","key":1486601280000,"doc_count":11},{"key_as_string":"2017-02-09T00:49:00.000Z","key":1486601340000,"doc_count":6},{"key_as_string":"2017-02-09T00:50:00.000Z","key":1486601400000,"doc_count":13},{"key_as_string":"2017-02-09T00:51:00.000Z","key":1486601460000,"doc_count":8},{"key_as_string":"2017-02-09T00:52:00.000Z","key":1486601520000,"doc_count":9},{"key_as_string":"2017-02-09T00:53:00.000Z","key":1486601580000,"doc_count":12},{"key_as_string":"2017-02-09T00:54:00.000Z","key":1486601640000,"doc_count":11},{"key_as_string":"2017-02-09T00:55:00.000Z","key":1486601700000,"doc_count":7},{"key_as_string":"2017-02-09T00:56:00.000Z","key":1486601760000,"doc_count":16},{"key_as_string":"2017-02-09T00:57:00.000Z","key":1486601820000,"doc_count":11},{"key_as_string":"2017-02-09T00:58:00.000Z","key":1486601880000,"doc_count":7},{"key_as_string":"2017-02-09T00:59:00.000Z","key":1486601940000,"doc_count":9},{"key_as_string":"2017-02-09T01:00:00.000Z","key":1486602000000,"doc_count":14},{"key_as_string":"2017-02-09T01:01:00.000Z","key":1486602060000,"doc_count":9},{"key_as_string":"2017-02-09T01:02:00.000Z","key":1486602120000,"doc_count":15},{"key_as_string":"2017-02-09T01:03:00.000Z","key":1486602180000,"doc_count":10},{"key_as_string":"2017-02-09T01:04:00.000Z","key":1486602240000,"doc_count":14},{"key_as_string":"2017-02-09T01:05:00.000Z","key":1486602300000,"doc_count":8},{"key_as_string":"2017-02-09T01:06:00.000Z","key":1486602360000,"doc_count":13},{"key_as_string":"2017-02-09T01:07:00.000Z","key":1486602420000,"doc_count":10},{"key_as_string":"2017-02-09T01:08:00.000Z","key":1486602480000,"doc_count":7},{"key_as_string":"2017-02-09T01:09:00.000Z","key":1486602540000,"doc_count":15},{"key_as_string":"2017-02-09T01:10:00.000Z","key":1486602600000,"doc_count":10},{"key_as_string":"2017-02-09T01:11:00.000Z","key":1486602660000,"doc_count":7},{"key_as_string":"2017-02-09T01:12:00.000Z","key":1486602720000,"doc_count":14},{"key_as_string":"2017-02-09T01:13:00.000Z","key":1486602780000,"doc_count":11},{"key_as_string":"2017-02-09T01:14:00.000Z","key":1486602840000,"doc_count":10},{"key_as_string":"2017-02-09T01:15:00.000Z","key":1486602900000,"doc_count":12},{"key_as_string":"2017-02-09T01:16:00.000Z","key":1486602960000,"doc_count":10},{"key_as_string":"2017-02-09T01:17:00.000Z","key":1486603020000,"doc_count":9},{"key_as_string":"2017-02-09T01:18:00.000Z","key":1486603080000,"doc_count":12},{"key_as_string":"2017-02-09T01:19:00.000Z","key":1486603140000,"doc_count":6},{"key_as_string":"2017-02-09T01:20:00.000Z","key":1486603200000,"doc_count":12},{"key_as_string":"2017-02-09T01:21:00.000Z","key":1486603260000,"doc_count":7},{"key_as_string":"2017-02-09T01:22:00.000Z","key":1486603320000,"doc_count":11},{"key_as_string":"2017-02-09T01:23:00.000Z","key":1486603380000,"doc_count":6},{"key_as_string":"2017-02-09T01:24:00.000Z","key":1486603440000,"doc_count":14},{"key_as_string":"2017-02-09T01:25:00.000Z","key":1486603500000,"doc_count":6},{"key_as_string":"2017-02-09T01:26:00.000Z","key":1486603560000,"doc_count":9},{"key_as_string":"2017-02-09T01:27:00.000Z","key":1486603620000,"doc_count":14},{"key_as_string":"2017-02-09T01:28:00.000Z","key":1486603680000,"doc_count":9},{"key_as_string":"2017-02-09T01:29:00.000Z","key":1486603740000,"doc_count":13},{"key_as_string":"2017-02-09T01:30:00.000Z","key":1486603800000,"doc_count":9},{"key_as_string":"2017-02-09T01:31:00.000Z","key":1486603860000,"doc_count":11},{"key_as_string":"2017-02-09T01:32:00.000Z","key":1486603920000,"doc_count":13},{"key_as_string":"2017-02-09T01:33:00.000Z","key":1486603980000,"doc_count":6},{"key_as_string":"2017-02-09T01:34:00.000Z","key":1486604040000,"doc_count":13},{"key_as_string":"2017-02-09T01:35:00.000Z","key":1486604100000,"doc_count":7},{"key_as_string":"2017-02-09T01:36:00.000Z","key":1486604160000,"doc_count":11},{"key_as_string":"2017-02-09T01:37:00.000Z","key":1486604220000,"doc_count":10},{"key_as_string":"2017-02-09T01:38:00.000Z","key":1486604280000,"doc_count":6},{"key_as_string":"2017-02-09T01:39:00.000Z","key":1486604340000,"doc_count":14},{"key_as_string":"2017-02-09T01:40:00.000Z","key":1486604400000,"doc_count":5},{"key_as_string":"2017-02-09T01:41:00.000Z","key":1486604460000,"doc_count":8},{"key_as_string":"2017-02-09T01:42:00.000Z","key":1486604520000,"doc_count":12},{"key_as_string":"2017-02-09T01:43:00.000Z","key":1486604580000,"doc_count":16},{"key_as_string":"2017-02-09T01:44:00.000Z","key":1486604640000,"doc_count":8},{"key_as_string":"2017-02-09T01:45:00.000Z","key":1486604700000,"doc_count":5},{"key_as_string":"2017-02-09T01:46:00.000Z","key":1486604760000,"doc_count":13},{"key_as_string":"2017-02-09T01:47:00.000Z","key":1486604820000,"doc_count":7},{"key_as_string":"2017-02-09T01:48:00.000Z","key":1486604880000,"doc_count":8},{"key_as_string":"2017-02-09T01:49:00.000Z","key":1486604940000,"doc_count":17},{"key_as_string":"2017-02-09T01:50:00.000Z","key":1486605000000,"doc_count":7},{"key_as_string":"2017-02-09T01:51:00.000Z","key":1486605060000,"doc_count":10},{"key_as_string":"2017-02-09T01:52:00.000Z","key":1486605120000,"doc_count":13},{"key_as_string":"2017-02-09T01:53:00.000Z","key":1486605180000,"doc_count":15},{"key_as_string":"2017-02-09T01:54:00.000Z","key":1486605240000,"doc_count":12},{"key_as_string":"2017-02-09T01:55:00.000Z","key":1486605300000,"doc_count":6},{"key_as_string":"2017-02-09T01:56:00.000Z","key":1486605360000,"doc_count":14},{"key_as_string":"2017-02-09T01:57:00.000Z","key":1486605420000,"doc_count":13},{"key_as_string":"2017-02-09T01:58:00.000Z","key":1486605480000,"doc_count":12},{"key_as_string":"2017-02-09T01:59:00.000Z","key":1486605540000,"doc_count":11},{"key_as_string":"2017-02-09T02:00:00.000Z","key":1486605600000,"doc_count":12},{"key_as_string":"2017-02-09T02:01:00.000Z","key":1486605660000,"doc_count":15},{"key_as_string":"2017-02-09T02:02:00.000Z","key":1486605720000,"doc_count":6},{"key_as_string":"2017-02-09T02:03:00.000Z","key":1486605780000,"doc_count":15},{"key_as_string":"2017-02-09T02:04:00.000Z","key":1486605840000,"doc_count":4},{"key_as_string":"2017-02-09T02:05:00.000Z","key":1486605900000,"doc_count":14},{"key_as_string":"2017-02-09T02:06:00.000Z","key":1486605960000,"doc_count":15},{"key_as_string":"2017-02-09T02:07:00.000Z","key":1486606020000,"doc_count":8},{"key_as_string":"2017-02-09T02:08:00.000Z","key":1486606080000,"doc_count":9},{"key_as_string":"2017-02-09T02:09:00.000Z","key":1486606140000,"doc_count":13},{"key_as_string":"2017-02-09T02:10:00.000Z","key":1486606200000,"doc_count":8},{"key_as_string":"2017-02-09T02:11:00.000Z","key":1486606260000,"doc_count":12},{"key_as_string":"2017-02-09T02:12:00.000Z","key":1486606320000,"doc_count":12},{"key_as_string":"2017-02-09T02:13:00.000Z","key":1486606380000,"doc_count":16},{"key_as_string":"2017-02-09T02:14:00.000Z","key":1486606440000,"doc_count":9},{"key_as_string":"2017-02-09T02:15:00.000Z","key":1486606500000,"doc_count":10},{"key_as_string":"2017-02-09T02:16:00.000Z","key":1486606560000,"doc_count":12},{"key_as_string":"2017-02-09T02:17:00.000Z","key":1486606620000,"doc_count":11},{"key_as_string":"2017-02-09T02:18:00.000Z","key":1486606680000,"doc_count":10},{"key_as_string":"2017-02-09T02:19:00.000Z","key":1486606740000,"doc_count":10},{"key_as_string":"2017-02-09T02:20:00.000Z","key":1486606800000,"doc_count":9},{"key_as_string":"2017-02-09T02:21:00.000Z","key":1486606860000,"doc_count":16},{"key_as_string":"2017-02-09T02:22:00.000Z","key":1486606920000,"doc_count":11},{"key_as_string":"2017-02-09T02:23:00.000Z","key":1486606980000,"doc_count":10},{"key_as_string":"2017-02-09T02:24:00.000Z","key":1486607040000,"doc_count":10},{"key_as_string":"2017-02-09T02:25:00.000Z","key":1486607100000,"doc_count":11},{"key_as_string":"2017-02-09T02:26:00.000Z","key":1486607160000,"doc_count":7},{"key_as_string":"2017-02-09T02:27:00.000Z","key":1486607220000,"doc_count":12},{"key_as_string":"2017-02-09T02:28:00.000Z","key":1486607280000,"doc_count":9},{"key_as_string":"2017-02-09T02:29:00.000Z","key":1486607340000,"doc_count":6},{"key_as_string":"2017-02-09T02:30:00.000Z","key":1486607400000,"doc_count":10},{"key_as_string":"2017-02-09T02:31:00.000Z","key":1486607460000,"doc_count":8},{"key_as_string":"2017-02-09T02:32:00.000Z","key":1486607520000,"doc_count":14},{"key_as_string":"2017-02-09T02:33:00.000Z","key":1486607580000,"doc_count":9},{"key_as_string":"2017-02-09T02:34:00.000Z","key":1486607640000,"doc_count":10},{"key_as_string":"2017-02-09T02:35:00.000Z","key":1486607700000,"doc_count":9},{"key_as_string":"2017-02-09T02:36:00.000Z","key":1486607760000,"doc_count":11},{"key_as_string":"2017-02-09T02:37:00.000Z","key":1486607820000,"doc_count":11},{"key_as_string":"2017-02-09T02:38:00.000Z","key":1486607880000,"doc_count":6},{"key_as_string":"2017-02-09T02:39:00.000Z","key":1486607940000,"doc_count":20},{"key_as_string":"2017-02-09T02:40:00.000Z","key":1486608000000,"doc_count":11},{"key_as_string":"2017-02-09T02:41:00.000Z","key":1486608060000,"doc_count":11},{"key_as_string":"2017-02-09T02:42:00.000Z","key":1486608120000,"doc_count":11},{"key_as_string":"2017-02-09T02:43:00.000Z","key":1486608180000,"doc_count":5},{"key_as_string":"2017-02-09T02:44:00.000Z","key":1486608240000,"doc_count":10},{"key_as_string":"2017-02-09T02:45:00.000Z","key":1486608300000,"doc_count":10},{"key_as_string":"2017-02-09T02:46:00.000Z","key":1486608360000,"doc_count":14},{"key_as_string":"2017-02-09T02:47:00.000Z","key":1486608420000,"doc_count":10},{"key_as_string":"2017-02-09T02:48:00.000Z","key":1486608480000,"doc_count":13},{"key_as_string":"2017-02-09T02:49:00.000Z","key":1486608540000,"doc_count":9},{"key_as_string":"2017-02-09T02:50:00.000Z","key":1486608600000,"doc_count":10},{"key_as_string":"2017-02-09T02:51:00.000Z","key":1486608660000,"doc_count":9},{"key_as_string":"2017-02-09T02:52:00.000Z","key":1486608720000,"doc_count":13},{"key_as_string":"2017-02-09T02:53:00.000Z","key":1486608780000,"doc_count":16},{"key_as_string":"2017-02-09T02:54:00.000Z","key":1486608840000,"doc_count":5},{"key_as_string":"2017-02-09T02:55:00.000Z","key":1486608900000,"doc_count":8},{"key_as_string":"2017-02-09T02:56:00.000Z","key":1486608960000,"doc_count":13},{"key_as_string":"2017-02-09T02:57:00.000Z","key":1486609020000,"doc_count":10},{"key_as_string":"2017-02-09T02:58:00.000Z","key":1486609080000,"doc_count":11},{"key_as_string":"2017-02-09T02:59:00.000Z","key":1486609140000,"doc_count":9},{"key_as_string":"2017-02-09T03:00:00.000Z","key":1486609200000,"doc_count":14},{"key_as_string":"2017-02-09T03:01:00.000Z","key":1486609260000,"doc_count":7},{"key_as_string":"2017-02-09T03:02:00.000Z","key":1486609320000,"doc_count":9},{"key_as_string":"2017-02-09T03:03:00.000Z","key":1486609380000,"doc_count":11},{"key_as_string":"2017-02-09T03:04:00.000Z","key":1486609440000,"doc_count":21},{"key_as_string":"2017-02-09T03:05:00.000Z","key":1486609500000,"doc_count":12},{"key_as_string":"2017-02-09T03:06:00.000Z","key":1486609560000,"doc_count":14},{"key_as_string":"2017-02-09T03:07:00.000Z","key":1486609620000,"doc_count":9},{"key_as_string":"2017-02-09T03:08:00.000Z","key":1486609680000,"doc_count":12},{"key_as_string":"2017-02-09T03:09:00.000Z","key":1486609740000,"doc_count":12},{"key_as_string":"2017-02-09T03:10:00.000Z","key":1486609800000,"doc_count":10},{"key_as_string":"2017-02-09T03:11:00.000Z","key":1486609860000,"doc_count":7},{"key_as_string":"2017-02-09T03:12:00.000Z","key":1486609920000,"doc_count":11},{"key_as_string":"2017-02-09T03:13:00.000Z","key":1486609980000,"doc_count":9},{"key_as_string":"2017-02-09T03:14:00.000Z","key":1486610040000,"doc_count":5},{"key_as_string":"2017-02-09T03:15:00.000Z","key":1486610100000,"doc_count":14},{"key_as_string":"2017-02-09T03:16:00.000Z","key":1486610160000,"doc_count":7},{"key_as_string":"2017-02-09T03:17:00.000Z","key":1486610220000,"doc_count":11},{"key_as_string":"2017-02-09T03:18:00.000Z","key":1486610280000,"doc_count":14},{"key_as_string":"2017-02-09T03:19:00.000Z","key":1486610340000,"doc_count":12},{"key_as_string":"2017-02-09T03:20:00.000Z","key":1486610400000,"doc_count":7},{"key_as_string":"2017-02-09T03:21:00.000Z","key":1486610460000,"doc_count":15},{"key_as_string":"2017-02-09T03:22:00.000Z","key":1486610520000,"doc_count":12},{"key_as_string":"2017-02-09T03:23:00.000Z","key":1486610580000,"doc_count":10},{"key_as_string":"2017-02-09T03:24:00.000Z","key":1486610640000,"doc_count":6},{"key_as_string":"2017-02-09T03:25:00.000Z","key":1486610700000,"doc_count":11},{"key_as_string":"2017-02-09T03:26:00.000Z","key":1486610760000,"doc_count":10},{"key_as_string":"2017-02-09T03:27:00.000Z","key":1486610820000,"doc_count":11},{"key_as_string":"2017-02-09T03:28:00.000Z","key":1486610880000,"doc_count":12},{"key_as_string":"2017-02-09T03:29:00.000Z","key":1486610940000,"doc_count":11},{"key_as_string":"2017-02-09T03:30:00.000Z","key":1486611000000,"doc_count":15},{"key_as_string":"2017-02-09T03:31:00.000Z","key":1486611060000,"doc_count":10},{"key_as_string":"2017-02-09T03:32:00.000Z","key":1486611120000,"doc_count":14},{"key_as_string":"2017-02-09T03:33:00.000Z","key":1486611180000,"doc_count":10},{"key_as_string":"2017-02-09T03:34:00.000Z","key":1486611240000,"doc_count":10},{"key_as_string":"2017-02-09T03:35:00.000Z","key":1486611300000,"doc_count":15},{"key_as_string":"2017-02-09T03:36:00.000Z","key":1486611360000,"doc_count":8},{"key_as_string":"2017-02-09T03:37:00.000Z","key":1486611420000,"doc_count":8},{"key_as_string":"2017-02-09T03:38:00.000Z","key":1486611480000,"doc_count":15},{"key_as_string":"2017-02-09T03:39:00.000Z","key":1486611540000,"doc_count":7},{"key_as_string":"2017-02-09T03:40:00.000Z","key":1486611600000,"doc_count":15},{"key_as_string":"2017-02-09T03:41:00.000Z","key":1486611660000,"doc_count":7},{"key_as_string":"2017-02-09T03:42:00.000Z","key":1486611720000,"doc_count":14},{"key_as_string":"2017-02-09T03:43:00.000Z","key":1486611780000,"doc_count":8},{"key_as_string":"2017-02-09T03:44:00.000Z","key":1486611840000,"doc_count":9},{"key_as_string":"2017-02-09T03:45:00.000Z","key":1486611900000,"doc_count":11},{"key_as_string":"2017-02-09T03:46:00.000Z","key":1486611960000,"doc_count":15},{"key_as_string":"2017-02-09T03:47:00.000Z","key":1486612020000,"doc_count":6},{"key_as_string":"2017-02-09T03:48:00.000Z","key":1486612080000,"doc_count":9},{"key_as_string":"2017-02-09T03:49:00.000Z","key":1486612140000,"doc_count":13},{"key_as_string":"2017-02-09T03:50:00.000Z","key":1486612200000,"doc_count":9},{"key_as_string":"2017-02-09T03:51:00.000Z","key":1486612260000,"doc_count":11},{"key_as_string":"2017-02-09T03:52:00.000Z","key":1486612320000,"doc_count":12},{"key_as_string":"2017-02-09T03:53:00.000Z","key":1486612380000,"doc_count":13},{"key_as_string":"2017-02-09T03:54:00.000Z","key":1486612440000,"doc_count":7},{"key_as_string":"2017-02-09T03:55:00.000Z","key":1486612500000,"doc_count":14},{"key_as_string":"2017-02-09T03:56:00.000Z","key":1486612560000,"doc_count":10},{"key_as_string":"2017-02-09T03:57:00.000Z","key":1486612620000,"doc_count":8},{"key_as_string":"2017-02-09T03:58:00.000Z","key":1486612680000,"doc_count":6},{"key_as_string":"2017-02-09T03:59:00.000Z","key":1486612740000,"doc_count":11},{"key_as_string":"2017-02-09T04:00:00.000Z","key":1486612800000,"doc_count":8},{"key_as_string":"2017-02-09T04:01:00.000Z","key":1486612860000,"doc_count":12},{"key_as_string":"2017-02-09T04:02:00.000Z","key":1486612920000,"doc_count":13},{"key_as_string":"2017-02-09T04:03:00.000Z","key":1486612980000,"doc_count":10},{"key_as_string":"2017-02-09T04:04:00.000Z","key":1486613040000,"doc_count":12},{"key_as_string":"2017-02-09T04:05:00.000Z","key":1486613100000,"doc_count":9},{"key_as_string":"2017-02-09T04:06:00.000Z","key":1486613160000,"doc_count":16},{"key_as_string":"2017-02-09T04:07:00.000Z","key":1486613220000,"doc_count":12},{"key_as_string":"2017-02-09T04:08:00.000Z","key":1486613280000,"doc_count":16},{"key_as_string":"2017-02-09T04:09:00.000Z","key":1486613340000,"doc_count":10},{"key_as_string":"2017-02-09T04:10:00.000Z","key":1486613400000,"doc_count":9},{"key_as_string":"2017-02-09T04:11:00.000Z","key":1486613460000,"doc_count":9},{"key_as_string":"2017-02-09T04:12:00.000Z","key":1486613520000,"doc_count":11},{"key_as_string":"2017-02-09T04:13:00.000Z","key":1486613580000,"doc_count":8},{"key_as_string":"2017-02-09T04:14:00.000Z","key":1486613640000,"doc_count":11},{"key_as_string":"2017-02-09T04:15:00.000Z","key":1486613700000,"doc_count":7},{"key_as_string":"2017-02-09T04:16:00.000Z","key":1486613760000,"doc_count":9},{"key_as_string":"2017-02-09T04:17:00.000Z","key":1486613820000,"doc_count":14},{"key_as_string":"2017-02-09T04:18:00.000Z","key":1486613880000,"doc_count":12},{"key_as_string":"2017-02-09T04:19:00.000Z","key":1486613940000,"doc_count":12},{"key_as_string":"2017-02-09T04:20:00.000Z","key":1486614000000,"doc_count":11},{"key_as_string":"2017-02-09T04:21:00.000Z","key":1486614060000,"doc_count":15},{"key_as_string":"2017-02-09T04:22:00.000Z","key":1486614120000,"doc_count":15},{"key_as_string":"2017-02-09T04:23:00.000Z","key":1486614180000,"doc_count":14},{"key_as_string":"2017-02-09T04:24:00.000Z","key":1486614240000,"doc_count":10},{"key_as_string":"2017-02-09T04:25:00.000Z","key":1486614300000,"doc_count":8},{"key_as_string":"2017-02-09T04:26:00.000Z","key":1486614360000,"doc_count":8},{"key_as_string":"2017-02-09T04:27:00.000Z","key":1486614420000,"doc_count":14},{"key_as_string":"2017-02-09T04:28:00.000Z","key":1486614480000,"doc_count":9},{"key_as_string":"2017-02-09T04:29:00.000Z","key":1486614540000,"doc_count":16},{"key_as_string":"2017-02-09T04:30:00.000Z","key":1486614600000,"doc_count":11},{"key_as_string":"2017-02-09T04:31:00.000Z","key":1486614660000,"doc_count":13},{"key_as_string":"2017-02-09T04:32:00.000Z","key":1486614720000,"doc_count":9},{"key_as_string":"2017-02-09T04:33:00.000Z","key":1486614780000,"doc_count":16},{"key_as_string":"2017-02-09T04:34:00.000Z","key":1486614840000,"doc_count":11},{"key_as_string":"2017-02-09T04:35:00.000Z","key":1486614900000,"doc_count":9},{"key_as_string":"2017-02-09T04:36:00.000Z","key":1486614960000,"doc_count":11},{"key_as_string":"2017-02-09T04:37:00.000Z","key":1486615020000,"doc_count":14},{"key_as_string":"2017-02-09T04:38:00.000Z","key":1486615080000,"doc_count":14},{"key_as_string":"2017-02-09T04:39:00.000Z","key":1486615140000,"doc_count":10},{"key_as_string":"2017-02-09T04:40:00.000Z","key":1486615200000,"doc_count":7},{"key_as_string":"2017-02-09T04:41:00.000Z","key":1486615260000,"doc_count":13},{"key_as_string":"2017-02-09T04:42:00.000Z","key":1486615320000,"doc_count":10},{"key_as_string":"2017-02-09T04:43:00.000Z","key":1486615380000,"doc_count":17},{"key_as_string":"2017-02-09T04:44:00.000Z","key":1486615440000,"doc_count":12},{"key_as_string":"2017-02-09T04:45:00.000Z","key":1486615500000,"doc_count":9},{"key_as_string":"2017-02-09T04:46:00.000Z","key":1486615560000,"doc_count":7},{"key_as_string":"2017-02-09T04:47:00.000Z","key":1486615620000,"doc_count":14},{"key_as_string":"2017-02-09T04:48:00.000Z","key":1486615680000,"doc_count":11},{"key_as_string":"2017-02-09T04:49:00.000Z","key":1486615740000,"doc_count":15},{"key_as_string":"2017-02-09T04:50:00.000Z","key":1486615800000,"doc_count":12},{"key_as_string":"2017-02-09T04:51:00.000Z","key":1486615860000,"doc_count":11},{"key_as_string":"2017-02-09T04:52:00.000Z","key":1486615920000,"doc_count":10},{"key_as_string":"2017-02-09T04:53:00.000Z","key":1486615980000,"doc_count":10},{"key_as_string":"2017-02-09T04:54:00.000Z","key":1486616040000,"doc_count":12},{"key_as_string":"2017-02-09T04:55:00.000Z","key":1486616100000,"doc_count":10},{"key_as_string":"2017-02-09T04:56:00.000Z","key":1486616160000,"doc_count":13},{"key_as_string":"2017-02-09T04:57:00.000Z","key":1486616220000,"doc_count":10},{"key_as_string":"2017-02-09T04:58:00.000Z","key":1486616280000,"doc_count":12},{"key_as_string":"2017-02-09T04:59:00.000Z","key":1486616340000,"doc_count":13},{"key_as_string":"2017-02-09T05:00:00.000Z","key":1486616400000,"doc_count":11},{"key_as_string":"2017-02-09T05:01:00.000Z","key":1486616460000,"doc_count":14},{"key_as_string":"2017-02-09T05:02:00.000Z","key":1486616520000,"doc_count":10},{"key_as_string":"2017-02-09T05:03:00.000Z","key":1486616580000,"doc_count":13},{"key_as_string":"2017-02-09T05:04:00.000Z","key":1486616640000,"doc_count":11},{"key_as_string":"2017-02-09T05:05:00.000Z","key":1486616700000,"doc_count":11},{"key_as_string":"2017-02-09T05:06:00.000Z","key":1486616760000,"doc_count":12},{"key_as_string":"2017-02-09T05:07:00.000Z","key":1486616820000,"doc_count":21},{"key_as_string":"2017-02-09T05:08:00.000Z","key":1486616880000,"doc_count":7},{"key_as_string":"2017-02-09T05:09:00.000Z","key":1486616940000,"doc_count":14},{"key_as_string":"2017-02-09T05:10:00.000Z","key":1486617000000,"doc_count":9},{"key_as_string":"2017-02-09T05:11:00.000Z","key":1486617060000,"doc_count":7},{"key_as_string":"2017-02-09T05:12:00.000Z","key":1486617120000,"doc_count":15},{"key_as_string":"2017-02-09T05:13:00.000Z","key":1486617180000,"doc_count":12},{"key_as_string":"2017-02-09T05:14:00.000Z","key":1486617240000,"doc_count":15},{"key_as_string":"2017-02-09T05:15:00.000Z","key":1486617300000,"doc_count":12},{"key_as_string":"2017-02-09T05:16:00.000Z","key":1486617360000,"doc_count":15},{"key_as_string":"2017-02-09T05:17:00.000Z","key":1486617420000,"doc_count":11},{"key_as_string":"2017-02-09T05:18:00.000Z","key":1486617480000,"doc_count":16},{"key_as_string":"2017-02-09T05:19:00.000Z","key":1486617540000,"doc_count":8},{"key_as_string":"2017-02-09T05:20:00.000Z","key":1486617600000,"doc_count":12},{"key_as_string":"2017-02-09T05:21:00.000Z","key":1486617660000,"doc_count":12},{"key_as_string":"2017-02-09T05:22:00.000Z","key":1486617720000,"doc_count":11},{"key_as_string":"2017-02-09T05:23:00.000Z","key":1486617780000,"doc_count":10},{"key_as_string":"2017-02-09T05:24:00.000Z","key":1486617840000,"doc_count":15},{"key_as_string":"2017-02-09T05:25:00.000Z","key":1486617900000,"doc_count":8},{"key_as_string":"2017-02-09T05:26:00.000Z","key":1486617960000,"doc_count":13},{"key_as_string":"2017-02-09T05:27:00.000Z","key":1486618020000,"doc_count":14},{"key_as_string":"2017-02-09T05:28:00.000Z","key":1486618080000,"doc_count":7},{"key_as_string":"2017-02-09T05:29:00.000Z","key":1486618140000,"doc_count":9},{"key_as_string":"2017-02-09T05:30:00.000Z","key":1486618200000,"doc_count":10},{"key_as_string":"2017-02-09T05:31:00.000Z","key":1486618260000,"doc_count":11},{"key_as_string":"2017-02-09T05:32:00.000Z","key":1486618320000,"doc_count":8},{"key_as_string":"2017-02-09T05:33:00.000Z","key":1486618380000,"doc_count":12},{"key_as_string":"2017-02-09T05:34:00.000Z","key":1486618440000,"doc_count":13},{"key_as_string":"2017-02-09T05:35:00.000Z","key":1486618500000,"doc_count":10},{"key_as_string":"2017-02-09T05:36:00.000Z","key":1486618560000,"doc_count":13},{"key_as_string":"2017-02-09T05:37:00.000Z","key":1486618620000,"doc_count":5},{"key_as_string":"2017-02-09T05:38:00.000Z","key":1486618680000,"doc_count":13},{"key_as_string":"2017-02-09T05:39:00.000Z","key":1486618740000,"doc_count":5},{"key_as_string":"2017-02-09T05:40:00.000Z","key":1486618800000,"doc_count":13},{"key_as_string":"2017-02-09T05:41:00.000Z","key":1486618860000,"doc_count":12},{"key_as_string":"2017-02-09T05:42:00.000Z","key":1486618920000,"doc_count":21},{"key_as_string":"2017-02-09T05:43:00.000Z","key":1486618980000,"doc_count":6},{"key_as_string":"2017-02-09T05:44:00.000Z","key":1486619040000,"doc_count":16},{"key_as_string":"2017-02-09T05:45:00.000Z","key":1486619100000,"doc_count":11},{"key_as_string":"2017-02-09T05:46:00.000Z","key":1486619160000,"doc_count":10},{"key_as_string":"2017-02-09T05:47:00.000Z","key":1486619220000,"doc_count":10},{"key_as_string":"2017-02-09T05:48:00.000Z","key":1486619280000,"doc_count":12},{"key_as_string":"2017-02-09T05:49:00.000Z","key":1486619340000,"doc_count":11},{"key_as_string":"2017-02-09T05:50:00.000Z","key":1486619400000,"doc_count":13},{"key_as_string":"2017-02-09T05:51:00.000Z","key":1486619460000,"doc_count":12},{"key_as_string":"2017-02-09T05:52:00.000Z","key":1486619520000,"doc_count":6},{"key_as_string":"2017-02-09T05:53:00.000Z","key":1486619580000,"doc_count":13},{"key_as_string":"2017-02-09T05:54:00.000Z","key":1486619640000,"doc_count":11},{"key_as_string":"2017-02-09T05:55:00.000Z","key":1486619700000,"doc_count":13},{"key_as_string":"2017-02-09T05:56:00.000Z","key":1486619760000,"doc_count":13},{"key_as_string":"2017-02-09T05:57:00.000Z","key":1486619820000,"doc_count":13},{"key_as_string":"2017-02-09T05:58:00.000Z","key":1486619880000,"doc_count":9},{"key_as_string":"2017-02-09T05:59:00.000Z","key":1486619940000,"doc_count":12},{"key_as_string":"2017-02-09T06:00:00.000Z","key":1486620000000,"doc_count":12},{"key_as_string":"2017-02-09T06:01:00.000Z","key":1486620060000,"doc_count":17},{"key_as_string":"2017-02-09T06:02:00.000Z","key":1486620120000,"doc_count":14},{"key_as_string":"2017-02-09T06:03:00.000Z","key":1486620180000,"doc_count":7},{"key_as_string":"2017-02-09T06:04:00.000Z","key":1486620240000,"doc_count":9},{"key_as_string":"2017-02-09T06:05:00.000Z","key":1486620300000,"doc_count":15},{"key_as_string":"2017-02-09T06:06:00.000Z","key":1486620360000,"doc_count":11},{"key_as_string":"2017-02-09T06:07:00.000Z","key":1486620420000,"doc_count":10},{"key_as_string":"2017-02-09T06:08:00.000Z","key":1486620480000,"doc_count":11},{"key_as_string":"2017-02-09T06:09:00.000Z","key":1486620540000,"doc_count":8},{"key_as_string":"2017-02-09T06:10:00.000Z","key":1486620600000,"doc_count":12},{"key_as_string":"2017-02-09T06:11:00.000Z","key":1486620660000,"doc_count":16},{"key_as_string":"2017-02-09T06:12:00.000Z","key":1486620720000,"doc_count":11},{"key_as_string":"2017-02-09T06:13:00.000Z","key":1486620780000,"doc_count":8},{"key_as_string":"2017-02-09T06:14:00.000Z","key":1486620840000,"doc_count":11},{"key_as_string":"2017-02-09T06:15:00.000Z","key":1486620900000,"doc_count":16},{"key_as_string":"2017-02-09T06:16:00.000Z","key":1486620960000,"doc_count":12},{"key_as_string":"2017-02-09T06:17:00.000Z","key":1486621020000,"doc_count":10},{"key_as_string":"2017-02-09T06:18:00.000Z","key":1486621080000,"doc_count":10},{"key_as_string":"2017-02-09T06:19:00.000Z","key":1486621140000,"doc_count":18},{"key_as_string":"2017-02-09T06:20:00.000Z","key":1486621200000,"doc_count":8},{"key_as_string":"2017-02-09T06:21:00.000Z","key":1486621260000,"doc_count":13},{"key_as_string":"2017-02-09T06:22:00.000Z","key":1486621320000,"doc_count":10},{"key_as_string":"2017-02-09T06:23:00.000Z","key":1486621380000,"doc_count":15},{"key_as_string":"2017-02-09T06:24:00.000Z","key":1486621440000,"doc_count":13},{"key_as_string":"2017-02-09T06:25:00.000Z","key":1486621500000,"doc_count":10},{"key_as_string":"2017-02-09T06:26:00.000Z","key":1486621560000,"doc_count":11},{"key_as_string":"2017-02-09T06:27:00.000Z","key":1486621620000,"doc_count":10},{"key_as_string":"2017-02-09T06:28:00.000Z","key":1486621680000,"doc_count":11},{"key_as_string":"2017-02-09T06:29:00.000Z","key":1486621740000,"doc_count":14},{"key_as_string":"2017-02-09T06:30:00.000Z","key":1486621800000,"doc_count":7},{"key_as_string":"2017-02-09T06:31:00.000Z","key":1486621860000,"doc_count":13},{"key_as_string":"2017-02-09T06:32:00.000Z","key":1486621920000,"doc_count":10},{"key_as_string":"2017-02-09T06:33:00.000Z","key":1486621980000,"doc_count":7},{"key_as_string":"2017-02-09T06:34:00.000Z","key":1486622040000,"doc_count":15},{"key_as_string":"2017-02-09T06:35:00.000Z","key":1486622100000,"doc_count":10},{"key_as_string":"2017-02-09T06:36:00.000Z","key":1486622160000,"doc_count":14},{"key_as_string":"2017-02-09T06:37:00.000Z","key":1486622220000,"doc_count":10},{"key_as_string":"2017-02-09T06:38:00.000Z","key":1486622280000,"doc_count":8},{"key_as_string":"2017-02-09T06:39:00.000Z","key":1486622340000,"doc_count":7},{"key_as_string":"2017-02-09T06:40:00.000Z","key":1486622400000,"doc_count":13},{"key_as_string":"2017-02-09T06:41:00.000Z","key":1486622460000,"doc_count":13},{"key_as_string":"2017-02-09T06:42:00.000Z","key":1486622520000,"doc_count":7},{"key_as_string":"2017-02-09T06:43:00.000Z","key":1486622580000,"doc_count":12},{"key_as_string":"2017-02-09T06:44:00.000Z","key":1486622640000,"doc_count":11},{"key_as_string":"2017-02-09T06:45:00.000Z","key":1486622700000,"doc_count":10},{"key_as_string":"2017-02-09T06:46:00.000Z","key":1486622760000,"doc_count":16},{"key_as_string":"2017-02-09T06:47:00.000Z","key":1486622820000,"doc_count":17},{"key_as_string":"2017-02-09T06:48:00.000Z","key":1486622880000,"doc_count":13},{"key_as_string":"2017-02-09T06:49:00.000Z","key":1486622940000,"doc_count":11},{"key_as_string":"2017-02-09T06:50:00.000Z","key":1486623000000,"doc_count":8},{"key_as_string":"2017-02-09T06:51:00.000Z","key":1486623060000,"doc_count":6},{"key_as_string":"2017-02-09T06:52:00.000Z","key":1486623120000,"doc_count":17},{"key_as_string":"2017-02-09T06:53:00.000Z","key":1486623180000,"doc_count":11},{"key_as_string":"2017-02-09T06:54:00.000Z","key":1486623240000,"doc_count":11},{"key_as_string":"2017-02-09T06:55:00.000Z","key":1486623300000,"doc_count":14},{"key_as_string":"2017-02-09T06:56:00.000Z","key":1486623360000,"doc_count":10},{"key_as_string":"2017-02-09T06:57:00.000Z","key":1486623420000,"doc_count":14},{"key_as_string":"2017-02-09T06:58:00.000Z","key":1486623480000,"doc_count":8},{"key_as_string":"2017-02-09T06:59:00.000Z","key":1486623540000,"doc_count":10},{"key_as_string":"2017-02-09T07:00:00.000Z","key":1486623600000,"doc_count":11},{"key_as_string":"2017-02-09T07:01:00.000Z","key":1486623660000,"doc_count":16},{"key_as_string":"2017-02-09T07:02:00.000Z","key":1486623720000,"doc_count":17},{"key_as_string":"2017-02-09T07:03:00.000Z","key":1486623780000,"doc_count":16},{"key_as_string":"2017-02-09T07:04:00.000Z","key":1486623840000,"doc_count":15},{"key_as_string":"2017-02-09T07:05:00.000Z","key":1486623900000,"doc_count":12},{"key_as_string":"2017-02-09T07:06:00.000Z","key":1486623960000,"doc_count":9},{"key_as_string":"2017-02-09T07:07:00.000Z","key":1486624020000,"doc_count":11},{"key_as_string":"2017-02-09T07:08:00.000Z","key":1486624080000,"doc_count":11},{"key_as_string":"2017-02-09T07:09:00.000Z","key":1486624140000,"doc_count":20},{"key_as_string":"2017-02-09T07:10:00.000Z","key":1486624200000,"doc_count":9},{"key_as_string":"2017-02-09T07:11:00.000Z","key":1486624260000,"doc_count":17},{"key_as_string":"2017-02-09T07:12:00.000Z","key":1486624320000,"doc_count":13},{"key_as_string":"2017-02-09T07:13:00.000Z","key":1486624380000,"doc_count":18},{"key_as_string":"2017-02-09T07:14:00.000Z","key":1486624440000,"doc_count":8},{"key_as_string":"2017-02-09T07:15:00.000Z","key":1486624500000,"doc_count":14},{"key_as_string":"2017-02-09T07:16:00.000Z","key":1486624560000,"doc_count":9},{"key_as_string":"2017-02-09T07:17:00.000Z","key":1486624620000,"doc_count":15},{"key_as_string":"2017-02-09T07:18:00.000Z","key":1486624680000,"doc_count":15},{"key_as_string":"2017-02-09T07:19:00.000Z","key":1486624740000,"doc_count":15},{"key_as_string":"2017-02-09T07:20:00.000Z","key":1486624800000,"doc_count":17},{"key_as_string":"2017-02-09T07:21:00.000Z","key":1486624860000,"doc_count":13},{"key_as_string":"2017-02-09T07:22:00.000Z","key":1486624920000,"doc_count":10},{"key_as_string":"2017-02-09T07:23:00.000Z","key":1486624980000,"doc_count":10},{"key_as_string":"2017-02-09T07:24:00.000Z","key":1486625040000,"doc_count":9},{"key_as_string":"2017-02-09T07:25:00.000Z","key":1486625100000,"doc_count":16},{"key_as_string":"2017-02-09T07:26:00.000Z","key":1486625160000,"doc_count":14},{"key_as_string":"2017-02-09T07:27:00.000Z","key":1486625220000,"doc_count":13},{"key_as_string":"2017-02-09T07:28:00.000Z","key":1486625280000,"doc_count":14},{"key_as_string":"2017-02-09T07:29:00.000Z","key":1486625340000,"doc_count":14},{"key_as_string":"2017-02-09T07:30:00.000Z","key":1486625400000,"doc_count":14},{"key_as_string":"2017-02-09T07:31:00.000Z","key":1486625460000,"doc_count":16},{"key_as_string":"2017-02-09T07:32:00.000Z","key":1486625520000,"doc_count":13},{"key_as_string":"2017-02-09T07:33:00.000Z","key":1486625580000,"doc_count":12},{"key_as_string":"2017-02-09T07:34:00.000Z","key":1486625640000,"doc_count":15},{"key_as_string":"2017-02-09T07:35:00.000Z","key":1486625700000,"doc_count":13},{"key_as_string":"2017-02-09T07:36:00.000Z","key":1486625760000,"doc_count":15},{"key_as_string":"2017-02-09T07:37:00.000Z","key":1486625820000,"doc_count":12},{"key_as_string":"2017-02-09T07:38:00.000Z","key":1486625880000,"doc_count":9},{"key_as_string":"2017-02-09T07:39:00.000Z","key":1486625940000,"doc_count":20},{"key_as_string":"2017-02-09T07:40:00.000Z","key":1486626000000,"doc_count":13},{"key_as_string":"2017-02-09T07:41:00.000Z","key":1486626060000,"doc_count":17},{"key_as_string":"2017-02-09T07:42:00.000Z","key":1486626120000,"doc_count":10},{"key_as_string":"2017-02-09T07:43:00.000Z","key":1486626180000,"doc_count":15},{"key_as_string":"2017-02-09T07:44:00.000Z","key":1486626240000,"doc_count":11},{"key_as_string":"2017-02-09T07:45:00.000Z","key":1486626300000,"doc_count":11},{"key_as_string":"2017-02-09T07:46:00.000Z","key":1486626360000,"doc_count":13},{"key_as_string":"2017-02-09T07:47:00.000Z","key":1486626420000,"doc_count":14},{"key_as_string":"2017-02-09T07:48:00.000Z","key":1486626480000,"doc_count":13},{"key_as_string":"2017-02-09T07:49:00.000Z","key":1486626540000,"doc_count":13},{"key_as_string":"2017-02-09T07:50:00.000Z","key":1486626600000,"doc_count":12},{"key_as_string":"2017-02-09T07:51:00.000Z","key":1486626660000,"doc_count":15},{"key_as_string":"2017-02-09T07:52:00.000Z","key":1486626720000,"doc_count":15},{"key_as_string":"2017-02-09T07:53:00.000Z","key":1486626780000,"doc_count":15},{"key_as_string":"2017-02-09T07:54:00.000Z","key":1486626840000,"doc_count":12},{"key_as_string":"2017-02-09T07:55:00.000Z","key":1486626900000,"doc_count":11},{"key_as_string":"2017-02-09T07:56:00.000Z","key":1486626960000,"doc_count":14},{"key_as_string":"2017-02-09T07:57:00.000Z","key":1486627020000,"doc_count":8},{"key_as_string":"2017-02-09T07:58:00.000Z","key":1486627080000,"doc_count":17},{"key_as_string":"2017-02-09T07:59:00.000Z","key":1486627140000,"doc_count":13},{"key_as_string":"2017-02-09T08:00:00.000Z","key":1486627200000,"doc_count":13},{"key_as_string":"2017-02-09T08:01:00.000Z","key":1486627260000,"doc_count":12},{"key_as_string":"2017-02-09T08:02:00.000Z","key":1486627320000,"doc_count":19},{"key_as_string":"2017-02-09T08:03:00.000Z","key":1486627380000,"doc_count":15},{"key_as_string":"2017-02-09T08:04:00.000Z","key":1486627440000,"doc_count":9},{"key_as_string":"2017-02-09T08:05:00.000Z","key":1486627500000,"doc_count":14},{"key_as_string":"2017-02-09T08:06:00.000Z","key":1486627560000,"doc_count":14},{"key_as_string":"2017-02-09T08:07:00.000Z","key":1486627620000,"doc_count":13},{"key_as_string":"2017-02-09T08:08:00.000Z","key":1486627680000,"doc_count":10},{"key_as_string":"2017-02-09T08:09:00.000Z","key":1486627740000,"doc_count":14},{"key_as_string":"2017-02-09T08:10:00.000Z","key":1486627800000,"doc_count":11},{"key_as_string":"2017-02-09T08:11:00.000Z","key":1486627860000,"doc_count":12},{"key_as_string":"2017-02-09T08:12:00.000Z","key":1486627920000,"doc_count":15},{"key_as_string":"2017-02-09T08:13:00.000Z","key":1486627980000,"doc_count":13},{"key_as_string":"2017-02-09T08:14:00.000Z","key":1486628040000,"doc_count":12},{"key_as_string":"2017-02-09T08:15:00.000Z","key":1486628100000,"doc_count":11},{"key_as_string":"2017-02-09T08:16:00.000Z","key":1486628160000,"doc_count":21},{"key_as_string":"2017-02-09T08:17:00.000Z","key":1486628220000,"doc_count":16},{"key_as_string":"2017-02-09T08:18:00.000Z","key":1486628280000,"doc_count":16},{"key_as_string":"2017-02-09T08:19:00.000Z","key":1486628340000,"doc_count":11},{"key_as_string":"2017-02-09T08:20:00.000Z","key":1486628400000,"doc_count":14},{"key_as_string":"2017-02-09T08:21:00.000Z","key":1486628460000,"doc_count":14},{"key_as_string":"2017-02-09T08:22:00.000Z","key":1486628520000,"doc_count":13},{"key_as_string":"2017-02-09T08:23:00.000Z","key":1486628580000,"doc_count":13},{"key_as_string":"2017-02-09T08:24:00.000Z","key":1486628640000,"doc_count":12},{"key_as_string":"2017-02-09T08:25:00.000Z","key":1486628700000,"doc_count":16},{"key_as_string":"2017-02-09T08:26:00.000Z","key":1486628760000,"doc_count":12},{"key_as_string":"2017-02-09T08:27:00.000Z","key":1486628820000,"doc_count":10},{"key_as_string":"2017-02-09T08:28:00.000Z","key":1486628880000,"doc_count":15},{"key_as_string":"2017-02-09T08:29:00.000Z","key":1486628940000,"doc_count":17},{"key_as_string":"2017-02-09T08:30:00.000Z","key":1486629000000,"doc_count":12},{"key_as_string":"2017-02-09T08:31:00.000Z","key":1486629060000,"doc_count":13},{"key_as_string":"2017-02-09T08:32:00.000Z","key":1486629120000,"doc_count":14},{"key_as_string":"2017-02-09T08:33:00.000Z","key":1486629180000,"doc_count":14},{"key_as_string":"2017-02-09T08:34:00.000Z","key":1486629240000,"doc_count":14},{"key_as_string":"2017-02-09T08:35:00.000Z","key":1486629300000,"doc_count":12},{"key_as_string":"2017-02-09T08:36:00.000Z","key":1486629360000,"doc_count":14},{"key_as_string":"2017-02-09T08:37:00.000Z","key":1486629420000,"doc_count":14},{"key_as_string":"2017-02-09T08:38:00.000Z","key":1486629480000,"doc_count":12},{"key_as_string":"2017-02-09T08:39:00.000Z","key":1486629540000,"doc_count":7},{"key_as_string":"2017-02-09T08:40:00.000Z","key":1486629600000,"doc_count":18},{"key_as_string":"2017-02-09T08:41:00.000Z","key":1486629660000,"doc_count":10},{"key_as_string":"2017-02-09T08:42:00.000Z","key":1486629720000,"doc_count":13},{"key_as_string":"2017-02-09T08:43:00.000Z","key":1486629780000,"doc_count":14},{"key_as_string":"2017-02-09T08:44:00.000Z","key":1486629840000,"doc_count":16},{"key_as_string":"2017-02-09T08:45:00.000Z","key":1486629900000,"doc_count":14},{"key_as_string":"2017-02-09T08:46:00.000Z","key":1486629960000,"doc_count":13},{"key_as_string":"2017-02-09T08:47:00.000Z","key":1486630020000,"doc_count":15},{"key_as_string":"2017-02-09T08:48:00.000Z","key":1486630080000,"doc_count":14},{"key_as_string":"2017-02-09T08:49:00.000Z","key":1486630140000,"doc_count":16},{"key_as_string":"2017-02-09T08:50:00.000Z","key":1486630200000,"doc_count":11},{"key_as_string":"2017-02-09T08:51:00.000Z","key":1486630260000,"doc_count":15},{"key_as_string":"2017-02-09T08:52:00.000Z","key":1486630320000,"doc_count":15},{"key_as_string":"2017-02-09T08:53:00.000Z","key":1486630380000,"doc_count":12},{"key_as_string":"2017-02-09T08:54:00.000Z","key":1486630440000,"doc_count":13},{"key_as_string":"2017-02-09T08:55:00.000Z","key":1486630500000,"doc_count":11},{"key_as_string":"2017-02-09T08:56:00.000Z","key":1486630560000,"doc_count":7},{"key_as_string":"2017-02-09T08:57:00.000Z","key":1486630620000,"doc_count":14},{"key_as_string":"2017-02-09T08:58:00.000Z","key":1486630680000,"doc_count":12},{"key_as_string":"2017-02-09T08:59:00.000Z","key":1486630740000,"doc_count":8},{"key_as_string":"2017-02-09T09:00:00.000Z","key":1486630800000,"doc_count":15},{"key_as_string":"2017-02-09T09:01:00.000Z","key":1486630860000,"doc_count":13},{"key_as_string":"2017-02-09T09:02:00.000Z","key":1486630920000,"doc_count":17},{"key_as_string":"2017-02-09T09:03:00.000Z","key":1486630980000,"doc_count":10},{"key_as_string":"2017-02-09T09:04:00.000Z","key":1486631040000,"doc_count":12},{"key_as_string":"2017-02-09T09:05:00.000Z","key":1486631100000,"doc_count":12},{"key_as_string":"2017-02-09T09:06:00.000Z","key":1486631160000,"doc_count":10},{"key_as_string":"2017-02-09T09:07:00.000Z","key":1486631220000,"doc_count":13},{"key_as_string":"2017-02-09T09:08:00.000Z","key":1486631280000,"doc_count":15},{"key_as_string":"2017-02-09T09:09:00.000Z","key":1486631340000,"doc_count":10},{"key_as_string":"2017-02-09T09:10:00.000Z","key":1486631400000,"doc_count":17},{"key_as_string":"2017-02-09T09:11:00.000Z","key":1486631460000,"doc_count":14},{"key_as_string":"2017-02-09T09:12:00.000Z","key":1486631520000,"doc_count":10},{"key_as_string":"2017-02-09T09:13:00.000Z","key":1486631580000,"doc_count":15},{"key_as_string":"2017-02-09T09:14:00.000Z","key":1486631640000,"doc_count":14},{"key_as_string":"2017-02-09T09:15:00.000Z","key":1486631700000,"doc_count":16},{"key_as_string":"2017-02-09T09:16:00.000Z","key":1486631760000,"doc_count":11},{"key_as_string":"2017-02-09T09:17:00.000Z","key":1486631820000,"doc_count":16},{"key_as_string":"2017-02-09T09:18:00.000Z","key":1486631880000,"doc_count":11},{"key_as_string":"2017-02-09T09:19:00.000Z","key":1486631940000,"doc_count":11},{"key_as_string":"2017-02-09T09:20:00.000Z","key":1486632000000,"doc_count":18},{"key_as_string":"2017-02-09T09:21:00.000Z","key":1486632060000,"doc_count":10},{"key_as_string":"2017-02-09T09:22:00.000Z","key":1486632120000,"doc_count":10},{"key_as_string":"2017-02-09T09:23:00.000Z","key":1486632180000,"doc_count":14},{"key_as_string":"2017-02-09T09:24:00.000Z","key":1486632240000,"doc_count":18},{"key_as_string":"2017-02-09T09:25:00.000Z","key":1486632300000,"doc_count":12},{"key_as_string":"2017-02-09T09:26:00.000Z","key":1486632360000,"doc_count":16},{"key_as_string":"2017-02-09T09:27:00.000Z","key":1486632420000,"doc_count":15},{"key_as_string":"2017-02-09T09:28:00.000Z","key":1486632480000,"doc_count":25},{"key_as_string":"2017-02-09T09:29:00.000Z","key":1486632540000,"doc_count":13},{"key_as_string":"2017-02-09T09:30:00.000Z","key":1486632600000,"doc_count":11},{"key_as_string":"2017-02-09T09:31:00.000Z","key":1486632660000,"doc_count":12},{"key_as_string":"2017-02-09T09:32:00.000Z","key":1486632720000,"doc_count":16},{"key_as_string":"2017-02-09T09:33:00.000Z","key":1486632780000,"doc_count":10},{"key_as_string":"2017-02-09T09:34:00.000Z","key":1486632840000,"doc_count":14},{"key_as_string":"2017-02-09T09:35:00.000Z","key":1486632900000,"doc_count":14},{"key_as_string":"2017-02-09T09:36:00.000Z","key":1486632960000,"doc_count":16},{"key_as_string":"2017-02-09T09:37:00.000Z","key":1486633020000,"doc_count":19},{"key_as_string":"2017-02-09T09:38:00.000Z","key":1486633080000,"doc_count":15},{"key_as_string":"2017-02-09T09:39:00.000Z","key":1486633140000,"doc_count":13},{"key_as_string":"2017-02-09T09:40:00.000Z","key":1486633200000,"doc_count":10},{"key_as_string":"2017-02-09T09:41:00.000Z","key":1486633260000,"doc_count":16},{"key_as_string":"2017-02-09T09:42:00.000Z","key":1486633320000,"doc_count":20},{"key_as_string":"2017-02-09T09:43:00.000Z","key":1486633380000,"doc_count":7},{"key_as_string":"2017-02-09T09:44:00.000Z","key":1486633440000,"doc_count":16},{"key_as_string":"2017-02-09T09:45:00.000Z","key":1486633500000,"doc_count":10},{"key_as_string":"2017-02-09T09:46:00.000Z","key":1486633560000,"doc_count":15},{"key_as_string":"2017-02-09T09:47:00.000Z","key":1486633620000,"doc_count":10},{"key_as_string":"2017-02-09T09:48:00.000Z","key":1486633680000,"doc_count":19},{"key_as_string":"2017-02-09T09:49:00.000Z","key":1486633740000,"doc_count":11},{"key_as_string":"2017-02-09T09:50:00.000Z","key":1486633800000,"doc_count":12},{"key_as_string":"2017-02-09T09:51:00.000Z","key":1486633860000,"doc_count":13},{"key_as_string":"2017-02-09T09:52:00.000Z","key":1486633920000,"doc_count":10},{"key_as_string":"2017-02-09T09:53:00.000Z","key":1486633980000,"doc_count":15},{"key_as_string":"2017-02-09T09:54:00.000Z","key":1486634040000,"doc_count":11},{"key_as_string":"2017-02-09T09:55:00.000Z","key":1486634100000,"doc_count":15},{"key_as_string":"2017-02-09T09:56:00.000Z","key":1486634160000,"doc_count":14},{"key_as_string":"2017-02-09T09:57:00.000Z","key":1486634220000,"doc_count":11},{"key_as_string":"2017-02-09T09:58:00.000Z","key":1486634280000,"doc_count":9},{"key_as_string":"2017-02-09T09:59:00.000Z","key":1486634340000,"doc_count":18},{"key_as_string":"2017-02-09T10:00:00.000Z","key":1486634400000,"doc_count":13},{"key_as_string":"2017-02-09T10:01:00.000Z","key":1486634460000,"doc_count":13},{"key_as_string":"2017-02-09T10:02:00.000Z","key":1486634520000,"doc_count":11},{"key_as_string":"2017-02-09T10:03:00.000Z","key":1486634580000,"doc_count":15},{"key_as_string":"2017-02-09T10:04:00.000Z","key":1486634640000,"doc_count":11},{"key_as_string":"2017-02-09T10:05:00.000Z","key":1486634700000,"doc_count":16},{"key_as_string":"2017-02-09T10:06:00.000Z","key":1486634760000,"doc_count":15},{"key_as_string":"2017-02-09T10:07:00.000Z","key":1486634820000,"doc_count":9},{"key_as_string":"2017-02-09T10:08:00.000Z","key":1486634880000,"doc_count":14},{"key_as_string":"2017-02-09T10:09:00.000Z","key":1486634940000,"doc_count":16},{"key_as_string":"2017-02-09T10:10:00.000Z","key":1486635000000,"doc_count":16},{"key_as_string":"2017-02-09T10:11:00.000Z","key":1486635060000,"doc_count":13},{"key_as_string":"2017-02-09T10:12:00.000Z","key":1486635120000,"doc_count":16},{"key_as_string":"2017-02-09T10:13:00.000Z","key":1486635180000,"doc_count":12},{"key_as_string":"2017-02-09T10:14:00.000Z","key":1486635240000,"doc_count":12},{"key_as_string":"2017-02-09T10:15:00.000Z","key":1486635300000,"doc_count":14},{"key_as_string":"2017-02-09T10:16:00.000Z","key":1486635360000,"doc_count":12},{"key_as_string":"2017-02-09T10:17:00.000Z","key":1486635420000,"doc_count":18},{"key_as_string":"2017-02-09T10:18:00.000Z","key":1486635480000,"doc_count":19},{"key_as_string":"2017-02-09T10:19:00.000Z","key":1486635540000,"doc_count":8},{"key_as_string":"2017-02-09T10:20:00.000Z","key":1486635600000,"doc_count":12},{"key_as_string":"2017-02-09T10:21:00.000Z","key":1486635660000,"doc_count":13},{"key_as_string":"2017-02-09T10:22:00.000Z","key":1486635720000,"doc_count":16},{"key_as_string":"2017-02-09T10:23:00.000Z","key":1486635780000,"doc_count":13},{"key_as_string":"2017-02-09T10:24:00.000Z","key":1486635840000,"doc_count":9},{"key_as_string":"2017-02-09T10:25:00.000Z","key":1486635900000,"doc_count":17},{"key_as_string":"2017-02-09T10:26:00.000Z","key":1486635960000,"doc_count":16},{"key_as_string":"2017-02-09T10:27:00.000Z","key":1486636020000,"doc_count":14},{"key_as_string":"2017-02-09T10:28:00.000Z","key":1486636080000,"doc_count":11},{"key_as_string":"2017-02-09T10:29:00.000Z","key":1486636140000,"doc_count":12},{"key_as_string":"2017-02-09T10:30:00.000Z","key":1486636200000,"doc_count":19},{"key_as_string":"2017-02-09T10:31:00.000Z","key":1486636260000,"doc_count":16},{"key_as_string":"2017-02-09T10:32:00.000Z","key":1486636320000,"doc_count":12},{"key_as_string":"2017-02-09T10:33:00.000Z","key":1486636380000,"doc_count":14},{"key_as_string":"2017-02-09T10:34:00.000Z","key":1486636440000,"doc_count":11},{"key_as_string":"2017-02-09T10:35:00.000Z","key":1486636500000,"doc_count":15},{"key_as_string":"2017-02-09T10:36:00.000Z","key":1486636560000,"doc_count":18},{"key_as_string":"2017-02-09T10:37:00.000Z","key":1486636620000,"doc_count":15},{"key_as_string":"2017-02-09T10:38:00.000Z","key":1486636680000,"doc_count":12},{"key_as_string":"2017-02-09T10:39:00.000Z","key":1486636740000,"doc_count":14},{"key_as_string":"2017-02-09T10:40:00.000Z","key":1486636800000,"doc_count":14},{"key_as_string":"2017-02-09T10:41:00.000Z","key":1486636860000,"doc_count":17},{"key_as_string":"2017-02-09T10:42:00.000Z","key":1486636920000,"doc_count":13},{"key_as_string":"2017-02-09T10:43:00.000Z","key":1486636980000,"doc_count":9},{"key_as_string":"2017-02-09T10:44:00.000Z","key":1486637040000,"doc_count":11},{"key_as_string":"2017-02-09T10:45:00.000Z","key":1486637100000,"doc_count":14},{"key_as_string":"2017-02-09T10:46:00.000Z","key":1486637160000,"doc_count":15},{"key_as_string":"2017-02-09T10:47:00.000Z","key":1486637220000,"doc_count":14},{"key_as_string":"2017-02-09T10:48:00.000Z","key":1486637280000,"doc_count":13},{"key_as_string":"2017-02-09T10:49:00.000Z","key":1486637340000,"doc_count":16},{"key_as_string":"2017-02-09T10:50:00.000Z","key":1486637400000,"doc_count":11},{"key_as_string":"2017-02-09T10:51:00.000Z","key":1486637460000,"doc_count":15},{"key_as_string":"2017-02-09T10:52:00.000Z","key":1486637520000,"doc_count":16},{"key_as_string":"2017-02-09T10:53:00.000Z","key":1486637580000,"doc_count":14},{"key_as_string":"2017-02-09T10:54:00.000Z","key":1486637640000,"doc_count":13},{"key_as_string":"2017-02-09T10:55:00.000Z","key":1486637700000,"doc_count":12},{"key_as_string":"2017-02-09T10:56:00.000Z","key":1486637760000,"doc_count":14},{"key_as_string":"2017-02-09T10:57:00.000Z","key":1486637820000,"doc_count":14},{"key_as_string":"2017-02-09T10:58:00.000Z","key":1486637880000,"doc_count":15},{"key_as_string":"2017-02-09T10:59:00.000Z","key":1486637940000,"doc_count":11},{"key_as_string":"2017-02-09T11:00:00.000Z","key":1486638000000,"doc_count":14},{"key_as_string":"2017-02-09T11:01:00.000Z","key":1486638060000,"doc_count":12},{"key_as_string":"2017-02-09T11:02:00.000Z","key":1486638120000,"doc_count":17},{"key_as_string":"2017-02-09T11:03:00.000Z","key":1486638180000,"doc_count":10},{"key_as_string":"2017-02-09T11:04:00.000Z","key":1486638240000,"doc_count":14},{"key_as_string":"2017-02-09T11:05:00.000Z","key":1486638300000,"doc_count":13},{"key_as_string":"2017-02-09T11:06:00.000Z","key":1486638360000,"doc_count":11},{"key_as_string":"2017-02-09T11:07:00.000Z","key":1486638420000,"doc_count":14},{"key_as_string":"2017-02-09T11:08:00.000Z","key":1486638480000,"doc_count":8},{"key_as_string":"2017-02-09T11:09:00.000Z","key":1486638540000,"doc_count":20},{"key_as_string":"2017-02-09T11:10:00.000Z","key":1486638600000,"doc_count":15},{"key_as_string":"2017-02-09T11:11:00.000Z","key":1486638660000,"doc_count":17},{"key_as_string":"2017-02-09T11:12:00.000Z","key":1486638720000,"doc_count":14},{"key_as_string":"2017-02-09T11:13:00.000Z","key":1486638780000,"doc_count":12},{"key_as_string":"2017-02-09T11:14:00.000Z","key":1486638840000,"doc_count":12},{"key_as_string":"2017-02-09T11:15:00.000Z","key":1486638900000,"doc_count":18},{"key_as_string":"2017-02-09T11:16:00.000Z","key":1486638960000,"doc_count":17},{"key_as_string":"2017-02-09T11:17:00.000Z","key":1486639020000,"doc_count":16},{"key_as_string":"2017-02-09T11:18:00.000Z","key":1486639080000,"doc_count":11},{"key_as_string":"2017-02-09T11:19:00.000Z","key":1486639140000,"doc_count":14},{"key_as_string":"2017-02-09T11:20:00.000Z","key":1486639200000,"doc_count":17},{"key_as_string":"2017-02-09T11:21:00.000Z","key":1486639260000,"doc_count":16},{"key_as_string":"2017-02-09T11:22:00.000Z","key":1486639320000,"doc_count":13},{"key_as_string":"2017-02-09T11:23:00.000Z","key":1486639380000,"doc_count":15},{"key_as_string":"2017-02-09T11:24:00.000Z","key":1486639440000,"doc_count":11},{"key_as_string":"2017-02-09T11:25:00.000Z","key":1486639500000,"doc_count":12},{"key_as_string":"2017-02-09T11:26:00.000Z","key":1486639560000,"doc_count":20},{"key_as_string":"2017-02-09T11:27:00.000Z","key":1486639620000,"doc_count":13},{"key_as_string":"2017-02-09T11:28:00.000Z","key":1486639680000,"doc_count":15},{"key_as_string":"2017-02-09T11:29:00.000Z","key":1486639740000,"doc_count":19},{"key_as_string":"2017-02-09T11:30:00.000Z","key":1486639800000,"doc_count":12},{"key_as_string":"2017-02-09T11:31:00.000Z","key":1486639860000,"doc_count":12},{"key_as_string":"2017-02-09T11:32:00.000Z","key":1486639920000,"doc_count":13},{"key_as_string":"2017-02-09T11:33:00.000Z","key":1486639980000,"doc_count":15},{"key_as_string":"2017-02-09T11:34:00.000Z","key":1486640040000,"doc_count":14},{"key_as_string":"2017-02-09T11:35:00.000Z","key":1486640100000,"doc_count":16},{"key_as_string":"2017-02-09T11:36:00.000Z","key":1486640160000,"doc_count":18},{"key_as_string":"2017-02-09T11:37:00.000Z","key":1486640220000,"doc_count":13},{"key_as_string":"2017-02-09T11:38:00.000Z","key":1486640280000,"doc_count":11},{"key_as_string":"2017-02-09T11:39:00.000Z","key":1486640340000,"doc_count":18},{"key_as_string":"2017-02-09T11:40:00.000Z","key":1486640400000,"doc_count":10},{"key_as_string":"2017-02-09T11:41:00.000Z","key":1486640460000,"doc_count":16},{"key_as_string":"2017-02-09T11:42:00.000Z","key":1486640520000,"doc_count":16},{"key_as_string":"2017-02-09T11:43:00.000Z","key":1486640580000,"doc_count":10},{"key_as_string":"2017-02-09T11:44:00.000Z","key":1486640640000,"doc_count":8},{"key_as_string":"2017-02-09T11:45:00.000Z","key":1486640700000,"doc_count":17},{"key_as_string":"2017-02-09T11:46:00.000Z","key":1486640760000,"doc_count":15},{"key_as_string":"2017-02-09T11:47:00.000Z","key":1486640820000,"doc_count":11},{"key_as_string":"2017-02-09T11:48:00.000Z","key":1486640880000,"doc_count":14},{"key_as_string":"2017-02-09T11:49:00.000Z","key":1486640940000,"doc_count":16},{"key_as_string":"2017-02-09T11:50:00.000Z","key":1486641000000,"doc_count":15},{"key_as_string":"2017-02-09T11:51:00.000Z","key":1486641060000,"doc_count":16},{"key_as_string":"2017-02-09T11:52:00.000Z","key":1486641120000,"doc_count":19},{"key_as_string":"2017-02-09T11:53:00.000Z","key":1486641180000,"doc_count":14},{"key_as_string":"2017-02-09T11:54:00.000Z","key":1486641240000,"doc_count":11},{"key_as_string":"2017-02-09T11:55:00.000Z","key":1486641300000,"doc_count":7},{"key_as_string":"2017-02-09T11:56:00.000Z","key":1486641360000,"doc_count":15},{"key_as_string":"2017-02-09T11:57:00.000Z","key":1486641420000,"doc_count":10},{"key_as_string":"2017-02-09T11:58:00.000Z","key":1486641480000,"doc_count":11},{"key_as_string":"2017-02-09T11:59:00.000Z","key":1486641540000,"doc_count":16},{"key_as_string":"2017-02-09T12:00:00.000Z","key":1486641600000,"doc_count":18},{"key_as_string":"2017-02-09T12:01:00.000Z","key":1486641660000,"doc_count":11},{"key_as_string":"2017-02-09T12:02:00.000Z","key":1486641720000,"doc_count":16},{"key_as_string":"2017-02-09T12:03:00.000Z","key":1486641780000,"doc_count":12},{"key_as_string":"2017-02-09T12:04:00.000Z","key":1486641840000,"doc_count":14},{"key_as_string":"2017-02-09T12:05:00.000Z","key":1486641900000,"doc_count":13},{"key_as_string":"2017-02-09T12:06:00.000Z","key":1486641960000,"doc_count":11},{"key_as_string":"2017-02-09T12:07:00.000Z","key":1486642020000,"doc_count":19},{"key_as_string":"2017-02-09T12:08:00.000Z","key":1486642080000,"doc_count":19},{"key_as_string":"2017-02-09T12:09:00.000Z","key":1486642140000,"doc_count":9},{"key_as_string":"2017-02-09T12:10:00.000Z","key":1486642200000,"doc_count":16},{"key_as_string":"2017-02-09T12:11:00.000Z","key":1486642260000,"doc_count":14},{"key_as_string":"2017-02-09T12:12:00.000Z","key":1486642320000,"doc_count":12},{"key_as_string":"2017-02-09T12:13:00.000Z","key":1486642380000,"doc_count":19},{"key_as_string":"2017-02-09T12:14:00.000Z","key":1486642440000,"doc_count":16},{"key_as_string":"2017-02-09T12:15:00.000Z","key":1486642500000,"doc_count":15},{"key_as_string":"2017-02-09T12:16:00.000Z","key":1486642560000,"doc_count":13},{"key_as_string":"2017-02-09T12:17:00.000Z","key":1486642620000,"doc_count":10},{"key_as_string":"2017-02-09T12:18:00.000Z","key":1486642680000,"doc_count":13},{"key_as_string":"2017-02-09T12:19:00.000Z","key":1486642740000,"doc_count":13},{"key_as_string":"2017-02-09T12:20:00.000Z","key":1486642800000,"doc_count":11},{"key_as_string":"2017-02-09T12:21:00.000Z","key":1486642860000,"doc_count":19},{"key_as_string":"2017-02-09T12:22:00.000Z","key":1486642920000,"doc_count":13},{"key_as_string":"2017-02-09T12:23:00.000Z","key":1486642980000,"doc_count":17},{"key_as_string":"2017-02-09T12:24:00.000Z","key":1486643040000,"doc_count":10},{"key_as_string":"2017-02-09T12:25:00.000Z","key":1486643100000,"doc_count":12},{"key_as_string":"2017-02-09T12:26:00.000Z","key":1486643160000,"doc_count":13},{"key_as_string":"2017-02-09T12:27:00.000Z","key":1486643220000,"doc_count":12},{"key_as_string":"2017-02-09T12:28:00.000Z","key":1486643280000,"doc_count":16},{"key_as_string":"2017-02-09T12:29:00.000Z","key":1486643340000,"doc_count":15},{"key_as_string":"2017-02-09T12:30:00.000Z","key":1486643400000,"doc_count":14},{"key_as_string":"2017-02-09T12:31:00.000Z","key":1486643460000,"doc_count":18},{"key_as_string":"2017-02-09T12:32:00.000Z","key":1486643520000,"doc_count":10},{"key_as_string":"2017-02-09T12:33:00.000Z","key":1486643580000,"doc_count":13},{"key_as_string":"2017-02-09T12:34:00.000Z","key":1486643640000,"doc_count":9},{"key_as_string":"2017-02-09T12:35:00.000Z","key":1486643700000,"doc_count":16},{"key_as_string":"2017-02-09T12:36:00.000Z","key":1486643760000,"doc_count":12},{"key_as_string":"2017-02-09T12:37:00.000Z","key":1486643820000,"doc_count":13},{"key_as_string":"2017-02-09T12:38:00.000Z","key":1486643880000,"doc_count":16},{"key_as_string":"2017-02-09T12:39:00.000Z","key":1486643940000,"doc_count":9},{"key_as_string":"2017-02-09T12:40:00.000Z","key":1486644000000,"doc_count":12},{"key_as_string":"2017-02-09T12:41:00.000Z","key":1486644060000,"doc_count":11},{"key_as_string":"2017-02-09T12:42:00.000Z","key":1486644120000,"doc_count":16},{"key_as_string":"2017-02-09T12:43:00.000Z","key":1486644180000,"doc_count":13},{"key_as_string":"2017-02-09T12:44:00.000Z","key":1486644240000,"doc_count":15},{"key_as_string":"2017-02-09T12:45:00.000Z","key":1486644300000,"doc_count":13},{"key_as_string":"2017-02-09T12:46:00.000Z","key":1486644360000,"doc_count":15},{"key_as_string":"2017-02-09T12:47:00.000Z","key":1486644420000,"doc_count":13},{"key_as_string":"2017-02-09T12:48:00.000Z","key":1486644480000,"doc_count":9},{"key_as_string":"2017-02-09T12:49:00.000Z","key":1486644540000,"doc_count":18},{"key_as_string":"2017-02-09T12:50:00.000Z","key":1486644600000,"doc_count":13},{"key_as_string":"2017-02-09T12:51:00.000Z","key":1486644660000,"doc_count":13},{"key_as_string":"2017-02-09T12:52:00.000Z","key":1486644720000,"doc_count":13},{"key_as_string":"2017-02-09T12:53:00.000Z","key":1486644780000,"doc_count":11},{"key_as_string":"2017-02-09T12:54:00.000Z","key":1486644840000,"doc_count":19},{"key_as_string":"2017-02-09T12:55:00.000Z","key":1486644900000,"doc_count":12},{"key_as_string":"2017-02-09T12:56:00.000Z","key":1486644960000,"doc_count":15},{"key_as_string":"2017-02-09T12:57:00.000Z","key":1486645020000,"doc_count":14},{"key_as_string":"2017-02-09T12:58:00.000Z","key":1486645080000,"doc_count":17},{"key_as_string":"2017-02-09T12:59:00.000Z","key":1486645140000,"doc_count":12},{"key_as_string":"2017-02-09T13:00:00.000Z","key":1486645200000,"doc_count":17},{"key_as_string":"2017-02-09T13:01:00.000Z","key":1486645260000,"doc_count":13},{"key_as_string":"2017-02-09T13:02:00.000Z","key":1486645320000,"doc_count":12},{"key_as_string":"2017-02-09T13:03:00.000Z","key":1486645380000,"doc_count":11},{"key_as_string":"2017-02-09T13:04:00.000Z","key":1486645440000,"doc_count":14},{"key_as_string":"2017-02-09T13:05:00.000Z","key":1486645500000,"doc_count":18},{"key_as_string":"2017-02-09T13:06:00.000Z","key":1486645560000,"doc_count":10},{"key_as_string":"2017-02-09T13:07:00.000Z","key":1486645620000,"doc_count":14},{"key_as_string":"2017-02-09T13:08:00.000Z","key":1486645680000,"doc_count":15},{"key_as_string":"2017-02-09T13:09:00.000Z","key":1486645740000,"doc_count":11},{"key_as_string":"2017-02-09T13:10:00.000Z","key":1486645800000,"doc_count":15},{"key_as_string":"2017-02-09T13:11:00.000Z","key":1486645860000,"doc_count":14},{"key_as_string":"2017-02-09T13:12:00.000Z","key":1486645920000,"doc_count":9},{"key_as_string":"2017-02-09T13:13:00.000Z","key":1486645980000,"doc_count":16},{"key_as_string":"2017-02-09T13:14:00.000Z","key":1486646040000,"doc_count":16},{"key_as_string":"2017-02-09T13:15:00.000Z","key":1486646100000,"doc_count":13},{"key_as_string":"2017-02-09T13:16:00.000Z","key":1486646160000,"doc_count":9},{"key_as_string":"2017-02-09T13:17:00.000Z","key":1486646220000,"doc_count":11},{"key_as_string":"2017-02-09T13:18:00.000Z","key":1486646280000,"doc_count":14},{"key_as_string":"2017-02-09T13:19:00.000Z","key":1486646340000,"doc_count":15},{"key_as_string":"2017-02-09T13:20:00.000Z","key":1486646400000,"doc_count":16},{"key_as_string":"2017-02-09T13:21:00.000Z","key":1486646460000,"doc_count":9},{"key_as_string":"2017-02-09T13:22:00.000Z","key":1486646520000,"doc_count":16},{"key_as_string":"2017-02-09T13:23:00.000Z","key":1486646580000,"doc_count":13},{"key_as_string":"2017-02-09T13:24:00.000Z","key":1486646640000,"doc_count":11},{"key_as_string":"2017-02-09T13:25:00.000Z","key":1486646700000,"doc_count":13},{"key_as_string":"2017-02-09T13:26:00.000Z","key":1486646760000,"doc_count":10},{"key_as_string":"2017-02-09T13:27:00.000Z","key":1486646820000,"doc_count":18},{"key_as_string":"2017-02-09T13:28:00.000Z","key":1486646880000,"doc_count":13},{"key_as_string":"2017-02-09T13:29:00.000Z","key":1486646940000,"doc_count":13},{"key_as_string":"2017-02-09T13:30:00.000Z","key":1486647000000,"doc_count":18},{"key_as_string":"2017-02-09T13:31:00.000Z","key":1486647060000,"doc_count":10},{"key_as_string":"2017-02-09T13:32:00.000Z","key":1486647120000,"doc_count":15},{"key_as_string":"2017-02-09T13:33:00.000Z","key":1486647180000,"doc_count":15},{"key_as_string":"2017-02-09T13:34:00.000Z","key":1486647240000,"doc_count":18},{"key_as_string":"2017-02-09T13:35:00.000Z","key":1486647300000,"doc_count":15},{"key_as_string":"2017-02-09T13:36:00.000Z","key":1486647360000,"doc_count":20},{"key_as_string":"2017-02-09T13:37:00.000Z","key":1486647420000,"doc_count":13},{"key_as_string":"2017-02-09T13:38:00.000Z","key":1486647480000,"doc_count":15},{"key_as_string":"2017-02-09T13:39:00.000Z","key":1486647540000,"doc_count":15},{"key_as_string":"2017-02-09T13:40:00.000Z","key":1486647600000,"doc_count":16},{"key_as_string":"2017-02-09T13:41:00.000Z","key":1486647660000,"doc_count":7},{"key_as_string":"2017-02-09T13:42:00.000Z","key":1486647720000,"doc_count":17},{"key_as_string":"2017-02-09T13:43:00.000Z","key":1486647780000,"doc_count":12},{"key_as_string":"2017-02-09T13:44:00.000Z","key":1486647840000,"doc_count":15},{"key_as_string":"2017-02-09T13:45:00.000Z","key":1486647900000,"doc_count":16},{"key_as_string":"2017-02-09T13:46:00.000Z","key":1486647960000,"doc_count":14},{"key_as_string":"2017-02-09T13:47:00.000Z","key":1486648020000,"doc_count":18},{"key_as_string":"2017-02-09T13:48:00.000Z","key":1486648080000,"doc_count":17},{"key_as_string":"2017-02-09T13:49:00.000Z","key":1486648140000,"doc_count":16},{"key_as_string":"2017-02-09T13:50:00.000Z","key":1486648200000,"doc_count":9},{"key_as_string":"2017-02-09T13:51:00.000Z","key":1486648260000,"doc_count":14},{"key_as_string":"2017-02-09T13:52:00.000Z","key":1486648320000,"doc_count":14},{"key_as_string":"2017-02-09T13:53:00.000Z","key":1486648380000,"doc_count":20},{"key_as_string":"2017-02-09T13:54:00.000Z","key":1486648440000,"doc_count":9},{"key_as_string":"2017-02-09T13:55:00.000Z","key":1486648500000,"doc_count":12},{"key_as_string":"2017-02-09T13:56:00.000Z","key":1486648560000,"doc_count":15},{"key_as_string":"2017-02-09T13:57:00.000Z","key":1486648620000,"doc_count":11},{"key_as_string":"2017-02-09T13:58:00.000Z","key":1486648680000,"doc_count":15},{"key_as_string":"2017-02-09T13:59:00.000Z","key":1486648740000,"doc_count":13},{"key_as_string":"2017-02-09T14:00:00.000Z","key":1486648800000,"doc_count":10},{"key_as_string":"2017-02-09T14:01:00.000Z","key":1486648860000,"doc_count":14},{"key_as_string":"2017-02-09T14:02:00.000Z","key":1486648920000,"doc_count":14},{"key_as_string":"2017-02-09T14:03:00.000Z","key":1486648980000,"doc_count":16},{"key_as_string":"2017-02-09T14:04:00.000Z","key":1486649040000,"doc_count":12},{"key_as_string":"2017-02-09T14:05:00.000Z","key":1486649100000,"doc_count":9},{"key_as_string":"2017-02-09T14:06:00.000Z","key":1486649160000,"doc_count":11},{"key_as_string":"2017-02-09T14:07:00.000Z","key":1486649220000,"doc_count":15},{"key_as_string":"2017-02-09T14:08:00.000Z","key":1486649280000,"doc_count":12},{"key_as_string":"2017-02-09T14:09:00.000Z","key":1486649340000,"doc_count":19},{"key_as_string":"2017-02-09T14:10:00.000Z","key":1486649400000,"doc_count":14},{"key_as_string":"2017-02-09T14:11:00.000Z","key":1486649460000,"doc_count":17},{"key_as_string":"2017-02-09T14:12:00.000Z","key":1486649520000,"doc_count":7},{"key_as_string":"2017-02-09T14:13:00.000Z","key":1486649580000,"doc_count":20},{"key_as_string":"2017-02-09T14:14:00.000Z","key":1486649640000,"doc_count":9},{"key_as_string":"2017-02-09T14:15:00.000Z","key":1486649700000,"doc_count":17},{"key_as_string":"2017-02-09T14:16:00.000Z","key":1486649760000,"doc_count":16},{"key_as_string":"2017-02-09T14:17:00.000Z","key":1486649820000,"doc_count":15},{"key_as_string":"2017-02-09T14:18:00.000Z","key":1486649880000,"doc_count":15},{"key_as_string":"2017-02-09T14:19:00.000Z","key":1486649940000,"doc_count":12},{"key_as_string":"2017-02-09T14:20:00.000Z","key":1486650000000,"doc_count":8},{"key_as_string":"2017-02-09T14:21:00.000Z","key":1486650060000,"doc_count":17},{"key_as_string":"2017-02-09T14:22:00.000Z","key":1486650120000,"doc_count":10},{"key_as_string":"2017-02-09T14:23:00.000Z","key":1486650180000,"doc_count":11},{"key_as_string":"2017-02-09T14:24:00.000Z","key":1486650240000,"doc_count":11},{"key_as_string":"2017-02-09T14:25:00.000Z","key":1486650300000,"doc_count":14},{"key_as_string":"2017-02-09T14:26:00.000Z","key":1486650360000,"doc_count":16},{"key_as_string":"2017-02-09T14:27:00.000Z","key":1486650420000,"doc_count":12},{"key_as_string":"2017-02-09T14:28:00.000Z","key":1486650480000,"doc_count":14},{"key_as_string":"2017-02-09T14:29:00.000Z","key":1486650540000,"doc_count":11},{"key_as_string":"2017-02-09T14:30:00.000Z","key":1486650600000,"doc_count":13},{"key_as_string":"2017-02-09T14:31:00.000Z","key":1486650660000,"doc_count":13},{"key_as_string":"2017-02-09T14:32:00.000Z","key":1486650720000,"doc_count":19},{"key_as_string":"2017-02-09T14:33:00.000Z","key":1486650780000,"doc_count":13},{"key_as_string":"2017-02-09T14:34:00.000Z","key":1486650840000,"doc_count":15},{"key_as_string":"2017-02-09T14:35:00.000Z","key":1486650900000,"doc_count":11},{"key_as_string":"2017-02-09T14:36:00.000Z","key":1486650960000,"doc_count":15},{"key_as_string":"2017-02-09T14:37:00.000Z","key":1486651020000,"doc_count":12},{"key_as_string":"2017-02-09T14:38:00.000Z","key":1486651080000,"doc_count":11},{"key_as_string":"2017-02-09T14:39:00.000Z","key":1486651140000,"doc_count":18},{"key_as_string":"2017-02-09T14:40:00.000Z","key":1486651200000,"doc_count":9},{"key_as_string":"2017-02-09T14:41:00.000Z","key":1486651260000,"doc_count":15},{"key_as_string":"2017-02-09T14:42:00.000Z","key":1486651320000,"doc_count":12},{"key_as_string":"2017-02-09T14:43:00.000Z","key":1486651380000,"doc_count":15},{"key_as_string":"2017-02-09T14:44:00.000Z","key":1486651440000,"doc_count":12},{"key_as_string":"2017-02-09T14:45:00.000Z","key":1486651500000,"doc_count":13},{"key_as_string":"2017-02-09T14:46:00.000Z","key":1486651560000,"doc_count":12},{"key_as_string":"2017-02-09T14:47:00.000Z","key":1486651620000,"doc_count":14},{"key_as_string":"2017-02-09T14:48:00.000Z","key":1486651680000,"doc_count":13},{"key_as_string":"2017-02-09T14:49:00.000Z","key":1486651740000,"doc_count":17},{"key_as_string":"2017-02-09T14:50:00.000Z","key":1486651800000,"doc_count":9},{"key_as_string":"2017-02-09T14:51:00.000Z","key":1486651860000,"doc_count":12},{"key_as_string":"2017-02-09T14:52:00.000Z","key":1486651920000,"doc_count":16},{"key_as_string":"2017-02-09T14:53:00.000Z","key":1486651980000,"doc_count":19},{"key_as_string":"2017-02-09T14:54:00.000Z","key":1486652040000,"doc_count":15},{"key_as_string":"2017-02-09T14:55:00.000Z","key":1486652100000,"doc_count":11},{"key_as_string":"2017-02-09T14:56:00.000Z","key":1486652160000,"doc_count":15},{"key_as_string":"2017-02-09T14:57:00.000Z","key":1486652220000,"doc_count":11},{"key_as_string":"2017-02-09T14:58:00.000Z","key":1486652280000,"doc_count":12},{"key_as_string":"2017-02-09T14:59:00.000Z","key":1486652340000,"doc_count":11},{"key_as_string":"2017-02-09T15:00:00.000Z","key":1486652400000,"doc_count":13},{"key_as_string":"2017-02-09T15:01:00.000Z","key":1486652460000,"doc_count":10},{"key_as_string":"2017-02-09T15:02:00.000Z","key":1486652520000,"doc_count":17},{"key_as_string":"2017-02-09T15:03:00.000Z","key":1486652580000,"doc_count":12},{"key_as_string":"2017-02-09T15:04:00.000Z","key":1486652640000,"doc_count":13},{"key_as_string":"2017-02-09T15:05:00.000Z","key":1486652700000,"doc_count":13},{"key_as_string":"2017-02-09T15:06:00.000Z","key":1486652760000,"doc_count":15},{"key_as_string":"2017-02-09T15:07:00.000Z","key":1486652820000,"doc_count":12},{"key_as_string":"2017-02-09T15:08:00.000Z","key":1486652880000,"doc_count":12},{"key_as_string":"2017-02-09T15:09:00.000Z","key":1486652940000,"doc_count":13},{"key_as_string":"2017-02-09T15:10:00.000Z","key":1486653000000,"doc_count":15},{"key_as_string":"2017-02-09T15:11:00.000Z","key":1486653060000,"doc_count":20},{"key_as_string":"2017-02-09T15:12:00.000Z","key":1486653120000,"doc_count":10},{"key_as_string":"2017-02-09T15:13:00.000Z","key":1486653180000,"doc_count":12},{"key_as_string":"2017-02-09T15:14:00.000Z","key":1486653240000,"doc_count":8},{"key_as_string":"2017-02-09T15:15:00.000Z","key":1486653300000,"doc_count":18},{"key_as_string":"2017-02-09T15:16:00.000Z","key":1486653360000,"doc_count":16},{"key_as_string":"2017-02-09T15:17:00.000Z","key":1486653420000,"doc_count":13},{"key_as_string":"2017-02-09T15:18:00.000Z","key":1486653480000,"doc_count":14},{"key_as_string":"2017-02-09T15:19:00.000Z","key":1486653540000,"doc_count":14},{"key_as_string":"2017-02-09T15:20:00.000Z","key":1486653600000,"doc_count":14},{"key_as_string":"2017-02-09T15:21:00.000Z","key":1486653660000,"doc_count":11},{"key_as_string":"2017-02-09T15:22:00.000Z","key":1486653720000,"doc_count":13},{"key_as_string":"2017-02-09T15:23:00.000Z","key":1486653780000,"doc_count":11},{"key_as_string":"2017-02-09T15:24:00.000Z","key":1486653840000,"doc_count":14},{"key_as_string":"2017-02-09T15:25:00.000Z","key":1486653900000,"doc_count":15},{"key_as_string":"2017-02-09T15:26:00.000Z","key":1486653960000,"doc_count":12},{"key_as_string":"2017-02-09T15:27:00.000Z","key":1486654020000,"doc_count":9},{"key_as_string":"2017-02-09T15:28:00.000Z","key":1486654080000,"doc_count":17},{"key_as_string":"2017-02-09T15:29:00.000Z","key":1486654140000,"doc_count":10},{"key_as_string":"2017-02-09T15:30:00.000Z","key":1486654200000,"doc_count":15},{"key_as_string":"2017-02-09T15:31:00.000Z","key":1486654260000,"doc_count":13},{"key_as_string":"2017-02-09T15:32:00.000Z","key":1486654320000,"doc_count":10},{"key_as_string":"2017-02-09T15:33:00.000Z","key":1486654380000,"doc_count":19},{"key_as_string":"2017-02-09T15:34:00.000Z","key":1486654440000,"doc_count":13},{"key_as_string":"2017-02-09T15:35:00.000Z","key":1486654500000,"doc_count":13},{"key_as_string":"2017-02-09T15:36:00.000Z","key":1486654560000,"doc_count":11},{"key_as_string":"2017-02-09T15:37:00.000Z","key":1486654620000,"doc_count":10},{"key_as_string":"2017-02-09T15:38:00.000Z","key":1486654680000,"doc_count":14},{"key_as_string":"2017-02-09T15:39:00.000Z","key":1486654740000,"doc_count":19},{"key_as_string":"2017-02-09T15:40:00.000Z","key":1486654800000,"doc_count":14},{"key_as_string":"2017-02-09T15:41:00.000Z","key":1486654860000,"doc_count":14},{"key_as_string":"2017-02-09T15:42:00.000Z","key":1486654920000,"doc_count":11},{"key_as_string":"2017-02-09T15:43:00.000Z","key":1486654980000,"doc_count":12},{"key_as_string":"2017-02-09T15:44:00.000Z","key":1486655040000,"doc_count":10},{"key_as_string":"2017-02-09T15:45:00.000Z","key":1486655100000,"doc_count":14},{"key_as_string":"2017-02-09T15:46:00.000Z","key":1486655160000,"doc_count":13},{"key_as_string":"2017-02-09T15:47:00.000Z","key":1486655220000,"doc_count":10},{"key_as_string":"2017-02-09T15:48:00.000Z","key":1486655280000,"doc_count":12},{"key_as_string":"2017-02-09T15:49:00.000Z","key":1486655340000,"doc_count":18},{"key_as_string":"2017-02-09T15:50:00.000Z","key":1486655400000,"doc_count":18},{"key_as_string":"2017-02-09T15:51:00.000Z","key":1486655460000,"doc_count":12},{"key_as_string":"2017-02-09T15:52:00.000Z","key":1486655520000,"doc_count":12},{"key_as_string":"2017-02-09T15:53:00.000Z","key":1486655580000,"doc_count":18},{"key_as_string":"2017-02-09T15:54:00.000Z","key":1486655640000,"doc_count":9},{"key_as_string":"2017-02-09T15:55:00.000Z","key":1486655700000,"doc_count":11},{"key_as_string":"2017-02-09T15:56:00.000Z","key":1486655760000,"doc_count":14},{"key_as_string":"2017-02-09T15:57:00.000Z","key":1486655820000,"doc_count":14},{"key_as_string":"2017-02-09T15:58:00.000Z","key":1486655880000,"doc_count":15},{"key_as_string":"2017-02-09T15:59:00.000Z","key":1486655940000,"doc_count":13},{"key_as_string":"2017-02-09T16:00:00.000Z","key":1486656000000,"doc_count":13},{"key_as_string":"2017-02-09T16:01:00.000Z","key":1486656060000,"doc_count":11},{"key_as_string":"2017-02-09T16:02:00.000Z","key":1486656120000,"doc_count":10},{"key_as_string":"2017-02-09T16:03:00.000Z","key":1486656180000,"doc_count":18},{"key_as_string":"2017-02-09T16:04:00.000Z","key":1486656240000,"doc_count":6},{"key_as_string":"2017-02-09T16:05:00.000Z","key":1486656300000,"doc_count":14},{"key_as_string":"2017-02-09T16:06:00.000Z","key":1486656360000,"doc_count":16},{"key_as_string":"2017-02-09T16:07:00.000Z","key":1486656420000,"doc_count":12},{"key_as_string":"2017-02-09T16:08:00.000Z","key":1486656480000,"doc_count":15},{"key_as_string":"2017-02-09T16:09:00.000Z","key":1486656540000,"doc_count":13},{"key_as_string":"2017-02-09T16:10:00.000Z","key":1486656600000,"doc_count":13},{"key_as_string":"2017-02-09T16:11:00.000Z","key":1486656660000,"doc_count":7},{"key_as_string":"2017-02-09T16:12:00.000Z","key":1486656720000,"doc_count":16},{"key_as_string":"2017-02-09T16:13:00.000Z","key":1486656780000,"doc_count":10},{"key_as_string":"2017-02-09T16:14:00.000Z","key":1486656840000,"doc_count":52},{"key_as_string":"2017-02-09T16:15:00.000Z","key":1486656900000,"doc_count":130},{"key_as_string":"2017-02-09T16:16:00.000Z","key":1486656960000,"doc_count":17},{"key_as_string":"2017-02-09T16:17:00.000Z","key":1486657020000,"doc_count":13},{"key_as_string":"2017-02-09T16:18:00.000Z","key":1486657080000,"doc_count":10},{"key_as_string":"2017-02-09T16:19:00.000Z","key":1486657140000,"doc_count":9},{"key_as_string":"2017-02-09T16:20:00.000Z","key":1486657200000,"doc_count":9},{"key_as_string":"2017-02-09T16:21:00.000Z","key":1486657260000,"doc_count":17},{"key_as_string":"2017-02-09T16:22:00.000Z","key":1486657320000,"doc_count":13},{"key_as_string":"2017-02-09T16:23:00.000Z","key":1486657380000,"doc_count":10},{"key_as_string":"2017-02-09T16:24:00.000Z","key":1486657440000,"doc_count":11},{"key_as_string":"2017-02-09T16:25:00.000Z","key":1486657500000,"doc_count":9},{"key_as_string":"2017-02-09T16:26:00.000Z","key":1486657560000,"doc_count":12},{"key_as_string":"2017-02-09T16:27:00.000Z","key":1486657620000,"doc_count":15},{"key_as_string":"2017-02-09T16:28:00.000Z","key":1486657680000,"doc_count":8},{"key_as_string":"2017-02-09T16:29:00.000Z","key":1486657740000,"doc_count":12},{"key_as_string":"2017-02-09T16:30:00.000Z","key":1486657800000,"doc_count":12},{"key_as_string":"2017-02-09T16:31:00.000Z","key":1486657860000,"doc_count":15},{"key_as_string":"2017-02-09T16:32:00.000Z","key":1486657920000,"doc_count":10},{"key_as_string":"2017-02-09T16:33:00.000Z","key":1486657980000,"doc_count":13},{"key_as_string":"2017-02-09T16:34:00.000Z","key":1486658040000,"doc_count":13},{"key_as_string":"2017-02-09T16:35:00.000Z","key":1486658100000,"doc_count":14},{"key_as_string":"2017-02-09T16:36:00.000Z","key":1486658160000,"doc_count":14},{"key_as_string":"2017-02-09T16:37:00.000Z","key":1486658220000,"doc_count":11},{"key_as_string":"2017-02-09T16:38:00.000Z","key":1486658280000,"doc_count":12},{"key_as_string":"2017-02-09T16:39:00.000Z","key":1486658340000,"doc_count":11},{"key_as_string":"2017-02-09T16:40:00.000Z","key":1486658400000,"doc_count":10},{"key_as_string":"2017-02-09T16:41:00.000Z","key":1486658460000,"doc_count":10},{"key_as_string":"2017-02-09T16:42:00.000Z","key":1486658520000,"doc_count":13},{"key_as_string":"2017-02-09T16:43:00.000Z","key":1486658580000,"doc_count":16},{"key_as_string":"2017-02-09T16:44:00.000Z","key":1486658640000,"doc_count":14},{"key_as_string":"2017-02-09T16:45:00.000Z","key":1486658700000,"doc_count":15},{"key_as_string":"2017-02-09T16:46:00.000Z","key":1486658760000,"doc_count":13},{"key_as_string":"2017-02-09T16:47:00.000Z","key":1486658820000,"doc_count":14},{"key_as_string":"2017-02-09T16:48:00.000Z","key":1486658880000,"doc_count":9},{"key_as_string":"2017-02-09T16:49:00.000Z","key":1486658940000,"doc_count":15},{"key_as_string":"2017-02-09T16:50:00.000Z","key":1486659000000,"doc_count":13},{"key_as_string":"2017-02-09T16:51:00.000Z","key":1486659060000,"doc_count":15},{"key_as_string":"2017-02-09T16:52:00.000Z","key":1486659120000,"doc_count":13},{"key_as_string":"2017-02-09T16:53:00.000Z","key":1486659180000,"doc_count":16},{"key_as_string":"2017-02-09T16:54:00.000Z","key":1486659240000,"doc_count":11},{"key_as_string":"2017-02-09T16:55:00.000Z","key":1486659300000,"doc_count":18},{"key_as_string":"2017-02-09T16:56:00.000Z","key":1486659360000,"doc_count":9},{"key_as_string":"2017-02-09T16:57:00.000Z","key":1486659420000,"doc_count":19},{"key_as_string":"2017-02-09T16:58:00.000Z","key":1486659480000,"doc_count":8},{"key_as_string":"2017-02-09T16:59:00.000Z","key":1486659540000,"doc_count":12},{"key_as_string":"2017-02-09T17:00:00.000Z","key":1486659600000,"doc_count":17},{"key_as_string":"2017-02-09T17:01:00.000Z","key":1486659660000,"doc_count":14},{"key_as_string":"2017-02-09T17:02:00.000Z","key":1486659720000,"doc_count":13},{"key_as_string":"2017-02-09T17:03:00.000Z","key":1486659780000,"doc_count":9},{"key_as_string":"2017-02-09T17:04:00.000Z","key":1486659840000,"doc_count":14},{"key_as_string":"2017-02-09T17:05:00.000Z","key":1486659900000,"doc_count":15},{"key_as_string":"2017-02-09T17:06:00.000Z","key":1486659960000,"doc_count":13},{"key_as_string":"2017-02-09T17:07:00.000Z","key":1486660020000,"doc_count":9},{"key_as_string":"2017-02-09T17:08:00.000Z","key":1486660080000,"doc_count":8},{"key_as_string":"2017-02-09T17:09:00.000Z","key":1486660140000,"doc_count":11},{"key_as_string":"2017-02-09T17:10:00.000Z","key":1486660200000,"doc_count":11},{"key_as_string":"2017-02-09T17:11:00.000Z","key":1486660260000,"doc_count":12},{"key_as_string":"2017-02-09T17:12:00.000Z","key":1486660320000,"doc_count":12},{"key_as_string":"2017-02-09T17:13:00.000Z","key":1486660380000,"doc_count":9},{"key_as_string":"2017-02-09T17:14:00.000Z","key":1486660440000,"doc_count":15},{"key_as_string":"2017-02-09T17:15:00.000Z","key":1486660500000,"doc_count":11},{"key_as_string":"2017-02-09T17:16:00.000Z","key":1486660560000,"doc_count":11},{"key_as_string":"2017-02-09T17:17:00.000Z","key":1486660620000,"doc_count":11},{"key_as_string":"2017-02-09T17:18:00.000Z","key":1486660680000,"doc_count":11},{"key_as_string":"2017-02-09T17:19:00.000Z","key":1486660740000,"doc_count":15},{"key_as_string":"2017-02-09T17:20:00.000Z","key":1486660800000,"doc_count":7},{"key_as_string":"2017-02-09T17:21:00.000Z","key":1486660860000,"doc_count":15},{"key_as_string":"2017-02-09T17:22:00.000Z","key":1486660920000,"doc_count":13},{"key_as_string":"2017-02-09T17:23:00.000Z","key":1486660980000,"doc_count":10},{"key_as_string":"2017-02-09T17:24:00.000Z","key":1486661040000,"doc_count":18},{"key_as_string":"2017-02-09T17:25:00.000Z","key":1486661100000,"doc_count":9},{"key_as_string":"2017-02-09T17:26:00.000Z","key":1486661160000,"doc_count":12},{"key_as_string":"2017-02-09T17:27:00.000Z","key":1486661220000,"doc_count":8},{"key_as_string":"2017-02-09T17:28:00.000Z","key":1486661280000,"doc_count":11},{"key_as_string":"2017-02-09T17:29:00.000Z","key":1486661340000,"doc_count":10},{"key_as_string":"2017-02-09T17:30:00.000Z","key":1486661400000,"doc_count":19},{"key_as_string":"2017-02-09T17:31:00.000Z","key":1486661460000,"doc_count":10},{"key_as_string":"2017-02-09T17:32:00.000Z","key":1486661520000,"doc_count":11},{"key_as_string":"2017-02-09T17:33:00.000Z","key":1486661580000,"doc_count":12},{"key_as_string":"2017-02-09T17:34:00.000Z","key":1486661640000,"doc_count":12},{"key_as_string":"2017-02-09T17:35:00.000Z","key":1486661700000,"doc_count":15},{"key_as_string":"2017-02-09T17:36:00.000Z","key":1486661760000,"doc_count":11},{"key_as_string":"2017-02-09T17:37:00.000Z","key":1486661820000,"doc_count":12},{"key_as_string":"2017-02-09T17:38:00.000Z","key":1486661880000,"doc_count":12},{"key_as_string":"2017-02-09T17:39:00.000Z","key":1486661940000,"doc_count":14},{"key_as_string":"2017-02-09T17:40:00.000Z","key":1486662000000,"doc_count":10},{"key_as_string":"2017-02-09T17:41:00.000Z","key":1486662060000,"doc_count":13},{"key_as_string":"2017-02-09T17:42:00.000Z","key":1486662120000,"doc_count":11},{"key_as_string":"2017-02-09T17:43:00.000Z","key":1486662180000,"doc_count":16},{"key_as_string":"2017-02-09T17:44:00.000Z","key":1486662240000,"doc_count":13},{"key_as_string":"2017-02-09T17:45:00.000Z","key":1486662300000,"doc_count":7},{"key_as_string":"2017-02-09T17:46:00.000Z","key":1486662360000,"doc_count":15},{"key_as_string":"2017-02-09T17:47:00.000Z","key":1486662420000,"doc_count":11},{"key_as_string":"2017-02-09T17:48:00.000Z","key":1486662480000,"doc_count":10},{"key_as_string":"2017-02-09T17:49:00.000Z","key":1486662540000,"doc_count":13},{"key_as_string":"2017-02-09T17:50:00.000Z","key":1486662600000,"doc_count":11},{"key_as_string":"2017-02-09T17:51:00.000Z","key":1486662660000,"doc_count":19},{"key_as_string":"2017-02-09T17:52:00.000Z","key":1486662720000,"doc_count":8},{"key_as_string":"2017-02-09T17:53:00.000Z","key":1486662780000,"doc_count":12},{"key_as_string":"2017-02-09T17:54:00.000Z","key":1486662840000,"doc_count":15},{"key_as_string":"2017-02-09T17:55:00.000Z","key":1486662900000,"doc_count":9},{"key_as_string":"2017-02-09T17:56:00.000Z","key":1486662960000,"doc_count":11},{"key_as_string":"2017-02-09T17:57:00.000Z","key":1486663020000,"doc_count":14},{"key_as_string":"2017-02-09T17:58:00.000Z","key":1486663080000,"doc_count":11},{"key_as_string":"2017-02-09T17:59:00.000Z","key":1486663140000,"doc_count":18},{"key_as_string":"2017-02-09T18:00:00.000Z","key":1486663200000,"doc_count":14},{"key_as_string":"2017-02-09T18:01:00.000Z","key":1486663260000,"doc_count":11},{"key_as_string":"2017-02-09T18:02:00.000Z","key":1486663320000,"doc_count":11},{"key_as_string":"2017-02-09T18:03:00.000Z","key":1486663380000,"doc_count":13},{"key_as_string":"2017-02-09T18:04:00.000Z","key":1486663440000,"doc_count":15},{"key_as_string":"2017-02-09T18:05:00.000Z","key":1486663500000,"doc_count":10},{"key_as_string":"2017-02-09T18:06:00.000Z","key":1486663560000,"doc_count":17},{"key_as_string":"2017-02-09T18:07:00.000Z","key":1486663620000,"doc_count":14},{"key_as_string":"2017-02-09T18:08:00.000Z","key":1486663680000,"doc_count":11},{"key_as_string":"2017-02-09T18:09:00.000Z","key":1486663740000,"doc_count":15},{"key_as_string":"2017-02-09T18:10:00.000Z","key":1486663800000,"doc_count":12},{"key_as_string":"2017-02-09T18:11:00.000Z","key":1486663860000,"doc_count":7},{"key_as_string":"2017-02-09T18:12:00.000Z","key":1486663920000,"doc_count":17},{"key_as_string":"2017-02-09T18:13:00.000Z","key":1486663980000,"doc_count":14},{"key_as_string":"2017-02-09T18:14:00.000Z","key":1486664040000,"doc_count":10},{"key_as_string":"2017-02-09T18:15:00.000Z","key":1486664100000,"doc_count":13},{"key_as_string":"2017-02-09T18:16:00.000Z","key":1486664160000,"doc_count":18},{"key_as_string":"2017-02-09T18:17:00.000Z","key":1486664220000,"doc_count":7},{"key_as_string":"2017-02-09T18:18:00.000Z","key":1486664280000,"doc_count":17},{"key_as_string":"2017-02-09T18:19:00.000Z","key":1486664340000,"doc_count":10},{"key_as_string":"2017-02-09T18:20:00.000Z","key":1486664400000,"doc_count":7},{"key_as_string":"2017-02-09T18:21:00.000Z","key":1486664460000,"doc_count":12},{"key_as_string":"2017-02-09T18:22:00.000Z","key":1486664520000,"doc_count":14},{"key_as_string":"2017-02-09T18:23:00.000Z","key":1486664580000,"doc_count":14},{"key_as_string":"2017-02-09T18:24:00.000Z","key":1486664640000,"doc_count":11},{"key_as_string":"2017-02-09T18:25:00.000Z","key":1486664700000,"doc_count":13},{"key_as_string":"2017-02-09T18:26:00.000Z","key":1486664760000,"doc_count":15},{"key_as_string":"2017-02-09T18:27:00.000Z","key":1486664820000,"doc_count":6},{"key_as_string":"2017-02-09T18:28:00.000Z","key":1486664880000,"doc_count":12},{"key_as_string":"2017-02-09T18:29:00.000Z","key":1486664940000,"doc_count":15},{"key_as_string":"2017-02-09T18:30:00.000Z","key":1486665000000,"doc_count":9},{"key_as_string":"2017-02-09T18:31:00.000Z","key":1486665060000,"doc_count":13},{"key_as_string":"2017-02-09T18:32:00.000Z","key":1486665120000,"doc_count":13},{"key_as_string":"2017-02-09T18:33:00.000Z","key":1486665180000,"doc_count":14},{"key_as_string":"2017-02-09T18:34:00.000Z","key":1486665240000,"doc_count":8},{"key_as_string":"2017-02-09T18:35:00.000Z","key":1486665300000,"doc_count":9},{"key_as_string":"2017-02-09T18:36:00.000Z","key":1486665360000,"doc_count":11},{"key_as_string":"2017-02-09T18:37:00.000Z","key":1486665420000,"doc_count":12},{"key_as_string":"2017-02-09T18:38:00.000Z","key":1486665480000,"doc_count":11},{"key_as_string":"2017-02-09T18:39:00.000Z","key":1486665540000,"doc_count":12},{"key_as_string":"2017-02-09T18:40:00.000Z","key":1486665600000,"doc_count":16},{"key_as_string":"2017-02-09T18:41:00.000Z","key":1486665660000,"doc_count":7},{"key_as_string":"2017-02-09T18:42:00.000Z","key":1486665720000,"doc_count":13},{"key_as_string":"2017-02-09T18:43:00.000Z","key":1486665780000,"doc_count":13},{"key_as_string":"2017-02-09T18:44:00.000Z","key":1486665840000,"doc_count":14},{"key_as_string":"2017-02-09T18:45:00.000Z","key":1486665900000,"doc_count":7},{"key_as_string":"2017-02-09T18:46:00.000Z","key":1486665960000,"doc_count":9},{"key_as_string":"2017-02-09T18:47:00.000Z","key":1486666020000,"doc_count":11},{"key_as_string":"2017-02-09T18:48:00.000Z","key":1486666080000,"doc_count":11},{"key_as_string":"2017-02-09T18:49:00.000Z","key":1486666140000,"doc_count":11},{"key_as_string":"2017-02-09T18:50:00.000Z","key":1486666200000,"doc_count":8},{"key_as_string":"2017-02-09T18:51:00.000Z","key":1486666260000,"doc_count":15},{"key_as_string":"2017-02-09T18:52:00.000Z","key":1486666320000,"doc_count":8},{"key_as_string":"2017-02-09T18:53:00.000Z","key":1486666380000,"doc_count":13},{"key_as_string":"2017-02-09T18:54:00.000Z","key":1486666440000,"doc_count":13},{"key_as_string":"2017-02-09T18:55:00.000Z","key":1486666500000,"doc_count":11},{"key_as_string":"2017-02-09T18:56:00.000Z","key":1486666560000,"doc_count":16},{"key_as_string":"2017-02-09T18:57:00.000Z","key":1486666620000,"doc_count":6},{"key_as_string":"2017-02-09T18:58:00.000Z","key":1486666680000,"doc_count":12},{"key_as_string":"2017-02-09T18:59:00.000Z","key":1486666740000,"doc_count":12},{"key_as_string":"2017-02-09T19:00:00.000Z","key":1486666800000,"doc_count":9},{"key_as_string":"2017-02-09T19:01:00.000Z","key":1486666860000,"doc_count":12},{"key_as_string":"2017-02-09T19:02:00.000Z","key":1486666920000,"doc_count":11},{"key_as_string":"2017-02-09T19:03:00.000Z","key":1486666980000,"doc_count":14},{"key_as_string":"2017-02-09T19:04:00.000Z","key":1486667040000,"doc_count":10},{"key_as_string":"2017-02-09T19:05:00.000Z","key":1486667100000,"doc_count":9},{"key_as_string":"2017-02-09T19:06:00.000Z","key":1486667160000,"doc_count":8},{"key_as_string":"2017-02-09T19:07:00.000Z","key":1486667220000,"doc_count":19},{"key_as_string":"2017-02-09T19:08:00.000Z","key":1486667280000,"doc_count":8},{"key_as_string":"2017-02-09T19:09:00.000Z","key":1486667340000,"doc_count":12},{"key_as_string":"2017-02-09T19:10:00.000Z","key":1486667400000,"doc_count":10},{"key_as_string":"2017-02-09T19:11:00.000Z","key":1486667460000,"doc_count":9},{"key_as_string":"2017-02-09T19:12:00.000Z","key":1486667520000,"doc_count":10},{"key_as_string":"2017-02-09T19:13:00.000Z","key":1486667580000,"doc_count":7},{"key_as_string":"2017-02-09T19:14:00.000Z","key":1486667640000,"doc_count":7},{"key_as_string":"2017-02-09T19:15:00.000Z","key":1486667700000,"doc_count":15},{"key_as_string":"2017-02-09T19:16:00.000Z","key":1486667760000,"doc_count":8},{"key_as_string":"2017-02-09T19:17:00.000Z","key":1486667820000,"doc_count":9},{"key_as_string":"2017-02-09T19:18:00.000Z","key":1486667880000,"doc_count":14},{"key_as_string":"2017-02-09T19:19:00.000Z","key":1486667940000,"doc_count":10},{"key_as_string":"2017-02-09T19:20:00.000Z","key":1486668000000,"doc_count":8},{"key_as_string":"2017-02-09T19:21:00.000Z","key":1486668060000,"doc_count":19},{"key_as_string":"2017-02-09T19:22:00.000Z","key":1486668120000,"doc_count":7},{"key_as_string":"2017-02-09T19:23:00.000Z","key":1486668180000,"doc_count":9},{"key_as_string":"2017-02-09T19:24:00.000Z","key":1486668240000,"doc_count":9},{"key_as_string":"2017-02-09T19:25:00.000Z","key":1486668300000,"doc_count":14},{"key_as_string":"2017-02-09T19:26:00.000Z","key":1486668360000,"doc_count":15},{"key_as_string":"2017-02-09T19:27:00.000Z","key":1486668420000,"doc_count":13},{"key_as_string":"2017-02-09T19:28:00.000Z","key":1486668480000,"doc_count":15},{"key_as_string":"2017-02-09T19:29:00.000Z","key":1486668540000,"doc_count":9},{"key_as_string":"2017-02-09T19:30:00.000Z","key":1486668600000,"doc_count":7},{"key_as_string":"2017-02-09T19:31:00.000Z","key":1486668660000,"doc_count":9},{"key_as_string":"2017-02-09T19:32:00.000Z","key":1486668720000,"doc_count":6},{"key_as_string":"2017-02-09T19:33:00.000Z","key":1486668780000,"doc_count":16},{"key_as_string":"2017-02-09T19:34:00.000Z","key":1486668840000,"doc_count":14},{"key_as_string":"2017-02-09T19:35:00.000Z","key":1486668900000,"doc_count":12},{"key_as_string":"2017-02-09T19:36:00.000Z","key":1486668960000,"doc_count":12},{"key_as_string":"2017-02-09T19:37:00.000Z","key":1486669020000,"doc_count":11},{"key_as_string":"2017-02-09T19:38:00.000Z","key":1486669080000,"doc_count":12},{"key_as_string":"2017-02-09T19:39:00.000Z","key":1486669140000,"doc_count":13},{"key_as_string":"2017-02-09T19:40:00.000Z","key":1486669200000,"doc_count":6},{"key_as_string":"2017-02-09T19:41:00.000Z","key":1486669260000,"doc_count":14},{"key_as_string":"2017-02-09T19:42:00.000Z","key":1486669320000,"doc_count":15},{"key_as_string":"2017-02-09T19:43:00.000Z","key":1486669380000,"doc_count":9},{"key_as_string":"2017-02-09T19:44:00.000Z","key":1486669440000,"doc_count":7},{"key_as_string":"2017-02-09T19:45:00.000Z","key":1486669500000,"doc_count":15},{"key_as_string":"2017-02-09T19:46:00.000Z","key":1486669560000,"doc_count":10},{"key_as_string":"2017-02-09T19:47:00.000Z","key":1486669620000,"doc_count":9},{"key_as_string":"2017-02-09T19:48:00.000Z","key":1486669680000,"doc_count":9},{"key_as_string":"2017-02-09T19:49:00.000Z","key":1486669740000,"doc_count":14},{"key_as_string":"2017-02-09T19:50:00.000Z","key":1486669800000,"doc_count":8},{"key_as_string":"2017-02-09T19:51:00.000Z","key":1486669860000,"doc_count":12},{"key_as_string":"2017-02-09T19:52:00.000Z","key":1486669920000,"doc_count":8},{"key_as_string":"2017-02-09T19:53:00.000Z","key":1486669980000,"doc_count":6},{"key_as_string":"2017-02-09T19:54:00.000Z","key":1486670040000,"doc_count":13},{"key_as_string":"2017-02-09T19:55:00.000Z","key":1486670100000,"doc_count":14},{"key_as_string":"2017-02-09T19:56:00.000Z","key":1486670160000,"doc_count":10},{"key_as_string":"2017-02-09T19:57:00.000Z","key":1486670220000,"doc_count":15},{"key_as_string":"2017-02-09T19:58:00.000Z","key":1486670280000,"doc_count":11},{"key_as_string":"2017-02-09T19:59:00.000Z","key":1486670340000,"doc_count":11},{"key_as_string":"2017-02-09T20:00:00.000Z","key":1486670400000,"doc_count":14},{"key_as_string":"2017-02-09T20:01:00.000Z","key":1486670460000,"doc_count":16},{"key_as_string":"2017-02-09T20:02:00.000Z","key":1486670520000,"doc_count":11},{"key_as_string":"2017-02-09T20:03:00.000Z","key":1486670580000,"doc_count":11},{"key_as_string":"2017-02-09T20:04:00.000Z","key":1486670640000,"doc_count":14},{"key_as_string":"2017-02-09T20:05:00.000Z","key":1486670700000,"doc_count":6},{"key_as_string":"2017-02-09T20:06:00.000Z","key":1486670760000,"doc_count":12},{"key_as_string":"2017-02-09T20:07:00.000Z","key":1486670820000,"doc_count":14},{"key_as_string":"2017-02-09T20:08:00.000Z","key":1486670880000,"doc_count":11},{"key_as_string":"2017-02-09T20:09:00.000Z","key":1486670940000,"doc_count":15},{"key_as_string":"2017-02-09T20:10:00.000Z","key":1486671000000,"doc_count":14},{"key_as_string":"2017-02-09T20:11:00.000Z","key":1486671060000,"doc_count":13},{"key_as_string":"2017-02-09T20:12:00.000Z","key":1486671120000,"doc_count":10},{"key_as_string":"2017-02-09T20:13:00.000Z","key":1486671180000,"doc_count":12},{"key_as_string":"2017-02-09T20:14:00.000Z","key":1486671240000,"doc_count":10},{"key_as_string":"2017-02-09T20:15:00.000Z","key":1486671300000,"doc_count":9},{"key_as_string":"2017-02-09T20:16:00.000Z","key":1486671360000,"doc_count":12},{"key_as_string":"2017-02-09T20:17:00.000Z","key":1486671420000,"doc_count":9},{"key_as_string":"2017-02-09T20:18:00.000Z","key":1486671480000,"doc_count":14},{"key_as_string":"2017-02-09T20:19:00.000Z","key":1486671540000,"doc_count":12},{"key_as_string":"2017-02-09T20:20:00.000Z","key":1486671600000,"doc_count":11},{"key_as_string":"2017-02-09T20:21:00.000Z","key":1486671660000,"doc_count":10},{"key_as_string":"2017-02-09T20:22:00.000Z","key":1486671720000,"doc_count":14},{"key_as_string":"2017-02-09T20:23:00.000Z","key":1486671780000,"doc_count":10},{"key_as_string":"2017-02-09T20:24:00.000Z","key":1486671840000,"doc_count":12},{"key_as_string":"2017-02-09T20:25:00.000Z","key":1486671900000,"doc_count":8},{"key_as_string":"2017-02-09T20:26:00.000Z","key":1486671960000,"doc_count":14},{"key_as_string":"2017-02-09T20:27:00.000Z","key":1486672020000,"doc_count":7},{"key_as_string":"2017-02-09T20:28:00.000Z","key":1486672080000,"doc_count":12},{"key_as_string":"2017-02-09T20:29:00.000Z","key":1486672140000,"doc_count":11},{"key_as_string":"2017-02-09T20:30:00.000Z","key":1486672200000,"doc_count":15},{"key_as_string":"2017-02-09T20:31:00.000Z","key":1486672260000,"doc_count":11},{"key_as_string":"2017-02-09T20:32:00.000Z","key":1486672320000,"doc_count":11},{"key_as_string":"2017-02-09T20:33:00.000Z","key":1486672380000,"doc_count":7},{"key_as_string":"2017-02-09T20:34:00.000Z","key":1486672440000,"doc_count":10},{"key_as_string":"2017-02-09T20:35:00.000Z","key":1486672500000,"doc_count":13},{"key_as_string":"2017-02-09T20:36:00.000Z","key":1486672560000,"doc_count":6},{"key_as_string":"2017-02-09T20:37:00.000Z","key":1486672620000,"doc_count":9},{"key_as_string":"2017-02-09T20:38:00.000Z","key":1486672680000,"doc_count":7},{"key_as_string":"2017-02-09T20:39:00.000Z","key":1486672740000,"doc_count":10},{"key_as_string":"2017-02-09T20:40:00.000Z","key":1486672800000,"doc_count":8},{"key_as_string":"2017-02-09T20:41:00.000Z","key":1486672860000,"doc_count":12},{"key_as_string":"2017-02-09T20:42:00.000Z","key":1486672920000,"doc_count":6},{"key_as_string":"2017-02-09T20:43:00.000Z","key":1486672980000,"doc_count":14},{"key_as_string":"2017-02-09T20:44:00.000Z","key":1486673040000,"doc_count":6},{"key_as_string":"2017-02-09T20:45:00.000Z","key":1486673100000,"doc_count":8},{"key_as_string":"2017-02-09T20:46:00.000Z","key":1486673160000,"doc_count":14},{"key_as_string":"2017-02-09T20:47:00.000Z","key":1486673220000,"doc_count":10},{"key_as_string":"2017-02-09T20:48:00.000Z","key":1486673280000,"doc_count":9},{"key_as_string":"2017-02-09T20:49:00.000Z","key":1486673340000,"doc_count":11},{"key_as_string":"2017-02-09T20:50:00.000Z","key":1486673400000,"doc_count":14},{"key_as_string":"2017-02-09T20:51:00.000Z","key":1486673460000,"doc_count":6},{"key_as_string":"2017-02-09T20:52:00.000Z","key":1486673520000,"doc_count":9},{"key_as_string":"2017-02-09T20:53:00.000Z","key":1486673580000,"doc_count":10},{"key_as_string":"2017-02-09T20:54:00.000Z","key":1486673640000,"doc_count":13},{"key_as_string":"2017-02-09T20:55:00.000Z","key":1486673700000,"doc_count":11},{"key_as_string":"2017-02-09T20:56:00.000Z","key":1486673760000,"doc_count":6},{"key_as_string":"2017-02-09T20:57:00.000Z","key":1486673820000,"doc_count":10},{"key_as_string":"2017-02-09T20:58:00.000Z","key":1486673880000,"doc_count":10},{"key_as_string":"2017-02-09T20:59:00.000Z","key":1486673940000,"doc_count":9},{"key_as_string":"2017-02-09T21:00:00.000Z","key":1486674000000,"doc_count":17},{"key_as_string":"2017-02-09T21:01:00.000Z","key":1486674060000,"doc_count":11},{"key_as_string":"2017-02-09T21:02:00.000Z","key":1486674120000,"doc_count":10},{"key_as_string":"2017-02-09T21:03:00.000Z","key":1486674180000,"doc_count":9},{"key_as_string":"2017-02-09T21:04:00.000Z","key":1486674240000,"doc_count":14},{"key_as_string":"2017-02-09T21:05:00.000Z","key":1486674300000,"doc_count":10},{"key_as_string":"2017-02-09T21:06:00.000Z","key":1486674360000,"doc_count":12},{"key_as_string":"2017-02-09T21:07:00.000Z","key":1486674420000,"doc_count":9},{"key_as_string":"2017-02-09T21:08:00.000Z","key":1486674480000,"doc_count":11},{"key_as_string":"2017-02-09T21:09:00.000Z","key":1486674540000,"doc_count":11},{"key_as_string":"2017-02-09T21:10:00.000Z","key":1486674600000,"doc_count":11},{"key_as_string":"2017-02-09T21:11:00.000Z","key":1486674660000,"doc_count":10},{"key_as_string":"2017-02-09T21:12:00.000Z","key":1486674720000,"doc_count":9},{"key_as_string":"2017-02-09T21:13:00.000Z","key":1486674780000,"doc_count":13},{"key_as_string":"2017-02-09T21:14:00.000Z","key":1486674840000,"doc_count":9},{"key_as_string":"2017-02-09T21:15:00.000Z","key":1486674900000,"doc_count":8},{"key_as_string":"2017-02-09T21:16:00.000Z","key":1486674960000,"doc_count":11},{"key_as_string":"2017-02-09T21:17:00.000Z","key":1486675020000,"doc_count":12},{"key_as_string":"2017-02-09T21:18:00.000Z","key":1486675080000,"doc_count":7},{"key_as_string":"2017-02-09T21:19:00.000Z","key":1486675140000,"doc_count":14},{"key_as_string":"2017-02-09T21:20:00.000Z","key":1486675200000,"doc_count":15},{"key_as_string":"2017-02-09T21:21:00.000Z","key":1486675260000,"doc_count":5},{"key_as_string":"2017-02-09T21:22:00.000Z","key":1486675320000,"doc_count":8},{"key_as_string":"2017-02-09T21:23:00.000Z","key":1486675380000,"doc_count":15},{"key_as_string":"2017-02-09T21:24:00.000Z","key":1486675440000,"doc_count":9},{"key_as_string":"2017-02-09T21:25:00.000Z","key":1486675500000,"doc_count":14},{"key_as_string":"2017-02-09T21:26:00.000Z","key":1486675560000,"doc_count":12},{"key_as_string":"2017-02-09T21:27:00.000Z","key":1486675620000,"doc_count":8},{"key_as_string":"2017-02-09T21:28:00.000Z","key":1486675680000,"doc_count":12},{"key_as_string":"2017-02-09T21:29:00.000Z","key":1486675740000,"doc_count":10},{"key_as_string":"2017-02-09T21:30:00.000Z","key":1486675800000,"doc_count":10},{"key_as_string":"2017-02-09T21:31:00.000Z","key":1486675860000,"doc_count":11},{"key_as_string":"2017-02-09T21:32:00.000Z","key":1486675920000,"doc_count":10},{"key_as_string":"2017-02-09T21:33:00.000Z","key":1486675980000,"doc_count":9},{"key_as_string":"2017-02-09T21:34:00.000Z","key":1486676040000,"doc_count":10},{"key_as_string":"2017-02-09T21:35:00.000Z","key":1486676100000,"doc_count":11},{"key_as_string":"2017-02-09T21:36:00.000Z","key":1486676160000,"doc_count":11},{"key_as_string":"2017-02-09T21:37:00.000Z","key":1486676220000,"doc_count":8},{"key_as_string":"2017-02-09T21:38:00.000Z","key":1486676280000,"doc_count":12},{"key_as_string":"2017-02-09T21:39:00.000Z","key":1486676340000,"doc_count":9},{"key_as_string":"2017-02-09T21:40:00.000Z","key":1486676400000,"doc_count":8},{"key_as_string":"2017-02-09T21:41:00.000Z","key":1486676460000,"doc_count":10},{"key_as_string":"2017-02-09T21:42:00.000Z","key":1486676520000,"doc_count":8},{"key_as_string":"2017-02-09T21:43:00.000Z","key":1486676580000,"doc_count":12},{"key_as_string":"2017-02-09T21:44:00.000Z","key":1486676640000,"doc_count":10},{"key_as_string":"2017-02-09T21:45:00.000Z","key":1486676700000,"doc_count":14},{"key_as_string":"2017-02-09T21:46:00.000Z","key":1486676760000,"doc_count":11},{"key_as_string":"2017-02-09T21:47:00.000Z","key":1486676820000,"doc_count":8},{"key_as_string":"2017-02-09T21:48:00.000Z","key":1486676880000,"doc_count":12},{"key_as_string":"2017-02-09T21:49:00.000Z","key":1486676940000,"doc_count":12},{"key_as_string":"2017-02-09T21:50:00.000Z","key":1486677000000,"doc_count":9},{"key_as_string":"2017-02-09T21:51:00.000Z","key":1486677060000,"doc_count":11},{"key_as_string":"2017-02-09T21:52:00.000Z","key":1486677120000,"doc_count":10},{"key_as_string":"2017-02-09T21:53:00.000Z","key":1486677180000,"doc_count":11},{"key_as_string":"2017-02-09T21:54:00.000Z","key":1486677240000,"doc_count":14},{"key_as_string":"2017-02-09T21:55:00.000Z","key":1486677300000,"doc_count":9},{"key_as_string":"2017-02-09T21:56:00.000Z","key":1486677360000,"doc_count":8},{"key_as_string":"2017-02-09T21:57:00.000Z","key":1486677420000,"doc_count":10},{"key_as_string":"2017-02-09T21:58:00.000Z","key":1486677480000,"doc_count":8},{"key_as_string":"2017-02-09T21:59:00.000Z","key":1486677540000,"doc_count":16},{"key_as_string":"2017-02-09T22:00:00.000Z","key":1486677600000,"doc_count":11},{"key_as_string":"2017-02-09T22:01:00.000Z","key":1486677660000,"doc_count":7},{"key_as_string":"2017-02-09T22:02:00.000Z","key":1486677720000,"doc_count":13},{"key_as_string":"2017-02-09T22:03:00.000Z","key":1486677780000,"doc_count":12},{"key_as_string":"2017-02-09T22:04:00.000Z","key":1486677840000,"doc_count":9},{"key_as_string":"2017-02-09T22:05:00.000Z","key":1486677900000,"doc_count":14},{"key_as_string":"2017-02-09T22:06:00.000Z","key":1486677960000,"doc_count":8},{"key_as_string":"2017-02-09T22:07:00.000Z","key":1486678020000,"doc_count":9},{"key_as_string":"2017-02-09T22:08:00.000Z","key":1486678080000,"doc_count":15},{"key_as_string":"2017-02-09T22:09:00.000Z","key":1486678140000,"doc_count":10},{"key_as_string":"2017-02-09T22:10:00.000Z","key":1486678200000,"doc_count":7},{"key_as_string":"2017-02-09T22:11:00.000Z","key":1486678260000,"doc_count":11},{"key_as_string":"2017-02-09T22:12:00.000Z","key":1486678320000,"doc_count":8},{"key_as_string":"2017-02-09T22:13:00.000Z","key":1486678380000,"doc_count":13},{"key_as_string":"2017-02-09T22:14:00.000Z","key":1486678440000,"doc_count":12},{"key_as_string":"2017-02-09T22:15:00.000Z","key":1486678500000,"doc_count":6},{"key_as_string":"2017-02-09T22:16:00.000Z","key":1486678560000,"doc_count":9},{"key_as_string":"2017-02-09T22:17:00.000Z","key":1486678620000,"doc_count":13},{"key_as_string":"2017-02-09T22:18:00.000Z","key":1486678680000,"doc_count":12},{"key_as_string":"2017-02-09T22:19:00.000Z","key":1486678740000,"doc_count":9},{"key_as_string":"2017-02-09T22:20:00.000Z","key":1486678800000,"doc_count":7},{"key_as_string":"2017-02-09T22:21:00.000Z","key":1486678860000,"doc_count":8},{"key_as_string":"2017-02-09T22:22:00.000Z","key":1486678920000,"doc_count":12},{"key_as_string":"2017-02-09T22:23:00.000Z","key":1486678980000,"doc_count":7},{"key_as_string":"2017-02-09T22:24:00.000Z","key":1486679040000,"doc_count":15},{"key_as_string":"2017-02-09T22:25:00.000Z","key":1486679100000,"doc_count":12},{"key_as_string":"2017-02-09T22:26:00.000Z","key":1486679160000,"doc_count":12},{"key_as_string":"2017-02-09T22:27:00.000Z","key":1486679220000,"doc_count":12},{"key_as_string":"2017-02-09T22:28:00.000Z","key":1486679280000,"doc_count":11},{"key_as_string":"2017-02-09T22:29:00.000Z","key":1486679340000,"doc_count":7},{"key_as_string":"2017-02-09T22:30:00.000Z","key":1486679400000,"doc_count":9},{"key_as_string":"2017-02-09T22:31:00.000Z","key":1486679460000,"doc_count":10},{"key_as_string":"2017-02-09T22:32:00.000Z","key":1486679520000,"doc_count":14},{"key_as_string":"2017-02-09T22:33:00.000Z","key":1486679580000,"doc_count":10},{"key_as_string":"2017-02-09T22:34:00.000Z","key":1486679640000,"doc_count":14},{"key_as_string":"2017-02-09T22:35:00.000Z","key":1486679700000,"doc_count":13},{"key_as_string":"2017-02-09T22:36:00.000Z","key":1486679760000,"doc_count":9},{"key_as_string":"2017-02-09T22:37:00.000Z","key":1486679820000,"doc_count":7},{"key_as_string":"2017-02-09T22:38:00.000Z","key":1486679880000,"doc_count":11},{"key_as_string":"2017-02-09T22:39:00.000Z","key":1486679940000,"doc_count":8},{"key_as_string":"2017-02-09T22:40:00.000Z","key":1486680000000,"doc_count":9},{"key_as_string":"2017-02-09T22:41:00.000Z","key":1486680060000,"doc_count":9},{"key_as_string":"2017-02-09T22:42:00.000Z","key":1486680120000,"doc_count":15},{"key_as_string":"2017-02-09T22:43:00.000Z","key":1486680180000,"doc_count":8},{"key_as_string":"2017-02-09T22:44:00.000Z","key":1486680240000,"doc_count":7},{"key_as_string":"2017-02-09T22:45:00.000Z","key":1486680300000,"doc_count":10},{"key_as_string":"2017-02-09T22:46:00.000Z","key":1486680360000,"doc_count":13},{"key_as_string":"2017-02-09T22:47:00.000Z","key":1486680420000,"doc_count":14},{"key_as_string":"2017-02-09T22:48:00.000Z","key":1486680480000,"doc_count":7},{"key_as_string":"2017-02-09T22:49:00.000Z","key":1486680540000,"doc_count":8},{"key_as_string":"2017-02-09T22:50:00.000Z","key":1486680600000,"doc_count":12},{"key_as_string":"2017-02-09T22:51:00.000Z","key":1486680660000,"doc_count":9},{"key_as_string":"2017-02-09T22:52:00.000Z","key":1486680720000,"doc_count":9},{"key_as_string":"2017-02-09T22:53:00.000Z","key":1486680780000,"doc_count":6},{"key_as_string":"2017-02-09T22:54:00.000Z","key":1486680840000,"doc_count":17},{"key_as_string":"2017-02-09T22:55:00.000Z","key":1486680900000,"doc_count":10},{"key_as_string":"2017-02-09T22:56:00.000Z","key":1486680960000,"doc_count":9},{"key_as_string":"2017-02-09T22:57:00.000Z","key":1486681020000,"doc_count":12},{"key_as_string":"2017-02-09T22:58:00.000Z","key":1486681080000,"doc_count":10},{"key_as_string":"2017-02-09T22:59:00.000Z","key":1486681140000,"doc_count":11},{"key_as_string":"2017-02-09T23:00:00.000Z","key":1486681200000,"doc_count":6},{"key_as_string":"2017-02-09T23:01:00.000Z","key":1486681260000,"doc_count":11},{"key_as_string":"2017-02-09T23:02:00.000Z","key":1486681320000,"doc_count":11},{"key_as_string":"2017-02-09T23:03:00.000Z","key":1486681380000,"doc_count":13},{"key_as_string":"2017-02-09T23:04:00.000Z","key":1486681440000,"doc_count":16},{"key_as_string":"2017-02-09T23:05:00.000Z","key":1486681500000,"doc_count":10},{"key_as_string":"2017-02-09T23:06:00.000Z","key":1486681560000,"doc_count":9},{"key_as_string":"2017-02-09T23:07:00.000Z","key":1486681620000,"doc_count":6},{"key_as_string":"2017-02-09T23:08:00.000Z","key":1486681680000,"doc_count":11},{"key_as_string":"2017-02-09T23:09:00.000Z","key":1486681740000,"doc_count":12},{"key_as_string":"2017-02-09T23:10:00.000Z","key":1486681800000,"doc_count":4},{"key_as_string":"2017-02-09T23:11:00.000Z","key":1486681860000,"doc_count":12},{"key_as_string":"2017-02-09T23:12:00.000Z","key":1486681920000,"doc_count":12},{"key_as_string":"2017-02-09T23:13:00.000Z","key":1486681980000,"doc_count":8},{"key_as_string":"2017-02-09T23:14:00.000Z","key":1486682040000,"doc_count":12},{"key_as_string":"2017-02-09T23:15:00.000Z","key":1486682100000,"doc_count":8},{"key_as_string":"2017-02-09T23:16:00.000Z","key":1486682160000,"doc_count":11},{"key_as_string":"2017-02-09T23:17:00.000Z","key":1486682220000,"doc_count":12},{"key_as_string":"2017-02-09T23:18:00.000Z","key":1486682280000,"doc_count":6},{"key_as_string":"2017-02-09T23:19:00.000Z","key":1486682340000,"doc_count":13},{"key_as_string":"2017-02-09T23:20:00.000Z","key":1486682400000,"doc_count":9},{"key_as_string":"2017-02-09T23:21:00.000Z","key":1486682460000,"doc_count":7},{"key_as_string":"2017-02-09T23:22:00.000Z","key":1486682520000,"doc_count":18},{"key_as_string":"2017-02-09T23:23:00.000Z","key":1486682580000,"doc_count":6},{"key_as_string":"2017-02-09T23:24:00.000Z","key":1486682640000,"doc_count":10},{"key_as_string":"2017-02-09T23:25:00.000Z","key":1486682700000,"doc_count":10},{"key_as_string":"2017-02-09T23:26:00.000Z","key":1486682760000,"doc_count":13},{"key_as_string":"2017-02-09T23:27:00.000Z","key":1486682820000,"doc_count":12},{"key_as_string":"2017-02-09T23:28:00.000Z","key":1486682880000,"doc_count":14},{"key_as_string":"2017-02-09T23:29:00.000Z","key":1486682940000,"doc_count":7},{"key_as_string":"2017-02-09T23:30:00.000Z","key":1486683000000,"doc_count":8},{"key_as_string":"2017-02-09T23:31:00.000Z","key":1486683060000,"doc_count":13},{"key_as_string":"2017-02-09T23:32:00.000Z","key":1486683120000,"doc_count":7},{"key_as_string":"2017-02-09T23:33:00.000Z","key":1486683180000,"doc_count":10},{"key_as_string":"2017-02-09T23:34:00.000Z","key":1486683240000,"doc_count":9},{"key_as_string":"2017-02-09T23:35:00.000Z","key":1486683300000,"doc_count":8},{"key_as_string":"2017-02-09T23:36:00.000Z","key":1486683360000,"doc_count":11},{"key_as_string":"2017-02-09T23:37:00.000Z","key":1486683420000,"doc_count":14},{"key_as_string":"2017-02-09T23:38:00.000Z","key":1486683480000,"doc_count":11},{"key_as_string":"2017-02-09T23:39:00.000Z","key":1486683540000,"doc_count":8},{"key_as_string":"2017-02-09T23:40:00.000Z","key":1486683600000,"doc_count":12},{"key_as_string":"2017-02-09T23:41:00.000Z","key":1486683660000,"doc_count":12},{"key_as_string":"2017-02-09T23:42:00.000Z","key":1486683720000,"doc_count":9},{"key_as_string":"2017-02-09T23:43:00.000Z","key":1486683780000,"doc_count":16},{"key_as_string":"2017-02-09T23:44:00.000Z","key":1486683840000,"doc_count":11},{"key_as_string":"2017-02-09T23:45:00.000Z","key":1486683900000,"doc_count":7},{"key_as_string":"2017-02-09T23:46:00.000Z","key":1486683960000,"doc_count":12},{"key_as_string":"2017-02-09T23:47:00.000Z","key":1486684020000,"doc_count":15},{"key_as_string":"2017-02-09T23:48:00.000Z","key":1486684080000,"doc_count":7},{"key_as_string":"2017-02-09T23:49:00.000Z","key":1486684140000,"doc_count":10},{"key_as_string":"2017-02-09T23:50:00.000Z","key":1486684200000,"doc_count":15},{"key_as_string":"2017-02-09T23:51:00.000Z","key":1486684260000,"doc_count":12},{"key_as_string":"2017-02-09T23:52:00.000Z","key":1486684320000,"doc_count":9},{"key_as_string":"2017-02-09T23:53:00.000Z","key":1486684380000,"doc_count":7},{"key_as_string":"2017-02-09T23:54:00.000Z","key":1486684440000,"doc_count":8},{"key_as_string":"2017-02-09T23:55:00.000Z","key":1486684500000,"doc_count":8},{"key_as_string":"2017-02-09T23:56:00.000Z","key":1486684560000,"doc_count":13},{"key_as_string":"2017-02-09T23:57:00.000Z","key":1486684620000,"doc_count":12},{"key_as_string":"2017-02-09T23:58:00.000Z","key":1486684680000,"doc_count":12},{"key_as_string":"2017-02-09T23:59:00.000Z","key":1486684740000,"doc_count":9},{"key_as_string":"2017-02-10T00:00:00.000Z","key":1486684800000,"doc_count":8},{"key_as_string":"2017-02-10T00:01:00.000Z","key":1486684860000,"doc_count":10},{"key_as_string":"2017-02-10T00:02:00.000Z","key":1486684920000,"doc_count":12},{"key_as_string":"2017-02-10T00:03:00.000Z","key":1486684980000,"doc_count":11},{"key_as_string":"2017-02-10T00:04:00.000Z","key":1486685040000,"doc_count":11},{"key_as_string":"2017-02-10T00:05:00.000Z","key":1486685100000,"doc_count":12},{"key_as_string":"2017-02-10T00:06:00.000Z","key":1486685160000,"doc_count":9},{"key_as_string":"2017-02-10T00:07:00.000Z","key":1486685220000,"doc_count":11},{"key_as_string":"2017-02-10T00:08:00.000Z","key":1486685280000,"doc_count":8},{"key_as_string":"2017-02-10T00:09:00.000Z","key":1486685340000,"doc_count":11},{"key_as_string":"2017-02-10T00:10:00.000Z","key":1486685400000,"doc_count":10},{"key_as_string":"2017-02-10T00:11:00.000Z","key":1486685460000,"doc_count":14},{"key_as_string":"2017-02-10T00:12:00.000Z","key":1486685520000,"doc_count":5},{"key_as_string":"2017-02-10T00:13:00.000Z","key":1486685580000,"doc_count":6},{"key_as_string":"2017-02-10T00:14:00.000Z","key":1486685640000,"doc_count":8},{"key_as_string":"2017-02-10T00:15:00.000Z","key":1486685700000,"doc_count":11},{"key_as_string":"2017-02-10T00:16:00.000Z","key":1486685760000,"doc_count":15},{"key_as_string":"2017-02-10T00:17:00.000Z","key":1486685820000,"doc_count":8},{"key_as_string":"2017-02-10T00:18:00.000Z","key":1486685880000,"doc_count":12},{"key_as_string":"2017-02-10T00:19:00.000Z","key":1486685940000,"doc_count":7},{"key_as_string":"2017-02-10T00:20:00.000Z","key":1486686000000,"doc_count":11},{"key_as_string":"2017-02-10T00:21:00.000Z","key":1486686060000,"doc_count":20},{"key_as_string":"2017-02-10T00:22:00.000Z","key":1486686120000,"doc_count":7},{"key_as_string":"2017-02-10T00:23:00.000Z","key":1486686180000,"doc_count":11},{"key_as_string":"2017-02-10T00:24:00.000Z","key":1486686240000,"doc_count":8},{"key_as_string":"2017-02-10T00:25:00.000Z","key":1486686300000,"doc_count":9},{"key_as_string":"2017-02-10T00:26:00.000Z","key":1486686360000,"doc_count":15},{"key_as_string":"2017-02-10T00:27:00.000Z","key":1486686420000,"doc_count":12},{"key_as_string":"2017-02-10T00:28:00.000Z","key":1486686480000,"doc_count":13},{"key_as_string":"2017-02-10T00:29:00.000Z","key":1486686540000,"doc_count":10},{"key_as_string":"2017-02-10T00:30:00.000Z","key":1486686600000,"doc_count":14},{"key_as_string":"2017-02-10T00:31:00.000Z","key":1486686660000,"doc_count":9},{"key_as_string":"2017-02-10T00:32:00.000Z","key":1486686720000,"doc_count":6},{"key_as_string":"2017-02-10T00:33:00.000Z","key":1486686780000,"doc_count":13},{"key_as_string":"2017-02-10T00:34:00.000Z","key":1486686840000,"doc_count":8},{"key_as_string":"2017-02-10T00:35:00.000Z","key":1486686900000,"doc_count":12},{"key_as_string":"2017-02-10T00:36:00.000Z","key":1486686960000,"doc_count":10},{"key_as_string":"2017-02-10T00:37:00.000Z","key":1486687020000,"doc_count":11},{"key_as_string":"2017-02-10T00:38:00.000Z","key":1486687080000,"doc_count":12},{"key_as_string":"2017-02-10T00:39:00.000Z","key":1486687140000,"doc_count":11},{"key_as_string":"2017-02-10T00:40:00.000Z","key":1486687200000,"doc_count":9},{"key_as_string":"2017-02-10T00:41:00.000Z","key":1486687260000,"doc_count":15},{"key_as_string":"2017-02-10T00:42:00.000Z","key":1486687320000,"doc_count":11},{"key_as_string":"2017-02-10T00:43:00.000Z","key":1486687380000,"doc_count":10},{"key_as_string":"2017-02-10T00:44:00.000Z","key":1486687440000,"doc_count":6},{"key_as_string":"2017-02-10T00:45:00.000Z","key":1486687500000,"doc_count":9},{"key_as_string":"2017-02-10T00:46:00.000Z","key":1486687560000,"doc_count":6},{"key_as_string":"2017-02-10T00:47:00.000Z","key":1486687620000,"doc_count":15},{"key_as_string":"2017-02-10T00:48:00.000Z","key":1486687680000,"doc_count":5},{"key_as_string":"2017-02-10T00:49:00.000Z","key":1486687740000,"doc_count":8},{"key_as_string":"2017-02-10T00:50:00.000Z","key":1486687800000,"doc_count":14},{"key_as_string":"2017-02-10T00:51:00.000Z","key":1486687860000,"doc_count":8},{"key_as_string":"2017-02-10T00:52:00.000Z","key":1486687920000,"doc_count":10},{"key_as_string":"2017-02-10T00:53:00.000Z","key":1486687980000,"doc_count":11},{"key_as_string":"2017-02-10T00:54:00.000Z","key":1486688040000,"doc_count":11},{"key_as_string":"2017-02-10T00:55:00.000Z","key":1486688100000,"doc_count":14},{"key_as_string":"2017-02-10T00:56:00.000Z","key":1486688160000,"doc_count":11},{"key_as_string":"2017-02-10T00:57:00.000Z","key":1486688220000,"doc_count":9},{"key_as_string":"2017-02-10T00:58:00.000Z","key":1486688280000,"doc_count":10},{"key_as_string":"2017-02-10T00:59:00.000Z","key":1486688340000,"doc_count":12},{"key_as_string":"2017-02-10T01:00:00.000Z","key":1486688400000,"doc_count":8},{"key_as_string":"2017-02-10T01:01:00.000Z","key":1486688460000,"doc_count":14},{"key_as_string":"2017-02-10T01:02:00.000Z","key":1486688520000,"doc_count":10},{"key_as_string":"2017-02-10T01:03:00.000Z","key":1486688580000,"doc_count":7},{"key_as_string":"2017-02-10T01:04:00.000Z","key":1486688640000,"doc_count":14},{"key_as_string":"2017-02-10T01:05:00.000Z","key":1486688700000,"doc_count":5},{"key_as_string":"2017-02-10T01:06:00.000Z","key":1486688760000,"doc_count":19},{"key_as_string":"2017-02-10T01:07:00.000Z","key":1486688820000,"doc_count":7},{"key_as_string":"2017-02-10T01:08:00.000Z","key":1486688880000,"doc_count":14},{"key_as_string":"2017-02-10T01:09:00.000Z","key":1486688940000,"doc_count":6},{"key_as_string":"2017-02-10T01:10:00.000Z","key":1486689000000,"doc_count":11},{"key_as_string":"2017-02-10T01:11:00.000Z","key":1486689060000,"doc_count":16},{"key_as_string":"2017-02-10T01:12:00.000Z","key":1486689120000,"doc_count":11},{"key_as_string":"2017-02-10T01:13:00.000Z","key":1486689180000,"doc_count":6},{"key_as_string":"2017-02-10T01:14:00.000Z","key":1486689240000,"doc_count":10},{"key_as_string":"2017-02-10T01:15:00.000Z","key":1486689300000,"doc_count":10},{"key_as_string":"2017-02-10T01:16:00.000Z","key":1486689360000,"doc_count":10},{"key_as_string":"2017-02-10T01:17:00.000Z","key":1486689420000,"doc_count":11},{"key_as_string":"2017-02-10T01:18:00.000Z","key":1486689480000,"doc_count":7},{"key_as_string":"2017-02-10T01:19:00.000Z","key":1486689540000,"doc_count":8},{"key_as_string":"2017-02-10T01:20:00.000Z","key":1486689600000,"doc_count":17},{"key_as_string":"2017-02-10T01:21:00.000Z","key":1486689660000,"doc_count":12},{"key_as_string":"2017-02-10T01:22:00.000Z","key":1486689720000,"doc_count":12},{"key_as_string":"2017-02-10T01:23:00.000Z","key":1486689780000,"doc_count":12},{"key_as_string":"2017-02-10T01:24:00.000Z","key":1486689840000,"doc_count":13},{"key_as_string":"2017-02-10T01:25:00.000Z","key":1486689900000,"doc_count":9},{"key_as_string":"2017-02-10T01:26:00.000Z","key":1486689960000,"doc_count":8},{"key_as_string":"2017-02-10T01:27:00.000Z","key":1486690020000,"doc_count":9},{"key_as_string":"2017-02-10T01:28:00.000Z","key":1486690080000,"doc_count":10},{"key_as_string":"2017-02-10T01:29:00.000Z","key":1486690140000,"doc_count":11},{"key_as_string":"2017-02-10T01:30:00.000Z","key":1486690200000,"doc_count":5},{"key_as_string":"2017-02-10T01:31:00.000Z","key":1486690260000,"doc_count":12},{"key_as_string":"2017-02-10T01:32:00.000Z","key":1486690320000,"doc_count":8},{"key_as_string":"2017-02-10T01:33:00.000Z","key":1486690380000,"doc_count":8},{"key_as_string":"2017-02-10T01:34:00.000Z","key":1486690440000,"doc_count":11},{"key_as_string":"2017-02-10T01:35:00.000Z","key":1486690500000,"doc_count":7},{"key_as_string":"2017-02-10T01:36:00.000Z","key":1486690560000,"doc_count":16},{"key_as_string":"2017-02-10T01:37:00.000Z","key":1486690620000,"doc_count":9},{"key_as_string":"2017-02-10T01:38:00.000Z","key":1486690680000,"doc_count":3},{"key_as_string":"2017-02-10T01:39:00.000Z","key":1486690740000,"doc_count":14},{"key_as_string":"2017-02-10T01:40:00.000Z","key":1486690800000,"doc_count":3},{"key_as_string":"2017-02-10T01:41:00.000Z","key":1486690860000,"doc_count":14},{"key_as_string":"2017-02-10T01:42:00.000Z","key":1486690920000,"doc_count":11},{"key_as_string":"2017-02-10T01:43:00.000Z","key":1486690980000,"doc_count":8},{"key_as_string":"2017-02-10T01:44:00.000Z","key":1486691040000,"doc_count":13},{"key_as_string":"2017-02-10T01:45:00.000Z","key":1486691100000,"doc_count":6},{"key_as_string":"2017-02-10T01:46:00.000Z","key":1486691160000,"doc_count":16},{"key_as_string":"2017-02-10T01:47:00.000Z","key":1486691220000,"doc_count":12},{"key_as_string":"2017-02-10T01:48:00.000Z","key":1486691280000,"doc_count":8},{"key_as_string":"2017-02-10T01:49:00.000Z","key":1486691340000,"doc_count":17},{"key_as_string":"2017-02-10T01:50:00.000Z","key":1486691400000,"doc_count":9},{"key_as_string":"2017-02-10T01:51:00.000Z","key":1486691460000,"doc_count":11},{"key_as_string":"2017-02-10T01:52:00.000Z","key":1486691520000,"doc_count":10},{"key_as_string":"2017-02-10T01:53:00.000Z","key":1486691580000,"doc_count":13},{"key_as_string":"2017-02-10T01:54:00.000Z","key":1486691640000,"doc_count":11},{"key_as_string":"2017-02-10T01:55:00.000Z","key":1486691700000,"doc_count":9},{"key_as_string":"2017-02-10T01:56:00.000Z","key":1486691760000,"doc_count":11},{"key_as_string":"2017-02-10T01:57:00.000Z","key":1486691820000,"doc_count":8},{"key_as_string":"2017-02-10T01:58:00.000Z","key":1486691880000,"doc_count":14},{"key_as_string":"2017-02-10T01:59:00.000Z","key":1486691940000,"doc_count":8},{"key_as_string":"2017-02-10T02:00:00.000Z","key":1486692000000,"doc_count":4},{"key_as_string":"2017-02-10T02:01:00.000Z","key":1486692060000,"doc_count":13},{"key_as_string":"2017-02-10T02:02:00.000Z","key":1486692120000,"doc_count":8},{"key_as_string":"2017-02-10T02:03:00.000Z","key":1486692180000,"doc_count":9},{"key_as_string":"2017-02-10T02:04:00.000Z","key":1486692240000,"doc_count":9},{"key_as_string":"2017-02-10T02:05:00.000Z","key":1486692300000,"doc_count":14},{"key_as_string":"2017-02-10T02:06:00.000Z","key":1486692360000,"doc_count":7},{"key_as_string":"2017-02-10T02:07:00.000Z","key":1486692420000,"doc_count":9},{"key_as_string":"2017-02-10T02:08:00.000Z","key":1486692480000,"doc_count":16},{"key_as_string":"2017-02-10T02:09:00.000Z","key":1486692540000,"doc_count":10},{"key_as_string":"2017-02-10T02:10:00.000Z","key":1486692600000,"doc_count":11},{"key_as_string":"2017-02-10T02:11:00.000Z","key":1486692660000,"doc_count":7},{"key_as_string":"2017-02-10T02:12:00.000Z","key":1486692720000,"doc_count":12},{"key_as_string":"2017-02-10T02:13:00.000Z","key":1486692780000,"doc_count":11},{"key_as_string":"2017-02-10T02:14:00.000Z","key":1486692840000,"doc_count":5},{"key_as_string":"2017-02-10T02:15:00.000Z","key":1486692900000,"doc_count":14},{"key_as_string":"2017-02-10T02:16:00.000Z","key":1486692960000,"doc_count":13},{"key_as_string":"2017-02-10T02:17:00.000Z","key":1486693020000,"doc_count":7},{"key_as_string":"2017-02-10T02:18:00.000Z","key":1486693080000,"doc_count":11},{"key_as_string":"2017-02-10T02:19:00.000Z","key":1486693140000,"doc_count":10},{"key_as_string":"2017-02-10T02:20:00.000Z","key":1486693200000,"doc_count":8},{"key_as_string":"2017-02-10T02:21:00.000Z","key":1486693260000,"doc_count":9},{"key_as_string":"2017-02-10T02:22:00.000Z","key":1486693320000,"doc_count":12},{"key_as_string":"2017-02-10T02:23:00.000Z","key":1486693380000,"doc_count":14},{"key_as_string":"2017-02-10T02:24:00.000Z","key":1486693440000,"doc_count":8},{"key_as_string":"2017-02-10T02:25:00.000Z","key":1486693500000,"doc_count":10},{"key_as_string":"2017-02-10T02:26:00.000Z","key":1486693560000,"doc_count":10},{"key_as_string":"2017-02-10T02:27:00.000Z","key":1486693620000,"doc_count":8},{"key_as_string":"2017-02-10T02:28:00.000Z","key":1486693680000,"doc_count":7},{"key_as_string":"2017-02-10T02:29:00.000Z","key":1486693740000,"doc_count":7},{"key_as_string":"2017-02-10T02:30:00.000Z","key":1486693800000,"doc_count":13},{"key_as_string":"2017-02-10T02:31:00.000Z","key":1486693860000,"doc_count":7},{"key_as_string":"2017-02-10T02:32:00.000Z","key":1486693920000,"doc_count":14},{"key_as_string":"2017-02-10T02:33:00.000Z","key":1486693980000,"doc_count":8},{"key_as_string":"2017-02-10T02:34:00.000Z","key":1486694040000,"doc_count":10},{"key_as_string":"2017-02-10T02:35:00.000Z","key":1486694100000,"doc_count":10},{"key_as_string":"2017-02-10T02:36:00.000Z","key":1486694160000,"doc_count":10},{"key_as_string":"2017-02-10T02:37:00.000Z","key":1486694220000,"doc_count":13},{"key_as_string":"2017-02-10T02:38:00.000Z","key":1486694280000,"doc_count":7},{"key_as_string":"2017-02-10T02:39:00.000Z","key":1486694340000,"doc_count":13},{"key_as_string":"2017-02-10T02:40:00.000Z","key":1486694400000,"doc_count":14},{"key_as_string":"2017-02-10T02:41:00.000Z","key":1486694460000,"doc_count":12},{"key_as_string":"2017-02-10T02:42:00.000Z","key":1486694520000,"doc_count":9},{"key_as_string":"2017-02-10T02:43:00.000Z","key":1486694580000,"doc_count":9},{"key_as_string":"2017-02-10T02:44:00.000Z","key":1486694640000,"doc_count":10},{"key_as_string":"2017-02-10T02:45:00.000Z","key":1486694700000,"doc_count":15},{"key_as_string":"2017-02-10T02:46:00.000Z","key":1486694760000,"doc_count":8},{"key_as_string":"2017-02-10T02:47:00.000Z","key":1486694820000,"doc_count":11},{"key_as_string":"2017-02-10T02:48:00.000Z","key":1486694880000,"doc_count":12},{"key_as_string":"2017-02-10T02:49:00.000Z","key":1486694940000,"doc_count":10},{"key_as_string":"2017-02-10T02:50:00.000Z","key":1486695000000,"doc_count":9},{"key_as_string":"2017-02-10T02:51:00.000Z","key":1486695060000,"doc_count":16},{"key_as_string":"2017-02-10T02:52:00.000Z","key":1486695120000,"doc_count":8},{"key_as_string":"2017-02-10T02:53:00.000Z","key":1486695180000,"doc_count":9},{"key_as_string":"2017-02-10T02:54:00.000Z","key":1486695240000,"doc_count":15},{"key_as_string":"2017-02-10T02:55:00.000Z","key":1486695300000,"doc_count":9},{"key_as_string":"2017-02-10T02:56:00.000Z","key":1486695360000,"doc_count":9},{"key_as_string":"2017-02-10T02:57:00.000Z","key":1486695420000,"doc_count":9},{"key_as_string":"2017-02-10T02:58:00.000Z","key":1486695480000,"doc_count":10},{"key_as_string":"2017-02-10T02:59:00.000Z","key":1486695540000,"doc_count":10},{"key_as_string":"2017-02-10T03:00:00.000Z","key":1486695600000,"doc_count":16},{"key_as_string":"2017-02-10T03:01:00.000Z","key":1486695660000,"doc_count":7},{"key_as_string":"2017-02-10T03:02:00.000Z","key":1486695720000,"doc_count":11},{"key_as_string":"2017-02-10T03:03:00.000Z","key":1486695780000,"doc_count":15},{"key_as_string":"2017-02-10T03:04:00.000Z","key":1486695840000,"doc_count":7},{"key_as_string":"2017-02-10T03:05:00.000Z","key":1486695900000,"doc_count":9},{"key_as_string":"2017-02-10T03:06:00.000Z","key":1486695960000,"doc_count":9},{"key_as_string":"2017-02-10T03:07:00.000Z","key":1486696020000,"doc_count":10},{"key_as_string":"2017-02-10T03:08:00.000Z","key":1486696080000,"doc_count":10},{"key_as_string":"2017-02-10T03:09:00.000Z","key":1486696140000,"doc_count":18},{"key_as_string":"2017-02-10T03:10:00.000Z","key":1486696200000,"doc_count":13},{"key_as_string":"2017-02-10T03:11:00.000Z","key":1486696260000,"doc_count":8},{"key_as_string":"2017-02-10T03:12:00.000Z","key":1486696320000,"doc_count":11},{"key_as_string":"2017-02-10T03:13:00.000Z","key":1486696380000,"doc_count":9},{"key_as_string":"2017-02-10T03:14:00.000Z","key":1486696440000,"doc_count":10},{"key_as_string":"2017-02-10T03:15:00.000Z","key":1486696500000,"doc_count":16},{"key_as_string":"2017-02-10T03:16:00.000Z","key":1486696560000,"doc_count":10},{"key_as_string":"2017-02-10T03:17:00.000Z","key":1486696620000,"doc_count":13},{"key_as_string":"2017-02-10T03:18:00.000Z","key":1486696680000,"doc_count":7},{"key_as_string":"2017-02-10T03:19:00.000Z","key":1486696740000,"doc_count":13},{"key_as_string":"2017-02-10T03:20:00.000Z","key":1486696800000,"doc_count":9},{"key_as_string":"2017-02-10T03:21:00.000Z","key":1486696860000,"doc_count":8},{"key_as_string":"2017-02-10T03:22:00.000Z","key":1486696920000,"doc_count":16},{"key_as_string":"2017-02-10T03:23:00.000Z","key":1486696980000,"doc_count":9},{"key_as_string":"2017-02-10T03:24:00.000Z","key":1486697040000,"doc_count":14},{"key_as_string":"2017-02-10T03:25:00.000Z","key":1486697100000,"doc_count":11},{"key_as_string":"2017-02-10T03:26:00.000Z","key":1486697160000,"doc_count":11},{"key_as_string":"2017-02-10T03:27:00.000Z","key":1486697220000,"doc_count":9},{"key_as_string":"2017-02-10T03:28:00.000Z","key":1486697280000,"doc_count":9},{"key_as_string":"2017-02-10T03:29:00.000Z","key":1486697340000,"doc_count":11},{"key_as_string":"2017-02-10T03:30:00.000Z","key":1486697400000,"doc_count":7},{"key_as_string":"2017-02-10T03:31:00.000Z","key":1486697460000,"doc_count":14},{"key_as_string":"2017-02-10T03:32:00.000Z","key":1486697520000,"doc_count":7},{"key_as_string":"2017-02-10T03:33:00.000Z","key":1486697580000,"doc_count":14},{"key_as_string":"2017-02-10T03:34:00.000Z","key":1486697640000,"doc_count":8},{"key_as_string":"2017-02-10T03:35:00.000Z","key":1486697700000,"doc_count":8},{"key_as_string":"2017-02-10T03:36:00.000Z","key":1486697760000,"doc_count":15},{"key_as_string":"2017-02-10T03:37:00.000Z","key":1486697820000,"doc_count":9},{"key_as_string":"2017-02-10T03:38:00.000Z","key":1486697880000,"doc_count":12},{"key_as_string":"2017-02-10T03:39:00.000Z","key":1486697940000,"doc_count":15},{"key_as_string":"2017-02-10T03:40:00.000Z","key":1486698000000,"doc_count":12},{"key_as_string":"2017-02-10T03:41:00.000Z","key":1486698060000,"doc_count":12},{"key_as_string":"2017-02-10T03:42:00.000Z","key":1486698120000,"doc_count":10},{"key_as_string":"2017-02-10T03:43:00.000Z","key":1486698180000,"doc_count":11},{"key_as_string":"2017-02-10T03:44:00.000Z","key":1486698240000,"doc_count":12},{"key_as_string":"2017-02-10T03:45:00.000Z","key":1486698300000,"doc_count":9},{"key_as_string":"2017-02-10T03:46:00.000Z","key":1486698360000,"doc_count":13},{"key_as_string":"2017-02-10T03:47:00.000Z","key":1486698420000,"doc_count":8},{"key_as_string":"2017-02-10T03:48:00.000Z","key":1486698480000,"doc_count":15},{"key_as_string":"2017-02-10T03:49:00.000Z","key":1486698540000,"doc_count":8},{"key_as_string":"2017-02-10T03:50:00.000Z","key":1486698600000,"doc_count":12},{"key_as_string":"2017-02-10T03:51:00.000Z","key":1486698660000,"doc_count":16},{"key_as_string":"2017-02-10T03:52:00.000Z","key":1486698720000,"doc_count":7},{"key_as_string":"2017-02-10T03:53:00.000Z","key":1486698780000,"doc_count":12},{"key_as_string":"2017-02-10T03:54:00.000Z","key":1486698840000,"doc_count":8},{"key_as_string":"2017-02-10T03:55:00.000Z","key":1486698900000,"doc_count":7},{"key_as_string":"2017-02-10T03:56:00.000Z","key":1486698960000,"doc_count":13},{"key_as_string":"2017-02-10T03:57:00.000Z","key":1486699020000,"doc_count":8},{"key_as_string":"2017-02-10T03:58:00.000Z","key":1486699080000,"doc_count":10},{"key_as_string":"2017-02-10T03:59:00.000Z","key":1486699140000,"doc_count":13},{"key_as_string":"2017-02-10T04:00:00.000Z","key":1486699200000,"doc_count":11},{"key_as_string":"2017-02-10T04:01:00.000Z","key":1486699260000,"doc_count":10},{"key_as_string":"2017-02-10T04:02:00.000Z","key":1486699320000,"doc_count":12},{"key_as_string":"2017-02-10T04:03:00.000Z","key":1486699380000,"doc_count":9},{"key_as_string":"2017-02-10T04:04:00.000Z","key":1486699440000,"doc_count":13},{"key_as_string":"2017-02-10T04:05:00.000Z","key":1486699500000,"doc_count":8},{"key_as_string":"2017-02-10T04:06:00.000Z","key":1486699560000,"doc_count":15},{"key_as_string":"2017-02-10T04:07:00.000Z","key":1486699620000,"doc_count":11},{"key_as_string":"2017-02-10T04:08:00.000Z","key":1486699680000,"doc_count":11},{"key_as_string":"2017-02-10T04:09:00.000Z","key":1486699740000,"doc_count":16},{"key_as_string":"2017-02-10T04:10:00.000Z","key":1486699800000,"doc_count":8},{"key_as_string":"2017-02-10T04:11:00.000Z","key":1486699860000,"doc_count":15},{"key_as_string":"2017-02-10T04:12:00.000Z","key":1486699920000,"doc_count":8},{"key_as_string":"2017-02-10T04:13:00.000Z","key":1486699980000,"doc_count":11},{"key_as_string":"2017-02-10T04:14:00.000Z","key":1486700040000,"doc_count":11},{"key_as_string":"2017-02-10T04:15:00.000Z","key":1486700100000,"doc_count":13},{"key_as_string":"2017-02-10T04:16:00.000Z","key":1486700160000,"doc_count":6},{"key_as_string":"2017-02-10T04:17:00.000Z","key":1486700220000,"doc_count":11},{"key_as_string":"2017-02-10T04:18:00.000Z","key":1486700280000,"doc_count":11},{"key_as_string":"2017-02-10T04:19:00.000Z","key":1486700340000,"doc_count":9},{"key_as_string":"2017-02-10T04:20:00.000Z","key":1486700400000,"doc_count":17},{"key_as_string":"2017-02-10T04:21:00.000Z","key":1486700460000,"doc_count":7},{"key_as_string":"2017-02-10T04:22:00.000Z","key":1486700520000,"doc_count":14},{"key_as_string":"2017-02-10T04:23:00.000Z","key":1486700580000,"doc_count":13},{"key_as_string":"2017-02-10T04:24:00.000Z","key":1486700640000,"doc_count":7},{"key_as_string":"2017-02-10T04:25:00.000Z","key":1486700700000,"doc_count":11},{"key_as_string":"2017-02-10T04:26:00.000Z","key":1486700760000,"doc_count":12},{"key_as_string":"2017-02-10T04:27:00.000Z","key":1486700820000,"doc_count":11},{"key_as_string":"2017-02-10T04:28:00.000Z","key":1486700880000,"doc_count":9},{"key_as_string":"2017-02-10T04:29:00.000Z","key":1486700940000,"doc_count":9},{"key_as_string":"2017-02-10T04:30:00.000Z","key":1486701000000,"doc_count":10},{"key_as_string":"2017-02-10T04:31:00.000Z","key":1486701060000,"doc_count":10},{"key_as_string":"2017-02-10T04:32:00.000Z","key":1486701120000,"doc_count":10},{"key_as_string":"2017-02-10T04:33:00.000Z","key":1486701180000,"doc_count":11},{"key_as_string":"2017-02-10T04:34:00.000Z","key":1486701240000,"doc_count":13},{"key_as_string":"2017-02-10T04:35:00.000Z","key":1486701300000,"doc_count":6},{"key_as_string":"2017-02-10T04:36:00.000Z","key":1486701360000,"doc_count":8},{"key_as_string":"2017-02-10T04:37:00.000Z","key":1486701420000,"doc_count":14},{"key_as_string":"2017-02-10T04:38:00.000Z","key":1486701480000,"doc_count":9},{"key_as_string":"2017-02-10T04:39:00.000Z","key":1486701540000,"doc_count":12},{"key_as_string":"2017-02-10T04:40:00.000Z","key":1486701600000,"doc_count":10},{"key_as_string":"2017-02-10T04:41:00.000Z","key":1486701660000,"doc_count":9},{"key_as_string":"2017-02-10T04:42:00.000Z","key":1486701720000,"doc_count":10},{"key_as_string":"2017-02-10T04:43:00.000Z","key":1486701780000,"doc_count":9},{"key_as_string":"2017-02-10T04:44:00.000Z","key":1486701840000,"doc_count":11},{"key_as_string":"2017-02-10T04:45:00.000Z","key":1486701900000,"doc_count":10},{"key_as_string":"2017-02-10T04:46:00.000Z","key":1486701960000,"doc_count":19},{"key_as_string":"2017-02-10T04:47:00.000Z","key":1486702020000,"doc_count":11},{"key_as_string":"2017-02-10T04:48:00.000Z","key":1486702080000,"doc_count":10},{"key_as_string":"2017-02-10T04:49:00.000Z","key":1486702140000,"doc_count":10},{"key_as_string":"2017-02-10T04:50:00.000Z","key":1486702200000,"doc_count":10},{"key_as_string":"2017-02-10T04:51:00.000Z","key":1486702260000,"doc_count":11},{"key_as_string":"2017-02-10T04:52:00.000Z","key":1486702320000,"doc_count":17},{"key_as_string":"2017-02-10T04:53:00.000Z","key":1486702380000,"doc_count":6},{"key_as_string":"2017-02-10T04:54:00.000Z","key":1486702440000,"doc_count":7},{"key_as_string":"2017-02-10T04:55:00.000Z","key":1486702500000,"doc_count":10},{"key_as_string":"2017-02-10T04:56:00.000Z","key":1486702560000,"doc_count":10},{"key_as_string":"2017-02-10T04:57:00.000Z","key":1486702620000,"doc_count":10},{"key_as_string":"2017-02-10T04:58:00.000Z","key":1486702680000,"doc_count":11},{"key_as_string":"2017-02-10T04:59:00.000Z","key":1486702740000,"doc_count":10},{"key_as_string":"2017-02-10T05:00:00.000Z","key":1486702800000,"doc_count":8},{"key_as_string":"2017-02-10T05:01:00.000Z","key":1486702860000,"doc_count":13},{"key_as_string":"2017-02-10T05:02:00.000Z","key":1486702920000,"doc_count":11},{"key_as_string":"2017-02-10T05:03:00.000Z","key":1486702980000,"doc_count":7},{"key_as_string":"2017-02-10T05:04:00.000Z","key":1486703040000,"doc_count":10},{"key_as_string":"2017-02-10T05:05:00.000Z","key":1486703100000,"doc_count":10},{"key_as_string":"2017-02-10T05:06:00.000Z","key":1486703160000,"doc_count":10},{"key_as_string":"2017-02-10T05:07:00.000Z","key":1486703220000,"doc_count":9},{"key_as_string":"2017-02-10T05:08:00.000Z","key":1486703280000,"doc_count":9},{"key_as_string":"2017-02-10T05:09:00.000Z","key":1486703340000,"doc_count":15},{"key_as_string":"2017-02-10T05:10:00.000Z","key":1486703400000,"doc_count":12},{"key_as_string":"2017-02-10T05:11:00.000Z","key":1486703460000,"doc_count":11},{"key_as_string":"2017-02-10T05:12:00.000Z","key":1486703520000,"doc_count":11},{"key_as_string":"2017-02-10T05:13:00.000Z","key":1486703580000,"doc_count":10},{"key_as_string":"2017-02-10T05:14:00.000Z","key":1486703640000,"doc_count":14},{"key_as_string":"2017-02-10T05:15:00.000Z","key":1486703700000,"doc_count":9},{"key_as_string":"2017-02-10T05:16:00.000Z","key":1486703760000,"doc_count":11},{"key_as_string":"2017-02-10T05:17:00.000Z","key":1486703820000,"doc_count":8},{"key_as_string":"2017-02-10T05:18:00.000Z","key":1486703880000,"doc_count":11},{"key_as_string":"2017-02-10T05:19:00.000Z","key":1486703940000,"doc_count":7},{"key_as_string":"2017-02-10T05:20:00.000Z","key":1486704000000,"doc_count":13},{"key_as_string":"2017-02-10T05:21:00.000Z","key":1486704060000,"doc_count":10},{"key_as_string":"2017-02-10T05:22:00.000Z","key":1486704120000,"doc_count":13},{"key_as_string":"2017-02-10T05:23:00.000Z","key":1486704180000,"doc_count":11},{"key_as_string":"2017-02-10T05:24:00.000Z","key":1486704240000,"doc_count":10},{"key_as_string":"2017-02-10T05:25:00.000Z","key":1486704300000,"doc_count":16},{"key_as_string":"2017-02-10T05:26:00.000Z","key":1486704360000,"doc_count":10},{"key_as_string":"2017-02-10T05:27:00.000Z","key":1486704420000,"doc_count":12},{"key_as_string":"2017-02-10T05:28:00.000Z","key":1486704480000,"doc_count":15},{"key_as_string":"2017-02-10T05:29:00.000Z","key":1486704540000,"doc_count":9},{"key_as_string":"2017-02-10T05:30:00.000Z","key":1486704600000,"doc_count":11},{"key_as_string":"2017-02-10T05:31:00.000Z","key":1486704660000,"doc_count":8},{"key_as_string":"2017-02-10T05:32:00.000Z","key":1486704720000,"doc_count":10},{"key_as_string":"2017-02-10T05:33:00.000Z","key":1486704780000,"doc_count":12},{"key_as_string":"2017-02-10T05:34:00.000Z","key":1486704840000,"doc_count":11},{"key_as_string":"2017-02-10T05:35:00.000Z","key":1486704900000,"doc_count":8},{"key_as_string":"2017-02-10T05:36:00.000Z","key":1486704960000,"doc_count":12},{"key_as_string":"2017-02-10T05:37:00.000Z","key":1486705020000,"doc_count":8},{"key_as_string":"2017-02-10T05:38:00.000Z","key":1486705080000,"doc_count":8},{"key_as_string":"2017-02-10T05:39:00.000Z","key":1486705140000,"doc_count":12},{"key_as_string":"2017-02-10T05:40:00.000Z","key":1486705200000,"doc_count":14},{"key_as_string":"2017-02-10T05:41:00.000Z","key":1486705260000,"doc_count":15},{"key_as_string":"2017-02-10T05:42:00.000Z","key":1486705320000,"doc_count":5},{"key_as_string":"2017-02-10T05:43:00.000Z","key":1486705380000,"doc_count":11},{"key_as_string":"2017-02-10T05:44:00.000Z","key":1486705440000,"doc_count":12},{"key_as_string":"2017-02-10T05:45:00.000Z","key":1486705500000,"doc_count":6},{"key_as_string":"2017-02-10T05:46:00.000Z","key":1486705560000,"doc_count":12},{"key_as_string":"2017-02-10T05:47:00.000Z","key":1486705620000,"doc_count":10},{"key_as_string":"2017-02-10T05:48:00.000Z","key":1486705680000,"doc_count":12},{"key_as_string":"2017-02-10T05:49:00.000Z","key":1486705740000,"doc_count":17},{"key_as_string":"2017-02-10T05:50:00.000Z","key":1486705800000,"doc_count":10},{"key_as_string":"2017-02-10T05:51:00.000Z","key":1486705860000,"doc_count":13},{"key_as_string":"2017-02-10T05:52:00.000Z","key":1486705920000,"doc_count":13},{"key_as_string":"2017-02-10T05:53:00.000Z","key":1486705980000,"doc_count":10},{"key_as_string":"2017-02-10T05:54:00.000Z","key":1486706040000,"doc_count":10},{"key_as_string":"2017-02-10T05:55:00.000Z","key":1486706100000,"doc_count":15},{"key_as_string":"2017-02-10T05:56:00.000Z","key":1486706160000,"doc_count":8},{"key_as_string":"2017-02-10T05:57:00.000Z","key":1486706220000,"doc_count":10},{"key_as_string":"2017-02-10T05:58:00.000Z","key":1486706280000,"doc_count":11},{"key_as_string":"2017-02-10T05:59:00.000Z","key":1486706340000,"doc_count":10},{"key_as_string":"2017-02-10T06:00:00.000Z","key":1486706400000,"doc_count":19},{"key_as_string":"2017-02-10T06:01:00.000Z","key":1486706460000,"doc_count":13},{"key_as_string":"2017-02-10T06:02:00.000Z","key":1486706520000,"doc_count":14},{"key_as_string":"2017-02-10T06:03:00.000Z","key":1486706580000,"doc_count":11},{"key_as_string":"2017-02-10T06:04:00.000Z","key":1486706640000,"doc_count":13},{"key_as_string":"2017-02-10T06:05:00.000Z","key":1486706700000,"doc_count":6},{"key_as_string":"2017-02-10T06:06:00.000Z","key":1486706760000,"doc_count":12},{"key_as_string":"2017-02-10T06:07:00.000Z","key":1486706820000,"doc_count":14},{"key_as_string":"2017-02-10T06:08:00.000Z","key":1486706880000,"doc_count":12},{"key_as_string":"2017-02-10T06:09:00.000Z","key":1486706940000,"doc_count":14},{"key_as_string":"2017-02-10T06:10:00.000Z","key":1486707000000,"doc_count":8},{"key_as_string":"2017-02-10T06:11:00.000Z","key":1486707060000,"doc_count":6},{"key_as_string":"2017-02-10T06:12:00.000Z","key":1486707120000,"doc_count":17},{"key_as_string":"2017-02-10T06:13:00.000Z","key":1486707180000,"doc_count":14},{"key_as_string":"2017-02-10T06:14:00.000Z","key":1486707240000,"doc_count":5},{"key_as_string":"2017-02-10T06:15:00.000Z","key":1486707300000,"doc_count":17},{"key_as_string":"2017-02-10T06:16:00.000Z","key":1486707360000,"doc_count":9},{"key_as_string":"2017-02-10T06:17:00.000Z","key":1486707420000,"doc_count":13},{"key_as_string":"2017-02-10T06:18:00.000Z","key":1486707480000,"doc_count":8},{"key_as_string":"2017-02-10T06:19:00.000Z","key":1486707540000,"doc_count":14},{"key_as_string":"2017-02-10T06:20:00.000Z","key":1486707600000,"doc_count":8},{"key_as_string":"2017-02-10T06:21:00.000Z","key":1486707660000,"doc_count":11},{"key_as_string":"2017-02-10T06:22:00.000Z","key":1486707720000,"doc_count":15},{"key_as_string":"2017-02-10T06:23:00.000Z","key":1486707780000,"doc_count":16},{"key_as_string":"2017-02-10T06:24:00.000Z","key":1486707840000,"doc_count":11},{"key_as_string":"2017-02-10T06:25:00.000Z","key":1486707900000,"doc_count":10},{"key_as_string":"2017-02-10T06:26:00.000Z","key":1486707960000,"doc_count":8},{"key_as_string":"2017-02-10T06:27:00.000Z","key":1486708020000,"doc_count":18},{"key_as_string":"2017-02-10T06:28:00.000Z","key":1486708080000,"doc_count":11},{"key_as_string":"2017-02-10T06:29:00.000Z","key":1486708140000,"doc_count":10},{"key_as_string":"2017-02-10T06:30:00.000Z","key":1486708200000,"doc_count":9},{"key_as_string":"2017-02-10T06:31:00.000Z","key":1486708260000,"doc_count":13},{"key_as_string":"2017-02-10T06:32:00.000Z","key":1486708320000,"doc_count":10},{"key_as_string":"2017-02-10T06:33:00.000Z","key":1486708380000,"doc_count":12},{"key_as_string":"2017-02-10T06:34:00.000Z","key":1486708440000,"doc_count":10},{"key_as_string":"2017-02-10T06:35:00.000Z","key":1486708500000,"doc_count":9},{"key_as_string":"2017-02-10T06:36:00.000Z","key":1486708560000,"doc_count":17},{"key_as_string":"2017-02-10T06:37:00.000Z","key":1486708620000,"doc_count":15},{"key_as_string":"2017-02-10T06:38:00.000Z","key":1486708680000,"doc_count":11},{"key_as_string":"2017-02-10T06:39:00.000Z","key":1486708740000,"doc_count":12},{"key_as_string":"2017-02-10T06:40:00.000Z","key":1486708800000,"doc_count":11},{"key_as_string":"2017-02-10T06:41:00.000Z","key":1486708860000,"doc_count":13},{"key_as_string":"2017-02-10T06:42:00.000Z","key":1486708920000,"doc_count":10},{"key_as_string":"2017-02-10T06:43:00.000Z","key":1486708980000,"doc_count":12},{"key_as_string":"2017-02-10T06:44:00.000Z","key":1486709040000,"doc_count":14},{"key_as_string":"2017-02-10T06:45:00.000Z","key":1486709100000,"doc_count":7},{"key_as_string":"2017-02-10T06:46:00.000Z","key":1486709160000,"doc_count":17},{"key_as_string":"2017-02-10T06:47:00.000Z","key":1486709220000,"doc_count":9},{"key_as_string":"2017-02-10T06:48:00.000Z","key":1486709280000,"doc_count":12},{"key_as_string":"2017-02-10T06:49:00.000Z","key":1486709340000,"doc_count":14},{"key_as_string":"2017-02-10T06:50:00.000Z","key":1486709400000,"doc_count":15},{"key_as_string":"2017-02-10T06:51:00.000Z","key":1486709460000,"doc_count":12},{"key_as_string":"2017-02-10T06:52:00.000Z","key":1486709520000,"doc_count":8},{"key_as_string":"2017-02-10T06:53:00.000Z","key":1486709580000,"doc_count":13},{"key_as_string":"2017-02-10T06:54:00.000Z","key":1486709640000,"doc_count":15},{"key_as_string":"2017-02-10T06:55:00.000Z","key":1486709700000,"doc_count":8},{"key_as_string":"2017-02-10T06:56:00.000Z","key":1486709760000,"doc_count":7},{"key_as_string":"2017-02-10T06:57:00.000Z","key":1486709820000,"doc_count":18},{"key_as_string":"2017-02-10T06:58:00.000Z","key":1486709880000,"doc_count":11},{"key_as_string":"2017-02-10T06:59:00.000Z","key":1486709940000,"doc_count":14},{"key_as_string":"2017-02-10T07:00:00.000Z","key":1486710000000,"doc_count":8},{"key_as_string":"2017-02-10T07:01:00.000Z","key":1486710060000,"doc_count":12},{"key_as_string":"2017-02-10T07:02:00.000Z","key":1486710120000,"doc_count":14},{"key_as_string":"2017-02-10T07:03:00.000Z","key":1486710180000,"doc_count":9},{"key_as_string":"2017-02-10T07:04:00.000Z","key":1486710240000,"doc_count":13},{"key_as_string":"2017-02-10T07:05:00.000Z","key":1486710300000,"doc_count":12},{"key_as_string":"2017-02-10T07:06:00.000Z","key":1486710360000,"doc_count":15},{"key_as_string":"2017-02-10T07:07:00.000Z","key":1486710420000,"doc_count":19},{"key_as_string":"2017-02-10T07:08:00.000Z","key":1486710480000,"doc_count":11},{"key_as_string":"2017-02-10T07:09:00.000Z","key":1486710540000,"doc_count":16},{"key_as_string":"2017-02-10T07:10:00.000Z","key":1486710600000,"doc_count":11},{"key_as_string":"2017-02-10T07:11:00.000Z","key":1486710660000,"doc_count":13},{"key_as_string":"2017-02-10T07:12:00.000Z","key":1486710720000,"doc_count":12},{"key_as_string":"2017-02-10T07:13:00.000Z","key":1486710780000,"doc_count":9},{"key_as_string":"2017-02-10T07:14:00.000Z","key":1486710840000,"doc_count":21},{"key_as_string":"2017-02-10T07:15:00.000Z","key":1486710900000,"doc_count":11},{"key_as_string":"2017-02-10T07:16:00.000Z","key":1486710960000,"doc_count":6},{"key_as_string":"2017-02-10T07:17:00.000Z","key":1486711020000,"doc_count":16},{"key_as_string":"2017-02-10T07:18:00.000Z","key":1486711080000,"doc_count":15},{"key_as_string":"2017-02-10T07:19:00.000Z","key":1486711140000,"doc_count":13},{"key_as_string":"2017-02-10T07:20:00.000Z","key":1486711200000,"doc_count":15},{"key_as_string":"2017-02-10T07:21:00.000Z","key":1486711260000,"doc_count":14},{"key_as_string":"2017-02-10T07:22:00.000Z","key":1486711320000,"doc_count":14},{"key_as_string":"2017-02-10T07:23:00.000Z","key":1486711380000,"doc_count":13},{"key_as_string":"2017-02-10T07:24:00.000Z","key":1486711440000,"doc_count":10},{"key_as_string":"2017-02-10T07:25:00.000Z","key":1486711500000,"doc_count":11},{"key_as_string":"2017-02-10T07:26:00.000Z","key":1486711560000,"doc_count":12},{"key_as_string":"2017-02-10T07:27:00.000Z","key":1486711620000,"doc_count":15},{"key_as_string":"2017-02-10T07:28:00.000Z","key":1486711680000,"doc_count":7},{"key_as_string":"2017-02-10T07:29:00.000Z","key":1486711740000,"doc_count":18},{"key_as_string":"2017-02-10T07:30:00.000Z","key":1486711800000,"doc_count":14},{"key_as_string":"2017-02-10T07:31:00.000Z","key":1486711860000,"doc_count":12},{"key_as_string":"2017-02-10T07:32:00.000Z","key":1486711920000,"doc_count":16},{"key_as_string":"2017-02-10T07:33:00.000Z","key":1486711980000,"doc_count":12},{"key_as_string":"2017-02-10T07:34:00.000Z","key":1486712040000,"doc_count":15},{"key_as_string":"2017-02-10T07:35:00.000Z","key":1486712100000,"doc_count":12},{"key_as_string":"2017-02-10T07:36:00.000Z","key":1486712160000,"doc_count":10},{"key_as_string":"2017-02-10T07:37:00.000Z","key":1486712220000,"doc_count":12},{"key_as_string":"2017-02-10T07:38:00.000Z","key":1486712280000,"doc_count":13},{"key_as_string":"2017-02-10T07:39:00.000Z","key":1486712340000,"doc_count":8},{"key_as_string":"2017-02-10T07:40:00.000Z","key":1486712400000,"doc_count":11},{"key_as_string":"2017-02-10T07:41:00.000Z","key":1486712460000,"doc_count":13},{"key_as_string":"2017-02-10T07:42:00.000Z","key":1486712520000,"doc_count":19},{"key_as_string":"2017-02-10T07:43:00.000Z","key":1486712580000,"doc_count":10},{"key_as_string":"2017-02-10T07:44:00.000Z","key":1486712640000,"doc_count":19},{"key_as_string":"2017-02-10T07:45:00.000Z","key":1486712700000,"doc_count":8},{"key_as_string":"2017-02-10T07:46:00.000Z","key":1486712760000,"doc_count":13},{"key_as_string":"2017-02-10T07:47:00.000Z","key":1486712820000,"doc_count":17},{"key_as_string":"2017-02-10T07:48:00.000Z","key":1486712880000,"doc_count":14},{"key_as_string":"2017-02-10T07:49:00.000Z","key":1486712940000,"doc_count":13},{"key_as_string":"2017-02-10T07:50:00.000Z","key":1486713000000,"doc_count":14},{"key_as_string":"2017-02-10T07:51:00.000Z","key":1486713060000,"doc_count":11},{"key_as_string":"2017-02-10T07:52:00.000Z","key":1486713120000,"doc_count":16},{"key_as_string":"2017-02-10T07:53:00.000Z","key":1486713180000,"doc_count":13},{"key_as_string":"2017-02-10T07:54:00.000Z","key":1486713240000,"doc_count":12},{"key_as_string":"2017-02-10T07:55:00.000Z","key":1486713300000,"doc_count":13},{"key_as_string":"2017-02-10T07:56:00.000Z","key":1486713360000,"doc_count":11},{"key_as_string":"2017-02-10T07:57:00.000Z","key":1486713420000,"doc_count":9},{"key_as_string":"2017-02-10T07:58:00.000Z","key":1486713480000,"doc_count":11},{"key_as_string":"2017-02-10T07:59:00.000Z","key":1486713540000,"doc_count":14},{"key_as_string":"2017-02-10T08:00:00.000Z","key":1486713600000,"doc_count":9},{"key_as_string":"2017-02-10T08:01:00.000Z","key":1486713660000,"doc_count":13},{"key_as_string":"2017-02-10T08:02:00.000Z","key":1486713720000,"doc_count":13},{"key_as_string":"2017-02-10T08:03:00.000Z","key":1486713780000,"doc_count":12},{"key_as_string":"2017-02-10T08:04:00.000Z","key":1486713840000,"doc_count":19},{"key_as_string":"2017-02-10T08:05:00.000Z","key":1486713900000,"doc_count":9},{"key_as_string":"2017-02-10T08:06:00.000Z","key":1486713960000,"doc_count":15},{"key_as_string":"2017-02-10T08:07:00.000Z","key":1486714020000,"doc_count":9},{"key_as_string":"2017-02-10T08:08:00.000Z","key":1486714080000,"doc_count":15},{"key_as_string":"2017-02-10T08:09:00.000Z","key":1486714140000,"doc_count":11},{"key_as_string":"2017-02-10T08:10:00.000Z","key":1486714200000,"doc_count":10},{"key_as_string":"2017-02-10T08:11:00.000Z","key":1486714260000,"doc_count":13},{"key_as_string":"2017-02-10T08:12:00.000Z","key":1486714320000,"doc_count":8},{"key_as_string":"2017-02-10T08:13:00.000Z","key":1486714380000,"doc_count":13},{"key_as_string":"2017-02-10T08:14:00.000Z","key":1486714440000,"doc_count":15},{"key_as_string":"2017-02-10T08:15:00.000Z","key":1486714500000,"doc_count":17},{"key_as_string":"2017-02-10T08:16:00.000Z","key":1486714560000,"doc_count":13},{"key_as_string":"2017-02-10T08:17:00.000Z","key":1486714620000,"doc_count":17},{"key_as_string":"2017-02-10T08:18:00.000Z","key":1486714680000,"doc_count":12},{"key_as_string":"2017-02-10T08:19:00.000Z","key":1486714740000,"doc_count":17},{"key_as_string":"2017-02-10T08:20:00.000Z","key":1486714800000,"doc_count":15},{"key_as_string":"2017-02-10T08:21:00.000Z","key":1486714860000,"doc_count":12},{"key_as_string":"2017-02-10T08:22:00.000Z","key":1486714920000,"doc_count":12},{"key_as_string":"2017-02-10T08:23:00.000Z","key":1486714980000,"doc_count":14},{"key_as_string":"2017-02-10T08:24:00.000Z","key":1486715040000,"doc_count":15},{"key_as_string":"2017-02-10T08:25:00.000Z","key":1486715100000,"doc_count":13},{"key_as_string":"2017-02-10T08:26:00.000Z","key":1486715160000,"doc_count":11},{"key_as_string":"2017-02-10T08:27:00.000Z","key":1486715220000,"doc_count":15},{"key_as_string":"2017-02-10T08:28:00.000Z","key":1486715280000,"doc_count":11},{"key_as_string":"2017-02-10T08:29:00.000Z","key":1486715340000,"doc_count":13},{"key_as_string":"2017-02-10T08:30:00.000Z","key":1486715400000,"doc_count":12},{"key_as_string":"2017-02-10T08:31:00.000Z","key":1486715460000,"doc_count":12},{"key_as_string":"2017-02-10T08:32:00.000Z","key":1486715520000,"doc_count":16},{"key_as_string":"2017-02-10T08:33:00.000Z","key":1486715580000,"doc_count":12},{"key_as_string":"2017-02-10T08:34:00.000Z","key":1486715640000,"doc_count":12},{"key_as_string":"2017-02-10T08:35:00.000Z","key":1486715700000,"doc_count":13},{"key_as_string":"2017-02-10T08:36:00.000Z","key":1486715760000,"doc_count":11},{"key_as_string":"2017-02-10T08:37:00.000Z","key":1486715820000,"doc_count":17},{"key_as_string":"2017-02-10T08:38:00.000Z","key":1486715880000,"doc_count":14},{"key_as_string":"2017-02-10T08:39:00.000Z","key":1486715940000,"doc_count":7},{"key_as_string":"2017-02-10T08:40:00.000Z","key":1486716000000,"doc_count":22},{"key_as_string":"2017-02-10T08:41:00.000Z","key":1486716060000,"doc_count":12},{"key_as_string":"2017-02-10T08:42:00.000Z","key":1486716120000,"doc_count":17},{"key_as_string":"2017-02-10T08:43:00.000Z","key":1486716180000,"doc_count":13},{"key_as_string":"2017-02-10T08:44:00.000Z","key":1486716240000,"doc_count":17},{"key_as_string":"2017-02-10T08:45:00.000Z","key":1486716300000,"doc_count":14},{"key_as_string":"2017-02-10T08:46:00.000Z","key":1486716360000,"doc_count":11},{"key_as_string":"2017-02-10T08:47:00.000Z","key":1486716420000,"doc_count":18},{"key_as_string":"2017-02-10T08:48:00.000Z","key":1486716480000,"doc_count":11},{"key_as_string":"2017-02-10T08:49:00.000Z","key":1486716540000,"doc_count":18},{"key_as_string":"2017-02-10T08:50:00.000Z","key":1486716600000,"doc_count":13},{"key_as_string":"2017-02-10T08:51:00.000Z","key":1486716660000,"doc_count":12},{"key_as_string":"2017-02-10T08:52:00.000Z","key":1486716720000,"doc_count":13},{"key_as_string":"2017-02-10T08:53:00.000Z","key":1486716780000,"doc_count":14},{"key_as_string":"2017-02-10T08:54:00.000Z","key":1486716840000,"doc_count":18},{"key_as_string":"2017-02-10T08:55:00.000Z","key":1486716900000,"doc_count":10},{"key_as_string":"2017-02-10T08:56:00.000Z","key":1486716960000,"doc_count":17},{"key_as_string":"2017-02-10T08:57:00.000Z","key":1486717020000,"doc_count":13},{"key_as_string":"2017-02-10T08:58:00.000Z","key":1486717080000,"doc_count":14},{"key_as_string":"2017-02-10T08:59:00.000Z","key":1486717140000,"doc_count":11},{"key_as_string":"2017-02-10T09:00:00.000Z","key":1486717200000,"doc_count":11},{"key_as_string":"2017-02-10T09:01:00.000Z","key":1486717260000,"doc_count":12},{"key_as_string":"2017-02-10T09:02:00.000Z","key":1486717320000,"doc_count":10},{"key_as_string":"2017-02-10T09:03:00.000Z","key":1486717380000,"doc_count":16},{"key_as_string":"2017-02-10T09:04:00.000Z","key":1486717440000,"doc_count":9},{"key_as_string":"2017-02-10T09:05:00.000Z","key":1486717500000,"doc_count":15},{"key_as_string":"2017-02-10T09:06:00.000Z","key":1486717560000,"doc_count":15},{"key_as_string":"2017-02-10T09:07:00.000Z","key":1486717620000,"doc_count":17},{"key_as_string":"2017-02-10T09:08:00.000Z","key":1486717680000,"doc_count":10},{"key_as_string":"2017-02-10T09:09:00.000Z","key":1486717740000,"doc_count":14},{"key_as_string":"2017-02-10T09:10:00.000Z","key":1486717800000,"doc_count":12},{"key_as_string":"2017-02-10T09:11:00.000Z","key":1486717860000,"doc_count":16},{"key_as_string":"2017-02-10T09:12:00.000Z","key":1486717920000,"doc_count":9},{"key_as_string":"2017-02-10T09:13:00.000Z","key":1486717980000,"doc_count":14},{"key_as_string":"2017-02-10T09:14:00.000Z","key":1486718040000,"doc_count":14},{"key_as_string":"2017-02-10T09:15:00.000Z","key":1486718100000,"doc_count":18},{"key_as_string":"2017-02-10T09:16:00.000Z","key":1486718160000,"doc_count":16},{"key_as_string":"2017-02-10T09:17:00.000Z","key":1486718220000,"doc_count":16},{"key_as_string":"2017-02-10T09:18:00.000Z","key":1486718280000,"doc_count":13},{"key_as_string":"2017-02-10T09:19:00.000Z","key":1486718340000,"doc_count":11},{"key_as_string":"2017-02-10T09:20:00.000Z","key":1486718400000,"doc_count":14},{"key_as_string":"2017-02-10T09:21:00.000Z","key":1486718460000,"doc_count":12},{"key_as_string":"2017-02-10T09:22:00.000Z","key":1486718520000,"doc_count":10},{"key_as_string":"2017-02-10T09:23:00.000Z","key":1486718580000,"doc_count":12},{"key_as_string":"2017-02-10T09:24:00.000Z","key":1486718640000,"doc_count":15},{"key_as_string":"2017-02-10T09:25:00.000Z","key":1486718700000,"doc_count":9},{"key_as_string":"2017-02-10T09:26:00.000Z","key":1486718760000,"doc_count":16},{"key_as_string":"2017-02-10T09:27:00.000Z","key":1486718820000,"doc_count":17},{"key_as_string":"2017-02-10T09:28:00.000Z","key":1486718880000,"doc_count":12},{"key_as_string":"2017-02-10T09:29:00.000Z","key":1486718940000,"doc_count":10},{"key_as_string":"2017-02-10T09:30:00.000Z","key":1486719000000,"doc_count":12},{"key_as_string":"2017-02-10T09:31:00.000Z","key":1486719060000,"doc_count":13},{"key_as_string":"2017-02-10T09:32:00.000Z","key":1486719120000,"doc_count":13},{"key_as_string":"2017-02-10T09:33:00.000Z","key":1486719180000,"doc_count":11},{"key_as_string":"2017-02-10T09:34:00.000Z","key":1486719240000,"doc_count":11},{"key_as_string":"2017-02-10T09:35:00.000Z","key":1486719300000,"doc_count":15},{"key_as_string":"2017-02-10T09:36:00.000Z","key":1486719360000,"doc_count":10},{"key_as_string":"2017-02-10T09:37:00.000Z","key":1486719420000,"doc_count":12},{"key_as_string":"2017-02-10T09:38:00.000Z","key":1486719480000,"doc_count":19},{"key_as_string":"2017-02-10T09:39:00.000Z","key":1486719540000,"doc_count":12},{"key_as_string":"2017-02-10T09:40:00.000Z","key":1486719600000,"doc_count":19},{"key_as_string":"2017-02-10T09:41:00.000Z","key":1486719660000,"doc_count":16},{"key_as_string":"2017-02-10T09:42:00.000Z","key":1486719720000,"doc_count":19},{"key_as_string":"2017-02-10T09:43:00.000Z","key":1486719780000,"doc_count":7},{"key_as_string":"2017-02-10T09:44:00.000Z","key":1486719840000,"doc_count":18},{"key_as_string":"2017-02-10T09:45:00.000Z","key":1486719900000,"doc_count":12},{"key_as_string":"2017-02-10T09:46:00.000Z","key":1486719960000,"doc_count":14},{"key_as_string":"2017-02-10T09:47:00.000Z","key":1486720020000,"doc_count":14},{"key_as_string":"2017-02-10T09:48:00.000Z","key":1486720080000,"doc_count":11},{"key_as_string":"2017-02-10T09:49:00.000Z","key":1486720140000,"doc_count":14},{"key_as_string":"2017-02-10T09:50:00.000Z","key":1486720200000,"doc_count":9},{"key_as_string":"2017-02-10T09:51:00.000Z","key":1486720260000,"doc_count":17},{"key_as_string":"2017-02-10T09:52:00.000Z","key":1486720320000,"doc_count":20},{"key_as_string":"2017-02-10T09:53:00.000Z","key":1486720380000,"doc_count":13},{"key_as_string":"2017-02-10T09:54:00.000Z","key":1486720440000,"doc_count":7},{"key_as_string":"2017-02-10T09:55:00.000Z","key":1486720500000,"doc_count":16},{"key_as_string":"2017-02-10T09:56:00.000Z","key":1486720560000,"doc_count":13},{"key_as_string":"2017-02-10T09:57:00.000Z","key":1486720620000,"doc_count":12},{"key_as_string":"2017-02-10T09:58:00.000Z","key":1486720680000,"doc_count":13},{"key_as_string":"2017-02-10T09:59:00.000Z","key":1486720740000,"doc_count":10},{"key_as_string":"2017-02-10T10:00:00.000Z","key":1486720800000,"doc_count":15},{"key_as_string":"2017-02-10T10:01:00.000Z","key":1486720860000,"doc_count":13},{"key_as_string":"2017-02-10T10:02:00.000Z","key":1486720920000,"doc_count":23},{"key_as_string":"2017-02-10T10:03:00.000Z","key":1486720980000,"doc_count":11},{"key_as_string":"2017-02-10T10:04:00.000Z","key":1486721040000,"doc_count":11},{"key_as_string":"2017-02-10T10:05:00.000Z","key":1486721100000,"doc_count":17},{"key_as_string":"2017-02-10T10:06:00.000Z","key":1486721160000,"doc_count":10},{"key_as_string":"2017-02-10T10:07:00.000Z","key":1486721220000,"doc_count":15},{"key_as_string":"2017-02-10T10:08:00.000Z","key":1486721280000,"doc_count":13},{"key_as_string":"2017-02-10T10:09:00.000Z","key":1486721340000,"doc_count":15},{"key_as_string":"2017-02-10T10:10:00.000Z","key":1486721400000,"doc_count":17},{"key_as_string":"2017-02-10T10:11:00.000Z","key":1486721460000,"doc_count":12},{"key_as_string":"2017-02-10T10:12:00.000Z","key":1486721520000,"doc_count":11},{"key_as_string":"2017-02-10T10:13:00.000Z","key":1486721580000,"doc_count":19},{"key_as_string":"2017-02-10T10:14:00.000Z","key":1486721640000,"doc_count":12},{"key_as_string":"2017-02-10T10:15:00.000Z","key":1486721700000,"doc_count":17},{"key_as_string":"2017-02-10T10:16:00.000Z","key":1486721760000,"doc_count":13},{"key_as_string":"2017-02-10T10:17:00.000Z","key":1486721820000,"doc_count":15},{"key_as_string":"2017-02-10T10:18:00.000Z","key":1486721880000,"doc_count":13},{"key_as_string":"2017-02-10T10:19:00.000Z","key":1486721940000,"doc_count":15},{"key_as_string":"2017-02-10T10:20:00.000Z","key":1486722000000,"doc_count":15},{"key_as_string":"2017-02-10T10:21:00.000Z","key":1486722060000,"doc_count":15},{"key_as_string":"2017-02-10T10:22:00.000Z","key":1486722120000,"doc_count":14},{"key_as_string":"2017-02-10T10:23:00.000Z","key":1486722180000,"doc_count":18},{"key_as_string":"2017-02-10T10:24:00.000Z","key":1486722240000,"doc_count":16},{"key_as_string":"2017-02-10T10:25:00.000Z","key":1486722300000,"doc_count":11},{"key_as_string":"2017-02-10T10:26:00.000Z","key":1486722360000,"doc_count":12},{"key_as_string":"2017-02-10T10:27:00.000Z","key":1486722420000,"doc_count":21},{"key_as_string":"2017-02-10T10:28:00.000Z","key":1486722480000,"doc_count":12},{"key_as_string":"2017-02-10T10:29:00.000Z","key":1486722540000,"doc_count":10},{"key_as_string":"2017-02-10T10:30:00.000Z","key":1486722600000,"doc_count":13},{"key_as_string":"2017-02-10T10:31:00.000Z","key":1486722660000,"doc_count":12},{"key_as_string":"2017-02-10T10:32:00.000Z","key":1486722720000,"doc_count":14},{"key_as_string":"2017-02-10T10:33:00.000Z","key":1486722780000,"doc_count":10},{"key_as_string":"2017-02-10T10:34:00.000Z","key":1486722840000,"doc_count":16},{"key_as_string":"2017-02-10T10:35:00.000Z","key":1486722900000,"doc_count":10},{"key_as_string":"2017-02-10T10:36:00.000Z","key":1486722960000,"doc_count":19},{"key_as_string":"2017-02-10T10:37:00.000Z","key":1486723020000,"doc_count":6},{"key_as_string":"2017-02-10T10:38:00.000Z","key":1486723080000,"doc_count":21},{"key_as_string":"2017-02-10T10:39:00.000Z","key":1486723140000,"doc_count":13},{"key_as_string":"2017-02-10T10:40:00.000Z","key":1486723200000,"doc_count":18},{"key_as_string":"2017-02-10T10:41:00.000Z","key":1486723260000,"doc_count":12},{"key_as_string":"2017-02-10T10:42:00.000Z","key":1486723320000,"doc_count":16},{"key_as_string":"2017-02-10T10:43:00.000Z","key":1486723380000,"doc_count":6},{"key_as_string":"2017-02-10T10:44:00.000Z","key":1486723440000,"doc_count":16},{"key_as_string":"2017-02-10T10:45:00.000Z","key":1486723500000,"doc_count":10},{"key_as_string":"2017-02-10T10:46:00.000Z","key":1486723560000,"doc_count":17},{"key_as_string":"2017-02-10T10:47:00.000Z","key":1486723620000,"doc_count":11},{"key_as_string":"2017-02-10T10:48:00.000Z","key":1486723680000,"doc_count":17},{"key_as_string":"2017-02-10T10:49:00.000Z","key":1486723740000,"doc_count":11},{"key_as_string":"2017-02-10T10:50:00.000Z","key":1486723800000,"doc_count":12},{"key_as_string":"2017-02-10T10:51:00.000Z","key":1486723860000,"doc_count":12},{"key_as_string":"2017-02-10T10:52:00.000Z","key":1486723920000,"doc_count":18},{"key_as_string":"2017-02-10T10:53:00.000Z","key":1486723980000,"doc_count":15},{"key_as_string":"2017-02-10T10:54:00.000Z","key":1486724040000,"doc_count":15},{"key_as_string":"2017-02-10T10:55:00.000Z","key":1486724100000,"doc_count":16},{"key_as_string":"2017-02-10T10:56:00.000Z","key":1486724160000,"doc_count":8},{"key_as_string":"2017-02-10T10:57:00.000Z","key":1486724220000,"doc_count":19},{"key_as_string":"2017-02-10T10:58:00.000Z","key":1486724280000,"doc_count":12},{"key_as_string":"2017-02-10T10:59:00.000Z","key":1486724340000,"doc_count":16},{"key_as_string":"2017-02-10T11:00:00.000Z","key":1486724400000,"doc_count":16},{"key_as_string":"2017-02-10T11:01:00.000Z","key":1486724460000,"doc_count":11},{"key_as_string":"2017-02-10T11:02:00.000Z","key":1486724520000,"doc_count":11},{"key_as_string":"2017-02-10T11:03:00.000Z","key":1486724580000,"doc_count":16},{"key_as_string":"2017-02-10T11:04:00.000Z","key":1486724640000,"doc_count":15},{"key_as_string":"2017-02-10T11:05:00.000Z","key":1486724700000,"doc_count":12},{"key_as_string":"2017-02-10T11:06:00.000Z","key":1486724760000,"doc_count":20},{"key_as_string":"2017-02-10T11:07:00.000Z","key":1486724820000,"doc_count":14},{"key_as_string":"2017-02-10T11:08:00.000Z","key":1486724880000,"doc_count":11},{"key_as_string":"2017-02-10T11:09:00.000Z","key":1486724940000,"doc_count":11},{"key_as_string":"2017-02-10T11:10:00.000Z","key":1486725000000,"doc_count":11},{"key_as_string":"2017-02-10T11:11:00.000Z","key":1486725060000,"doc_count":16},{"key_as_string":"2017-02-10T11:12:00.000Z","key":1486725120000,"doc_count":12},{"key_as_string":"2017-02-10T11:13:00.000Z","key":1486725180000,"doc_count":15},{"key_as_string":"2017-02-10T11:14:00.000Z","key":1486725240000,"doc_count":12},{"key_as_string":"2017-02-10T11:15:00.000Z","key":1486725300000,"doc_count":12},{"key_as_string":"2017-02-10T11:16:00.000Z","key":1486725360000,"doc_count":17},{"key_as_string":"2017-02-10T11:17:00.000Z","key":1486725420000,"doc_count":15},{"key_as_string":"2017-02-10T11:18:00.000Z","key":1486725480000,"doc_count":12},{"key_as_string":"2017-02-10T11:19:00.000Z","key":1486725540000,"doc_count":13},{"key_as_string":"2017-02-10T11:20:00.000Z","key":1486725600000,"doc_count":12},{"key_as_string":"2017-02-10T11:21:00.000Z","key":1486725660000,"doc_count":12},{"key_as_string":"2017-02-10T11:22:00.000Z","key":1486725720000,"doc_count":9},{"key_as_string":"2017-02-10T11:23:00.000Z","key":1486725780000,"doc_count":15},{"key_as_string":"2017-02-10T11:24:00.000Z","key":1486725840000,"doc_count":21},{"key_as_string":"2017-02-10T11:25:00.000Z","key":1486725900000,"doc_count":13},{"key_as_string":"2017-02-10T11:26:00.000Z","key":1486725960000,"doc_count":15},{"key_as_string":"2017-02-10T11:27:00.000Z","key":1486726020000,"doc_count":14},{"key_as_string":"2017-02-10T11:28:00.000Z","key":1486726080000,"doc_count":10},{"key_as_string":"2017-02-10T11:29:00.000Z","key":1486726140000,"doc_count":16},{"key_as_string":"2017-02-10T11:30:00.000Z","key":1486726200000,"doc_count":12},{"key_as_string":"2017-02-10T11:31:00.000Z","key":1486726260000,"doc_count":18},{"key_as_string":"2017-02-10T11:32:00.000Z","key":1486726320000,"doc_count":11},{"key_as_string":"2017-02-10T11:33:00.000Z","key":1486726380000,"doc_count":15},{"key_as_string":"2017-02-10T11:34:00.000Z","key":1486726440000,"doc_count":16},{"key_as_string":"2017-02-10T11:35:00.000Z","key":1486726500000,"doc_count":19},{"key_as_string":"2017-02-10T11:36:00.000Z","key":1486726560000,"doc_count":9},{"key_as_string":"2017-02-10T11:37:00.000Z","key":1486726620000,"doc_count":14},{"key_as_string":"2017-02-10T11:38:00.000Z","key":1486726680000,"doc_count":12},{"key_as_string":"2017-02-10T11:39:00.000Z","key":1486726740000,"doc_count":15},{"key_as_string":"2017-02-10T11:40:00.000Z","key":1486726800000,"doc_count":13},{"key_as_string":"2017-02-10T11:41:00.000Z","key":1486726860000,"doc_count":14},{"key_as_string":"2017-02-10T11:42:00.000Z","key":1486726920000,"doc_count":11},{"key_as_string":"2017-02-10T11:43:00.000Z","key":1486726980000,"doc_count":16},{"key_as_string":"2017-02-10T11:44:00.000Z","key":1486727040000,"doc_count":10},{"key_as_string":"2017-02-10T11:45:00.000Z","key":1486727100000,"doc_count":12},{"key_as_string":"2017-02-10T11:46:00.000Z","key":1486727160000,"doc_count":9},{"key_as_string":"2017-02-10T11:47:00.000Z","key":1486727220000,"doc_count":16},{"key_as_string":"2017-02-10T11:48:00.000Z","key":1486727280000,"doc_count":8},{"key_as_string":"2017-02-10T11:49:00.000Z","key":1486727340000,"doc_count":13},{"key_as_string":"2017-02-10T11:50:00.000Z","key":1486727400000,"doc_count":16},{"key_as_string":"2017-02-10T11:51:00.000Z","key":1486727460000,"doc_count":13},{"key_as_string":"2017-02-10T11:52:00.000Z","key":1486727520000,"doc_count":12},{"key_as_string":"2017-02-10T11:53:00.000Z","key":1486727580000,"doc_count":23},{"key_as_string":"2017-02-10T11:54:00.000Z","key":1486727640000,"doc_count":11},{"key_as_string":"2017-02-10T11:55:00.000Z","key":1486727700000,"doc_count":12},{"key_as_string":"2017-02-10T11:56:00.000Z","key":1486727760000,"doc_count":14},{"key_as_string":"2017-02-10T11:57:00.000Z","key":1486727820000,"doc_count":15},{"key_as_string":"2017-02-10T11:58:00.000Z","key":1486727880000,"doc_count":14},{"key_as_string":"2017-02-10T11:59:00.000Z","key":1486727940000,"doc_count":14},{"key_as_string":"2017-02-10T12:00:00.000Z","key":1486728000000,"doc_count":13},{"key_as_string":"2017-02-10T12:01:00.000Z","key":1486728060000,"doc_count":15},{"key_as_string":"2017-02-10T12:02:00.000Z","key":1486728120000,"doc_count":10},{"key_as_string":"2017-02-10T12:03:00.000Z","key":1486728180000,"doc_count":14},{"key_as_string":"2017-02-10T12:04:00.000Z","key":1486728240000,"doc_count":14},{"key_as_string":"2017-02-10T12:05:00.000Z","key":1486728300000,"doc_count":15},{"key_as_string":"2017-02-10T12:06:00.000Z","key":1486728360000,"doc_count":10},{"key_as_string":"2017-02-10T12:07:00.000Z","key":1486728420000,"doc_count":16},{"key_as_string":"2017-02-10T12:08:00.000Z","key":1486728480000,"doc_count":17},{"key_as_string":"2017-02-10T12:09:00.000Z","key":1486728540000,"doc_count":11},{"key_as_string":"2017-02-10T12:10:00.000Z","key":1486728600000,"doc_count":16},{"key_as_string":"2017-02-10T12:11:00.000Z","key":1486728660000,"doc_count":16},{"key_as_string":"2017-02-10T12:12:00.000Z","key":1486728720000,"doc_count":8},{"key_as_string":"2017-02-10T12:13:00.000Z","key":1486728780000,"doc_count":19},{"key_as_string":"2017-02-10T12:14:00.000Z","key":1486728840000,"doc_count":21},{"key_as_string":"2017-02-10T12:15:00.000Z","key":1486728900000,"doc_count":15},{"key_as_string":"2017-02-10T12:16:00.000Z","key":1486728960000,"doc_count":12},{"key_as_string":"2017-02-10T12:17:00.000Z","key":1486729020000,"doc_count":16},{"key_as_string":"2017-02-10T12:18:00.000Z","key":1486729080000,"doc_count":14},{"key_as_string":"2017-02-10T12:19:00.000Z","key":1486729140000,"doc_count":17},{"key_as_string":"2017-02-10T12:20:00.000Z","key":1486729200000,"doc_count":16},{"key_as_string":"2017-02-10T12:21:00.000Z","key":1486729260000,"doc_count":13},{"key_as_string":"2017-02-10T12:22:00.000Z","key":1486729320000,"doc_count":9},{"key_as_string":"2017-02-10T12:23:00.000Z","key":1486729380000,"doc_count":14},{"key_as_string":"2017-02-10T12:24:00.000Z","key":1486729440000,"doc_count":14},{"key_as_string":"2017-02-10T12:25:00.000Z","key":1486729500000,"doc_count":12},{"key_as_string":"2017-02-10T12:26:00.000Z","key":1486729560000,"doc_count":15},{"key_as_string":"2017-02-10T12:27:00.000Z","key":1486729620000,"doc_count":11},{"key_as_string":"2017-02-10T12:28:00.000Z","key":1486729680000,"doc_count":11},{"key_as_string":"2017-02-10T12:29:00.000Z","key":1486729740000,"doc_count":13},{"key_as_string":"2017-02-10T12:30:00.000Z","key":1486729800000,"doc_count":9},{"key_as_string":"2017-02-10T12:31:00.000Z","key":1486729860000,"doc_count":16},{"key_as_string":"2017-02-10T12:32:00.000Z","key":1486729920000,"doc_count":7},{"key_as_string":"2017-02-10T12:33:00.000Z","key":1486729980000,"doc_count":15},{"key_as_string":"2017-02-10T12:34:00.000Z","key":1486730040000,"doc_count":10},{"key_as_string":"2017-02-10T12:35:00.000Z","key":1486730100000,"doc_count":15},{"key_as_string":"2017-02-10T12:36:00.000Z","key":1486730160000,"doc_count":15},{"key_as_string":"2017-02-10T12:37:00.000Z","key":1486730220000,"doc_count":17},{"key_as_string":"2017-02-10T12:38:00.000Z","key":1486730280000,"doc_count":15},{"key_as_string":"2017-02-10T12:39:00.000Z","key":1486730340000,"doc_count":13},{"key_as_string":"2017-02-10T12:40:00.000Z","key":1486730400000,"doc_count":12},{"key_as_string":"2017-02-10T12:41:00.000Z","key":1486730460000,"doc_count":10},{"key_as_string":"2017-02-10T12:42:00.000Z","key":1486730520000,"doc_count":11},{"key_as_string":"2017-02-10T12:43:00.000Z","key":1486730580000,"doc_count":15},{"key_as_string":"2017-02-10T12:44:00.000Z","key":1486730640000,"doc_count":14},{"key_as_string":"2017-02-10T12:45:00.000Z","key":1486730700000,"doc_count":15},{"key_as_string":"2017-02-10T12:46:00.000Z","key":1486730760000,"doc_count":12},{"key_as_string":"2017-02-10T12:47:00.000Z","key":1486730820000,"doc_count":14},{"key_as_string":"2017-02-10T12:48:00.000Z","key":1486730880000,"doc_count":15},{"key_as_string":"2017-02-10T12:49:00.000Z","key":1486730940000,"doc_count":14},{"key_as_string":"2017-02-10T12:50:00.000Z","key":1486731000000,"doc_count":14},{"key_as_string":"2017-02-10T12:51:00.000Z","key":1486731060000,"doc_count":13},{"key_as_string":"2017-02-10T12:52:00.000Z","key":1486731120000,"doc_count":17},{"key_as_string":"2017-02-10T12:53:00.000Z","key":1486731180000,"doc_count":10},{"key_as_string":"2017-02-10T12:54:00.000Z","key":1486731240000,"doc_count":12},{"key_as_string":"2017-02-10T12:55:00.000Z","key":1486731300000,"doc_count":16},{"key_as_string":"2017-02-10T12:56:00.000Z","key":1486731360000,"doc_count":8},{"key_as_string":"2017-02-10T12:57:00.000Z","key":1486731420000,"doc_count":12},{"key_as_string":"2017-02-10T12:58:00.000Z","key":1486731480000,"doc_count":22},{"key_as_string":"2017-02-10T12:59:00.000Z","key":1486731540000,"doc_count":13},{"key_as_string":"2017-02-10T13:00:00.000Z","key":1486731600000,"doc_count":15},{"key_as_string":"2017-02-10T13:01:00.000Z","key":1486731660000,"doc_count":8},{"key_as_string":"2017-02-10T13:02:00.000Z","key":1486731720000,"doc_count":19},{"key_as_string":"2017-02-10T13:03:00.000Z","key":1486731780000,"doc_count":9},{"key_as_string":"2017-02-10T13:04:00.000Z","key":1486731840000,"doc_count":12},{"key_as_string":"2017-02-10T13:05:00.000Z","key":1486731900000,"doc_count":15},{"key_as_string":"2017-02-10T13:06:00.000Z","key":1486731960000,"doc_count":15},{"key_as_string":"2017-02-10T13:07:00.000Z","key":1486732020000,"doc_count":16},{"key_as_string":"2017-02-10T13:08:00.000Z","key":1486732080000,"doc_count":14},{"key_as_string":"2017-02-10T13:09:00.000Z","key":1486732140000,"doc_count":15},{"key_as_string":"2017-02-10T13:10:00.000Z","key":1486732200000,"doc_count":9},{"key_as_string":"2017-02-10T13:11:00.000Z","key":1486732260000,"doc_count":14},{"key_as_string":"2017-02-10T13:12:00.000Z","key":1486732320000,"doc_count":15},{"key_as_string":"2017-02-10T13:13:00.000Z","key":1486732380000,"doc_count":12},{"key_as_string":"2017-02-10T13:14:00.000Z","key":1486732440000,"doc_count":13},{"key_as_string":"2017-02-10T13:15:00.000Z","key":1486732500000,"doc_count":22},{"key_as_string":"2017-02-10T13:16:00.000Z","key":1486732560000,"doc_count":9},{"key_as_string":"2017-02-10T13:17:00.000Z","key":1486732620000,"doc_count":13},{"key_as_string":"2017-02-10T13:18:00.000Z","key":1486732680000,"doc_count":14},{"key_as_string":"2017-02-10T13:19:00.000Z","key":1486732740000,"doc_count":9},{"key_as_string":"2017-02-10T13:20:00.000Z","key":1486732800000,"doc_count":11},{"key_as_string":"2017-02-10T13:21:00.000Z","key":1486732860000,"doc_count":12},{"key_as_string":"2017-02-10T13:22:00.000Z","key":1486732920000,"doc_count":16},{"key_as_string":"2017-02-10T13:23:00.000Z","key":1486732980000,"doc_count":15},{"key_as_string":"2017-02-10T13:24:00.000Z","key":1486733040000,"doc_count":9},{"key_as_string":"2017-02-10T13:25:00.000Z","key":1486733100000,"doc_count":12},{"key_as_string":"2017-02-10T13:26:00.000Z","key":1486733160000,"doc_count":14},{"key_as_string":"2017-02-10T13:27:00.000Z","key":1486733220000,"doc_count":17},{"key_as_string":"2017-02-10T13:28:00.000Z","key":1486733280000,"doc_count":5},{"key_as_string":"2017-02-10T13:29:00.000Z","key":1486733340000,"doc_count":16},{"key_as_string":"2017-02-10T13:30:00.000Z","key":1486733400000,"doc_count":9},{"key_as_string":"2017-02-10T13:31:00.000Z","key":1486733460000,"doc_count":17},{"key_as_string":"2017-02-10T13:32:00.000Z","key":1486733520000,"doc_count":12},{"key_as_string":"2017-02-10T13:33:00.000Z","key":1486733580000,"doc_count":10},{"key_as_string":"2017-02-10T13:34:00.000Z","key":1486733640000,"doc_count":18},{"key_as_string":"2017-02-10T13:35:00.000Z","key":1486733700000,"doc_count":5},{"key_as_string":"2017-02-10T13:36:00.000Z","key":1486733760000,"doc_count":13},{"key_as_string":"2017-02-10T13:37:00.000Z","key":1486733820000,"doc_count":18},{"key_as_string":"2017-02-10T13:38:00.000Z","key":1486733880000,"doc_count":17},{"key_as_string":"2017-02-10T13:39:00.000Z","key":1486733940000,"doc_count":15},{"key_as_string":"2017-02-10T13:40:00.000Z","key":1486734000000,"doc_count":16},{"key_as_string":"2017-02-10T13:41:00.000Z","key":1486734060000,"doc_count":8},{"key_as_string":"2017-02-10T13:42:00.000Z","key":1486734120000,"doc_count":17},{"key_as_string":"2017-02-10T13:43:00.000Z","key":1486734180000,"doc_count":14},{"key_as_string":"2017-02-10T13:44:00.000Z","key":1486734240000,"doc_count":14},{"key_as_string":"2017-02-10T13:45:00.000Z","key":1486734300000,"doc_count":17},{"key_as_string":"2017-02-10T13:46:00.000Z","key":1486734360000,"doc_count":14},{"key_as_string":"2017-02-10T13:47:00.000Z","key":1486734420000,"doc_count":16},{"key_as_string":"2017-02-10T13:48:00.000Z","key":1486734480000,"doc_count":16},{"key_as_string":"2017-02-10T13:49:00.000Z","key":1486734540000,"doc_count":21},{"key_as_string":"2017-02-10T13:50:00.000Z","key":1486734600000,"doc_count":12},{"key_as_string":"2017-02-10T13:51:00.000Z","key":1486734660000,"doc_count":12},{"key_as_string":"2017-02-10T13:52:00.000Z","key":1486734720000,"doc_count":8},{"key_as_string":"2017-02-10T13:53:00.000Z","key":1486734780000,"doc_count":15},{"key_as_string":"2017-02-10T13:54:00.000Z","key":1486734840000,"doc_count":13},{"key_as_string":"2017-02-10T13:55:00.000Z","key":1486734900000,"doc_count":14},{"key_as_string":"2017-02-10T13:56:00.000Z","key":1486734960000,"doc_count":13},{"key_as_string":"2017-02-10T13:57:00.000Z","key":1486735020000,"doc_count":12},{"key_as_string":"2017-02-10T13:58:00.000Z","key":1486735080000,"doc_count":14},{"key_as_string":"2017-02-10T13:59:00.000Z","key":1486735140000,"doc_count":13},{"key_as_string":"2017-02-10T14:00:00.000Z","key":1486735200000,"doc_count":16},{"key_as_string":"2017-02-10T14:01:00.000Z","key":1486735260000,"doc_count":9},{"key_as_string":"2017-02-10T14:02:00.000Z","key":1486735320000,"doc_count":20},{"key_as_string":"2017-02-10T14:03:00.000Z","key":1486735380000,"doc_count":15},{"key_as_string":"2017-02-10T14:04:00.000Z","key":1486735440000,"doc_count":13},{"key_as_string":"2017-02-10T14:05:00.000Z","key":1486735500000,"doc_count":10},{"key_as_string":"2017-02-10T14:06:00.000Z","key":1486735560000,"doc_count":11},{"key_as_string":"2017-02-10T14:07:00.000Z","key":1486735620000,"doc_count":9},{"key_as_string":"2017-02-10T14:08:00.000Z","key":1486735680000,"doc_count":15},{"key_as_string":"2017-02-10T14:09:00.000Z","key":1486735740000,"doc_count":17},{"key_as_string":"2017-02-10T14:10:00.000Z","key":1486735800000,"doc_count":13},{"key_as_string":"2017-02-10T14:11:00.000Z","key":1486735860000,"doc_count":15},{"key_as_string":"2017-02-10T14:12:00.000Z","key":1486735920000,"doc_count":10},{"key_as_string":"2017-02-10T14:13:00.000Z","key":1486735980000,"doc_count":12},{"key_as_string":"2017-02-10T14:14:00.000Z","key":1486736040000,"doc_count":15},{"key_as_string":"2017-02-10T14:15:00.000Z","key":1486736100000,"doc_count":13},{"key_as_string":"2017-02-10T14:16:00.000Z","key":1486736160000,"doc_count":13},{"key_as_string":"2017-02-10T14:17:00.000Z","key":1486736220000,"doc_count":15},{"key_as_string":"2017-02-10T14:18:00.000Z","key":1486736280000,"doc_count":14},{"key_as_string":"2017-02-10T14:19:00.000Z","key":1486736340000,"doc_count":9},{"key_as_string":"2017-02-10T14:20:00.000Z","key":1486736400000,"doc_count":15},{"key_as_string":"2017-02-10T14:21:00.000Z","key":1486736460000,"doc_count":12},{"key_as_string":"2017-02-10T14:22:00.000Z","key":1486736520000,"doc_count":12},{"key_as_string":"2017-02-10T14:23:00.000Z","key":1486736580000,"doc_count":16},{"key_as_string":"2017-02-10T14:24:00.000Z","key":1486736640000,"doc_count":4},{"key_as_string":"2017-02-10T14:25:00.000Z","key":1486736700000,"doc_count":12},{"key_as_string":"2017-02-10T14:26:00.000Z","key":1486736760000,"doc_count":15},{"key_as_string":"2017-02-10T14:27:00.000Z","key":1486736820000,"doc_count":17},{"key_as_string":"2017-02-10T14:28:00.000Z","key":1486736880000,"doc_count":15},{"key_as_string":"2017-02-10T14:29:00.000Z","key":1486736940000,"doc_count":13},{"key_as_string":"2017-02-10T14:30:00.000Z","key":1486737000000,"doc_count":9},{"key_as_string":"2017-02-10T14:31:00.000Z","key":1486737060000,"doc_count":17},{"key_as_string":"2017-02-10T14:32:00.000Z","key":1486737120000,"doc_count":14},{"key_as_string":"2017-02-10T14:33:00.000Z","key":1486737180000,"doc_count":11},{"key_as_string":"2017-02-10T14:34:00.000Z","key":1486737240000,"doc_count":10},{"key_as_string":"2017-02-10T14:35:00.000Z","key":1486737300000,"doc_count":10},{"key_as_string":"2017-02-10T14:36:00.000Z","key":1486737360000,"doc_count":12},{"key_as_string":"2017-02-10T14:37:00.000Z","key":1486737420000,"doc_count":14},{"key_as_string":"2017-02-10T14:38:00.000Z","key":1486737480000,"doc_count":15},{"key_as_string":"2017-02-10T14:39:00.000Z","key":1486737540000,"doc_count":8},{"key_as_string":"2017-02-10T14:40:00.000Z","key":1486737600000,"doc_count":15},{"key_as_string":"2017-02-10T14:41:00.000Z","key":1486737660000,"doc_count":10},{"key_as_string":"2017-02-10T14:42:00.000Z","key":1486737720000,"doc_count":14},{"key_as_string":"2017-02-10T14:43:00.000Z","key":1486737780000,"doc_count":11},{"key_as_string":"2017-02-10T14:44:00.000Z","key":1486737840000,"doc_count":12},{"key_as_string":"2017-02-10T14:45:00.000Z","key":1486737900000,"doc_count":18},{"key_as_string":"2017-02-10T14:46:00.000Z","key":1486737960000,"doc_count":12},{"key_as_string":"2017-02-10T14:47:00.000Z","key":1486738020000,"doc_count":14},{"key_as_string":"2017-02-10T14:48:00.000Z","key":1486738080000,"doc_count":13},{"key_as_string":"2017-02-10T14:49:00.000Z","key":1486738140000,"doc_count":9},{"key_as_string":"2017-02-10T14:50:00.000Z","key":1486738200000,"doc_count":20},{"key_as_string":"2017-02-10T14:51:00.000Z","key":1486738260000,"doc_count":11},{"key_as_string":"2017-02-10T14:52:00.000Z","key":1486738320000,"doc_count":9},{"key_as_string":"2017-02-10T14:53:00.000Z","key":1486738380000,"doc_count":14},{"key_as_string":"2017-02-10T14:54:00.000Z","key":1486738440000,"doc_count":15},{"key_as_string":"2017-02-10T14:55:00.000Z","key":1486738500000,"doc_count":13},{"key_as_string":"2017-02-10T14:56:00.000Z","key":1486738560000,"doc_count":12},{"key_as_string":"2017-02-10T14:57:00.000Z","key":1486738620000,"doc_count":15},{"key_as_string":"2017-02-10T14:58:00.000Z","key":1486738680000,"doc_count":9},{"key_as_string":"2017-02-10T14:59:00.000Z","key":1486738740000,"doc_count":12},{"key_as_string":"2017-02-10T15:00:00.000Z","key":1486738800000,"doc_count":15},{"key_as_string":"2017-02-10T15:01:00.000Z","key":1486738860000,"doc_count":11},{"key_as_string":"2017-02-10T15:02:00.000Z","key":1486738920000,"doc_count":14},{"key_as_string":"2017-02-10T15:03:00.000Z","key":1486738980000,"doc_count":11},{"key_as_string":"2017-02-10T15:04:00.000Z","key":1486739040000,"doc_count":12},{"key_as_string":"2017-02-10T15:05:00.000Z","key":1486739100000,"doc_count":11},{"key_as_string":"2017-02-10T15:06:00.000Z","key":1486739160000,"doc_count":17},{"key_as_string":"2017-02-10T15:07:00.000Z","key":1486739220000,"doc_count":12},{"key_as_string":"2017-02-10T15:08:00.000Z","key":1486739280000,"doc_count":10},{"key_as_string":"2017-02-10T15:09:00.000Z","key":1486739340000,"doc_count":19},{"key_as_string":"2017-02-10T15:10:00.000Z","key":1486739400000,"doc_count":10},{"key_as_string":"2017-02-10T15:11:00.000Z","key":1486739460000,"doc_count":10},{"key_as_string":"2017-02-10T15:12:00.000Z","key":1486739520000,"doc_count":18},{"key_as_string":"2017-02-10T15:13:00.000Z","key":1486739580000,"doc_count":14},{"key_as_string":"2017-02-10T15:14:00.000Z","key":1486739640000,"doc_count":11},{"key_as_string":"2017-02-10T15:15:00.000Z","key":1486739700000,"doc_count":16},{"key_as_string":"2017-02-10T15:16:00.000Z","key":1486739760000,"doc_count":13},{"key_as_string":"2017-02-10T15:17:00.000Z","key":1486739820000,"doc_count":20},{"key_as_string":"2017-02-10T15:18:00.000Z","key":1486739880000,"doc_count":10},{"key_as_string":"2017-02-10T15:19:00.000Z","key":1486739940000,"doc_count":16},{"key_as_string":"2017-02-10T15:20:00.000Z","key":1486740000000,"doc_count":15},{"key_as_string":"2017-02-10T15:21:00.000Z","key":1486740060000,"doc_count":16},{"key_as_string":"2017-02-10T15:22:00.000Z","key":1486740120000,"doc_count":20},{"key_as_string":"2017-02-10T15:23:00.000Z","key":1486740180000,"doc_count":12},{"key_as_string":"2017-02-10T15:24:00.000Z","key":1486740240000,"doc_count":15},{"key_as_string":"2017-02-10T15:25:00.000Z","key":1486740300000,"doc_count":12},{"key_as_string":"2017-02-10T15:26:00.000Z","key":1486740360000,"doc_count":16},{"key_as_string":"2017-02-10T15:27:00.000Z","key":1486740420000,"doc_count":14},{"key_as_string":"2017-02-10T15:28:00.000Z","key":1486740480000,"doc_count":12},{"key_as_string":"2017-02-10T15:29:00.000Z","key":1486740540000,"doc_count":10},{"key_as_string":"2017-02-10T15:30:00.000Z","key":1486740600000,"doc_count":16},{"key_as_string":"2017-02-10T15:31:00.000Z","key":1486740660000,"doc_count":13},{"key_as_string":"2017-02-10T15:32:00.000Z","key":1486740720000,"doc_count":14},{"key_as_string":"2017-02-10T15:33:00.000Z","key":1486740780000,"doc_count":11},{"key_as_string":"2017-02-10T15:34:00.000Z","key":1486740840000,"doc_count":12},{"key_as_string":"2017-02-10T15:35:00.000Z","key":1486740900000,"doc_count":12},{"key_as_string":"2017-02-10T15:36:00.000Z","key":1486740960000,"doc_count":11},{"key_as_string":"2017-02-10T15:37:00.000Z","key":1486741020000,"doc_count":13},{"key_as_string":"2017-02-10T15:38:00.000Z","key":1486741080000,"doc_count":11},{"key_as_string":"2017-02-10T15:39:00.000Z","key":1486741140000,"doc_count":11},{"key_as_string":"2017-02-10T15:40:00.000Z","key":1486741200000,"doc_count":12},{"key_as_string":"2017-02-10T15:41:00.000Z","key":1486741260000,"doc_count":16},{"key_as_string":"2017-02-10T15:42:00.000Z","key":1486741320000,"doc_count":15},{"key_as_string":"2017-02-10T15:43:00.000Z","key":1486741380000,"doc_count":15},{"key_as_string":"2017-02-10T15:44:00.000Z","key":1486741440000,"doc_count":15},{"key_as_string":"2017-02-10T15:45:00.000Z","key":1486741500000,"doc_count":15},{"key_as_string":"2017-02-10T15:46:00.000Z","key":1486741560000,"doc_count":11},{"key_as_string":"2017-02-10T15:47:00.000Z","key":1486741620000,"doc_count":14},{"key_as_string":"2017-02-10T15:48:00.000Z","key":1486741680000,"doc_count":15},{"key_as_string":"2017-02-10T15:49:00.000Z","key":1486741740000,"doc_count":12},{"key_as_string":"2017-02-10T15:50:00.000Z","key":1486741800000,"doc_count":12},{"key_as_string":"2017-02-10T15:51:00.000Z","key":1486741860000,"doc_count":12},{"key_as_string":"2017-02-10T15:52:00.000Z","key":1486741920000,"doc_count":19},{"key_as_string":"2017-02-10T15:53:00.000Z","key":1486741980000,"doc_count":14},{"key_as_string":"2017-02-10T15:54:00.000Z","key":1486742040000,"doc_count":18},{"key_as_string":"2017-02-10T15:55:00.000Z","key":1486742100000,"doc_count":11},{"key_as_string":"2017-02-10T15:56:00.000Z","key":1486742160000,"doc_count":16},{"key_as_string":"2017-02-10T15:57:00.000Z","key":1486742220000,"doc_count":11},{"key_as_string":"2017-02-10T15:58:00.000Z","key":1486742280000,"doc_count":10},{"key_as_string":"2017-02-10T15:59:00.000Z","key":1486742340000,"doc_count":12},{"key_as_string":"2017-02-10T16:00:00.000Z","key":1486742400000,"doc_count":16},{"key_as_string":"2017-02-10T16:01:00.000Z","key":1486742460000,"doc_count":12},{"key_as_string":"2017-02-10T16:02:00.000Z","key":1486742520000,"doc_count":16},{"key_as_string":"2017-02-10T16:03:00.000Z","key":1486742580000,"doc_count":11},{"key_as_string":"2017-02-10T16:04:00.000Z","key":1486742640000,"doc_count":13},{"key_as_string":"2017-02-10T16:05:00.000Z","key":1486742700000,"doc_count":15},{"key_as_string":"2017-02-10T16:06:00.000Z","key":1486742760000,"doc_count":13},{"key_as_string":"2017-02-10T16:07:00.000Z","key":1486742820000,"doc_count":14},{"key_as_string":"2017-02-10T16:08:00.000Z","key":1486742880000,"doc_count":16},{"key_as_string":"2017-02-10T16:09:00.000Z","key":1486742940000,"doc_count":8},{"key_as_string":"2017-02-10T16:10:00.000Z","key":1486743000000,"doc_count":13},{"key_as_string":"2017-02-10T16:11:00.000Z","key":1486743060000,"doc_count":13},{"key_as_string":"2017-02-10T16:12:00.000Z","key":1486743120000,"doc_count":15},{"key_as_string":"2017-02-10T16:13:00.000Z","key":1486743180000,"doc_count":20},{"key_as_string":"2017-02-10T16:14:00.000Z","key":1486743240000,"doc_count":12},{"key_as_string":"2017-02-10T16:15:00.000Z","key":1486743300000,"doc_count":10},{"key_as_string":"2017-02-10T16:16:00.000Z","key":1486743360000,"doc_count":12},{"key_as_string":"2017-02-10T16:17:00.000Z","key":1486743420000,"doc_count":12},{"key_as_string":"2017-02-10T16:18:00.000Z","key":1486743480000,"doc_count":15},{"key_as_string":"2017-02-10T16:19:00.000Z","key":1486743540000,"doc_count":11},{"key_as_string":"2017-02-10T16:20:00.000Z","key":1486743600000,"doc_count":10},{"key_as_string":"2017-02-10T16:21:00.000Z","key":1486743660000,"doc_count":13},{"key_as_string":"2017-02-10T16:22:00.000Z","key":1486743720000,"doc_count":12},{"key_as_string":"2017-02-10T16:23:00.000Z","key":1486743780000,"doc_count":15},{"key_as_string":"2017-02-10T16:24:00.000Z","key":1486743840000,"doc_count":17},{"key_as_string":"2017-02-10T16:25:00.000Z","key":1486743900000,"doc_count":12},{"key_as_string":"2017-02-10T16:26:00.000Z","key":1486743960000,"doc_count":13},{"key_as_string":"2017-02-10T16:27:00.000Z","key":1486744020000,"doc_count":11},{"key_as_string":"2017-02-10T16:28:00.000Z","key":1486744080000,"doc_count":8},{"key_as_string":"2017-02-10T16:29:00.000Z","key":1486744140000,"doc_count":14},{"key_as_string":"2017-02-10T16:30:00.000Z","key":1486744200000,"doc_count":12},{"key_as_string":"2017-02-10T16:31:00.000Z","key":1486744260000,"doc_count":12},{"key_as_string":"2017-02-10T16:32:00.000Z","key":1486744320000,"doc_count":12},{"key_as_string":"2017-02-10T16:33:00.000Z","key":1486744380000,"doc_count":8},{"key_as_string":"2017-02-10T16:34:00.000Z","key":1486744440000,"doc_count":18},{"key_as_string":"2017-02-10T16:35:00.000Z","key":1486744500000,"doc_count":14},{"key_as_string":"2017-02-10T16:36:00.000Z","key":1486744560000,"doc_count":12},{"key_as_string":"2017-02-10T16:37:00.000Z","key":1486744620000,"doc_count":10},{"key_as_string":"2017-02-10T16:38:00.000Z","key":1486744680000,"doc_count":19},{"key_as_string":"2017-02-10T16:39:00.000Z","key":1486744740000,"doc_count":8},{"key_as_string":"2017-02-10T16:40:00.000Z","key":1486744800000,"doc_count":12},{"key_as_string":"2017-02-10T16:41:00.000Z","key":1486744860000,"doc_count":16},{"key_as_string":"2017-02-10T16:42:00.000Z","key":1486744920000,"doc_count":11},{"key_as_string":"2017-02-10T16:43:00.000Z","key":1486744980000,"doc_count":15},{"key_as_string":"2017-02-10T16:44:00.000Z","key":1486745040000,"doc_count":9},{"key_as_string":"2017-02-10T16:45:00.000Z","key":1486745100000,"doc_count":15},{"key_as_string":"2017-02-10T16:46:00.000Z","key":1486745160000,"doc_count":11},{"key_as_string":"2017-02-10T16:47:00.000Z","key":1486745220000,"doc_count":16},{"key_as_string":"2017-02-10T16:48:00.000Z","key":1486745280000,"doc_count":17},{"key_as_string":"2017-02-10T16:49:00.000Z","key":1486745340000,"doc_count":10},{"key_as_string":"2017-02-10T16:50:00.000Z","key":1486745400000,"doc_count":11},{"key_as_string":"2017-02-10T16:51:00.000Z","key":1486745460000,"doc_count":13},{"key_as_string":"2017-02-10T16:52:00.000Z","key":1486745520000,"doc_count":7},{"key_as_string":"2017-02-10T16:53:00.000Z","key":1486745580000,"doc_count":13},{"key_as_string":"2017-02-10T16:54:00.000Z","key":1486745640000,"doc_count":12},{"key_as_string":"2017-02-10T16:55:00.000Z","key":1486745700000,"doc_count":18},{"key_as_string":"2017-02-10T16:56:00.000Z","key":1486745760000,"doc_count":6},{"key_as_string":"2017-02-10T16:57:00.000Z","key":1486745820000,"doc_count":11},{"key_as_string":"2017-02-10T16:58:00.000Z","key":1486745880000,"doc_count":10},{"key_as_string":"2017-02-10T16:59:00.000Z","key":1486745940000,"doc_count":12},{"key_as_string":"2017-02-10T17:00:00.000Z","key":1486746000000,"doc_count":13},{"key_as_string":"2017-02-10T17:01:00.000Z","key":1486746060000,"doc_count":9},{"key_as_string":"2017-02-10T17:02:00.000Z","key":1486746120000,"doc_count":14},{"key_as_string":"2017-02-10T17:03:00.000Z","key":1486746180000,"doc_count":13},{"key_as_string":"2017-02-10T17:04:00.000Z","key":1486746240000,"doc_count":12},{"key_as_string":"2017-02-10T17:05:00.000Z","key":1486746300000,"doc_count":9},{"key_as_string":"2017-02-10T17:06:00.000Z","key":1486746360000,"doc_count":14},{"key_as_string":"2017-02-10T17:07:00.000Z","key":1486746420000,"doc_count":15},{"key_as_string":"2017-02-10T17:08:00.000Z","key":1486746480000,"doc_count":11},{"key_as_string":"2017-02-10T17:09:00.000Z","key":1486746540000,"doc_count":8},{"key_as_string":"2017-02-10T17:10:00.000Z","key":1486746600000,"doc_count":9},{"key_as_string":"2017-02-10T17:11:00.000Z","key":1486746660000,"doc_count":12},{"key_as_string":"2017-02-10T17:12:00.000Z","key":1486746720000,"doc_count":15},{"key_as_string":"2017-02-10T17:13:00.000Z","key":1486746780000,"doc_count":13},{"key_as_string":"2017-02-10T17:14:00.000Z","key":1486746840000,"doc_count":14},{"key_as_string":"2017-02-10T17:15:00.000Z","key":1486746900000,"doc_count":10},{"key_as_string":"2017-02-10T17:16:00.000Z","key":1486746960000,"doc_count":12},{"key_as_string":"2017-02-10T17:17:00.000Z","key":1486747020000,"doc_count":10},{"key_as_string":"2017-02-10T17:18:00.000Z","key":1486747080000,"doc_count":14},{"key_as_string":"2017-02-10T17:19:00.000Z","key":1486747140000,"doc_count":7},{"key_as_string":"2017-02-10T17:20:00.000Z","key":1486747200000,"doc_count":9},{"key_as_string":"2017-02-10T17:21:00.000Z","key":1486747260000,"doc_count":10},{"key_as_string":"2017-02-10T17:22:00.000Z","key":1486747320000,"doc_count":13},{"key_as_string":"2017-02-10T17:23:00.000Z","key":1486747380000,"doc_count":16},{"key_as_string":"2017-02-10T17:24:00.000Z","key":1486747440000,"doc_count":11},{"key_as_string":"2017-02-10T17:25:00.000Z","key":1486747500000,"doc_count":14},{"key_as_string":"2017-02-10T17:26:00.000Z","key":1486747560000,"doc_count":12},{"key_as_string":"2017-02-10T17:27:00.000Z","key":1486747620000,"doc_count":12},{"key_as_string":"2017-02-10T17:28:00.000Z","key":1486747680000,"doc_count":9},{"key_as_string":"2017-02-10T17:29:00.000Z","key":1486747740000,"doc_count":16},{"key_as_string":"2017-02-10T17:30:00.000Z","key":1486747800000,"doc_count":14},{"key_as_string":"2017-02-10T17:31:00.000Z","key":1486747860000,"doc_count":10},{"key_as_string":"2017-02-10T17:32:00.000Z","key":1486747920000,"doc_count":8},{"key_as_string":"2017-02-10T17:33:00.000Z","key":1486747980000,"doc_count":9},{"key_as_string":"2017-02-10T17:34:00.000Z","key":1486748040000,"doc_count":15},{"key_as_string":"2017-02-10T17:35:00.000Z","key":1486748100000,"doc_count":9},{"key_as_string":"2017-02-10T17:36:00.000Z","key":1486748160000,"doc_count":13},{"key_as_string":"2017-02-10T17:37:00.000Z","key":1486748220000,"doc_count":9},{"key_as_string":"2017-02-10T17:38:00.000Z","key":1486748280000,"doc_count":7},{"key_as_string":"2017-02-10T17:39:00.000Z","key":1486748340000,"doc_count":18},{"key_as_string":"2017-02-10T17:40:00.000Z","key":1486748400000,"doc_count":14},{"key_as_string":"2017-02-10T17:41:00.000Z","key":1486748460000,"doc_count":9},{"key_as_string":"2017-02-10T17:42:00.000Z","key":1486748520000,"doc_count":12},{"key_as_string":"2017-02-10T17:43:00.000Z","key":1486748580000,"doc_count":9},{"key_as_string":"2017-02-10T17:44:00.000Z","key":1486748640000,"doc_count":14},{"key_as_string":"2017-02-10T17:45:00.000Z","key":1486748700000,"doc_count":11},{"key_as_string":"2017-02-10T17:46:00.000Z","key":1486748760000,"doc_count":11},{"key_as_string":"2017-02-10T17:47:00.000Z","key":1486748820000,"doc_count":12},{"key_as_string":"2017-02-10T17:48:00.000Z","key":1486748880000,"doc_count":16},{"key_as_string":"2017-02-10T17:49:00.000Z","key":1486748940000,"doc_count":10},{"key_as_string":"2017-02-10T17:50:00.000Z","key":1486749000000,"doc_count":14},{"key_as_string":"2017-02-10T17:51:00.000Z","key":1486749060000,"doc_count":8},{"key_as_string":"2017-02-10T17:52:00.000Z","key":1486749120000,"doc_count":16},{"key_as_string":"2017-02-10T17:53:00.000Z","key":1486749180000,"doc_count":9},{"key_as_string":"2017-02-10T17:54:00.000Z","key":1486749240000,"doc_count":11},{"key_as_string":"2017-02-10T17:55:00.000Z","key":1486749300000,"doc_count":9},{"key_as_string":"2017-02-10T17:56:00.000Z","key":1486749360000,"doc_count":12},{"key_as_string":"2017-02-10T17:57:00.000Z","key":1486749420000,"doc_count":13},{"key_as_string":"2017-02-10T17:58:00.000Z","key":1486749480000,"doc_count":12},{"key_as_string":"2017-02-10T17:59:00.000Z","key":1486749540000,"doc_count":15},{"key_as_string":"2017-02-10T18:00:00.000Z","key":1486749600000,"doc_count":10},{"key_as_string":"2017-02-10T18:01:00.000Z","key":1486749660000,"doc_count":10},{"key_as_string":"2017-02-10T18:02:00.000Z","key":1486749720000,"doc_count":10},{"key_as_string":"2017-02-10T18:03:00.000Z","key":1486749780000,"doc_count":9},{"key_as_string":"2017-02-10T18:04:00.000Z","key":1486749840000,"doc_count":12},{"key_as_string":"2017-02-10T18:05:00.000Z","key":1486749900000,"doc_count":14},{"key_as_string":"2017-02-10T18:06:00.000Z","key":1486749960000,"doc_count":16},{"key_as_string":"2017-02-10T18:07:00.000Z","key":1486750020000,"doc_count":12},{"key_as_string":"2017-02-10T18:08:00.000Z","key":1486750080000,"doc_count":10},{"key_as_string":"2017-02-10T18:09:00.000Z","key":1486750140000,"doc_count":11},{"key_as_string":"2017-02-10T18:10:00.000Z","key":1486750200000,"doc_count":12},{"key_as_string":"2017-02-10T18:11:00.000Z","key":1486750260000,"doc_count":10},{"key_as_string":"2017-02-10T18:12:00.000Z","key":1486750320000,"doc_count":13},{"key_as_string":"2017-02-10T18:13:00.000Z","key":1486750380000,"doc_count":12},{"key_as_string":"2017-02-10T18:14:00.000Z","key":1486750440000,"doc_count":14},{"key_as_string":"2017-02-10T18:15:00.000Z","key":1486750500000,"doc_count":11},{"key_as_string":"2017-02-10T18:16:00.000Z","key":1486750560000,"doc_count":12},{"key_as_string":"2017-02-10T18:17:00.000Z","key":1486750620000,"doc_count":10},{"key_as_string":"2017-02-10T18:18:00.000Z","key":1486750680000,"doc_count":9},{"key_as_string":"2017-02-10T18:19:00.000Z","key":1486750740000,"doc_count":14},{"key_as_string":"2017-02-10T18:20:00.000Z","key":1486750800000,"doc_count":6},{"key_as_string":"2017-02-10T18:21:00.000Z","key":1486750860000,"doc_count":13},{"key_as_string":"2017-02-10T18:22:00.000Z","key":1486750920000,"doc_count":14},{"key_as_string":"2017-02-10T18:23:00.000Z","key":1486750980000,"doc_count":9},{"key_as_string":"2017-02-10T18:24:00.000Z","key":1486751040000,"doc_count":9},{"key_as_string":"2017-02-10T18:25:00.000Z","key":1486751100000,"doc_count":10},{"key_as_string":"2017-02-10T18:26:00.000Z","key":1486751160000,"doc_count":9},{"key_as_string":"2017-02-10T18:27:00.000Z","key":1486751220000,"doc_count":12},{"key_as_string":"2017-02-10T18:28:00.000Z","key":1486751280000,"doc_count":7},{"key_as_string":"2017-02-10T18:29:00.000Z","key":1486751340000,"doc_count":12},{"key_as_string":"2017-02-10T18:30:00.000Z","key":1486751400000,"doc_count":13},{"key_as_string":"2017-02-10T18:31:00.000Z","key":1486751460000,"doc_count":11},{"key_as_string":"2017-02-10T18:32:00.000Z","key":1486751520000,"doc_count":13},{"key_as_string":"2017-02-10T18:33:00.000Z","key":1486751580000,"doc_count":4},{"key_as_string":"2017-02-10T18:34:00.000Z","key":1486751640000,"doc_count":12},{"key_as_string":"2017-02-10T18:35:00.000Z","key":1486751700000,"doc_count":12},{"key_as_string":"2017-02-10T18:36:00.000Z","key":1486751760000,"doc_count":9},{"key_as_string":"2017-02-10T18:37:00.000Z","key":1486751820000,"doc_count":14},{"key_as_string":"2017-02-10T18:38:00.000Z","key":1486751880000,"doc_count":9},{"key_as_string":"2017-02-10T18:39:00.000Z","key":1486751940000,"doc_count":12},{"key_as_string":"2017-02-10T18:40:00.000Z","key":1486752000000,"doc_count":10},{"key_as_string":"2017-02-10T18:41:00.000Z","key":1486752060000,"doc_count":15},{"key_as_string":"2017-02-10T18:42:00.000Z","key":1486752120000,"doc_count":13},{"key_as_string":"2017-02-10T18:43:00.000Z","key":1486752180000,"doc_count":16},{"key_as_string":"2017-02-10T18:44:00.000Z","key":1486752240000,"doc_count":12},{"key_as_string":"2017-02-10T18:45:00.000Z","key":1486752300000,"doc_count":11},{"key_as_string":"2017-02-10T18:46:00.000Z","key":1486752360000,"doc_count":13},{"key_as_string":"2017-02-10T18:47:00.000Z","key":1486752420000,"doc_count":15},{"key_as_string":"2017-02-10T18:48:00.000Z","key":1486752480000,"doc_count":6},{"key_as_string":"2017-02-10T18:49:00.000Z","key":1486752540000,"doc_count":9},{"key_as_string":"2017-02-10T18:50:00.000Z","key":1486752600000,"doc_count":19},{"key_as_string":"2017-02-10T18:51:00.000Z","key":1486752660000,"doc_count":11},{"key_as_string":"2017-02-10T18:52:00.000Z","key":1486752720000,"doc_count":11},{"key_as_string":"2017-02-10T18:53:00.000Z","key":1486752780000,"doc_count":11},{"key_as_string":"2017-02-10T18:54:00.000Z","key":1486752840000,"doc_count":12},{"key_as_string":"2017-02-10T18:55:00.000Z","key":1486752900000,"doc_count":11},{"key_as_string":"2017-02-10T18:56:00.000Z","key":1486752960000,"doc_count":12},{"key_as_string":"2017-02-10T18:57:00.000Z","key":1486753020000,"doc_count":11},{"key_as_string":"2017-02-10T18:58:00.000Z","key":1486753080000,"doc_count":13},{"key_as_string":"2017-02-10T18:59:00.000Z","key":1486753140000,"doc_count":12},{"key_as_string":"2017-02-10T19:00:00.000Z","key":1486753200000,"doc_count":10},{"key_as_string":"2017-02-10T19:01:00.000Z","key":1486753260000,"doc_count":7},{"key_as_string":"2017-02-10T19:02:00.000Z","key":1486753320000,"doc_count":15},{"key_as_string":"2017-02-10T19:03:00.000Z","key":1486753380000,"doc_count":10},{"key_as_string":"2017-02-10T19:04:00.000Z","key":1486753440000,"doc_count":11},{"key_as_string":"2017-02-10T19:05:00.000Z","key":1486753500000,"doc_count":10},{"key_as_string":"2017-02-10T19:06:00.000Z","key":1486753560000,"doc_count":15},{"key_as_string":"2017-02-10T19:07:00.000Z","key":1486753620000,"doc_count":12},{"key_as_string":"2017-02-10T19:08:00.000Z","key":1486753680000,"doc_count":7},{"key_as_string":"2017-02-10T19:09:00.000Z","key":1486753740000,"doc_count":11},{"key_as_string":"2017-02-10T19:10:00.000Z","key":1486753800000,"doc_count":9},{"key_as_string":"2017-02-10T19:11:00.000Z","key":1486753860000,"doc_count":11},{"key_as_string":"2017-02-10T19:12:00.000Z","key":1486753920000,"doc_count":10},{"key_as_string":"2017-02-10T19:13:00.000Z","key":1486753980000,"doc_count":11},{"key_as_string":"2017-02-10T19:14:00.000Z","key":1486754040000,"doc_count":14},{"key_as_string":"2017-02-10T19:15:00.000Z","key":1486754100000,"doc_count":10},{"key_as_string":"2017-02-10T19:16:00.000Z","key":1486754160000,"doc_count":12},{"key_as_string":"2017-02-10T19:17:00.000Z","key":1486754220000,"doc_count":12},{"key_as_string":"2017-02-10T19:18:00.000Z","key":1486754280000,"doc_count":11},{"key_as_string":"2017-02-10T19:19:00.000Z","key":1486754340000,"doc_count":11},{"key_as_string":"2017-02-10T19:20:00.000Z","key":1486754400000,"doc_count":10},{"key_as_string":"2017-02-10T19:21:00.000Z","key":1486754460000,"doc_count":15},{"key_as_string":"2017-02-10T19:22:00.000Z","key":1486754520000,"doc_count":8},{"key_as_string":"2017-02-10T19:23:00.000Z","key":1486754580000,"doc_count":7},{"key_as_string":"2017-02-10T19:24:00.000Z","key":1486754640000,"doc_count":20},{"key_as_string":"2017-02-10T19:25:00.000Z","key":1486754700000,"doc_count":10},{"key_as_string":"2017-02-10T19:26:00.000Z","key":1486754760000,"doc_count":9},{"key_as_string":"2017-02-10T19:27:00.000Z","key":1486754820000,"doc_count":13},{"key_as_string":"2017-02-10T19:28:00.000Z","key":1486754880000,"doc_count":12},{"key_as_string":"2017-02-10T19:29:00.000Z","key":1486754940000,"doc_count":10},{"key_as_string":"2017-02-10T19:30:00.000Z","key":1486755000000,"doc_count":11},{"key_as_string":"2017-02-10T19:31:00.000Z","key":1486755060000,"doc_count":10},{"key_as_string":"2017-02-10T19:32:00.000Z","key":1486755120000,"doc_count":10},{"key_as_string":"2017-02-10T19:33:00.000Z","key":1486755180000,"doc_count":11},{"key_as_string":"2017-02-10T19:34:00.000Z","key":1486755240000,"doc_count":12},{"key_as_string":"2017-02-10T19:35:00.000Z","key":1486755300000,"doc_count":8},{"key_as_string":"2017-02-10T19:36:00.000Z","key":1486755360000,"doc_count":10},{"key_as_string":"2017-02-10T19:37:00.000Z","key":1486755420000,"doc_count":13},{"key_as_string":"2017-02-10T19:38:00.000Z","key":1486755480000,"doc_count":11},{"key_as_string":"2017-02-10T19:39:00.000Z","key":1486755540000,"doc_count":7},{"key_as_string":"2017-02-10T19:40:00.000Z","key":1486755600000,"doc_count":17},{"key_as_string":"2017-02-10T19:41:00.000Z","key":1486755660000,"doc_count":8},{"key_as_string":"2017-02-10T19:42:00.000Z","key":1486755720000,"doc_count":15},{"key_as_string":"2017-02-10T19:43:00.000Z","key":1486755780000,"doc_count":11},{"key_as_string":"2017-02-10T19:44:00.000Z","key":1486755840000,"doc_count":11},{"key_as_string":"2017-02-10T19:45:00.000Z","key":1486755900000,"doc_count":8},{"key_as_string":"2017-02-10T19:46:00.000Z","key":1486755960000,"doc_count":8},{"key_as_string":"2017-02-10T19:47:00.000Z","key":1486756020000,"doc_count":15},{"key_as_string":"2017-02-10T19:48:00.000Z","key":1486756080000,"doc_count":15},{"key_as_string":"2017-02-10T19:49:00.000Z","key":1486756140000,"doc_count":11},{"key_as_string":"2017-02-10T19:50:00.000Z","key":1486756200000,"doc_count":15},{"key_as_string":"2017-02-10T19:51:00.000Z","key":1486756260000,"doc_count":9},{"key_as_string":"2017-02-10T19:52:00.000Z","key":1486756320000,"doc_count":10},{"key_as_string":"2017-02-10T19:53:00.000Z","key":1486756380000,"doc_count":9},{"key_as_string":"2017-02-10T19:54:00.000Z","key":1486756440000,"doc_count":12},{"key_as_string":"2017-02-10T19:55:00.000Z","key":1486756500000,"doc_count":9},{"key_as_string":"2017-02-10T19:56:00.000Z","key":1486756560000,"doc_count":13},{"key_as_string":"2017-02-10T19:57:00.000Z","key":1486756620000,"doc_count":12},{"key_as_string":"2017-02-10T19:58:00.000Z","key":1486756680000,"doc_count":10},{"key_as_string":"2017-02-10T19:59:00.000Z","key":1486756740000,"doc_count":7},{"key_as_string":"2017-02-10T20:00:00.000Z","key":1486756800000,"doc_count":12},{"key_as_string":"2017-02-10T20:01:00.000Z","key":1486756860000,"doc_count":12},{"key_as_string":"2017-02-10T20:02:00.000Z","key":1486756920000,"doc_count":12},{"key_as_string":"2017-02-10T20:03:00.000Z","key":1486756980000,"doc_count":8},{"key_as_string":"2017-02-10T20:04:00.000Z","key":1486757040000,"doc_count":20},{"key_as_string":"2017-02-10T20:05:00.000Z","key":1486757100000,"doc_count":7},{"key_as_string":"2017-02-10T20:06:00.000Z","key":1486757160000,"doc_count":16},{"key_as_string":"2017-02-10T20:07:00.000Z","key":1486757220000,"doc_count":13},{"key_as_string":"2017-02-10T20:08:00.000Z","key":1486757280000,"doc_count":9},{"key_as_string":"2017-02-10T20:09:00.000Z","key":1486757340000,"doc_count":12},{"key_as_string":"2017-02-10T20:10:00.000Z","key":1486757400000,"doc_count":7},{"key_as_string":"2017-02-10T20:11:00.000Z","key":1486757460000,"doc_count":8},{"key_as_string":"2017-02-10T20:12:00.000Z","key":1486757520000,"doc_count":10},{"key_as_string":"2017-02-10T20:13:00.000Z","key":1486757580000,"doc_count":8},{"key_as_string":"2017-02-10T20:14:00.000Z","key":1486757640000,"doc_count":17},{"key_as_string":"2017-02-10T20:15:00.000Z","key":1486757700000,"doc_count":11},{"key_as_string":"2017-02-10T20:16:00.000Z","key":1486757760000,"doc_count":12},{"key_as_string":"2017-02-10T20:17:00.000Z","key":1486757820000,"doc_count":12},{"key_as_string":"2017-02-10T20:18:00.000Z","key":1486757880000,"doc_count":12},{"key_as_string":"2017-02-10T20:19:00.000Z","key":1486757940000,"doc_count":15},{"key_as_string":"2017-02-10T20:20:00.000Z","key":1486758000000,"doc_count":7},{"key_as_string":"2017-02-10T20:21:00.000Z","key":1486758060000,"doc_count":11},{"key_as_string":"2017-02-10T20:22:00.000Z","key":1486758120000,"doc_count":10},{"key_as_string":"2017-02-10T20:23:00.000Z","key":1486758180000,"doc_count":14},{"key_as_string":"2017-02-10T20:24:00.000Z","key":1486758240000,"doc_count":11},{"key_as_string":"2017-02-10T20:25:00.000Z","key":1486758300000,"doc_count":9},{"key_as_string":"2017-02-10T20:26:00.000Z","key":1486758360000,"doc_count":7},{"key_as_string":"2017-02-10T20:27:00.000Z","key":1486758420000,"doc_count":10},{"key_as_string":"2017-02-10T20:28:00.000Z","key":1486758480000,"doc_count":14},{"key_as_string":"2017-02-10T20:29:00.000Z","key":1486758540000,"doc_count":12},{"key_as_string":"2017-02-10T20:30:00.000Z","key":1486758600000,"doc_count":10},{"key_as_string":"2017-02-10T20:31:00.000Z","key":1486758660000,"doc_count":11},{"key_as_string":"2017-02-10T20:32:00.000Z","key":1486758720000,"doc_count":12},{"key_as_string":"2017-02-10T20:33:00.000Z","key":1486758780000,"doc_count":15},{"key_as_string":"2017-02-10T20:34:00.000Z","key":1486758840000,"doc_count":12},{"key_as_string":"2017-02-10T20:35:00.000Z","key":1486758900000,"doc_count":14},{"key_as_string":"2017-02-10T20:36:00.000Z","key":1486758960000,"doc_count":6},{"key_as_string":"2017-02-10T20:37:00.000Z","key":1486759020000,"doc_count":11},{"key_as_string":"2017-02-10T20:38:00.000Z","key":1486759080000,"doc_count":15},{"key_as_string":"2017-02-10T20:39:00.000Z","key":1486759140000,"doc_count":11},{"key_as_string":"2017-02-10T20:40:00.000Z","key":1486759200000,"doc_count":10},{"key_as_string":"2017-02-10T20:41:00.000Z","key":1486759260000,"doc_count":10},{"key_as_string":"2017-02-10T20:42:00.000Z","key":1486759320000,"doc_count":8},{"key_as_string":"2017-02-10T20:43:00.000Z","key":1486759380000,"doc_count":10},{"key_as_string":"2017-02-10T20:44:00.000Z","key":1486759440000,"doc_count":10},{"key_as_string":"2017-02-10T20:45:00.000Z","key":1486759500000,"doc_count":9},{"key_as_string":"2017-02-10T20:46:00.000Z","key":1486759560000,"doc_count":12},{"key_as_string":"2017-02-10T20:47:00.000Z","key":1486759620000,"doc_count":11},{"key_as_string":"2017-02-10T20:48:00.000Z","key":1486759680000,"doc_count":13},{"key_as_string":"2017-02-10T20:49:00.000Z","key":1486759740000,"doc_count":8},{"key_as_string":"2017-02-10T20:50:00.000Z","key":1486759800000,"doc_count":10},{"key_as_string":"2017-02-10T20:51:00.000Z","key":1486759860000,"doc_count":10},{"key_as_string":"2017-02-10T20:52:00.000Z","key":1486759920000,"doc_count":14},{"key_as_string":"2017-02-10T20:53:00.000Z","key":1486759980000,"doc_count":10},{"key_as_string":"2017-02-10T20:54:00.000Z","key":1486760040000,"doc_count":17},{"key_as_string":"2017-02-10T20:55:00.000Z","key":1486760100000,"doc_count":8},{"key_as_string":"2017-02-10T20:56:00.000Z","key":1486760160000,"doc_count":10},{"key_as_string":"2017-02-10T20:57:00.000Z","key":1486760220000,"doc_count":11},{"key_as_string":"2017-02-10T20:58:00.000Z","key":1486760280000,"doc_count":9},{"key_as_string":"2017-02-10T20:59:00.000Z","key":1486760340000,"doc_count":14},{"key_as_string":"2017-02-10T21:00:00.000Z","key":1486760400000,"doc_count":11},{"key_as_string":"2017-02-10T21:01:00.000Z","key":1486760460000,"doc_count":13},{"key_as_string":"2017-02-10T21:02:00.000Z","key":1486760520000,"doc_count":8},{"key_as_string":"2017-02-10T21:03:00.000Z","key":1486760580000,"doc_count":13},{"key_as_string":"2017-02-10T21:04:00.000Z","key":1486760640000,"doc_count":10},{"key_as_string":"2017-02-10T21:05:00.000Z","key":1486760700000,"doc_count":11},{"key_as_string":"2017-02-10T21:06:00.000Z","key":1486760760000,"doc_count":5},{"key_as_string":"2017-02-10T21:07:00.000Z","key":1486760820000,"doc_count":11},{"key_as_string":"2017-02-10T21:08:00.000Z","key":1486760880000,"doc_count":12},{"key_as_string":"2017-02-10T21:09:00.000Z","key":1486760940000,"doc_count":7},{"key_as_string":"2017-02-10T21:10:00.000Z","key":1486761000000,"doc_count":13},{"key_as_string":"2017-02-10T21:11:00.000Z","key":1486761060000,"doc_count":10},{"key_as_string":"2017-02-10T21:12:00.000Z","key":1486761120000,"doc_count":13},{"key_as_string":"2017-02-10T21:13:00.000Z","key":1486761180000,"doc_count":11},{"key_as_string":"2017-02-10T21:14:00.000Z","key":1486761240000,"doc_count":11},{"key_as_string":"2017-02-10T21:15:00.000Z","key":1486761300000,"doc_count":9},{"key_as_string":"2017-02-10T21:16:00.000Z","key":1486761360000,"doc_count":13},{"key_as_string":"2017-02-10T21:17:00.000Z","key":1486761420000,"doc_count":10},{"key_as_string":"2017-02-10T21:18:00.000Z","key":1486761480000,"doc_count":12},{"key_as_string":"2017-02-10T21:19:00.000Z","key":1486761540000,"doc_count":8},{"key_as_string":"2017-02-10T21:20:00.000Z","key":1486761600000,"doc_count":11},{"key_as_string":"2017-02-10T21:21:00.000Z","key":1486761660000,"doc_count":13},{"key_as_string":"2017-02-10T21:22:00.000Z","key":1486761720000,"doc_count":9},{"key_as_string":"2017-02-10T21:23:00.000Z","key":1486761780000,"doc_count":13},{"key_as_string":"2017-02-10T21:24:00.000Z","key":1486761840000,"doc_count":8},{"key_as_string":"2017-02-10T21:25:00.000Z","key":1486761900000,"doc_count":8},{"key_as_string":"2017-02-10T21:26:00.000Z","key":1486761960000,"doc_count":12},{"key_as_string":"2017-02-10T21:27:00.000Z","key":1486762020000,"doc_count":10},{"key_as_string":"2017-02-10T21:28:00.000Z","key":1486762080000,"doc_count":16},{"key_as_string":"2017-02-10T21:29:00.000Z","key":1486762140000,"doc_count":7},{"key_as_string":"2017-02-10T21:30:00.000Z","key":1486762200000,"doc_count":10},{"key_as_string":"2017-02-10T21:31:00.000Z","key":1486762260000,"doc_count":16},{"key_as_string":"2017-02-10T21:32:00.000Z","key":1486762320000,"doc_count":14},{"key_as_string":"2017-02-10T21:33:00.000Z","key":1486762380000,"doc_count":6},{"key_as_string":"2017-02-10T21:34:00.000Z","key":1486762440000,"doc_count":9},{"key_as_string":"2017-02-10T21:35:00.000Z","key":1486762500000,"doc_count":11},{"key_as_string":"2017-02-10T21:36:00.000Z","key":1486762560000,"doc_count":12},{"key_as_string":"2017-02-10T21:37:00.000Z","key":1486762620000,"doc_count":16},{"key_as_string":"2017-02-10T21:38:00.000Z","key":1486762680000,"doc_count":11},{"key_as_string":"2017-02-10T21:39:00.000Z","key":1486762740000,"doc_count":10},{"key_as_string":"2017-02-10T21:40:00.000Z","key":1486762800000,"doc_count":11},{"key_as_string":"2017-02-10T21:41:00.000Z","key":1486762860000,"doc_count":11},{"key_as_string":"2017-02-10T21:42:00.000Z","key":1486762920000,"doc_count":13},{"key_as_string":"2017-02-10T21:43:00.000Z","key":1486762980000,"doc_count":11},{"key_as_string":"2017-02-10T21:44:00.000Z","key":1486763040000,"doc_count":14},{"key_as_string":"2017-02-10T21:45:00.000Z","key":1486763100000,"doc_count":9},{"key_as_string":"2017-02-10T21:46:00.000Z","key":1486763160000,"doc_count":9},{"key_as_string":"2017-02-10T21:47:00.000Z","key":1486763220000,"doc_count":16},{"key_as_string":"2017-02-10T21:48:00.000Z","key":1486763280000,"doc_count":6},{"key_as_string":"2017-02-10T21:49:00.000Z","key":1486763340000,"doc_count":12},{"key_as_string":"2017-02-10T21:50:00.000Z","key":1486763400000,"doc_count":10},{"key_as_string":"2017-02-10T21:51:00.000Z","key":1486763460000,"doc_count":11},{"key_as_string":"2017-02-10T21:52:00.000Z","key":1486763520000,"doc_count":11},{"key_as_string":"2017-02-10T21:53:00.000Z","key":1486763580000,"doc_count":12},{"key_as_string":"2017-02-10T21:54:00.000Z","key":1486763640000,"doc_count":15},{"key_as_string":"2017-02-10T21:55:00.000Z","key":1486763700000,"doc_count":12},{"key_as_string":"2017-02-10T21:56:00.000Z","key":1486763760000,"doc_count":9},{"key_as_string":"2017-02-10T21:57:00.000Z","key":1486763820000,"doc_count":13},{"key_as_string":"2017-02-10T21:58:00.000Z","key":1486763880000,"doc_count":8},{"key_as_string":"2017-02-10T21:59:00.000Z","key":1486763940000,"doc_count":9},{"key_as_string":"2017-02-10T22:00:00.000Z","key":1486764000000,"doc_count":20},{"key_as_string":"2017-02-10T22:01:00.000Z","key":1486764060000,"doc_count":11},{"key_as_string":"2017-02-10T22:02:00.000Z","key":1486764120000,"doc_count":14},{"key_as_string":"2017-02-10T22:03:00.000Z","key":1486764180000,"doc_count":8},{"key_as_string":"2017-02-10T22:04:00.000Z","key":1486764240000,"doc_count":13},{"key_as_string":"2017-02-10T22:05:00.000Z","key":1486764300000,"doc_count":8},{"key_as_string":"2017-02-10T22:06:00.000Z","key":1486764360000,"doc_count":14},{"key_as_string":"2017-02-10T22:07:00.000Z","key":1486764420000,"doc_count":9},{"key_as_string":"2017-02-10T22:08:00.000Z","key":1486764480000,"doc_count":8},{"key_as_string":"2017-02-10T22:09:00.000Z","key":1486764540000,"doc_count":10},{"key_as_string":"2017-02-10T22:10:00.000Z","key":1486764600000,"doc_count":18},{"key_as_string":"2017-02-10T22:11:00.000Z","key":1486764660000,"doc_count":8},{"key_as_string":"2017-02-10T22:12:00.000Z","key":1486764720000,"doc_count":9},{"key_as_string":"2017-02-10T22:13:00.000Z","key":1486764780000,"doc_count":13},{"key_as_string":"2017-02-10T22:14:00.000Z","key":1486764840000,"doc_count":9},{"key_as_string":"2017-02-10T22:15:00.000Z","key":1486764900000,"doc_count":12},{"key_as_string":"2017-02-10T22:16:00.000Z","key":1486764960000,"doc_count":7},{"key_as_string":"2017-02-10T22:17:00.000Z","key":1486765020000,"doc_count":11},{"key_as_string":"2017-02-10T22:18:00.000Z","key":1486765080000,"doc_count":9},{"key_as_string":"2017-02-10T22:19:00.000Z","key":1486765140000,"doc_count":6},{"key_as_string":"2017-02-10T22:20:00.000Z","key":1486765200000,"doc_count":10},{"key_as_string":"2017-02-10T22:21:00.000Z","key":1486765260000,"doc_count":9},{"key_as_string":"2017-02-10T22:22:00.000Z","key":1486765320000,"doc_count":12},{"key_as_string":"2017-02-10T22:23:00.000Z","key":1486765380000,"doc_count":13},{"key_as_string":"2017-02-10T22:24:00.000Z","key":1486765440000,"doc_count":12},{"key_as_string":"2017-02-10T22:25:00.000Z","key":1486765500000,"doc_count":9},{"key_as_string":"2017-02-10T22:26:00.000Z","key":1486765560000,"doc_count":17},{"key_as_string":"2017-02-10T22:27:00.000Z","key":1486765620000,"doc_count":8},{"key_as_string":"2017-02-10T22:28:00.000Z","key":1486765680000,"doc_count":15},{"key_as_string":"2017-02-10T22:29:00.000Z","key":1486765740000,"doc_count":10},{"key_as_string":"2017-02-10T22:30:00.000Z","key":1486765800000,"doc_count":7},{"key_as_string":"2017-02-10T22:31:00.000Z","key":1486765860000,"doc_count":15},{"key_as_string":"2017-02-10T22:32:00.000Z","key":1486765920000,"doc_count":8},{"key_as_string":"2017-02-10T22:33:00.000Z","key":1486765980000,"doc_count":10},{"key_as_string":"2017-02-10T22:34:00.000Z","key":1486766040000,"doc_count":13},{"key_as_string":"2017-02-10T22:35:00.000Z","key":1486766100000,"doc_count":12},{"key_as_string":"2017-02-10T22:36:00.000Z","key":1486766160000,"doc_count":10},{"key_as_string":"2017-02-10T22:37:00.000Z","key":1486766220000,"doc_count":13},{"key_as_string":"2017-02-10T22:38:00.000Z","key":1486766280000,"doc_count":8},{"key_as_string":"2017-02-10T22:39:00.000Z","key":1486766340000,"doc_count":14},{"key_as_string":"2017-02-10T22:40:00.000Z","key":1486766400000,"doc_count":14},{"key_as_string":"2017-02-10T22:41:00.000Z","key":1486766460000,"doc_count":13},{"key_as_string":"2017-02-10T22:42:00.000Z","key":1486766520000,"doc_count":9},{"key_as_string":"2017-02-10T22:43:00.000Z","key":1486766580000,"doc_count":11},{"key_as_string":"2017-02-10T22:44:00.000Z","key":1486766640000,"doc_count":12},{"key_as_string":"2017-02-10T22:45:00.000Z","key":1486766700000,"doc_count":11},{"key_as_string":"2017-02-10T22:46:00.000Z","key":1486766760000,"doc_count":5},{"key_as_string":"2017-02-10T22:47:00.000Z","key":1486766820000,"doc_count":12},{"key_as_string":"2017-02-10T22:48:00.000Z","key":1486766880000,"doc_count":8},{"key_as_string":"2017-02-10T22:49:00.000Z","key":1486766940000,"doc_count":13},{"key_as_string":"2017-02-10T22:50:00.000Z","key":1486767000000,"doc_count":9},{"key_as_string":"2017-02-10T22:51:00.000Z","key":1486767060000,"doc_count":14},{"key_as_string":"2017-02-10T22:52:00.000Z","key":1486767120000,"doc_count":8},{"key_as_string":"2017-02-10T22:53:00.000Z","key":1486767180000,"doc_count":14},{"key_as_string":"2017-02-10T22:54:00.000Z","key":1486767240000,"doc_count":5},{"key_as_string":"2017-02-10T22:55:00.000Z","key":1486767300000,"doc_count":15},{"key_as_string":"2017-02-10T22:56:00.000Z","key":1486767360000,"doc_count":10},{"key_as_string":"2017-02-10T22:57:00.000Z","key":1486767420000,"doc_count":17},{"key_as_string":"2017-02-10T22:58:00.000Z","key":1486767480000,"doc_count":10},{"key_as_string":"2017-02-10T22:59:00.000Z","key":1486767540000,"doc_count":14},{"key_as_string":"2017-02-10T23:00:00.000Z","key":1486767600000,"doc_count":5},{"key_as_string":"2017-02-10T23:01:00.000Z","key":1486767660000,"doc_count":12},{"key_as_string":"2017-02-10T23:02:00.000Z","key":1486767720000,"doc_count":12},{"key_as_string":"2017-02-10T23:03:00.000Z","key":1486767780000,"doc_count":9},{"key_as_string":"2017-02-10T23:04:00.000Z","key":1486767840000,"doc_count":7},{"key_as_string":"2017-02-10T23:05:00.000Z","key":1486767900000,"doc_count":12},{"key_as_string":"2017-02-10T23:06:00.000Z","key":1486767960000,"doc_count":7},{"key_as_string":"2017-02-10T23:07:00.000Z","key":1486768020000,"doc_count":14},{"key_as_string":"2017-02-10T23:08:00.000Z","key":1486768080000,"doc_count":10},{"key_as_string":"2017-02-10T23:09:00.000Z","key":1486768140000,"doc_count":9},{"key_as_string":"2017-02-10T23:10:00.000Z","key":1486768200000,"doc_count":15},{"key_as_string":"2017-02-10T23:11:00.000Z","key":1486768260000,"doc_count":13},{"key_as_string":"2017-02-10T23:12:00.000Z","key":1486768320000,"doc_count":10},{"key_as_string":"2017-02-10T23:13:00.000Z","key":1486768380000,"doc_count":8},{"key_as_string":"2017-02-10T23:14:00.000Z","key":1486768440000,"doc_count":10},{"key_as_string":"2017-02-10T23:15:00.000Z","key":1486768500000,"doc_count":13},{"key_as_string":"2017-02-10T23:16:00.000Z","key":1486768560000,"doc_count":9},{"key_as_string":"2017-02-10T23:17:00.000Z","key":1486768620000,"doc_count":8},{"key_as_string":"2017-02-10T23:18:00.000Z","key":1486768680000,"doc_count":7},{"key_as_string":"2017-02-10T23:19:00.000Z","key":1486768740000,"doc_count":12},{"key_as_string":"2017-02-10T23:20:00.000Z","key":1486768800000,"doc_count":9},{"key_as_string":"2017-02-10T23:21:00.000Z","key":1486768860000,"doc_count":11},{"key_as_string":"2017-02-10T23:22:00.000Z","key":1486768920000,"doc_count":8},{"key_as_string":"2017-02-10T23:23:00.000Z","key":1486768980000,"doc_count":9},{"key_as_string":"2017-02-10T23:24:00.000Z","key":1486769040000,"doc_count":14},{"key_as_string":"2017-02-10T23:25:00.000Z","key":1486769100000,"doc_count":9},{"key_as_string":"2017-02-10T23:26:00.000Z","key":1486769160000,"doc_count":8},{"key_as_string":"2017-02-10T23:27:00.000Z","key":1486769220000,"doc_count":7},{"key_as_string":"2017-02-10T23:28:00.000Z","key":1486769280000,"doc_count":17},{"key_as_string":"2017-02-10T23:29:00.000Z","key":1486769340000,"doc_count":5},{"key_as_string":"2017-02-10T23:30:00.000Z","key":1486769400000,"doc_count":16},{"key_as_string":"2017-02-10T23:31:00.000Z","key":1486769460000,"doc_count":14},{"key_as_string":"2017-02-10T23:32:00.000Z","key":1486769520000,"doc_count":6},{"key_as_string":"2017-02-10T23:33:00.000Z","key":1486769580000,"doc_count":8},{"key_as_string":"2017-02-10T23:34:00.000Z","key":1486769640000,"doc_count":15},{"key_as_string":"2017-02-10T23:35:00.000Z","key":1486769700000,"doc_count":9},{"key_as_string":"2017-02-10T23:36:00.000Z","key":1486769760000,"doc_count":11},{"key_as_string":"2017-02-10T23:37:00.000Z","key":1486769820000,"doc_count":13},{"key_as_string":"2017-02-10T23:38:00.000Z","key":1486769880000,"doc_count":12},{"key_as_string":"2017-02-10T23:39:00.000Z","key":1486769940000,"doc_count":12},{"key_as_string":"2017-02-10T23:40:00.000Z","key":1486770000000,"doc_count":9},{"key_as_string":"2017-02-10T23:41:00.000Z","key":1486770060000,"doc_count":11},{"key_as_string":"2017-02-10T23:42:00.000Z","key":1486770120000,"doc_count":10},{"key_as_string":"2017-02-10T23:43:00.000Z","key":1486770180000,"doc_count":16},{"key_as_string":"2017-02-10T23:44:00.000Z","key":1486770240000,"doc_count":8},{"key_as_string":"2017-02-10T23:45:00.000Z","key":1486770300000,"doc_count":8},{"key_as_string":"2017-02-10T23:46:00.000Z","key":1486770360000,"doc_count":8},{"key_as_string":"2017-02-10T23:47:00.000Z","key":1486770420000,"doc_count":11},{"key_as_string":"2017-02-10T23:48:00.000Z","key":1486770480000,"doc_count":10},{"key_as_string":"2017-02-10T23:49:00.000Z","key":1486770540000,"doc_count":10},{"key_as_string":"2017-02-10T23:50:00.000Z","key":1486770600000,"doc_count":13},{"key_as_string":"2017-02-10T23:51:00.000Z","key":1486770660000,"doc_count":6},{"key_as_string":"2017-02-10T23:52:00.000Z","key":1486770720000,"doc_count":16},{"key_as_string":"2017-02-10T23:53:00.000Z","key":1486770780000,"doc_count":10},{"key_as_string":"2017-02-10T23:54:00.000Z","key":1486770840000,"doc_count":11},{"key_as_string":"2017-02-10T23:55:00.000Z","key":1486770900000,"doc_count":14},{"key_as_string":"2017-02-10T23:56:00.000Z","key":1486770960000,"doc_count":9},{"key_as_string":"2017-02-10T23:57:00.000Z","key":1486771020000,"doc_count":9},{"key_as_string":"2017-02-10T23:58:00.000Z","key":1486771080000,"doc_count":11},{"key_as_string":"2017-02-10T23:59:00.000Z","key":1486771140000,"doc_count":6},{"key_as_string":"2017-02-11T00:00:00.000Z","key":1486771200000,"doc_count":12},{"key_as_string":"2017-02-11T00:01:00.000Z","key":1486771260000,"doc_count":14},{"key_as_string":"2017-02-11T00:02:00.000Z","key":1486771320000,"doc_count":9},{"key_as_string":"2017-02-11T00:03:00.000Z","key":1486771380000,"doc_count":3},{"key_as_string":"2017-02-11T00:04:00.000Z","key":1486771440000,"doc_count":15},{"key_as_string":"2017-02-11T00:05:00.000Z","key":1486771500000,"doc_count":10},{"key_as_string":"2017-02-11T00:06:00.000Z","key":1486771560000,"doc_count":11},{"key_as_string":"2017-02-11T00:07:00.000Z","key":1486771620000,"doc_count":6},{"key_as_string":"2017-02-11T00:08:00.000Z","key":1486771680000,"doc_count":11},{"key_as_string":"2017-02-11T00:09:00.000Z","key":1486771740000,"doc_count":10},{"key_as_string":"2017-02-11T00:10:00.000Z","key":1486771800000,"doc_count":7},{"key_as_string":"2017-02-11T00:11:00.000Z","key":1486771860000,"doc_count":13},{"key_as_string":"2017-02-11T00:12:00.000Z","key":1486771920000,"doc_count":9},{"key_as_string":"2017-02-11T00:13:00.000Z","key":1486771980000,"doc_count":10},{"key_as_string":"2017-02-11T00:14:00.000Z","key":1486772040000,"doc_count":17},{"key_as_string":"2017-02-11T00:15:00.000Z","key":1486772100000,"doc_count":7},{"key_as_string":"2017-02-11T00:16:00.000Z","key":1486772160000,"doc_count":12},{"key_as_string":"2017-02-11T00:17:00.000Z","key":1486772220000,"doc_count":13},{"key_as_string":"2017-02-11T00:18:00.000Z","key":1486772280000,"doc_count":4},{"key_as_string":"2017-02-11T00:19:00.000Z","key":1486772340000,"doc_count":15},{"key_as_string":"2017-02-11T00:20:00.000Z","key":1486772400000,"doc_count":13},{"key_as_string":"2017-02-11T00:21:00.000Z","key":1486772460000,"doc_count":8},{"key_as_string":"2017-02-11T00:22:00.000Z","key":1486772520000,"doc_count":8},{"key_as_string":"2017-02-11T00:23:00.000Z","key":1486772580000,"doc_count":12},{"key_as_string":"2017-02-11T00:24:00.000Z","key":1486772640000,"doc_count":9},{"key_as_string":"2017-02-11T00:25:00.000Z","key":1486772700000,"doc_count":8},{"key_as_string":"2017-02-11T00:26:00.000Z","key":1486772760000,"doc_count":13},{"key_as_string":"2017-02-11T00:27:00.000Z","key":1486772820000,"doc_count":10},{"key_as_string":"2017-02-11T00:28:00.000Z","key":1486772880000,"doc_count":11},{"key_as_string":"2017-02-11T00:29:00.000Z","key":1486772940000,"doc_count":7},{"key_as_string":"2017-02-11T00:30:00.000Z","key":1486773000000,"doc_count":14},{"key_as_string":"2017-02-11T00:31:00.000Z","key":1486773060000,"doc_count":8},{"key_as_string":"2017-02-11T00:32:00.000Z","key":1486773120000,"doc_count":9},{"key_as_string":"2017-02-11T00:33:00.000Z","key":1486773180000,"doc_count":14},{"key_as_string":"2017-02-11T00:34:00.000Z","key":1486773240000,"doc_count":7},{"key_as_string":"2017-02-11T00:35:00.000Z","key":1486773300000,"doc_count":10},{"key_as_string":"2017-02-11T00:36:00.000Z","key":1486773360000,"doc_count":11},{"key_as_string":"2017-02-11T00:37:00.000Z","key":1486773420000,"doc_count":15},{"key_as_string":"2017-02-11T00:38:00.000Z","key":1486773480000,"doc_count":9},{"key_as_string":"2017-02-11T00:39:00.000Z","key":1486773540000,"doc_count":11},{"key_as_string":"2017-02-11T00:40:00.000Z","key":1486773600000,"doc_count":8},{"key_as_string":"2017-02-11T00:41:00.000Z","key":1486773660000,"doc_count":9},{"key_as_string":"2017-02-11T00:42:00.000Z","key":1486773720000,"doc_count":10},{"key_as_string":"2017-02-11T00:43:00.000Z","key":1486773780000,"doc_count":14},{"key_as_string":"2017-02-11T00:44:00.000Z","key":1486773840000,"doc_count":7},{"key_as_string":"2017-02-11T00:45:00.000Z","key":1486773900000,"doc_count":12},{"key_as_string":"2017-02-11T00:46:00.000Z","key":1486773960000,"doc_count":12},{"key_as_string":"2017-02-11T00:47:00.000Z","key":1486774020000,"doc_count":9},{"key_as_string":"2017-02-11T00:48:00.000Z","key":1486774080000,"doc_count":11},{"key_as_string":"2017-02-11T00:49:00.000Z","key":1486774140000,"doc_count":6},{"key_as_string":"2017-02-11T00:50:00.000Z","key":1486774200000,"doc_count":11},{"key_as_string":"2017-02-11T00:51:00.000Z","key":1486774260000,"doc_count":14},{"key_as_string":"2017-02-11T00:52:00.000Z","key":1486774320000,"doc_count":6},{"key_as_string":"2017-02-11T00:53:00.000Z","key":1486774380000,"doc_count":14},{"key_as_string":"2017-02-11T00:54:00.000Z","key":1486774440000,"doc_count":9},{"key_as_string":"2017-02-11T00:55:00.000Z","key":1486774500000,"doc_count":7},{"key_as_string":"2017-02-11T00:56:00.000Z","key":1486774560000,"doc_count":9},{"key_as_string":"2017-02-11T00:57:00.000Z","key":1486774620000,"doc_count":11},{"key_as_string":"2017-02-11T00:58:00.000Z","key":1486774680000,"doc_count":11},{"key_as_string":"2017-02-11T00:59:00.000Z","key":1486774740000,"doc_count":9},{"key_as_string":"2017-02-11T01:00:00.000Z","key":1486774800000,"doc_count":9},{"key_as_string":"2017-02-11T01:01:00.000Z","key":1486774860000,"doc_count":9},{"key_as_string":"2017-02-11T01:02:00.000Z","key":1486774920000,"doc_count":9},{"key_as_string":"2017-02-11T01:03:00.000Z","key":1486774980000,"doc_count":13},{"key_as_string":"2017-02-11T01:04:00.000Z","key":1486775040000,"doc_count":8},{"key_as_string":"2017-02-11T01:05:00.000Z","key":1486775100000,"doc_count":14},{"key_as_string":"2017-02-11T01:06:00.000Z","key":1486775160000,"doc_count":7},{"key_as_string":"2017-02-11T01:07:00.000Z","key":1486775220000,"doc_count":13},{"key_as_string":"2017-02-11T01:08:00.000Z","key":1486775280000,"doc_count":9},{"key_as_string":"2017-02-11T01:09:00.000Z","key":1486775340000,"doc_count":11},{"key_as_string":"2017-02-11T01:10:00.000Z","key":1486775400000,"doc_count":11},{"key_as_string":"2017-02-11T01:11:00.000Z","key":1486775460000,"doc_count":15},{"key_as_string":"2017-02-11T01:12:00.000Z","key":1486775520000,"doc_count":8},{"key_as_string":"2017-02-11T01:13:00.000Z","key":1486775580000,"doc_count":7},{"key_as_string":"2017-02-11T01:14:00.000Z","key":1486775640000,"doc_count":16},{"key_as_string":"2017-02-11T01:15:00.000Z","key":1486775700000,"doc_count":6},{"key_as_string":"2017-02-11T01:16:00.000Z","key":1486775760000,"doc_count":13},{"key_as_string":"2017-02-11T01:17:00.000Z","key":1486775820000,"doc_count":9},{"key_as_string":"2017-02-11T01:18:00.000Z","key":1486775880000,"doc_count":7},{"key_as_string":"2017-02-11T01:19:00.000Z","key":1486775940000,"doc_count":12},{"key_as_string":"2017-02-11T01:20:00.000Z","key":1486776000000,"doc_count":8},{"key_as_string":"2017-02-11T01:21:00.000Z","key":1486776060000,"doc_count":12},{"key_as_string":"2017-02-11T01:22:00.000Z","key":1486776120000,"doc_count":16},{"key_as_string":"2017-02-11T01:23:00.000Z","key":1486776180000,"doc_count":9},{"key_as_string":"2017-02-11T01:24:00.000Z","key":1486776240000,"doc_count":6},{"key_as_string":"2017-02-11T01:25:00.000Z","key":1486776300000,"doc_count":13},{"key_as_string":"2017-02-11T01:26:00.000Z","key":1486776360000,"doc_count":12},{"key_as_string":"2017-02-11T01:27:00.000Z","key":1486776420000,"doc_count":10},{"key_as_string":"2017-02-11T01:28:00.000Z","key":1486776480000,"doc_count":6},{"key_as_string":"2017-02-11T01:29:00.000Z","key":1486776540000,"doc_count":13},{"key_as_string":"2017-02-11T01:30:00.000Z","key":1486776600000,"doc_count":8},{"key_as_string":"2017-02-11T01:31:00.000Z","key":1486776660000,"doc_count":16},{"key_as_string":"2017-02-11T01:32:00.000Z","key":1486776720000,"doc_count":8},{"key_as_string":"2017-02-11T01:33:00.000Z","key":1486776780000,"doc_count":4},{"key_as_string":"2017-02-11T01:34:00.000Z","key":1486776840000,"doc_count":9},{"key_as_string":"2017-02-11T01:35:00.000Z","key":1486776900000,"doc_count":11},{"key_as_string":"2017-02-11T01:36:00.000Z","key":1486776960000,"doc_count":10},{"key_as_string":"2017-02-11T01:37:00.000Z","key":1486777020000,"doc_count":17},{"key_as_string":"2017-02-11T01:38:00.000Z","key":1486777080000,"doc_count":11},{"key_as_string":"2017-02-11T01:39:00.000Z","key":1486777140000,"doc_count":10},{"key_as_string":"2017-02-11T01:40:00.000Z","key":1486777200000,"doc_count":12},{"key_as_string":"2017-02-11T01:41:00.000Z","key":1486777260000,"doc_count":11},{"key_as_string":"2017-02-11T01:42:00.000Z","key":1486777320000,"doc_count":11},{"key_as_string":"2017-02-11T01:43:00.000Z","key":1486777380000,"doc_count":6},{"key_as_string":"2017-02-11T01:44:00.000Z","key":1486777440000,"doc_count":13},{"key_as_string":"2017-02-11T01:45:00.000Z","key":1486777500000,"doc_count":12},{"key_as_string":"2017-02-11T01:46:00.000Z","key":1486777560000,"doc_count":12},{"key_as_string":"2017-02-11T01:47:00.000Z","key":1486777620000,"doc_count":7},{"key_as_string":"2017-02-11T01:48:00.000Z","key":1486777680000,"doc_count":12},{"key_as_string":"2017-02-11T01:49:00.000Z","key":1486777740000,"doc_count":11},{"key_as_string":"2017-02-11T01:50:00.000Z","key":1486777800000,"doc_count":13},{"key_as_string":"2017-02-11T01:51:00.000Z","key":1486777860000,"doc_count":13},{"key_as_string":"2017-02-11T01:52:00.000Z","key":1486777920000,"doc_count":11},{"key_as_string":"2017-02-11T01:53:00.000Z","key":1486777980000,"doc_count":11},{"key_as_string":"2017-02-11T01:54:00.000Z","key":1486778040000,"doc_count":7},{"key_as_string":"2017-02-11T01:55:00.000Z","key":1486778100000,"doc_count":13},{"key_as_string":"2017-02-11T01:56:00.000Z","key":1486778160000,"doc_count":12},{"key_as_string":"2017-02-11T01:57:00.000Z","key":1486778220000,"doc_count":12},{"key_as_string":"2017-02-11T01:58:00.000Z","key":1486778280000,"doc_count":10},{"key_as_string":"2017-02-11T01:59:00.000Z","key":1486778340000,"doc_count":13},{"key_as_string":"2017-02-11T02:00:00.000Z","key":1486778400000,"doc_count":10},{"key_as_string":"2017-02-11T02:01:00.000Z","key":1486778460000,"doc_count":8},{"key_as_string":"2017-02-11T02:02:00.000Z","key":1486778520000,"doc_count":8},{"key_as_string":"2017-02-11T02:03:00.000Z","key":1486778580000,"doc_count":10},{"key_as_string":"2017-02-11T02:04:00.000Z","key":1486778640000,"doc_count":10},{"key_as_string":"2017-02-11T02:05:00.000Z","key":1486778700000,"doc_count":6},{"key_as_string":"2017-02-11T02:06:00.000Z","key":1486778760000,"doc_count":12},{"key_as_string":"2017-02-11T02:07:00.000Z","key":1486778820000,"doc_count":11},{"key_as_string":"2017-02-11T02:08:00.000Z","key":1486778880000,"doc_count":7},{"key_as_string":"2017-02-11T02:09:00.000Z","key":1486778940000,"doc_count":13},{"key_as_string":"2017-02-11T02:10:00.000Z","key":1486779000000,"doc_count":9},{"key_as_string":"2017-02-11T02:11:00.000Z","key":1486779060000,"doc_count":14},{"key_as_string":"2017-02-11T02:12:00.000Z","key":1486779120000,"doc_count":9},{"key_as_string":"2017-02-11T02:13:00.000Z","key":1486779180000,"doc_count":10},{"key_as_string":"2017-02-11T02:14:00.000Z","key":1486779240000,"doc_count":12},{"key_as_string":"2017-02-11T02:15:00.000Z","key":1486779300000,"doc_count":5},{"key_as_string":"2017-02-11T02:16:00.000Z","key":1486779360000,"doc_count":9},{"key_as_string":"2017-02-11T02:17:00.000Z","key":1486779420000,"doc_count":14},{"key_as_string":"2017-02-11T02:18:00.000Z","key":1486779480000,"doc_count":5},{"key_as_string":"2017-02-11T02:19:00.000Z","key":1486779540000,"doc_count":18},{"key_as_string":"2017-02-11T02:20:00.000Z","key":1486779600000,"doc_count":9},{"key_as_string":"2017-02-11T02:21:00.000Z","key":1486779660000,"doc_count":7},{"key_as_string":"2017-02-11T02:22:00.000Z","key":1486779720000,"doc_count":14},{"key_as_string":"2017-02-11T02:23:00.000Z","key":1486779780000,"doc_count":8},{"key_as_string":"2017-02-11T02:24:00.000Z","key":1486779840000,"doc_count":9},{"key_as_string":"2017-02-11T02:25:00.000Z","key":1486779900000,"doc_count":10},{"key_as_string":"2017-02-11T02:26:00.000Z","key":1486779960000,"doc_count":15},{"key_as_string":"2017-02-11T02:27:00.000Z","key":1486780020000,"doc_count":12},{"key_as_string":"2017-02-11T02:28:00.000Z","key":1486780080000,"doc_count":8},{"key_as_string":"2017-02-11T02:29:00.000Z","key":1486780140000,"doc_count":7},{"key_as_string":"2017-02-11T02:30:00.000Z","key":1486780200000,"doc_count":13},{"key_as_string":"2017-02-11T02:31:00.000Z","key":1486780260000,"doc_count":9},{"key_as_string":"2017-02-11T02:32:00.000Z","key":1486780320000,"doc_count":11},{"key_as_string":"2017-02-11T02:33:00.000Z","key":1486780380000,"doc_count":9},{"key_as_string":"2017-02-11T02:34:00.000Z","key":1486780440000,"doc_count":12},{"key_as_string":"2017-02-11T02:35:00.000Z","key":1486780500000,"doc_count":11},{"key_as_string":"2017-02-11T02:36:00.000Z","key":1486780560000,"doc_count":4},{"key_as_string":"2017-02-11T02:37:00.000Z","key":1486780620000,"doc_count":12},{"key_as_string":"2017-02-11T02:38:00.000Z","key":1486780680000,"doc_count":6},{"key_as_string":"2017-02-11T02:39:00.000Z","key":1486780740000,"doc_count":12},{"key_as_string":"2017-02-11T02:40:00.000Z","key":1486780800000,"doc_count":12},{"key_as_string":"2017-02-11T02:41:00.000Z","key":1486780860000,"doc_count":12},{"key_as_string":"2017-02-11T02:42:00.000Z","key":1486780920000,"doc_count":13},{"key_as_string":"2017-02-11T02:43:00.000Z","key":1486780980000,"doc_count":12},{"key_as_string":"2017-02-11T02:44:00.000Z","key":1486781040000,"doc_count":13},{"key_as_string":"2017-02-11T02:45:00.000Z","key":1486781100000,"doc_count":11},{"key_as_string":"2017-02-11T02:46:00.000Z","key":1486781160000,"doc_count":5},{"key_as_string":"2017-02-11T02:47:00.000Z","key":1486781220000,"doc_count":14},{"key_as_string":"2017-02-11T02:48:00.000Z","key":1486781280000,"doc_count":8},{"key_as_string":"2017-02-11T02:49:00.000Z","key":1486781340000,"doc_count":14},{"key_as_string":"2017-02-11T02:50:00.000Z","key":1486781400000,"doc_count":16},{"key_as_string":"2017-02-11T02:51:00.000Z","key":1486781460000,"doc_count":7},{"key_as_string":"2017-02-11T02:52:00.000Z","key":1486781520000,"doc_count":7},{"key_as_string":"2017-02-11T02:53:00.000Z","key":1486781580000,"doc_count":15},{"key_as_string":"2017-02-11T02:54:00.000Z","key":1486781640000,"doc_count":13},{"key_as_string":"2017-02-11T02:55:00.000Z","key":1486781700000,"doc_count":5},{"key_as_string":"2017-02-11T02:56:00.000Z","key":1486781760000,"doc_count":8},{"key_as_string":"2017-02-11T02:57:00.000Z","key":1486781820000,"doc_count":8},{"key_as_string":"2017-02-11T02:58:00.000Z","key":1486781880000,"doc_count":16},{"key_as_string":"2017-02-11T02:59:00.000Z","key":1486781940000,"doc_count":9},{"key_as_string":"2017-02-11T03:00:00.000Z","key":1486782000000,"doc_count":9},{"key_as_string":"2017-02-11T03:01:00.000Z","key":1486782060000,"doc_count":13},{"key_as_string":"2017-02-11T03:02:00.000Z","key":1486782120000,"doc_count":14},{"key_as_string":"2017-02-11T03:03:00.000Z","key":1486782180000,"doc_count":10},{"key_as_string":"2017-02-11T03:04:00.000Z","key":1486782240000,"doc_count":8},{"key_as_string":"2017-02-11T03:05:00.000Z","key":1486782300000,"doc_count":14},{"key_as_string":"2017-02-11T03:06:00.000Z","key":1486782360000,"doc_count":11},{"key_as_string":"2017-02-11T03:07:00.000Z","key":1486782420000,"doc_count":11},{"key_as_string":"2017-02-11T03:08:00.000Z","key":1486782480000,"doc_count":8},{"key_as_string":"2017-02-11T03:09:00.000Z","key":1486782540000,"doc_count":13},{"key_as_string":"2017-02-11T03:10:00.000Z","key":1486782600000,"doc_count":12},{"key_as_string":"2017-02-11T03:11:00.000Z","key":1486782660000,"doc_count":9},{"key_as_string":"2017-02-11T03:12:00.000Z","key":1486782720000,"doc_count":9},{"key_as_string":"2017-02-11T03:13:00.000Z","key":1486782780000,"doc_count":9},{"key_as_string":"2017-02-11T03:14:00.000Z","key":1486782840000,"doc_count":11},{"key_as_string":"2017-02-11T03:15:00.000Z","key":1486782900000,"doc_count":9},{"key_as_string":"2017-02-11T03:16:00.000Z","key":1486782960000,"doc_count":20},{"key_as_string":"2017-02-11T03:17:00.000Z","key":1486783020000,"doc_count":7},{"key_as_string":"2017-02-11T03:18:00.000Z","key":1486783080000,"doc_count":11},{"key_as_string":"2017-02-11T03:19:00.000Z","key":1486783140000,"doc_count":10},{"key_as_string":"2017-02-11T03:20:00.000Z","key":1486783200000,"doc_count":8},{"key_as_string":"2017-02-11T03:21:00.000Z","key":1486783260000,"doc_count":16},{"key_as_string":"2017-02-11T03:22:00.000Z","key":1486783320000,"doc_count":5},{"key_as_string":"2017-02-11T03:23:00.000Z","key":1486783380000,"doc_count":12},{"key_as_string":"2017-02-11T03:24:00.000Z","key":1486783440000,"doc_count":8},{"key_as_string":"2017-02-11T03:25:00.000Z","key":1486783500000,"doc_count":17},{"key_as_string":"2017-02-11T03:26:00.000Z","key":1486783560000,"doc_count":8},{"key_as_string":"2017-02-11T03:27:00.000Z","key":1486783620000,"doc_count":14},{"key_as_string":"2017-02-11T03:28:00.000Z","key":1486783680000,"doc_count":7},{"key_as_string":"2017-02-11T03:29:00.000Z","key":1486783740000,"doc_count":12},{"key_as_string":"2017-02-11T03:30:00.000Z","key":1486783800000,"doc_count":13},{"key_as_string":"2017-02-11T03:31:00.000Z","key":1486783860000,"doc_count":9},{"key_as_string":"2017-02-11T03:32:00.000Z","key":1486783920000,"doc_count":5},{"key_as_string":"2017-02-11T03:33:00.000Z","key":1486783980000,"doc_count":10},{"key_as_string":"2017-02-11T03:34:00.000Z","key":1486784040000,"doc_count":14},{"key_as_string":"2017-02-11T03:35:00.000Z","key":1486784100000,"doc_count":13},{"key_as_string":"2017-02-11T03:36:00.000Z","key":1486784160000,"doc_count":9},{"key_as_string":"2017-02-11T03:37:00.000Z","key":1486784220000,"doc_count":10},{"key_as_string":"2017-02-11T03:38:00.000Z","key":1486784280000,"doc_count":10},{"key_as_string":"2017-02-11T03:39:00.000Z","key":1486784340000,"doc_count":12},{"key_as_string":"2017-02-11T03:40:00.000Z","key":1486784400000,"doc_count":11},{"key_as_string":"2017-02-11T03:41:00.000Z","key":1486784460000,"doc_count":11},{"key_as_string":"2017-02-11T03:42:00.000Z","key":1486784520000,"doc_count":7},{"key_as_string":"2017-02-11T03:43:00.000Z","key":1486784580000,"doc_count":18},{"key_as_string":"2017-02-11T03:44:00.000Z","key":1486784640000,"doc_count":6},{"key_as_string":"2017-02-11T03:45:00.000Z","key":1486784700000,"doc_count":12},{"key_as_string":"2017-02-11T03:46:00.000Z","key":1486784760000,"doc_count":13},{"key_as_string":"2017-02-11T03:47:00.000Z","key":1486784820000,"doc_count":13},{"key_as_string":"2017-02-11T03:48:00.000Z","key":1486784880000,"doc_count":15},{"key_as_string":"2017-02-11T03:49:00.000Z","key":1486784940000,"doc_count":11},{"key_as_string":"2017-02-11T03:50:00.000Z","key":1486785000000,"doc_count":9},{"key_as_string":"2017-02-11T03:51:00.000Z","key":1486785060000,"doc_count":14},{"key_as_string":"2017-02-11T03:52:00.000Z","key":1486785120000,"doc_count":7},{"key_as_string":"2017-02-11T03:53:00.000Z","key":1486785180000,"doc_count":11},{"key_as_string":"2017-02-11T03:54:00.000Z","key":1486785240000,"doc_count":8},{"key_as_string":"2017-02-11T03:55:00.000Z","key":1486785300000,"doc_count":7},{"key_as_string":"2017-02-11T03:56:00.000Z","key":1486785360000,"doc_count":10},{"key_as_string":"2017-02-11T03:57:00.000Z","key":1486785420000,"doc_count":13},{"key_as_string":"2017-02-11T03:58:00.000Z","key":1486785480000,"doc_count":11},{"key_as_string":"2017-02-11T03:59:00.000Z","key":1486785540000,"doc_count":8},{"key_as_string":"2017-02-11T04:00:00.000Z","key":1486785600000,"doc_count":11},{"key_as_string":"2017-02-11T04:01:00.000Z","key":1486785660000,"doc_count":9},{"key_as_string":"2017-02-11T04:02:00.000Z","key":1486785720000,"doc_count":13},{"key_as_string":"2017-02-11T04:03:00.000Z","key":1486785780000,"doc_count":14},{"key_as_string":"2017-02-11T04:04:00.000Z","key":1486785840000,"doc_count":13},{"key_as_string":"2017-02-11T04:05:00.000Z","key":1486785900000,"doc_count":9},{"key_as_string":"2017-02-11T04:06:00.000Z","key":1486785960000,"doc_count":8},{"key_as_string":"2017-02-11T04:07:00.000Z","key":1486786020000,"doc_count":8},{"key_as_string":"2017-02-11T04:08:00.000Z","key":1486786080000,"doc_count":14},{"key_as_string":"2017-02-11T04:09:00.000Z","key":1486786140000,"doc_count":10},{"key_as_string":"2017-02-11T04:10:00.000Z","key":1486786200000,"doc_count":12},{"key_as_string":"2017-02-11T04:11:00.000Z","key":1486786260000,"doc_count":9},{"key_as_string":"2017-02-11T04:12:00.000Z","key":1486786320000,"doc_count":11},{"key_as_string":"2017-02-11T04:13:00.000Z","key":1486786380000,"doc_count":19},{"key_as_string":"2017-02-11T04:14:00.000Z","key":1486786440000,"doc_count":9},{"key_as_string":"2017-02-11T04:15:00.000Z","key":1486786500000,"doc_count":9},{"key_as_string":"2017-02-11T04:16:00.000Z","key":1486786560000,"doc_count":15},{"key_as_string":"2017-02-11T04:17:00.000Z","key":1486786620000,"doc_count":17},{"key_as_string":"2017-02-11T04:18:00.000Z","key":1486786680000,"doc_count":15},{"key_as_string":"2017-02-11T04:19:00.000Z","key":1486786740000,"doc_count":8},{"key_as_string":"2017-02-11T04:20:00.000Z","key":1486786800000,"doc_count":11},{"key_as_string":"2017-02-11T04:21:00.000Z","key":1486786860000,"doc_count":13},{"key_as_string":"2017-02-11T04:22:00.000Z","key":1486786920000,"doc_count":11},{"key_as_string":"2017-02-11T04:23:00.000Z","key":1486786980000,"doc_count":7},{"key_as_string":"2017-02-11T04:24:00.000Z","key":1486787040000,"doc_count":14},{"key_as_string":"2017-02-11T04:25:00.000Z","key":1486787100000,"doc_count":11},{"key_as_string":"2017-02-11T04:26:00.000Z","key":1486787160000,"doc_count":9},{"key_as_string":"2017-02-11T04:27:00.000Z","key":1486787220000,"doc_count":6},{"key_as_string":"2017-02-11T04:28:00.000Z","key":1486787280000,"doc_count":17},{"key_as_string":"2017-02-11T04:29:00.000Z","key":1486787340000,"doc_count":9},{"key_as_string":"2017-02-11T04:30:00.000Z","key":1486787400000,"doc_count":9},{"key_as_string":"2017-02-11T04:31:00.000Z","key":1486787460000,"doc_count":8},{"key_as_string":"2017-02-11T04:32:00.000Z","key":1486787520000,"doc_count":12},{"key_as_string":"2017-02-11T04:33:00.000Z","key":1486787580000,"doc_count":11},{"key_as_string":"2017-02-11T04:34:00.000Z","key":1486787640000,"doc_count":10},{"key_as_string":"2017-02-11T04:35:00.000Z","key":1486787700000,"doc_count":11},{"key_as_string":"2017-02-11T04:36:00.000Z","key":1486787760000,"doc_count":11},{"key_as_string":"2017-02-11T04:37:00.000Z","key":1486787820000,"doc_count":15},{"key_as_string":"2017-02-11T04:38:00.000Z","key":1486787880000,"doc_count":11},{"key_as_string":"2017-02-11T04:39:00.000Z","key":1486787940000,"doc_count":10},{"key_as_string":"2017-02-11T04:40:00.000Z","key":1486788000000,"doc_count":10},{"key_as_string":"2017-02-11T04:41:00.000Z","key":1486788060000,"doc_count":10},{"key_as_string":"2017-02-11T04:42:00.000Z","key":1486788120000,"doc_count":8},{"key_as_string":"2017-02-11T04:43:00.000Z","key":1486788180000,"doc_count":9},{"key_as_string":"2017-02-11T04:44:00.000Z","key":1486788240000,"doc_count":8},{"key_as_string":"2017-02-11T04:45:00.000Z","key":1486788300000,"doc_count":19},{"key_as_string":"2017-02-11T04:46:00.000Z","key":1486788360000,"doc_count":11},{"key_as_string":"2017-02-11T04:47:00.000Z","key":1486788420000,"doc_count":11},{"key_as_string":"2017-02-11T04:48:00.000Z","key":1486788480000,"doc_count":10},{"key_as_string":"2017-02-11T04:49:00.000Z","key":1486788540000,"doc_count":9},{"key_as_string":"2017-02-11T04:50:00.000Z","key":1486788600000,"doc_count":9},{"key_as_string":"2017-02-11T04:51:00.000Z","key":1486788660000,"doc_count":15},{"key_as_string":"2017-02-11T04:52:00.000Z","key":1486788720000,"doc_count":11},{"key_as_string":"2017-02-11T04:53:00.000Z","key":1486788780000,"doc_count":11},{"key_as_string":"2017-02-11T04:54:00.000Z","key":1486788840000,"doc_count":12},{"key_as_string":"2017-02-11T04:55:00.000Z","key":1486788900000,"doc_count":12},{"key_as_string":"2017-02-11T04:56:00.000Z","key":1486788960000,"doc_count":9},{"key_as_string":"2017-02-11T04:57:00.000Z","key":1486789020000,"doc_count":16},{"key_as_string":"2017-02-11T04:58:00.000Z","key":1486789080000,"doc_count":11},{"key_as_string":"2017-02-11T04:59:00.000Z","key":1486789140000,"doc_count":10},{"key_as_string":"2017-02-11T05:00:00.000Z","key":1486789200000,"doc_count":9},{"key_as_string":"2017-02-11T05:01:00.000Z","key":1486789260000,"doc_count":14},{"key_as_string":"2017-02-11T05:02:00.000Z","key":1486789320000,"doc_count":10},{"key_as_string":"2017-02-11T05:03:00.000Z","key":1486789380000,"doc_count":11},{"key_as_string":"2017-02-11T05:04:00.000Z","key":1486789440000,"doc_count":11},{"key_as_string":"2017-02-11T05:05:00.000Z","key":1486789500000,"doc_count":6},{"key_as_string":"2017-02-11T05:06:00.000Z","key":1486789560000,"doc_count":19},{"key_as_string":"2017-02-11T05:07:00.000Z","key":1486789620000,"doc_count":11},{"key_as_string":"2017-02-11T05:08:00.000Z","key":1486789680000,"doc_count":15},{"key_as_string":"2017-02-11T05:09:00.000Z","key":1486789740000,"doc_count":10},{"key_as_string":"2017-02-11T05:10:00.000Z","key":1486789800000,"doc_count":13},{"key_as_string":"2017-02-11T05:11:00.000Z","key":1486789860000,"doc_count":12},{"key_as_string":"2017-02-11T05:12:00.000Z","key":1486789920000,"doc_count":14},{"key_as_string":"2017-02-11T05:13:00.000Z","key":1486789980000,"doc_count":12},{"key_as_string":"2017-02-11T05:14:00.000Z","key":1486790040000,"doc_count":13},{"key_as_string":"2017-02-11T05:15:00.000Z","key":1486790100000,"doc_count":7},{"key_as_string":"2017-02-11T05:16:00.000Z","key":1486790160000,"doc_count":10},{"key_as_string":"2017-02-11T05:17:00.000Z","key":1486790220000,"doc_count":12},{"key_as_string":"2017-02-11T05:18:00.000Z","key":1486790280000,"doc_count":15},{"key_as_string":"2017-02-11T05:19:00.000Z","key":1486790340000,"doc_count":10},{"key_as_string":"2017-02-11T05:20:00.000Z","key":1486790400000,"doc_count":9},{"key_as_string":"2017-02-11T05:21:00.000Z","key":1486790460000,"doc_count":10},{"key_as_string":"2017-02-11T05:22:00.000Z","key":1486790520000,"doc_count":15},{"key_as_string":"2017-02-11T05:23:00.000Z","key":1486790580000,"doc_count":9},{"key_as_string":"2017-02-11T05:24:00.000Z","key":1486790640000,"doc_count":13},{"key_as_string":"2017-02-11T05:25:00.000Z","key":1486790700000,"doc_count":12},{"key_as_string":"2017-02-11T05:26:00.000Z","key":1486790760000,"doc_count":9},{"key_as_string":"2017-02-11T05:27:00.000Z","key":1486790820000,"doc_count":15},{"key_as_string":"2017-02-11T05:28:00.000Z","key":1486790880000,"doc_count":11},{"key_as_string":"2017-02-11T05:29:00.000Z","key":1486790940000,"doc_count":14},{"key_as_string":"2017-02-11T05:30:00.000Z","key":1486791000000,"doc_count":14},{"key_as_string":"2017-02-11T05:31:00.000Z","key":1486791060000,"doc_count":15},{"key_as_string":"2017-02-11T05:32:00.000Z","key":1486791120000,"doc_count":7},{"key_as_string":"2017-02-11T05:33:00.000Z","key":1486791180000,"doc_count":7},{"key_as_string":"2017-02-11T05:34:00.000Z","key":1486791240000,"doc_count":9},{"key_as_string":"2017-02-11T05:35:00.000Z","key":1486791300000,"doc_count":13},{"key_as_string":"2017-02-11T05:36:00.000Z","key":1486791360000,"doc_count":11},{"key_as_string":"2017-02-11T05:37:00.000Z","key":1486791420000,"doc_count":11},{"key_as_string":"2017-02-11T05:38:00.000Z","key":1486791480000,"doc_count":10},{"key_as_string":"2017-02-11T05:39:00.000Z","key":1486791540000,"doc_count":7},{"key_as_string":"2017-02-11T05:40:00.000Z","key":1486791600000,"doc_count":12},{"key_as_string":"2017-02-11T05:41:00.000Z","key":1486791660000,"doc_count":11},{"key_as_string":"2017-02-11T05:42:00.000Z","key":1486791720000,"doc_count":16},{"key_as_string":"2017-02-11T05:43:00.000Z","key":1486791780000,"doc_count":12},{"key_as_string":"2017-02-11T05:44:00.000Z","key":1486791840000,"doc_count":8},{"key_as_string":"2017-02-11T05:45:00.000Z","key":1486791900000,"doc_count":13},{"key_as_string":"2017-02-11T05:46:00.000Z","key":1486791960000,"doc_count":17},{"key_as_string":"2017-02-11T05:47:00.000Z","key":1486792020000,"doc_count":8},{"key_as_string":"2017-02-11T05:48:00.000Z","key":1486792080000,"doc_count":9},{"key_as_string":"2017-02-11T05:49:00.000Z","key":1486792140000,"doc_count":9},{"key_as_string":"2017-02-11T05:50:00.000Z","key":1486792200000,"doc_count":13},{"key_as_string":"2017-02-11T05:51:00.000Z","key":1486792260000,"doc_count":7},{"key_as_string":"2017-02-11T05:52:00.000Z","key":1486792320000,"doc_count":13},{"key_as_string":"2017-02-11T05:53:00.000Z","key":1486792380000,"doc_count":8},{"key_as_string":"2017-02-11T05:54:00.000Z","key":1486792440000,"doc_count":12},{"key_as_string":"2017-02-11T05:55:00.000Z","key":1486792500000,"doc_count":9},{"key_as_string":"2017-02-11T05:56:00.000Z","key":1486792560000,"doc_count":15},{"key_as_string":"2017-02-11T05:57:00.000Z","key":1486792620000,"doc_count":11},{"key_as_string":"2017-02-11T05:58:00.000Z","key":1486792680000,"doc_count":14},{"key_as_string":"2017-02-11T05:59:00.000Z","key":1486792740000,"doc_count":10},{"key_as_string":"2017-02-11T06:00:00.000Z","key":1486792800000,"doc_count":15},{"key_as_string":"2017-02-11T06:01:00.000Z","key":1486792860000,"doc_count":10},{"key_as_string":"2017-02-11T06:02:00.000Z","key":1486792920000,"doc_count":9},{"key_as_string":"2017-02-11T06:03:00.000Z","key":1486792980000,"doc_count":16},{"key_as_string":"2017-02-11T06:04:00.000Z","key":1486793040000,"doc_count":12},{"key_as_string":"2017-02-11T06:05:00.000Z","key":1486793100000,"doc_count":13},{"key_as_string":"2017-02-11T06:06:00.000Z","key":1486793160000,"doc_count":14},{"key_as_string":"2017-02-11T06:07:00.000Z","key":1486793220000,"doc_count":11},{"key_as_string":"2017-02-11T06:08:00.000Z","key":1486793280000,"doc_count":16},{"key_as_string":"2017-02-11T06:09:00.000Z","key":1486793340000,"doc_count":9},{"key_as_string":"2017-02-11T06:10:00.000Z","key":1486793400000,"doc_count":15},{"key_as_string":"2017-02-11T06:11:00.000Z","key":1486793460000,"doc_count":9},{"key_as_string":"2017-02-11T06:12:00.000Z","key":1486793520000,"doc_count":9},{"key_as_string":"2017-02-11T06:13:00.000Z","key":1486793580000,"doc_count":13},{"key_as_string":"2017-02-11T06:14:00.000Z","key":1486793640000,"doc_count":12},{"key_as_string":"2017-02-11T06:15:00.000Z","key":1486793700000,"doc_count":11},{"key_as_string":"2017-02-11T06:16:00.000Z","key":1486793760000,"doc_count":14},{"key_as_string":"2017-02-11T06:17:00.000Z","key":1486793820000,"doc_count":16},{"key_as_string":"2017-02-11T06:18:00.000Z","key":1486793880000,"doc_count":7},{"key_as_string":"2017-02-11T06:19:00.000Z","key":1486793940000,"doc_count":18},{"key_as_string":"2017-02-11T06:20:00.000Z","key":1486794000000,"doc_count":15},{"key_as_string":"2017-02-11T06:21:00.000Z","key":1486794060000,"doc_count":10},{"key_as_string":"2017-02-11T06:22:00.000Z","key":1486794120000,"doc_count":10},{"key_as_string":"2017-02-11T06:23:00.000Z","key":1486794180000,"doc_count":11},{"key_as_string":"2017-02-11T06:24:00.000Z","key":1486794240000,"doc_count":7},{"key_as_string":"2017-02-11T06:25:00.000Z","key":1486794300000,"doc_count":12},{"key_as_string":"2017-02-11T06:26:00.000Z","key":1486794360000,"doc_count":10},{"key_as_string":"2017-02-11T06:27:00.000Z","key":1486794420000,"doc_count":11},{"key_as_string":"2017-02-11T06:28:00.000Z","key":1486794480000,"doc_count":13},{"key_as_string":"2017-02-11T06:29:00.000Z","key":1486794540000,"doc_count":11},{"key_as_string":"2017-02-11T06:30:00.000Z","key":1486794600000,"doc_count":13},{"key_as_string":"2017-02-11T06:31:00.000Z","key":1486794660000,"doc_count":10},{"key_as_string":"2017-02-11T06:32:00.000Z","key":1486794720000,"doc_count":13},{"key_as_string":"2017-02-11T06:33:00.000Z","key":1486794780000,"doc_count":14},{"key_as_string":"2017-02-11T06:34:00.000Z","key":1486794840000,"doc_count":15},{"key_as_string":"2017-02-11T06:35:00.000Z","key":1486794900000,"doc_count":11},{"key_as_string":"2017-02-11T06:36:00.000Z","key":1486794960000,"doc_count":14},{"key_as_string":"2017-02-11T06:37:00.000Z","key":1486795020000,"doc_count":10},{"key_as_string":"2017-02-11T06:38:00.000Z","key":1486795080000,"doc_count":13},{"key_as_string":"2017-02-11T06:39:00.000Z","key":1486795140000,"doc_count":7},{"key_as_string":"2017-02-11T06:40:00.000Z","key":1486795200000,"doc_count":12},{"key_as_string":"2017-02-11T06:41:00.000Z","key":1486795260000,"doc_count":12},{"key_as_string":"2017-02-11T06:42:00.000Z","key":1486795320000,"doc_count":10},{"key_as_string":"2017-02-11T06:43:00.000Z","key":1486795380000,"doc_count":14},{"key_as_string":"2017-02-11T06:44:00.000Z","key":1486795440000,"doc_count":15},{"key_as_string":"2017-02-11T06:45:00.000Z","key":1486795500000,"doc_count":10},{"key_as_string":"2017-02-11T06:46:00.000Z","key":1486795560000,"doc_count":12},{"key_as_string":"2017-02-11T06:47:00.000Z","key":1486795620000,"doc_count":14},{"key_as_string":"2017-02-11T06:48:00.000Z","key":1486795680000,"doc_count":15},{"key_as_string":"2017-02-11T06:49:00.000Z","key":1486795740000,"doc_count":11},{"key_as_string":"2017-02-11T06:50:00.000Z","key":1486795800000,"doc_count":14},{"key_as_string":"2017-02-11T06:51:00.000Z","key":1486795860000,"doc_count":9},{"key_as_string":"2017-02-11T06:52:00.000Z","key":1486795920000,"doc_count":15},{"key_as_string":"2017-02-11T06:53:00.000Z","key":1486795980000,"doc_count":6},{"key_as_string":"2017-02-11T06:54:00.000Z","key":1486796040000,"doc_count":15},{"key_as_string":"2017-02-11T06:55:00.000Z","key":1486796100000,"doc_count":12},{"key_as_string":"2017-02-11T06:56:00.000Z","key":1486796160000,"doc_count":11},{"key_as_string":"2017-02-11T06:57:00.000Z","key":1486796220000,"doc_count":15},{"key_as_string":"2017-02-11T06:58:00.000Z","key":1486796280000,"doc_count":12},{"key_as_string":"2017-02-11T06:59:00.000Z","key":1486796340000,"doc_count":9},{"key_as_string":"2017-02-11T07:00:00.000Z","key":1486796400000,"doc_count":17},{"key_as_string":"2017-02-11T07:01:00.000Z","key":1486796460000,"doc_count":11},{"key_as_string":"2017-02-11T07:02:00.000Z","key":1486796520000,"doc_count":12},{"key_as_string":"2017-02-11T07:03:00.000Z","key":1486796580000,"doc_count":15},{"key_as_string":"2017-02-11T07:04:00.000Z","key":1486796640000,"doc_count":16},{"key_as_string":"2017-02-11T07:05:00.000Z","key":1486796700000,"doc_count":13},{"key_as_string":"2017-02-11T07:06:00.000Z","key":1486796760000,"doc_count":12},{"key_as_string":"2017-02-11T07:07:00.000Z","key":1486796820000,"doc_count":10},{"key_as_string":"2017-02-11T07:08:00.000Z","key":1486796880000,"doc_count":18},{"key_as_string":"2017-02-11T07:09:00.000Z","key":1486796940000,"doc_count":10},{"key_as_string":"2017-02-11T07:10:00.000Z","key":1486797000000,"doc_count":12},{"key_as_string":"2017-02-11T07:11:00.000Z","key":1486797060000,"doc_count":16},{"key_as_string":"2017-02-11T07:12:00.000Z","key":1486797120000,"doc_count":13},{"key_as_string":"2017-02-11T07:13:00.000Z","key":1486797180000,"doc_count":9},{"key_as_string":"2017-02-11T07:14:00.000Z","key":1486797240000,"doc_count":12},{"key_as_string":"2017-02-11T07:15:00.000Z","key":1486797300000,"doc_count":9},{"key_as_string":"2017-02-11T07:16:00.000Z","key":1486797360000,"doc_count":11},{"key_as_string":"2017-02-11T07:17:00.000Z","key":1486797420000,"doc_count":12},{"key_as_string":"2017-02-11T07:18:00.000Z","key":1486797480000,"doc_count":13},{"key_as_string":"2017-02-11T07:19:00.000Z","key":1486797540000,"doc_count":14},{"key_as_string":"2017-02-11T07:20:00.000Z","key":1486797600000,"doc_count":11},{"key_as_string":"2017-02-11T07:21:00.000Z","key":1486797660000,"doc_count":16},{"key_as_string":"2017-02-11T07:22:00.000Z","key":1486797720000,"doc_count":9},{"key_as_string":"2017-02-11T07:23:00.000Z","key":1486797780000,"doc_count":14},{"key_as_string":"2017-02-11T07:24:00.000Z","key":1486797840000,"doc_count":11},{"key_as_string":"2017-02-11T07:25:00.000Z","key":1486797900000,"doc_count":14},{"key_as_string":"2017-02-11T07:26:00.000Z","key":1486797960000,"doc_count":12},{"key_as_string":"2017-02-11T07:27:00.000Z","key":1486798020000,"doc_count":15},{"key_as_string":"2017-02-11T07:28:00.000Z","key":1486798080000,"doc_count":8},{"key_as_string":"2017-02-11T07:29:00.000Z","key":1486798140000,"doc_count":12},{"key_as_string":"2017-02-11T07:30:00.000Z","key":1486798200000,"doc_count":13},{"key_as_string":"2017-02-11T07:31:00.000Z","key":1486798260000,"doc_count":11},{"key_as_string":"2017-02-11T07:32:00.000Z","key":1486798320000,"doc_count":12},{"key_as_string":"2017-02-11T07:33:00.000Z","key":1486798380000,"doc_count":12},{"key_as_string":"2017-02-11T07:34:00.000Z","key":1486798440000,"doc_count":12},{"key_as_string":"2017-02-11T07:35:00.000Z","key":1486798500000,"doc_count":12},{"key_as_string":"2017-02-11T07:36:00.000Z","key":1486798560000,"doc_count":13},{"key_as_string":"2017-02-11T07:37:00.000Z","key":1486798620000,"doc_count":9},{"key_as_string":"2017-02-11T07:38:00.000Z","key":1486798680000,"doc_count":13},{"key_as_string":"2017-02-11T07:39:00.000Z","key":1486798740000,"doc_count":9},{"key_as_string":"2017-02-11T07:40:00.000Z","key":1486798800000,"doc_count":12},{"key_as_string":"2017-02-11T07:41:00.000Z","key":1486798860000,"doc_count":12},{"key_as_string":"2017-02-11T07:42:00.000Z","key":1486798920000,"doc_count":17},{"key_as_string":"2017-02-11T07:43:00.000Z","key":1486798980000,"doc_count":12},{"key_as_string":"2017-02-11T07:44:00.000Z","key":1486799040000,"doc_count":11},{"key_as_string":"2017-02-11T07:45:00.000Z","key":1486799100000,"doc_count":14},{"key_as_string":"2017-02-11T07:46:00.000Z","key":1486799160000,"doc_count":14},{"key_as_string":"2017-02-11T07:47:00.000Z","key":1486799220000,"doc_count":9},{"key_as_string":"2017-02-11T07:48:00.000Z","key":1486799280000,"doc_count":11},{"key_as_string":"2017-02-11T07:49:00.000Z","key":1486799340000,"doc_count":11},{"key_as_string":"2017-02-11T07:50:00.000Z","key":1486799400000,"doc_count":9},{"key_as_string":"2017-02-11T07:51:00.000Z","key":1486799460000,"doc_count":12},{"key_as_string":"2017-02-11T07:52:00.000Z","key":1486799520000,"doc_count":12},{"key_as_string":"2017-02-11T07:53:00.000Z","key":1486799580000,"doc_count":7},{"key_as_string":"2017-02-11T07:54:00.000Z","key":1486799640000,"doc_count":17},{"key_as_string":"2017-02-11T07:55:00.000Z","key":1486799700000,"doc_count":13},{"key_as_string":"2017-02-11T07:56:00.000Z","key":1486799760000,"doc_count":12},{"key_as_string":"2017-02-11T07:57:00.000Z","key":1486799820000,"doc_count":11},{"key_as_string":"2017-02-11T07:58:00.000Z","key":1486799880000,"doc_count":13},{"key_as_string":"2017-02-11T07:59:00.000Z","key":1486799940000,"doc_count":11},{"key_as_string":"2017-02-11T08:00:00.000Z","key":1486800000000,"doc_count":16},{"key_as_string":"2017-02-11T08:01:00.000Z","key":1486800060000,"doc_count":15},{"key_as_string":"2017-02-11T08:02:00.000Z","key":1486800120000,"doc_count":14},{"key_as_string":"2017-02-11T08:03:00.000Z","key":1486800180000,"doc_count":16},{"key_as_string":"2017-02-11T08:04:00.000Z","key":1486800240000,"doc_count":12},{"key_as_string":"2017-02-11T08:05:00.000Z","key":1486800300000,"doc_count":14},{"key_as_string":"2017-02-11T08:06:00.000Z","key":1486800360000,"doc_count":13},{"key_as_string":"2017-02-11T08:07:00.000Z","key":1486800420000,"doc_count":16},{"key_as_string":"2017-02-11T08:08:00.000Z","key":1486800480000,"doc_count":17},{"key_as_string":"2017-02-11T08:09:00.000Z","key":1486800540000,"doc_count":20},{"key_as_string":"2017-02-11T08:10:00.000Z","key":1486800600000,"doc_count":13},{"key_as_string":"2017-02-11T08:11:00.000Z","key":1486800660000,"doc_count":15},{"key_as_string":"2017-02-11T08:12:00.000Z","key":1486800720000,"doc_count":10},{"key_as_string":"2017-02-11T08:13:00.000Z","key":1486800780000,"doc_count":16},{"key_as_string":"2017-02-11T08:14:00.000Z","key":1486800840000,"doc_count":5},{"key_as_string":"2017-02-11T08:15:00.000Z","key":1486800900000,"doc_count":14},{"key_as_string":"2017-02-11T08:16:00.000Z","key":1486800960000,"doc_count":18},{"key_as_string":"2017-02-11T08:17:00.000Z","key":1486801020000,"doc_count":11},{"key_as_string":"2017-02-11T08:18:00.000Z","key":1486801080000,"doc_count":16},{"key_as_string":"2017-02-11T08:19:00.000Z","key":1486801140000,"doc_count":10},{"key_as_string":"2017-02-11T08:20:00.000Z","key":1486801200000,"doc_count":15},{"key_as_string":"2017-02-11T08:21:00.000Z","key":1486801260000,"doc_count":10},{"key_as_string":"2017-02-11T08:22:00.000Z","key":1486801320000,"doc_count":14},{"key_as_string":"2017-02-11T08:23:00.000Z","key":1486801380000,"doc_count":10},{"key_as_string":"2017-02-11T08:24:00.000Z","key":1486801440000,"doc_count":19},{"key_as_string":"2017-02-11T08:25:00.000Z","key":1486801500000,"doc_count":14},{"key_as_string":"2017-02-11T08:26:00.000Z","key":1486801560000,"doc_count":13},{"key_as_string":"2017-02-11T08:27:00.000Z","key":1486801620000,"doc_count":10},{"key_as_string":"2017-02-11T08:28:00.000Z","key":1486801680000,"doc_count":15},{"key_as_string":"2017-02-11T08:29:00.000Z","key":1486801740000,"doc_count":10},{"key_as_string":"2017-02-11T08:30:00.000Z","key":1486801800000,"doc_count":11},{"key_as_string":"2017-02-11T08:31:00.000Z","key":1486801860000,"doc_count":9},{"key_as_string":"2017-02-11T08:32:00.000Z","key":1486801920000,"doc_count":14},{"key_as_string":"2017-02-11T08:33:00.000Z","key":1486801980000,"doc_count":10},{"key_as_string":"2017-02-11T08:34:00.000Z","key":1486802040000,"doc_count":12},{"key_as_string":"2017-02-11T08:35:00.000Z","key":1486802100000,"doc_count":16},{"key_as_string":"2017-02-11T08:36:00.000Z","key":1486802160000,"doc_count":19},{"key_as_string":"2017-02-11T08:37:00.000Z","key":1486802220000,"doc_count":13},{"key_as_string":"2017-02-11T08:38:00.000Z","key":1486802280000,"doc_count":11},{"key_as_string":"2017-02-11T08:39:00.000Z","key":1486802340000,"doc_count":16},{"key_as_string":"2017-02-11T08:40:00.000Z","key":1486802400000,"doc_count":13},{"key_as_string":"2017-02-11T08:41:00.000Z","key":1486802460000,"doc_count":10},{"key_as_string":"2017-02-11T08:42:00.000Z","key":1486802520000,"doc_count":12},{"key_as_string":"2017-02-11T08:43:00.000Z","key":1486802580000,"doc_count":11},{"key_as_string":"2017-02-11T08:44:00.000Z","key":1486802640000,"doc_count":9},{"key_as_string":"2017-02-11T08:45:00.000Z","key":1486802700000,"doc_count":12},{"key_as_string":"2017-02-11T08:46:00.000Z","key":1486802760000,"doc_count":11},{"key_as_string":"2017-02-11T08:47:00.000Z","key":1486802820000,"doc_count":15},{"key_as_string":"2017-02-11T08:48:00.000Z","key":1486802880000,"doc_count":9},{"key_as_string":"2017-02-11T08:49:00.000Z","key":1486802940000,"doc_count":17},{"key_as_string":"2017-02-11T08:50:00.000Z","key":1486803000000,"doc_count":14},{"key_as_string":"2017-02-11T08:51:00.000Z","key":1486803060000,"doc_count":14},{"key_as_string":"2017-02-11T08:52:00.000Z","key":1486803120000,"doc_count":11},{"key_as_string":"2017-02-11T08:53:00.000Z","key":1486803180000,"doc_count":13},{"key_as_string":"2017-02-11T08:54:00.000Z","key":1486803240000,"doc_count":17},{"key_as_string":"2017-02-11T08:55:00.000Z","key":1486803300000,"doc_count":13},{"key_as_string":"2017-02-11T08:56:00.000Z","key":1486803360000,"doc_count":15},{"key_as_string":"2017-02-11T08:57:00.000Z","key":1486803420000,"doc_count":15},{"key_as_string":"2017-02-11T08:58:00.000Z","key":1486803480000,"doc_count":14},{"key_as_string":"2017-02-11T08:59:00.000Z","key":1486803540000,"doc_count":6},{"key_as_string":"2017-02-11T09:00:00.000Z","key":1486803600000,"doc_count":15},{"key_as_string":"2017-02-11T09:01:00.000Z","key":1486803660000,"doc_count":9},{"key_as_string":"2017-02-11T09:02:00.000Z","key":1486803720000,"doc_count":15},{"key_as_string":"2017-02-11T09:03:00.000Z","key":1486803780000,"doc_count":10},{"key_as_string":"2017-02-11T09:04:00.000Z","key":1486803840000,"doc_count":11},{"key_as_string":"2017-02-11T09:05:00.000Z","key":1486803900000,"doc_count":17},{"key_as_string":"2017-02-11T09:06:00.000Z","key":1486803960000,"doc_count":10},{"key_as_string":"2017-02-11T09:07:00.000Z","key":1486804020000,"doc_count":13},{"key_as_string":"2017-02-11T09:08:00.000Z","key":1486804080000,"doc_count":15},{"key_as_string":"2017-02-11T09:09:00.000Z","key":1486804140000,"doc_count":10},{"key_as_string":"2017-02-11T09:10:00.000Z","key":1486804200000,"doc_count":16},{"key_as_string":"2017-02-11T09:11:00.000Z","key":1486804260000,"doc_count":18},{"key_as_string":"2017-02-11T09:12:00.000Z","key":1486804320000,"doc_count":10},{"key_as_string":"2017-02-11T09:13:00.000Z","key":1486804380000,"doc_count":14},{"key_as_string":"2017-02-11T09:14:00.000Z","key":1486804440000,"doc_count":9},{"key_as_string":"2017-02-11T09:15:00.000Z","key":1486804500000,"doc_count":17},{"key_as_string":"2017-02-11T09:16:00.000Z","key":1486804560000,"doc_count":18},{"key_as_string":"2017-02-11T09:17:00.000Z","key":1486804620000,"doc_count":12},{"key_as_string":"2017-02-11T09:18:00.000Z","key":1486804680000,"doc_count":15},{"key_as_string":"2017-02-11T09:19:00.000Z","key":1486804740000,"doc_count":10},{"key_as_string":"2017-02-11T09:20:00.000Z","key":1486804800000,"doc_count":14},{"key_as_string":"2017-02-11T09:21:00.000Z","key":1486804860000,"doc_count":15},{"key_as_string":"2017-02-11T09:22:00.000Z","key":1486804920000,"doc_count":12},{"key_as_string":"2017-02-11T09:23:00.000Z","key":1486804980000,"doc_count":17},{"key_as_string":"2017-02-11T09:24:00.000Z","key":1486805040000,"doc_count":13},{"key_as_string":"2017-02-11T09:25:00.000Z","key":1486805100000,"doc_count":17},{"key_as_string":"2017-02-11T09:26:00.000Z","key":1486805160000,"doc_count":11},{"key_as_string":"2017-02-11T09:27:00.000Z","key":1486805220000,"doc_count":11},{"key_as_string":"2017-02-11T09:28:00.000Z","key":1486805280000,"doc_count":13},{"key_as_string":"2017-02-11T09:29:00.000Z","key":1486805340000,"doc_count":9},{"key_as_string":"2017-02-11T09:30:00.000Z","key":1486805400000,"doc_count":20},{"key_as_string":"2017-02-11T09:31:00.000Z","key":1486805460000,"doc_count":13},{"key_as_string":"2017-02-11T09:32:00.000Z","key":1486805520000,"doc_count":17},{"key_as_string":"2017-02-11T09:33:00.000Z","key":1486805580000,"doc_count":16},{"key_as_string":"2017-02-11T09:34:00.000Z","key":1486805640000,"doc_count":11},{"key_as_string":"2017-02-11T09:35:00.000Z","key":1486805700000,"doc_count":18},{"key_as_string":"2017-02-11T09:36:00.000Z","key":1486805760000,"doc_count":14},{"key_as_string":"2017-02-11T09:37:00.000Z","key":1486805820000,"doc_count":17},{"key_as_string":"2017-02-11T09:38:00.000Z","key":1486805880000,"doc_count":12},{"key_as_string":"2017-02-11T09:39:00.000Z","key":1486805940000,"doc_count":12},{"key_as_string":"2017-02-11T09:40:00.000Z","key":1486806000000,"doc_count":14},{"key_as_string":"2017-02-11T09:41:00.000Z","key":1486806060000,"doc_count":11},{"key_as_string":"2017-02-11T09:42:00.000Z","key":1486806120000,"doc_count":12},{"key_as_string":"2017-02-11T09:43:00.000Z","key":1486806180000,"doc_count":14},{"key_as_string":"2017-02-11T09:44:00.000Z","key":1486806240000,"doc_count":16},{"key_as_string":"2017-02-11T09:45:00.000Z","key":1486806300000,"doc_count":17},{"key_as_string":"2017-02-11T09:46:00.000Z","key":1486806360000,"doc_count":12},{"key_as_string":"2017-02-11T09:47:00.000Z","key":1486806420000,"doc_count":15},{"key_as_string":"2017-02-11T09:48:00.000Z","key":1486806480000,"doc_count":13},{"key_as_string":"2017-02-11T09:49:00.000Z","key":1486806540000,"doc_count":14},{"key_as_string":"2017-02-11T09:50:00.000Z","key":1486806600000,"doc_count":17},{"key_as_string":"2017-02-11T09:51:00.000Z","key":1486806660000,"doc_count":15},{"key_as_string":"2017-02-11T09:52:00.000Z","key":1486806720000,"doc_count":9},{"key_as_string":"2017-02-11T09:53:00.000Z","key":1486806780000,"doc_count":20},{"key_as_string":"2017-02-11T09:54:00.000Z","key":1486806840000,"doc_count":15},{"key_as_string":"2017-02-11T09:55:00.000Z","key":1486806900000,"doc_count":19},{"key_as_string":"2017-02-11T09:56:00.000Z","key":1486806960000,"doc_count":10},{"key_as_string":"2017-02-11T09:57:00.000Z","key":1486807020000,"doc_count":14},{"key_as_string":"2017-02-11T09:58:00.000Z","key":1486807080000,"doc_count":15},{"key_as_string":"2017-02-11T09:59:00.000Z","key":1486807140000,"doc_count":20},{"key_as_string":"2017-02-11T10:00:00.000Z","key":1486807200000,"doc_count":14},{"key_as_string":"2017-02-11T10:01:00.000Z","key":1486807260000,"doc_count":14},{"key_as_string":"2017-02-11T10:02:00.000Z","key":1486807320000,"doc_count":13},{"key_as_string":"2017-02-11T10:03:00.000Z","key":1486807380000,"doc_count":13},{"key_as_string":"2017-02-11T10:04:00.000Z","key":1486807440000,"doc_count":17},{"key_as_string":"2017-02-11T10:05:00.000Z","key":1486807500000,"doc_count":10},{"key_as_string":"2017-02-11T10:06:00.000Z","key":1486807560000,"doc_count":20},{"key_as_string":"2017-02-11T10:07:00.000Z","key":1486807620000,"doc_count":14},{"key_as_string":"2017-02-11T10:08:00.000Z","key":1486807680000,"doc_count":12},{"key_as_string":"2017-02-11T10:09:00.000Z","key":1486807740000,"doc_count":22},{"key_as_string":"2017-02-11T10:10:00.000Z","key":1486807800000,"doc_count":18},{"key_as_string":"2017-02-11T10:11:00.000Z","key":1486807860000,"doc_count":9},{"key_as_string":"2017-02-11T10:12:00.000Z","key":1486807920000,"doc_count":16},{"key_as_string":"2017-02-11T10:13:00.000Z","key":1486807980000,"doc_count":13},{"key_as_string":"2017-02-11T10:14:00.000Z","key":1486808040000,"doc_count":14},{"key_as_string":"2017-02-11T10:15:00.000Z","key":1486808100000,"doc_count":13},{"key_as_string":"2017-02-11T10:16:00.000Z","key":1486808160000,"doc_count":15},{"key_as_string":"2017-02-11T10:17:00.000Z","key":1486808220000,"doc_count":15},{"key_as_string":"2017-02-11T10:18:00.000Z","key":1486808280000,"doc_count":13},{"key_as_string":"2017-02-11T10:19:00.000Z","key":1486808340000,"doc_count":12},{"key_as_string":"2017-02-11T10:20:00.000Z","key":1486808400000,"doc_count":8},{"key_as_string":"2017-02-11T10:21:00.000Z","key":1486808460000,"doc_count":18},{"key_as_string":"2017-02-11T10:22:00.000Z","key":1486808520000,"doc_count":14},{"key_as_string":"2017-02-11T10:23:00.000Z","key":1486808580000,"doc_count":17},{"key_as_string":"2017-02-11T10:24:00.000Z","key":1486808640000,"doc_count":22},{"key_as_string":"2017-02-11T10:25:00.000Z","key":1486808700000,"doc_count":12},{"key_as_string":"2017-02-11T10:26:00.000Z","key":1486808760000,"doc_count":13},{"key_as_string":"2017-02-11T10:27:00.000Z","key":1486808820000,"doc_count":17},{"key_as_string":"2017-02-11T10:28:00.000Z","key":1486808880000,"doc_count":14},{"key_as_string":"2017-02-11T10:29:00.000Z","key":1486808940000,"doc_count":13},{"key_as_string":"2017-02-11T10:30:00.000Z","key":1486809000000,"doc_count":11},{"key_as_string":"2017-02-11T10:31:00.000Z","key":1486809060000,"doc_count":15},{"key_as_string":"2017-02-11T10:32:00.000Z","key":1486809120000,"doc_count":17},{"key_as_string":"2017-02-11T10:33:00.000Z","key":1486809180000,"doc_count":14},{"key_as_string":"2017-02-11T10:34:00.000Z","key":1486809240000,"doc_count":12},{"key_as_string":"2017-02-11T10:35:00.000Z","key":1486809300000,"doc_count":10},{"key_as_string":"2017-02-11T10:36:00.000Z","key":1486809360000,"doc_count":12},{"key_as_string":"2017-02-11T10:37:00.000Z","key":1486809420000,"doc_count":16},{"key_as_string":"2017-02-11T10:38:00.000Z","key":1486809480000,"doc_count":18},{"key_as_string":"2017-02-11T10:39:00.000Z","key":1486809540000,"doc_count":15},{"key_as_string":"2017-02-11T10:40:00.000Z","key":1486809600000,"doc_count":16},{"key_as_string":"2017-02-11T10:41:00.000Z","key":1486809660000,"doc_count":15},{"key_as_string":"2017-02-11T10:42:00.000Z","key":1486809720000,"doc_count":15},{"key_as_string":"2017-02-11T10:43:00.000Z","key":1486809780000,"doc_count":11},{"key_as_string":"2017-02-11T10:44:00.000Z","key":1486809840000,"doc_count":11},{"key_as_string":"2017-02-11T10:45:00.000Z","key":1486809900000,"doc_count":19},{"key_as_string":"2017-02-11T10:46:00.000Z","key":1486809960000,"doc_count":12},{"key_as_string":"2017-02-11T10:47:00.000Z","key":1486810020000,"doc_count":12},{"key_as_string":"2017-02-11T10:48:00.000Z","key":1486810080000,"doc_count":12},{"key_as_string":"2017-02-11T10:49:00.000Z","key":1486810140000,"doc_count":12},{"key_as_string":"2017-02-11T10:50:00.000Z","key":1486810200000,"doc_count":21},{"key_as_string":"2017-02-11T10:51:00.000Z","key":1486810260000,"doc_count":13},{"key_as_string":"2017-02-11T10:52:00.000Z","key":1486810320000,"doc_count":13},{"key_as_string":"2017-02-11T10:53:00.000Z","key":1486810380000,"doc_count":14},{"key_as_string":"2017-02-11T10:54:00.000Z","key":1486810440000,"doc_count":14},{"key_as_string":"2017-02-11T10:55:00.000Z","key":1486810500000,"doc_count":10},{"key_as_string":"2017-02-11T10:56:00.000Z","key":1486810560000,"doc_count":12},{"key_as_string":"2017-02-11T10:57:00.000Z","key":1486810620000,"doc_count":15},{"key_as_string":"2017-02-11T10:58:00.000Z","key":1486810680000,"doc_count":13},{"key_as_string":"2017-02-11T10:59:00.000Z","key":1486810740000,"doc_count":11},{"key_as_string":"2017-02-11T11:00:00.000Z","key":1486810800000,"doc_count":18},{"key_as_string":"2017-02-11T11:01:00.000Z","key":1486810860000,"doc_count":14},{"key_as_string":"2017-02-11T11:02:00.000Z","key":1486810920000,"doc_count":18},{"key_as_string":"2017-02-11T11:03:00.000Z","key":1486810980000,"doc_count":18},{"key_as_string":"2017-02-11T11:04:00.000Z","key":1486811040000,"doc_count":14},{"key_as_string":"2017-02-11T11:05:00.000Z","key":1486811100000,"doc_count":21},{"key_as_string":"2017-02-11T11:06:00.000Z","key":1486811160000,"doc_count":8},{"key_as_string":"2017-02-11T11:07:00.000Z","key":1486811220000,"doc_count":14},{"key_as_string":"2017-02-11T11:08:00.000Z","key":1486811280000,"doc_count":9},{"key_as_string":"2017-02-11T11:09:00.000Z","key":1486811340000,"doc_count":13},{"key_as_string":"2017-02-11T11:10:00.000Z","key":1486811400000,"doc_count":19},{"key_as_string":"2017-02-11T11:11:00.000Z","key":1486811460000,"doc_count":12},{"key_as_string":"2017-02-11T11:12:00.000Z","key":1486811520000,"doc_count":15},{"key_as_string":"2017-02-11T11:13:00.000Z","key":1486811580000,"doc_count":16},{"key_as_string":"2017-02-11T11:14:00.000Z","key":1486811640000,"doc_count":11},{"key_as_string":"2017-02-11T11:15:00.000Z","key":1486811700000,"doc_count":12},{"key_as_string":"2017-02-11T11:16:00.000Z","key":1486811760000,"doc_count":16},{"key_as_string":"2017-02-11T11:17:00.000Z","key":1486811820000,"doc_count":14},{"key_as_string":"2017-02-11T11:18:00.000Z","key":1486811880000,"doc_count":13},{"key_as_string":"2017-02-11T11:19:00.000Z","key":1486811940000,"doc_count":14},{"key_as_string":"2017-02-11T11:20:00.000Z","key":1486812000000,"doc_count":14},{"key_as_string":"2017-02-11T11:21:00.000Z","key":1486812060000,"doc_count":11},{"key_as_string":"2017-02-11T11:22:00.000Z","key":1486812120000,"doc_count":14},{"key_as_string":"2017-02-11T11:23:00.000Z","key":1486812180000,"doc_count":13},{"key_as_string":"2017-02-11T11:24:00.000Z","key":1486812240000,"doc_count":13},{"key_as_string":"2017-02-11T11:25:00.000Z","key":1486812300000,"doc_count":13},{"key_as_string":"2017-02-11T11:26:00.000Z","key":1486812360000,"doc_count":6},{"key_as_string":"2017-02-11T11:27:00.000Z","key":1486812420000,"doc_count":21},{"key_as_string":"2017-02-11T11:28:00.000Z","key":1486812480000,"doc_count":10},{"key_as_string":"2017-02-11T11:29:00.000Z","key":1486812540000,"doc_count":19},{"key_as_string":"2017-02-11T11:30:00.000Z","key":1486812600000,"doc_count":10},{"key_as_string":"2017-02-11T11:31:00.000Z","key":1486812660000,"doc_count":10},{"key_as_string":"2017-02-11T11:32:00.000Z","key":1486812720000,"doc_count":14},{"key_as_string":"2017-02-11T11:33:00.000Z","key":1486812780000,"doc_count":13},{"key_as_string":"2017-02-11T11:34:00.000Z","key":1486812840000,"doc_count":9},{"key_as_string":"2017-02-11T11:35:00.000Z","key":1486812900000,"doc_count":16},{"key_as_string":"2017-02-11T11:36:00.000Z","key":1486812960000,"doc_count":9},{"key_as_string":"2017-02-11T11:37:00.000Z","key":1486813020000,"doc_count":14},{"key_as_string":"2017-02-11T11:38:00.000Z","key":1486813080000,"doc_count":8},{"key_as_string":"2017-02-11T11:39:00.000Z","key":1486813140000,"doc_count":16},{"key_as_string":"2017-02-11T11:40:00.000Z","key":1486813200000,"doc_count":17},{"key_as_string":"2017-02-11T11:41:00.000Z","key":1486813260000,"doc_count":11},{"key_as_string":"2017-02-11T11:42:00.000Z","key":1486813320000,"doc_count":13},{"key_as_string":"2017-02-11T11:43:00.000Z","key":1486813380000,"doc_count":14},{"key_as_string":"2017-02-11T11:44:00.000Z","key":1486813440000,"doc_count":17},{"key_as_string":"2017-02-11T11:45:00.000Z","key":1486813500000,"doc_count":11},{"key_as_string":"2017-02-11T11:46:00.000Z","key":1486813560000,"doc_count":16},{"key_as_string":"2017-02-11T11:47:00.000Z","key":1486813620000,"doc_count":12},{"key_as_string":"2017-02-11T11:48:00.000Z","key":1486813680000,"doc_count":13},{"key_as_string":"2017-02-11T11:49:00.000Z","key":1486813740000,"doc_count":19},{"key_as_string":"2017-02-11T11:50:00.000Z","key":1486813800000,"doc_count":12},{"key_as_string":"2017-02-11T11:51:00.000Z","key":1486813860000,"doc_count":15},{"key_as_string":"2017-02-11T11:52:00.000Z","key":1486813920000,"doc_count":12},{"key_as_string":"2017-02-11T11:53:00.000Z","key":1486813980000,"doc_count":8},{"key_as_string":"2017-02-11T11:54:00.000Z","key":1486814040000,"doc_count":15},{"key_as_string":"2017-02-11T11:55:00.000Z","key":1486814100000,"doc_count":16},{"key_as_string":"2017-02-11T11:56:00.000Z","key":1486814160000,"doc_count":10},{"key_as_string":"2017-02-11T11:57:00.000Z","key":1486814220000,"doc_count":12},{"key_as_string":"2017-02-11T11:58:00.000Z","key":1486814280000,"doc_count":17},{"key_as_string":"2017-02-11T11:59:00.000Z","key":1486814340000,"doc_count":18},{"key_as_string":"2017-02-11T12:00:00.000Z","key":1486814400000,"doc_count":13},{"key_as_string":"2017-02-11T12:01:00.000Z","key":1486814460000,"doc_count":13},{"key_as_string":"2017-02-11T12:02:00.000Z","key":1486814520000,"doc_count":9},{"key_as_string":"2017-02-11T12:03:00.000Z","key":1486814580000,"doc_count":14},{"key_as_string":"2017-02-11T12:04:00.000Z","key":1486814640000,"doc_count":11},{"key_as_string":"2017-02-11T12:05:00.000Z","key":1486814700000,"doc_count":9},{"key_as_string":"2017-02-11T12:06:00.000Z","key":1486814760000,"doc_count":18},{"key_as_string":"2017-02-11T12:07:00.000Z","key":1486814820000,"doc_count":14},{"key_as_string":"2017-02-11T12:08:00.000Z","key":1486814880000,"doc_count":9},{"key_as_string":"2017-02-11T12:09:00.000Z","key":1486814940000,"doc_count":15},{"key_as_string":"2017-02-11T12:10:00.000Z","key":1486815000000,"doc_count":18},{"key_as_string":"2017-02-11T12:11:00.000Z","key":1486815060000,"doc_count":14},{"key_as_string":"2017-02-11T12:12:00.000Z","key":1486815120000,"doc_count":16},{"key_as_string":"2017-02-11T12:13:00.000Z","key":1486815180000,"doc_count":14},{"key_as_string":"2017-02-11T12:14:00.000Z","key":1486815240000,"doc_count":12},{"key_as_string":"2017-02-11T12:15:00.000Z","key":1486815300000,"doc_count":15},{"key_as_string":"2017-02-11T12:16:00.000Z","key":1486815360000,"doc_count":12},{"key_as_string":"2017-02-11T12:17:00.000Z","key":1486815420000,"doc_count":12},{"key_as_string":"2017-02-11T12:18:00.000Z","key":1486815480000,"doc_count":16},{"key_as_string":"2017-02-11T12:19:00.000Z","key":1486815540000,"doc_count":9},{"key_as_string":"2017-02-11T12:20:00.000Z","key":1486815600000,"doc_count":14},{"key_as_string":"2017-02-11T12:21:00.000Z","key":1486815660000,"doc_count":11},{"key_as_string":"2017-02-11T12:22:00.000Z","key":1486815720000,"doc_count":16},{"key_as_string":"2017-02-11T12:23:00.000Z","key":1486815780000,"doc_count":14},{"key_as_string":"2017-02-11T12:24:00.000Z","key":1486815840000,"doc_count":10},{"key_as_string":"2017-02-11T12:25:00.000Z","key":1486815900000,"doc_count":16},{"key_as_string":"2017-02-11T12:26:00.000Z","key":1486815960000,"doc_count":18},{"key_as_string":"2017-02-11T12:27:00.000Z","key":1486816020000,"doc_count":15},{"key_as_string":"2017-02-11T12:28:00.000Z","key":1486816080000,"doc_count":10},{"key_as_string":"2017-02-11T12:29:00.000Z","key":1486816140000,"doc_count":12},{"key_as_string":"2017-02-11T12:30:00.000Z","key":1486816200000,"doc_count":11},{"key_as_string":"2017-02-11T12:31:00.000Z","key":1486816260000,"doc_count":16},{"key_as_string":"2017-02-11T12:32:00.000Z","key":1486816320000,"doc_count":11},{"key_as_string":"2017-02-11T12:33:00.000Z","key":1486816380000,"doc_count":11},{"key_as_string":"2017-02-11T12:34:00.000Z","key":1486816440000,"doc_count":19},{"key_as_string":"2017-02-11T12:35:00.000Z","key":1486816500000,"doc_count":17},{"key_as_string":"2017-02-11T12:36:00.000Z","key":1486816560000,"doc_count":19},{"key_as_string":"2017-02-11T12:37:00.000Z","key":1486816620000,"doc_count":11},{"key_as_string":"2017-02-11T12:38:00.000Z","key":1486816680000,"doc_count":18},{"key_as_string":"2017-02-11T12:39:00.000Z","key":1486816740000,"doc_count":11},{"key_as_string":"2017-02-11T12:40:00.000Z","key":1486816800000,"doc_count":12},{"key_as_string":"2017-02-11T12:41:00.000Z","key":1486816860000,"doc_count":15},{"key_as_string":"2017-02-11T12:42:00.000Z","key":1486816920000,"doc_count":15},{"key_as_string":"2017-02-11T12:43:00.000Z","key":1486816980000,"doc_count":7},{"key_as_string":"2017-02-11T12:44:00.000Z","key":1486817040000,"doc_count":19},{"key_as_string":"2017-02-11T12:45:00.000Z","key":1486817100000,"doc_count":12},{"key_as_string":"2017-02-11T12:46:00.000Z","key":1486817160000,"doc_count":16},{"key_as_string":"2017-02-11T12:47:00.000Z","key":1486817220000,"doc_count":8},{"key_as_string":"2017-02-11T12:48:00.000Z","key":1486817280000,"doc_count":15},{"key_as_string":"2017-02-11T12:49:00.000Z","key":1486817340000,"doc_count":12},{"key_as_string":"2017-02-11T12:50:00.000Z","key":1486817400000,"doc_count":12},{"key_as_string":"2017-02-11T12:51:00.000Z","key":1486817460000,"doc_count":16},{"key_as_string":"2017-02-11T12:52:00.000Z","key":1486817520000,"doc_count":13},{"key_as_string":"2017-02-11T12:53:00.000Z","key":1486817580000,"doc_count":13},{"key_as_string":"2017-02-11T12:54:00.000Z","key":1486817640000,"doc_count":15},{"key_as_string":"2017-02-11T12:55:00.000Z","key":1486817700000,"doc_count":16},{"key_as_string":"2017-02-11T12:56:00.000Z","key":1486817760000,"doc_count":17},{"key_as_string":"2017-02-11T12:57:00.000Z","key":1486817820000,"doc_count":13},{"key_as_string":"2017-02-11T12:58:00.000Z","key":1486817880000,"doc_count":12},{"key_as_string":"2017-02-11T12:59:00.000Z","key":1486817940000,"doc_count":17},{"key_as_string":"2017-02-11T13:00:00.000Z","key":1486818000000,"doc_count":16},{"key_as_string":"2017-02-11T13:01:00.000Z","key":1486818060000,"doc_count":14},{"key_as_string":"2017-02-11T13:02:00.000Z","key":1486818120000,"doc_count":8},{"key_as_string":"2017-02-11T13:03:00.000Z","key":1486818180000,"doc_count":15},{"key_as_string":"2017-02-11T13:04:00.000Z","key":1486818240000,"doc_count":14},{"key_as_string":"2017-02-11T13:05:00.000Z","key":1486818300000,"doc_count":16},{"key_as_string":"2017-02-11T13:06:00.000Z","key":1486818360000,"doc_count":20},{"key_as_string":"2017-02-11T13:07:00.000Z","key":1486818420000,"doc_count":10},{"key_as_string":"2017-02-11T13:08:00.000Z","key":1486818480000,"doc_count":15},{"key_as_string":"2017-02-11T13:09:00.000Z","key":1486818540000,"doc_count":12},{"key_as_string":"2017-02-11T13:10:00.000Z","key":1486818600000,"doc_count":12},{"key_as_string":"2017-02-11T13:11:00.000Z","key":1486818660000,"doc_count":8},{"key_as_string":"2017-02-11T13:12:00.000Z","key":1486818720000,"doc_count":17},{"key_as_string":"2017-02-11T13:13:00.000Z","key":1486818780000,"doc_count":8},{"key_as_string":"2017-02-11T13:14:00.000Z","key":1486818840000,"doc_count":15},{"key_as_string":"2017-02-11T13:15:00.000Z","key":1486818900000,"doc_count":13},{"key_as_string":"2017-02-11T13:16:00.000Z","key":1486818960000,"doc_count":15},{"key_as_string":"2017-02-11T13:17:00.000Z","key":1486819020000,"doc_count":15},{"key_as_string":"2017-02-11T13:18:00.000Z","key":1486819080000,"doc_count":11},{"key_as_string":"2017-02-11T13:19:00.000Z","key":1486819140000,"doc_count":17},{"key_as_string":"2017-02-11T13:20:00.000Z","key":1486819200000,"doc_count":11},{"key_as_string":"2017-02-11T13:21:00.000Z","key":1486819260000,"doc_count":14},{"key_as_string":"2017-02-11T13:22:00.000Z","key":1486819320000,"doc_count":10},{"key_as_string":"2017-02-11T13:23:00.000Z","key":1486819380000,"doc_count":15},{"key_as_string":"2017-02-11T13:24:00.000Z","key":1486819440000,"doc_count":14},{"key_as_string":"2017-02-11T13:25:00.000Z","key":1486819500000,"doc_count":11},{"key_as_string":"2017-02-11T13:26:00.000Z","key":1486819560000,"doc_count":12},{"key_as_string":"2017-02-11T13:27:00.000Z","key":1486819620000,"doc_count":13},{"key_as_string":"2017-02-11T13:28:00.000Z","key":1486819680000,"doc_count":16},{"key_as_string":"2017-02-11T13:29:00.000Z","key":1486819740000,"doc_count":8},{"key_as_string":"2017-02-11T13:30:00.000Z","key":1486819800000,"doc_count":12},{"key_as_string":"2017-02-11T13:31:00.000Z","key":1486819860000,"doc_count":10},{"key_as_string":"2017-02-11T13:32:00.000Z","key":1486819920000,"doc_count":15},{"key_as_string":"2017-02-11T13:33:00.000Z","key":1486819980000,"doc_count":13},{"key_as_string":"2017-02-11T13:34:00.000Z","key":1486820040000,"doc_count":15},{"key_as_string":"2017-02-11T13:35:00.000Z","key":1486820100000,"doc_count":13},{"key_as_string":"2017-02-11T13:36:00.000Z","key":1486820160000,"doc_count":15},{"key_as_string":"2017-02-11T13:37:00.000Z","key":1486820220000,"doc_count":19},{"key_as_string":"2017-02-11T13:38:00.000Z","key":1486820280000,"doc_count":13},{"key_as_string":"2017-02-11T13:39:00.000Z","key":1486820340000,"doc_count":15},{"key_as_string":"2017-02-11T13:40:00.000Z","key":1486820400000,"doc_count":16},{"key_as_string":"2017-02-11T13:41:00.000Z","key":1486820460000,"doc_count":14},{"key_as_string":"2017-02-11T13:42:00.000Z","key":1486820520000,"doc_count":18},{"key_as_string":"2017-02-11T13:43:00.000Z","key":1486820580000,"doc_count":11},{"key_as_string":"2017-02-11T13:44:00.000Z","key":1486820640000,"doc_count":14},{"key_as_string":"2017-02-11T13:45:00.000Z","key":1486820700000,"doc_count":14},{"key_as_string":"2017-02-11T13:46:00.000Z","key":1486820760000,"doc_count":13},{"key_as_string":"2017-02-11T13:47:00.000Z","key":1486820820000,"doc_count":9},{"key_as_string":"2017-02-11T13:48:00.000Z","key":1486820880000,"doc_count":11},{"key_as_string":"2017-02-11T13:49:00.000Z","key":1486820940000,"doc_count":20},{"key_as_string":"2017-02-11T13:50:00.000Z","key":1486821000000,"doc_count":9},{"key_as_string":"2017-02-11T13:51:00.000Z","key":1486821060000,"doc_count":8},{"key_as_string":"2017-02-11T13:52:00.000Z","key":1486821120000,"doc_count":20},{"key_as_string":"2017-02-11T13:53:00.000Z","key":1486821180000,"doc_count":11},{"key_as_string":"2017-02-11T13:54:00.000Z","key":1486821240000,"doc_count":16},{"key_as_string":"2017-02-11T13:55:00.000Z","key":1486821300000,"doc_count":15},{"key_as_string":"2017-02-11T13:56:00.000Z","key":1486821360000,"doc_count":14},{"key_as_string":"2017-02-11T13:57:00.000Z","key":1486821420000,"doc_count":15},{"key_as_string":"2017-02-11T13:58:00.000Z","key":1486821480000,"doc_count":15},{"key_as_string":"2017-02-11T13:59:00.000Z","key":1486821540000,"doc_count":9},{"key_as_string":"2017-02-11T14:00:00.000Z","key":1486821600000,"doc_count":12},{"key_as_string":"2017-02-11T14:01:00.000Z","key":1486821660000,"doc_count":13},{"key_as_string":"2017-02-11T14:02:00.000Z","key":1486821720000,"doc_count":15},{"key_as_string":"2017-02-11T14:03:00.000Z","key":1486821780000,"doc_count":12},{"key_as_string":"2017-02-11T14:04:00.000Z","key":1486821840000,"doc_count":16},{"key_as_string":"2017-02-11T14:05:00.000Z","key":1486821900000,"doc_count":10},{"key_as_string":"2017-02-11T14:06:00.000Z","key":1486821960000,"doc_count":12},{"key_as_string":"2017-02-11T14:07:00.000Z","key":1486822020000,"doc_count":13},{"key_as_string":"2017-02-11T14:08:00.000Z","key":1486822080000,"doc_count":9},{"key_as_string":"2017-02-11T14:09:00.000Z","key":1486822140000,"doc_count":16},{"key_as_string":"2017-02-11T14:10:00.000Z","key":1486822200000,"doc_count":15},{"key_as_string":"2017-02-11T14:11:00.000Z","key":1486822260000,"doc_count":14},{"key_as_string":"2017-02-11T14:12:00.000Z","key":1486822320000,"doc_count":10},{"key_as_string":"2017-02-11T14:13:00.000Z","key":1486822380000,"doc_count":10},{"key_as_string":"2017-02-11T14:14:00.000Z","key":1486822440000,"doc_count":15},{"key_as_string":"2017-02-11T14:15:00.000Z","key":1486822500000,"doc_count":10},{"key_as_string":"2017-02-11T14:16:00.000Z","key":1486822560000,"doc_count":13},{"key_as_string":"2017-02-11T14:17:00.000Z","key":1486822620000,"doc_count":14},{"key_as_string":"2017-02-11T14:18:00.000Z","key":1486822680000,"doc_count":14},{"key_as_string":"2017-02-11T14:19:00.000Z","key":1486822740000,"doc_count":17},{"key_as_string":"2017-02-11T14:20:00.000Z","key":1486822800000,"doc_count":13},{"key_as_string":"2017-02-11T14:21:00.000Z","key":1486822860000,"doc_count":14},{"key_as_string":"2017-02-11T14:22:00.000Z","key":1486822920000,"doc_count":12},{"key_as_string":"2017-02-11T14:23:00.000Z","key":1486822980000,"doc_count":21},{"key_as_string":"2017-02-11T14:24:00.000Z","key":1486823040000,"doc_count":14},{"key_as_string":"2017-02-11T14:25:00.000Z","key":1486823100000,"doc_count":9},{"key_as_string":"2017-02-11T14:26:00.000Z","key":1486823160000,"doc_count":8},{"key_as_string":"2017-02-11T14:27:00.000Z","key":1486823220000,"doc_count":14},{"key_as_string":"2017-02-11T14:28:00.000Z","key":1486823280000,"doc_count":10},{"key_as_string":"2017-02-11T14:29:00.000Z","key":1486823340000,"doc_count":12},{"key_as_string":"2017-02-11T14:30:00.000Z","key":1486823400000,"doc_count":12},{"key_as_string":"2017-02-11T14:31:00.000Z","key":1486823460000,"doc_count":14},{"key_as_string":"2017-02-11T14:32:00.000Z","key":1486823520000,"doc_count":15},{"key_as_string":"2017-02-11T14:33:00.000Z","key":1486823580000,"doc_count":14},{"key_as_string":"2017-02-11T14:34:00.000Z","key":1486823640000,"doc_count":9},{"key_as_string":"2017-02-11T14:35:00.000Z","key":1486823700000,"doc_count":14},{"key_as_string":"2017-02-11T14:36:00.000Z","key":1486823760000,"doc_count":12},{"key_as_string":"2017-02-11T14:37:00.000Z","key":1486823820000,"doc_count":17},{"key_as_string":"2017-02-11T14:38:00.000Z","key":1486823880000,"doc_count":11},{"key_as_string":"2017-02-11T14:39:00.000Z","key":1486823940000,"doc_count":12},{"key_as_string":"2017-02-11T14:40:00.000Z","key":1486824000000,"doc_count":15},{"key_as_string":"2017-02-11T14:41:00.000Z","key":1486824060000,"doc_count":11},{"key_as_string":"2017-02-11T14:42:00.000Z","key":1486824120000,"doc_count":13},{"key_as_string":"2017-02-11T14:43:00.000Z","key":1486824180000,"doc_count":18},{"key_as_string":"2017-02-11T14:44:00.000Z","key":1486824240000,"doc_count":10},{"key_as_string":"2017-02-11T14:45:00.000Z","key":1486824300000,"doc_count":13},{"key_as_string":"2017-02-11T14:46:00.000Z","key":1486824360000,"doc_count":9},{"key_as_string":"2017-02-11T14:47:00.000Z","key":1486824420000,"doc_count":14},{"key_as_string":"2017-02-11T14:48:00.000Z","key":1486824480000,"doc_count":16},{"key_as_string":"2017-02-11T14:49:00.000Z","key":1486824540000,"doc_count":14},{"key_as_string":"2017-02-11T14:50:00.000Z","key":1486824600000,"doc_count":13},{"key_as_string":"2017-02-11T14:51:00.000Z","key":1486824660000,"doc_count":12},{"key_as_string":"2017-02-11T14:52:00.000Z","key":1486824720000,"doc_count":11},{"key_as_string":"2017-02-11T14:53:00.000Z","key":1486824780000,"doc_count":16},{"key_as_string":"2017-02-11T14:54:00.000Z","key":1486824840000,"doc_count":12},{"key_as_string":"2017-02-11T14:55:00.000Z","key":1486824900000,"doc_count":11},{"key_as_string":"2017-02-11T14:56:00.000Z","key":1486824960000,"doc_count":14},{"key_as_string":"2017-02-11T14:57:00.000Z","key":1486825020000,"doc_count":15},{"key_as_string":"2017-02-11T14:58:00.000Z","key":1486825080000,"doc_count":10},{"key_as_string":"2017-02-11T14:59:00.000Z","key":1486825140000,"doc_count":18},{"key_as_string":"2017-02-11T15:00:00.000Z","key":1486825200000,"doc_count":15},{"key_as_string":"2017-02-11T15:01:00.000Z","key":1486825260000,"doc_count":10},{"key_as_string":"2017-02-11T15:02:00.000Z","key":1486825320000,"doc_count":17},{"key_as_string":"2017-02-11T15:03:00.000Z","key":1486825380000,"doc_count":12},{"key_as_string":"2017-02-11T15:04:00.000Z","key":1486825440000,"doc_count":13},{"key_as_string":"2017-02-11T15:05:00.000Z","key":1486825500000,"doc_count":14},{"key_as_string":"2017-02-11T15:06:00.000Z","key":1486825560000,"doc_count":10},{"key_as_string":"2017-02-11T15:07:00.000Z","key":1486825620000,"doc_count":13},{"key_as_string":"2017-02-11T15:08:00.000Z","key":1486825680000,"doc_count":12},{"key_as_string":"2017-02-11T15:09:00.000Z","key":1486825740000,"doc_count":13},{"key_as_string":"2017-02-11T15:10:00.000Z","key":1486825800000,"doc_count":11},{"key_as_string":"2017-02-11T15:11:00.000Z","key":1486825860000,"doc_count":16},{"key_as_string":"2017-02-11T15:12:00.000Z","key":1486825920000,"doc_count":10},{"key_as_string":"2017-02-11T15:13:00.000Z","key":1486825980000,"doc_count":11},{"key_as_string":"2017-02-11T15:14:00.000Z","key":1486826040000,"doc_count":18},{"key_as_string":"2017-02-11T15:15:00.000Z","key":1486826100000,"doc_count":15},{"key_as_string":"2017-02-11T15:16:00.000Z","key":1486826160000,"doc_count":12},{"key_as_string":"2017-02-11T15:17:00.000Z","key":1486826220000,"doc_count":18},{"key_as_string":"2017-02-11T15:18:00.000Z","key":1486826280000,"doc_count":11},{"key_as_string":"2017-02-11T15:19:00.000Z","key":1486826340000,"doc_count":9},{"key_as_string":"2017-02-11T15:20:00.000Z","key":1486826400000,"doc_count":19},{"key_as_string":"2017-02-11T15:21:00.000Z","key":1486826460000,"doc_count":11},{"key_as_string":"2017-02-11T15:22:00.000Z","key":1486826520000,"doc_count":9},{"key_as_string":"2017-02-11T15:23:00.000Z","key":1486826580000,"doc_count":16},{"key_as_string":"2017-02-11T15:24:00.000Z","key":1486826640000,"doc_count":14},{"key_as_string":"2017-02-11T15:25:00.000Z","key":1486826700000,"doc_count":17},{"key_as_string":"2017-02-11T15:26:00.000Z","key":1486826760000,"doc_count":14},{"key_as_string":"2017-02-11T15:27:00.000Z","key":1486826820000,"doc_count":17},{"key_as_string":"2017-02-11T15:28:00.000Z","key":1486826880000,"doc_count":10},{"key_as_string":"2017-02-11T15:29:00.000Z","key":1486826940000,"doc_count":20},{"key_as_string":"2017-02-11T15:30:00.000Z","key":1486827000000,"doc_count":7},{"key_as_string":"2017-02-11T15:31:00.000Z","key":1486827060000,"doc_count":12},{"key_as_string":"2017-02-11T15:32:00.000Z","key":1486827120000,"doc_count":12},{"key_as_string":"2017-02-11T15:33:00.000Z","key":1486827180000,"doc_count":10},{"key_as_string":"2017-02-11T15:34:00.000Z","key":1486827240000,"doc_count":16},{"key_as_string":"2017-02-11T15:35:00.000Z","key":1486827300000,"doc_count":13},{"key_as_string":"2017-02-11T15:36:00.000Z","key":1486827360000,"doc_count":9},{"key_as_string":"2017-02-11T15:37:00.000Z","key":1486827420000,"doc_count":12},{"key_as_string":"2017-02-11T15:38:00.000Z","key":1486827480000,"doc_count":17},{"key_as_string":"2017-02-11T15:39:00.000Z","key":1486827540000,"doc_count":11},{"key_as_string":"2017-02-11T15:40:00.000Z","key":1486827600000,"doc_count":17},{"key_as_string":"2017-02-11T15:41:00.000Z","key":1486827660000,"doc_count":12},{"key_as_string":"2017-02-11T15:42:00.000Z","key":1486827720000,"doc_count":11},{"key_as_string":"2017-02-11T15:43:00.000Z","key":1486827780000,"doc_count":10},{"key_as_string":"2017-02-11T15:44:00.000Z","key":1486827840000,"doc_count":15},{"key_as_string":"2017-02-11T15:45:00.000Z","key":1486827900000,"doc_count":11},{"key_as_string":"2017-02-11T15:46:00.000Z","key":1486827960000,"doc_count":19},{"key_as_string":"2017-02-11T15:47:00.000Z","key":1486828020000,"doc_count":12},{"key_as_string":"2017-02-11T15:48:00.000Z","key":1486828080000,"doc_count":9},{"key_as_string":"2017-02-11T15:49:00.000Z","key":1486828140000,"doc_count":12},{"key_as_string":"2017-02-11T15:50:00.000Z","key":1486828200000,"doc_count":15},{"key_as_string":"2017-02-11T15:51:00.000Z","key":1486828260000,"doc_count":11},{"key_as_string":"2017-02-11T15:52:00.000Z","key":1486828320000,"doc_count":19},{"key_as_string":"2017-02-11T15:53:00.000Z","key":1486828380000,"doc_count":8},{"key_as_string":"2017-02-11T15:54:00.000Z","key":1486828440000,"doc_count":14},{"key_as_string":"2017-02-11T15:55:00.000Z","key":1486828500000,"doc_count":22},{"key_as_string":"2017-02-11T15:56:00.000Z","key":1486828560000,"doc_count":12},{"key_as_string":"2017-02-11T15:57:00.000Z","key":1486828620000,"doc_count":15},{"key_as_string":"2017-02-11T15:58:00.000Z","key":1486828680000,"doc_count":15},{"key_as_string":"2017-02-11T15:59:00.000Z","key":1486828740000,"doc_count":12},{"key_as_string":"2017-02-11T16:00:00.000Z","key":1486828800000,"doc_count":13},{"key_as_string":"2017-02-11T16:01:00.000Z","key":1486828860000,"doc_count":19},{"key_as_string":"2017-02-11T16:02:00.000Z","key":1486828920000,"doc_count":18},{"key_as_string":"2017-02-11T16:03:00.000Z","key":1486828980000,"doc_count":11},{"key_as_string":"2017-02-11T16:04:00.000Z","key":1486829040000,"doc_count":12},{"key_as_string":"2017-02-11T16:05:00.000Z","key":1486829100000,"doc_count":14},{"key_as_string":"2017-02-11T16:06:00.000Z","key":1486829160000,"doc_count":18},{"key_as_string":"2017-02-11T16:07:00.000Z","key":1486829220000,"doc_count":14},{"key_as_string":"2017-02-11T16:08:00.000Z","key":1486829280000,"doc_count":13},{"key_as_string":"2017-02-11T16:09:00.000Z","key":1486829340000,"doc_count":12},{"key_as_string":"2017-02-11T16:10:00.000Z","key":1486829400000,"doc_count":8},{"key_as_string":"2017-02-11T16:11:00.000Z","key":1486829460000,"doc_count":12},{"key_as_string":"2017-02-11T16:12:00.000Z","key":1486829520000,"doc_count":18},{"key_as_string":"2017-02-11T16:13:00.000Z","key":1486829580000,"doc_count":11},{"key_as_string":"2017-02-11T16:14:00.000Z","key":1486829640000,"doc_count":13},{"key_as_string":"2017-02-11T16:15:00.000Z","key":1486829700000,"doc_count":9},{"key_as_string":"2017-02-11T16:16:00.000Z","key":1486829760000,"doc_count":12},{"key_as_string":"2017-02-11T16:17:00.000Z","key":1486829820000,"doc_count":8},{"key_as_string":"2017-02-11T16:18:00.000Z","key":1486829880000,"doc_count":15},{"key_as_string":"2017-02-11T16:19:00.000Z","key":1486829940000,"doc_count":12},{"key_as_string":"2017-02-11T16:20:00.000Z","key":1486830000000,"doc_count":18},{"key_as_string":"2017-02-11T16:21:00.000Z","key":1486830060000,"doc_count":12},{"key_as_string":"2017-02-11T16:22:00.000Z","key":1486830120000,"doc_count":15},{"key_as_string":"2017-02-11T16:23:00.000Z","key":1486830180000,"doc_count":9},{"key_as_string":"2017-02-11T16:24:00.000Z","key":1486830240000,"doc_count":19},{"key_as_string":"2017-02-11T16:25:00.000Z","key":1486830300000,"doc_count":10},{"key_as_string":"2017-02-11T16:26:00.000Z","key":1486830360000,"doc_count":13},{"key_as_string":"2017-02-11T16:27:00.000Z","key":1486830420000,"doc_count":11},{"key_as_string":"2017-02-11T16:28:00.000Z","key":1486830480000,"doc_count":8},{"key_as_string":"2017-02-11T16:29:00.000Z","key":1486830540000,"doc_count":16},{"key_as_string":"2017-02-11T16:30:00.000Z","key":1486830600000,"doc_count":14},{"key_as_string":"2017-02-11T16:31:00.000Z","key":1486830660000,"doc_count":12},{"key_as_string":"2017-02-11T16:32:00.000Z","key":1486830720000,"doc_count":6},{"key_as_string":"2017-02-11T16:33:00.000Z","key":1486830780000,"doc_count":13},{"key_as_string":"2017-02-11T16:34:00.000Z","key":1486830840000,"doc_count":12},{"key_as_string":"2017-02-11T16:35:00.000Z","key":1486830900000,"doc_count":15},{"key_as_string":"2017-02-11T16:36:00.000Z","key":1486830960000,"doc_count":8},{"key_as_string":"2017-02-11T16:37:00.000Z","key":1486831020000,"doc_count":11},{"key_as_string":"2017-02-11T16:38:00.000Z","key":1486831080000,"doc_count":17},{"key_as_string":"2017-02-11T16:39:00.000Z","key":1486831140000,"doc_count":11},{"key_as_string":"2017-02-11T16:40:00.000Z","key":1486831200000,"doc_count":15},{"key_as_string":"2017-02-11T16:41:00.000Z","key":1486831260000,"doc_count":15},{"key_as_string":"2017-02-11T16:42:00.000Z","key":1486831320000,"doc_count":14},{"key_as_string":"2017-02-11T16:43:00.000Z","key":1486831380000,"doc_count":11},{"key_as_string":"2017-02-11T16:44:00.000Z","key":1486831440000,"doc_count":13},{"key_as_string":"2017-02-11T16:45:00.000Z","key":1486831500000,"doc_count":12},{"key_as_string":"2017-02-11T16:46:00.000Z","key":1486831560000,"doc_count":14},{"key_as_string":"2017-02-11T16:47:00.000Z","key":1486831620000,"doc_count":10},{"key_as_string":"2017-02-11T16:48:00.000Z","key":1486831680000,"doc_count":11},{"key_as_string":"2017-02-11T16:49:00.000Z","key":1486831740000,"doc_count":14},{"key_as_string":"2017-02-11T16:50:00.000Z","key":1486831800000,"doc_count":16},{"key_as_string":"2017-02-11T16:51:00.000Z","key":1486831860000,"doc_count":11},{"key_as_string":"2017-02-11T16:52:00.000Z","key":1486831920000,"doc_count":9},{"key_as_string":"2017-02-11T16:53:00.000Z","key":1486831980000,"doc_count":13},{"key_as_string":"2017-02-11T16:54:00.000Z","key":1486832040000,"doc_count":13},{"key_as_string":"2017-02-11T16:55:00.000Z","key":1486832100000,"doc_count":16},{"key_as_string":"2017-02-11T16:56:00.000Z","key":1486832160000,"doc_count":10},{"key_as_string":"2017-02-11T16:57:00.000Z","key":1486832220000,"doc_count":9},{"key_as_string":"2017-02-11T16:58:00.000Z","key":1486832280000,"doc_count":22},{"key_as_string":"2017-02-11T16:59:00.000Z","key":1486832340000,"doc_count":12},{"key_as_string":"2017-02-11T17:00:00.000Z","key":1486832400000,"doc_count":8},{"key_as_string":"2017-02-11T17:01:00.000Z","key":1486832460000,"doc_count":13},{"key_as_string":"2017-02-11T17:02:00.000Z","key":1486832520000,"doc_count":13},{"key_as_string":"2017-02-11T17:03:00.000Z","key":1486832580000,"doc_count":9},{"key_as_string":"2017-02-11T17:04:00.000Z","key":1486832640000,"doc_count":11},{"key_as_string":"2017-02-11T17:05:00.000Z","key":1486832700000,"doc_count":10},{"key_as_string":"2017-02-11T17:06:00.000Z","key":1486832760000,"doc_count":15},{"key_as_string":"2017-02-11T17:07:00.000Z","key":1486832820000,"doc_count":12},{"key_as_string":"2017-02-11T17:08:00.000Z","key":1486832880000,"doc_count":10},{"key_as_string":"2017-02-11T17:09:00.000Z","key":1486832940000,"doc_count":16},{"key_as_string":"2017-02-11T17:10:00.000Z","key":1486833000000,"doc_count":14},{"key_as_string":"2017-02-11T17:11:00.000Z","key":1486833060000,"doc_count":13},{"key_as_string":"2017-02-11T17:12:00.000Z","key":1486833120000,"doc_count":16},{"key_as_string":"2017-02-11T17:13:00.000Z","key":1486833180000,"doc_count":9},{"key_as_string":"2017-02-11T17:14:00.000Z","key":1486833240000,"doc_count":5},{"key_as_string":"2017-02-11T17:15:00.000Z","key":1486833300000,"doc_count":15},{"key_as_string":"2017-02-11T17:16:00.000Z","key":1486833360000,"doc_count":14},{"key_as_string":"2017-02-11T17:17:00.000Z","key":1486833420000,"doc_count":8},{"key_as_string":"2017-02-11T17:18:00.000Z","key":1486833480000,"doc_count":12},{"key_as_string":"2017-02-11T17:19:00.000Z","key":1486833540000,"doc_count":13},{"key_as_string":"2017-02-11T17:20:00.000Z","key":1486833600000,"doc_count":13},{"key_as_string":"2017-02-11T17:21:00.000Z","key":1486833660000,"doc_count":13},{"key_as_string":"2017-02-11T17:22:00.000Z","key":1486833720000,"doc_count":11},{"key_as_string":"2017-02-11T17:23:00.000Z","key":1486833780000,"doc_count":11},{"key_as_string":"2017-02-11T17:24:00.000Z","key":1486833840000,"doc_count":14},{"key_as_string":"2017-02-11T17:25:00.000Z","key":1486833900000,"doc_count":7},{"key_as_string":"2017-02-11T17:26:00.000Z","key":1486833960000,"doc_count":15},{"key_as_string":"2017-02-11T17:27:00.000Z","key":1486834020000,"doc_count":11},{"key_as_string":"2017-02-11T17:28:00.000Z","key":1486834080000,"doc_count":9},{"key_as_string":"2017-02-11T17:29:00.000Z","key":1486834140000,"doc_count":13},{"key_as_string":"2017-02-11T17:30:00.000Z","key":1486834200000,"doc_count":11},{"key_as_string":"2017-02-11T17:31:00.000Z","key":1486834260000,"doc_count":7},{"key_as_string":"2017-02-11T17:32:00.000Z","key":1486834320000,"doc_count":14},{"key_as_string":"2017-02-11T17:33:00.000Z","key":1486834380000,"doc_count":13},{"key_as_string":"2017-02-11T17:34:00.000Z","key":1486834440000,"doc_count":10},{"key_as_string":"2017-02-11T17:35:00.000Z","key":1486834500000,"doc_count":13},{"key_as_string":"2017-02-11T17:36:00.000Z","key":1486834560000,"doc_count":12},{"key_as_string":"2017-02-11T17:37:00.000Z","key":1486834620000,"doc_count":13},{"key_as_string":"2017-02-11T17:38:00.000Z","key":1486834680000,"doc_count":12},{"key_as_string":"2017-02-11T17:39:00.000Z","key":1486834740000,"doc_count":11},{"key_as_string":"2017-02-11T17:40:00.000Z","key":1486834800000,"doc_count":15},{"key_as_string":"2017-02-11T17:41:00.000Z","key":1486834860000,"doc_count":15},{"key_as_string":"2017-02-11T17:42:00.000Z","key":1486834920000,"doc_count":14},{"key_as_string":"2017-02-11T17:43:00.000Z","key":1486834980000,"doc_count":10},{"key_as_string":"2017-02-11T17:44:00.000Z","key":1486835040000,"doc_count":8},{"key_as_string":"2017-02-11T17:45:00.000Z","key":1486835100000,"doc_count":14},{"key_as_string":"2017-02-11T17:46:00.000Z","key":1486835160000,"doc_count":8},{"key_as_string":"2017-02-11T17:47:00.000Z","key":1486835220000,"doc_count":11},{"key_as_string":"2017-02-11T17:48:00.000Z","key":1486835280000,"doc_count":13},{"key_as_string":"2017-02-11T17:49:00.000Z","key":1486835340000,"doc_count":13},{"key_as_string":"2017-02-11T17:50:00.000Z","key":1486835400000,"doc_count":10},{"key_as_string":"2017-02-11T17:51:00.000Z","key":1486835460000,"doc_count":11},{"key_as_string":"2017-02-11T17:52:00.000Z","key":1486835520000,"doc_count":22},{"key_as_string":"2017-02-11T17:53:00.000Z","key":1486835580000,"doc_count":14},{"key_as_string":"2017-02-11T17:54:00.000Z","key":1486835640000,"doc_count":11},{"key_as_string":"2017-02-11T17:55:00.000Z","key":1486835700000,"doc_count":11},{"key_as_string":"2017-02-11T17:56:00.000Z","key":1486835760000,"doc_count":10},{"key_as_string":"2017-02-11T17:57:00.000Z","key":1486835820000,"doc_count":13},{"key_as_string":"2017-02-11T17:58:00.000Z","key":1486835880000,"doc_count":6},{"key_as_string":"2017-02-11T17:59:00.000Z","key":1486835940000,"doc_count":16},{"key_as_string":"2017-02-11T18:00:00.000Z","key":1486836000000,"doc_count":11},{"key_as_string":"2017-02-11T18:01:00.000Z","key":1486836060000,"doc_count":15},{"key_as_string":"2017-02-11T18:02:00.000Z","key":1486836120000,"doc_count":8},{"key_as_string":"2017-02-11T18:03:00.000Z","key":1486836180000,"doc_count":12},{"key_as_string":"2017-02-11T18:04:00.000Z","key":1486836240000,"doc_count":14},{"key_as_string":"2017-02-11T18:05:00.000Z","key":1486836300000,"doc_count":11},{"key_as_string":"2017-02-11T18:06:00.000Z","key":1486836360000,"doc_count":15},{"key_as_string":"2017-02-11T18:07:00.000Z","key":1486836420000,"doc_count":9},{"key_as_string":"2017-02-11T18:08:00.000Z","key":1486836480000,"doc_count":11},{"key_as_string":"2017-02-11T18:09:00.000Z","key":1486836540000,"doc_count":9},{"key_as_string":"2017-02-11T18:10:00.000Z","key":1486836600000,"doc_count":10},{"key_as_string":"2017-02-11T18:11:00.000Z","key":1486836660000,"doc_count":12},{"key_as_string":"2017-02-11T18:12:00.000Z","key":1486836720000,"doc_count":10},{"key_as_string":"2017-02-11T18:13:00.000Z","key":1486836780000,"doc_count":11},{"key_as_string":"2017-02-11T18:14:00.000Z","key":1486836840000,"doc_count":12},{"key_as_string":"2017-02-11T18:15:00.000Z","key":1486836900000,"doc_count":11},{"key_as_string":"2017-02-11T18:16:00.000Z","key":1486836960000,"doc_count":9},{"key_as_string":"2017-02-11T18:17:00.000Z","key":1486837020000,"doc_count":7},{"key_as_string":"2017-02-11T18:18:00.000Z","key":1486837080000,"doc_count":16},{"key_as_string":"2017-02-11T18:19:00.000Z","key":1486837140000,"doc_count":10},{"key_as_string":"2017-02-11T18:20:00.000Z","key":1486837200000,"doc_count":14},{"key_as_string":"2017-02-11T18:21:00.000Z","key":1486837260000,"doc_count":5},{"key_as_string":"2017-02-11T18:22:00.000Z","key":1486837320000,"doc_count":12},{"key_as_string":"2017-02-11T18:23:00.000Z","key":1486837380000,"doc_count":13},{"key_as_string":"2017-02-11T18:24:00.000Z","key":1486837440000,"doc_count":12},{"key_as_string":"2017-02-11T18:25:00.000Z","key":1486837500000,"doc_count":9},{"key_as_string":"2017-02-11T18:26:00.000Z","key":1486837560000,"doc_count":12},{"key_as_string":"2017-02-11T18:27:00.000Z","key":1486837620000,"doc_count":11},{"key_as_string":"2017-02-11T18:28:00.000Z","key":1486837680000,"doc_count":12},{"key_as_string":"2017-02-11T18:29:00.000Z","key":1486837740000,"doc_count":10},{"key_as_string":"2017-02-11T18:30:00.000Z","key":1486837800000,"doc_count":11},{"key_as_string":"2017-02-11T18:31:00.000Z","key":1486837860000,"doc_count":9},{"key_as_string":"2017-02-11T18:32:00.000Z","key":1486837920000,"doc_count":13},{"key_as_string":"2017-02-11T18:33:00.000Z","key":1486837980000,"doc_count":11},{"key_as_string":"2017-02-11T18:34:00.000Z","key":1486838040000,"doc_count":13},{"key_as_string":"2017-02-11T18:35:00.000Z","key":1486838100000,"doc_count":12},{"key_as_string":"2017-02-11T18:36:00.000Z","key":1486838160000,"doc_count":8},{"key_as_string":"2017-02-11T18:37:00.000Z","key":1486838220000,"doc_count":10},{"key_as_string":"2017-02-11T18:38:00.000Z","key":1486838280000,"doc_count":10},{"key_as_string":"2017-02-11T18:39:00.000Z","key":1486838340000,"doc_count":10},{"key_as_string":"2017-02-11T18:40:00.000Z","key":1486838400000,"doc_count":14},{"key_as_string":"2017-02-11T18:41:00.000Z","key":1486838460000,"doc_count":13},{"key_as_string":"2017-02-11T18:42:00.000Z","key":1486838520000,"doc_count":15},{"key_as_string":"2017-02-11T18:43:00.000Z","key":1486838580000,"doc_count":9},{"key_as_string":"2017-02-11T18:44:00.000Z","key":1486838640000,"doc_count":10},{"key_as_string":"2017-02-11T18:45:00.000Z","key":1486838700000,"doc_count":14},{"key_as_string":"2017-02-11T18:46:00.000Z","key":1486838760000,"doc_count":9},{"key_as_string":"2017-02-11T18:47:00.000Z","key":1486838820000,"doc_count":14},{"key_as_string":"2017-02-11T18:48:00.000Z","key":1486838880000,"doc_count":8},{"key_as_string":"2017-02-11T18:49:00.000Z","key":1486838940000,"doc_count":10},{"key_as_string":"2017-02-11T18:50:00.000Z","key":1486839000000,"doc_count":15},{"key_as_string":"2017-02-11T18:51:00.000Z","key":1486839060000,"doc_count":9},{"key_as_string":"2017-02-11T18:52:00.000Z","key":1486839120000,"doc_count":13},{"key_as_string":"2017-02-11T18:53:00.000Z","key":1486839180000,"doc_count":14},{"key_as_string":"2017-02-11T18:54:00.000Z","key":1486839240000,"doc_count":9},{"key_as_string":"2017-02-11T18:55:00.000Z","key":1486839300000,"doc_count":9},{"key_as_string":"2017-02-11T18:56:00.000Z","key":1486839360000,"doc_count":9},{"key_as_string":"2017-02-11T18:57:00.000Z","key":1486839420000,"doc_count":12},{"key_as_string":"2017-02-11T18:58:00.000Z","key":1486839480000,"doc_count":14},{"key_as_string":"2017-02-11T18:59:00.000Z","key":1486839540000,"doc_count":9},{"key_as_string":"2017-02-11T19:00:00.000Z","key":1486839600000,"doc_count":14},{"key_as_string":"2017-02-11T19:01:00.000Z","key":1486839660000,"doc_count":13},{"key_as_string":"2017-02-11T19:02:00.000Z","key":1486839720000,"doc_count":13},{"key_as_string":"2017-02-11T19:03:00.000Z","key":1486839780000,"doc_count":15},{"key_as_string":"2017-02-11T19:04:00.000Z","key":1486839840000,"doc_count":11},{"key_as_string":"2017-02-11T19:05:00.000Z","key":1486839900000,"doc_count":11},{"key_as_string":"2017-02-11T19:06:00.000Z","key":1486839960000,"doc_count":10},{"key_as_string":"2017-02-11T19:07:00.000Z","key":1486840020000,"doc_count":11},{"key_as_string":"2017-02-11T19:08:00.000Z","key":1486840080000,"doc_count":15},{"key_as_string":"2017-02-11T19:09:00.000Z","key":1486840140000,"doc_count":13},{"key_as_string":"2017-02-11T19:10:00.000Z","key":1486840200000,"doc_count":17},{"key_as_string":"2017-02-11T19:11:00.000Z","key":1486840260000,"doc_count":9},{"key_as_string":"2017-02-11T19:12:00.000Z","key":1486840320000,"doc_count":10},{"key_as_string":"2017-02-11T19:13:00.000Z","key":1486840380000,"doc_count":8},{"key_as_string":"2017-02-11T19:14:00.000Z","key":1486840440000,"doc_count":17},{"key_as_string":"2017-02-11T19:15:00.000Z","key":1486840500000,"doc_count":8},{"key_as_string":"2017-02-11T19:16:00.000Z","key":1486840560000,"doc_count":13},{"key_as_string":"2017-02-11T19:17:00.000Z","key":1486840620000,"doc_count":10},{"key_as_string":"2017-02-11T19:18:00.000Z","key":1486840680000,"doc_count":9},{"key_as_string":"2017-02-11T19:19:00.000Z","key":1486840740000,"doc_count":13},{"key_as_string":"2017-02-11T19:20:00.000Z","key":1486840800000,"doc_count":12},{"key_as_string":"2017-02-11T19:21:00.000Z","key":1486840860000,"doc_count":18},{"key_as_string":"2017-02-11T19:22:00.000Z","key":1486840920000,"doc_count":14},{"key_as_string":"2017-02-11T19:23:00.000Z","key":1486840980000,"doc_count":10},{"key_as_string":"2017-02-11T19:24:00.000Z","key":1486841040000,"doc_count":11},{"key_as_string":"2017-02-11T19:25:00.000Z","key":1486841100000,"doc_count":12},{"key_as_string":"2017-02-11T19:26:00.000Z","key":1486841160000,"doc_count":16},{"key_as_string":"2017-02-11T19:27:00.000Z","key":1486841220000,"doc_count":10},{"key_as_string":"2017-02-11T19:28:00.000Z","key":1486841280000,"doc_count":16},{"key_as_string":"2017-02-11T19:29:00.000Z","key":1486841340000,"doc_count":6},{"key_as_string":"2017-02-11T19:30:00.000Z","key":1486841400000,"doc_count":12},{"key_as_string":"2017-02-11T19:31:00.000Z","key":1486841460000,"doc_count":10},{"key_as_string":"2017-02-11T19:32:00.000Z","key":1486841520000,"doc_count":15},{"key_as_string":"2017-02-11T19:33:00.000Z","key":1486841580000,"doc_count":16},{"key_as_string":"2017-02-11T19:34:00.000Z","key":1486841640000,"doc_count":14},{"key_as_string":"2017-02-11T19:35:00.000Z","key":1486841700000,"doc_count":5},{"key_as_string":"2017-02-11T19:36:00.000Z","key":1486841760000,"doc_count":15},{"key_as_string":"2017-02-11T19:37:00.000Z","key":1486841820000,"doc_count":9},{"key_as_string":"2017-02-11T19:38:00.000Z","key":1486841880000,"doc_count":11},{"key_as_string":"2017-02-11T19:39:00.000Z","key":1486841940000,"doc_count":9},{"key_as_string":"2017-02-11T19:40:00.000Z","key":1486842000000,"doc_count":14},{"key_as_string":"2017-02-11T19:41:00.000Z","key":1486842060000,"doc_count":8},{"key_as_string":"2017-02-11T19:42:00.000Z","key":1486842120000,"doc_count":7},{"key_as_string":"2017-02-11T19:43:00.000Z","key":1486842180000,"doc_count":8},{"key_as_string":"2017-02-11T19:44:00.000Z","key":1486842240000,"doc_count":12},{"key_as_string":"2017-02-11T19:45:00.000Z","key":1486842300000,"doc_count":12},{"key_as_string":"2017-02-11T19:46:00.000Z","key":1486842360000,"doc_count":11},{"key_as_string":"2017-02-11T19:47:00.000Z","key":1486842420000,"doc_count":10},{"key_as_string":"2017-02-11T19:48:00.000Z","key":1486842480000,"doc_count":8},{"key_as_string":"2017-02-11T19:49:00.000Z","key":1486842540000,"doc_count":11},{"key_as_string":"2017-02-11T19:50:00.000Z","key":1486842600000,"doc_count":12},{"key_as_string":"2017-02-11T19:51:00.000Z","key":1486842660000,"doc_count":10},{"key_as_string":"2017-02-11T19:52:00.000Z","key":1486842720000,"doc_count":11},{"key_as_string":"2017-02-11T19:53:00.000Z","key":1486842780000,"doc_count":17},{"key_as_string":"2017-02-11T19:54:00.000Z","key":1486842840000,"doc_count":11},{"key_as_string":"2017-02-11T19:55:00.000Z","key":1486842900000,"doc_count":11},{"key_as_string":"2017-02-11T19:56:00.000Z","key":1486842960000,"doc_count":14},{"key_as_string":"2017-02-11T19:57:00.000Z","key":1486843020000,"doc_count":5},{"key_as_string":"2017-02-11T19:58:00.000Z","key":1486843080000,"doc_count":17},{"key_as_string":"2017-02-11T19:59:00.000Z","key":1486843140000,"doc_count":7},{"key_as_string":"2017-02-11T20:00:00.000Z","key":1486843200000,"doc_count":12},{"key_as_string":"2017-02-11T20:01:00.000Z","key":1486843260000,"doc_count":12},{"key_as_string":"2017-02-11T20:02:00.000Z","key":1486843320000,"doc_count":15},{"key_as_string":"2017-02-11T20:03:00.000Z","key":1486843380000,"doc_count":8},{"key_as_string":"2017-02-11T20:04:00.000Z","key":1486843440000,"doc_count":10},{"key_as_string":"2017-02-11T20:05:00.000Z","key":1486843500000,"doc_count":10},{"key_as_string":"2017-02-11T20:06:00.000Z","key":1486843560000,"doc_count":10},{"key_as_string":"2017-02-11T20:07:00.000Z","key":1486843620000,"doc_count":14},{"key_as_string":"2017-02-11T20:08:00.000Z","key":1486843680000,"doc_count":11},{"key_as_string":"2017-02-11T20:09:00.000Z","key":1486843740000,"doc_count":9},{"key_as_string":"2017-02-11T20:10:00.000Z","key":1486843800000,"doc_count":7},{"key_as_string":"2017-02-11T20:11:00.000Z","key":1486843860000,"doc_count":17},{"key_as_string":"2017-02-11T20:12:00.000Z","key":1486843920000,"doc_count":11},{"key_as_string":"2017-02-11T20:13:00.000Z","key":1486843980000,"doc_count":15},{"key_as_string":"2017-02-11T20:14:00.000Z","key":1486844040000,"doc_count":12},{"key_as_string":"2017-02-11T20:15:00.000Z","key":1486844100000,"doc_count":9},{"key_as_string":"2017-02-11T20:16:00.000Z","key":1486844160000,"doc_count":7},{"key_as_string":"2017-02-11T20:17:00.000Z","key":1486844220000,"doc_count":9},{"key_as_string":"2017-02-11T20:18:00.000Z","key":1486844280000,"doc_count":14},{"key_as_string":"2017-02-11T20:19:00.000Z","key":1486844340000,"doc_count":9},{"key_as_string":"2017-02-11T20:20:00.000Z","key":1486844400000,"doc_count":13},{"key_as_string":"2017-02-11T20:21:00.000Z","key":1486844460000,"doc_count":11},{"key_as_string":"2017-02-11T20:22:00.000Z","key":1486844520000,"doc_count":15},{"key_as_string":"2017-02-11T20:23:00.000Z","key":1486844580000,"doc_count":13},{"key_as_string":"2017-02-11T20:24:00.000Z","key":1486844640000,"doc_count":11},{"key_as_string":"2017-02-11T20:25:00.000Z","key":1486844700000,"doc_count":7},{"key_as_string":"2017-02-11T20:26:00.000Z","key":1486844760000,"doc_count":7},{"key_as_string":"2017-02-11T20:27:00.000Z","key":1486844820000,"doc_count":13},{"key_as_string":"2017-02-11T20:28:00.000Z","key":1486844880000,"doc_count":8},{"key_as_string":"2017-02-11T20:29:00.000Z","key":1486844940000,"doc_count":12},{"key_as_string":"2017-02-11T20:30:00.000Z","key":1486845000000,"doc_count":12},{"key_as_string":"2017-02-11T20:31:00.000Z","key":1486845060000,"doc_count":11},{"key_as_string":"2017-02-11T20:32:00.000Z","key":1486845120000,"doc_count":11},{"key_as_string":"2017-02-11T20:33:00.000Z","key":1486845180000,"doc_count":10},{"key_as_string":"2017-02-11T20:34:00.000Z","key":1486845240000,"doc_count":15},{"key_as_string":"2017-02-11T20:35:00.000Z","key":1486845300000,"doc_count":5},{"key_as_string":"2017-02-11T20:36:00.000Z","key":1486845360000,"doc_count":9},{"key_as_string":"2017-02-11T20:37:00.000Z","key":1486845420000,"doc_count":11},{"key_as_string":"2017-02-11T20:38:00.000Z","key":1486845480000,"doc_count":9},{"key_as_string":"2017-02-11T20:39:00.000Z","key":1486845540000,"doc_count":12},{"key_as_string":"2017-02-11T20:40:00.000Z","key":1486845600000,"doc_count":16},{"key_as_string":"2017-02-11T20:41:00.000Z","key":1486845660000,"doc_count":6},{"key_as_string":"2017-02-11T20:42:00.000Z","key":1486845720000,"doc_count":11},{"key_as_string":"2017-02-11T20:43:00.000Z","key":1486845780000,"doc_count":13},{"key_as_string":"2017-02-11T20:44:00.000Z","key":1486845840000,"doc_count":7},{"key_as_string":"2017-02-11T20:45:00.000Z","key":1486845900000,"doc_count":11},{"key_as_string":"2017-02-11T20:46:00.000Z","key":1486845960000,"doc_count":7},{"key_as_string":"2017-02-11T20:47:00.000Z","key":1486846020000,"doc_count":9},{"key_as_string":"2017-02-11T20:48:00.000Z","key":1486846080000,"doc_count":14},{"key_as_string":"2017-02-11T20:49:00.000Z","key":1486846140000,"doc_count":9},{"key_as_string":"2017-02-11T20:50:00.000Z","key":1486846200000,"doc_count":12},{"key_as_string":"2017-02-11T20:51:00.000Z","key":1486846260000,"doc_count":17},{"key_as_string":"2017-02-11T20:52:00.000Z","key":1486846320000,"doc_count":13},{"key_as_string":"2017-02-11T20:53:00.000Z","key":1486846380000,"doc_count":7},{"key_as_string":"2017-02-11T20:54:00.000Z","key":1486846440000,"doc_count":15},{"key_as_string":"2017-02-11T20:55:00.000Z","key":1486846500000,"doc_count":13},{"key_as_string":"2017-02-11T20:56:00.000Z","key":1486846560000,"doc_count":16},{"key_as_string":"2017-02-11T20:57:00.000Z","key":1486846620000,"doc_count":12},{"key_as_string":"2017-02-11T20:58:00.000Z","key":1486846680000,"doc_count":8},{"key_as_string":"2017-02-11T20:59:00.000Z","key":1486846740000,"doc_count":14},{"key_as_string":"2017-02-11T21:00:00.000Z","key":1486846800000,"doc_count":11},{"key_as_string":"2017-02-11T21:01:00.000Z","key":1486846860000,"doc_count":8},{"key_as_string":"2017-02-11T21:02:00.000Z","key":1486846920000,"doc_count":13},{"key_as_string":"2017-02-11T21:03:00.000Z","key":1486846980000,"doc_count":8},{"key_as_string":"2017-02-11T21:04:00.000Z","key":1486847040000,"doc_count":9},{"key_as_string":"2017-02-11T21:05:00.000Z","key":1486847100000,"doc_count":12},{"key_as_string":"2017-02-11T21:06:00.000Z","key":1486847160000,"doc_count":11},{"key_as_string":"2017-02-11T21:07:00.000Z","key":1486847220000,"doc_count":15},{"key_as_string":"2017-02-11T21:08:00.000Z","key":1486847280000,"doc_count":6},{"key_as_string":"2017-02-11T21:09:00.000Z","key":1486847340000,"doc_count":14},{"key_as_string":"2017-02-11T21:10:00.000Z","key":1486847400000,"doc_count":5},{"key_as_string":"2017-02-11T21:11:00.000Z","key":1486847460000,"doc_count":11},{"key_as_string":"2017-02-11T21:12:00.000Z","key":1486847520000,"doc_count":12},{"key_as_string":"2017-02-11T21:13:00.000Z","key":1486847580000,"doc_count":10},{"key_as_string":"2017-02-11T21:14:00.000Z","key":1486847640000,"doc_count":7},{"key_as_string":"2017-02-11T21:15:00.000Z","key":1486847700000,"doc_count":9},{"key_as_string":"2017-02-11T21:16:00.000Z","key":1486847760000,"doc_count":12},{"key_as_string":"2017-02-11T21:17:00.000Z","key":1486847820000,"doc_count":11},{"key_as_string":"2017-02-11T21:18:00.000Z","key":1486847880000,"doc_count":12},{"key_as_string":"2017-02-11T21:19:00.000Z","key":1486847940000,"doc_count":14},{"key_as_string":"2017-02-11T21:20:00.000Z","key":1486848000000,"doc_count":10},{"key_as_string":"2017-02-11T21:21:00.000Z","key":1486848060000,"doc_count":9},{"key_as_string":"2017-02-11T21:22:00.000Z","key":1486848120000,"doc_count":16},{"key_as_string":"2017-02-11T21:23:00.000Z","key":1486848180000,"doc_count":10},{"key_as_string":"2017-02-11T21:24:00.000Z","key":1486848240000,"doc_count":10},{"key_as_string":"2017-02-11T21:25:00.000Z","key":1486848300000,"doc_count":11},{"key_as_string":"2017-02-11T21:26:00.000Z","key":1486848360000,"doc_count":12},{"key_as_string":"2017-02-11T21:27:00.000Z","key":1486848420000,"doc_count":6},{"key_as_string":"2017-02-11T21:28:00.000Z","key":1486848480000,"doc_count":14},{"key_as_string":"2017-02-11T21:29:00.000Z","key":1486848540000,"doc_count":10},{"key_as_string":"2017-02-11T21:30:00.000Z","key":1486848600000,"doc_count":12},{"key_as_string":"2017-02-11T21:31:00.000Z","key":1486848660000,"doc_count":7},{"key_as_string":"2017-02-11T21:32:00.000Z","key":1486848720000,"doc_count":11},{"key_as_string":"2017-02-11T21:33:00.000Z","key":1486848780000,"doc_count":11},{"key_as_string":"2017-02-11T21:34:00.000Z","key":1486848840000,"doc_count":11},{"key_as_string":"2017-02-11T21:35:00.000Z","key":1486848900000,"doc_count":5},{"key_as_string":"2017-02-11T21:36:00.000Z","key":1486848960000,"doc_count":15},{"key_as_string":"2017-02-11T21:37:00.000Z","key":1486849020000,"doc_count":8},{"key_as_string":"2017-02-11T21:38:00.000Z","key":1486849080000,"doc_count":11},{"key_as_string":"2017-02-11T21:39:00.000Z","key":1486849140000,"doc_count":9},{"key_as_string":"2017-02-11T21:40:00.000Z","key":1486849200000,"doc_count":9},{"key_as_string":"2017-02-11T21:41:00.000Z","key":1486849260000,"doc_count":10},{"key_as_string":"2017-02-11T21:42:00.000Z","key":1486849320000,"doc_count":7},{"key_as_string":"2017-02-11T21:43:00.000Z","key":1486849380000,"doc_count":13},{"key_as_string":"2017-02-11T21:44:00.000Z","key":1486849440000,"doc_count":10},{"key_as_string":"2017-02-11T21:45:00.000Z","key":1486849500000,"doc_count":10},{"key_as_string":"2017-02-11T21:46:00.000Z","key":1486849560000,"doc_count":11},{"key_as_string":"2017-02-11T21:47:00.000Z","key":1486849620000,"doc_count":10},{"key_as_string":"2017-02-11T21:48:00.000Z","key":1486849680000,"doc_count":7},{"key_as_string":"2017-02-11T21:49:00.000Z","key":1486849740000,"doc_count":8},{"key_as_string":"2017-02-11T21:50:00.000Z","key":1486849800000,"doc_count":12},{"key_as_string":"2017-02-11T21:51:00.000Z","key":1486849860000,"doc_count":8},{"key_as_string":"2017-02-11T21:52:00.000Z","key":1486849920000,"doc_count":7},{"key_as_string":"2017-02-11T21:53:00.000Z","key":1486849980000,"doc_count":15},{"key_as_string":"2017-02-11T21:54:00.000Z","key":1486850040000,"doc_count":14},{"key_as_string":"2017-02-11T21:55:00.000Z","key":1486850100000,"doc_count":9},{"key_as_string":"2017-02-11T21:56:00.000Z","key":1486850160000,"doc_count":9},{"key_as_string":"2017-02-11T21:57:00.000Z","key":1486850220000,"doc_count":9},{"key_as_string":"2017-02-11T21:58:00.000Z","key":1486850280000,"doc_count":13},{"key_as_string":"2017-02-11T21:59:00.000Z","key":1486850340000,"doc_count":13},{"key_as_string":"2017-02-11T22:00:00.000Z","key":1486850400000,"doc_count":11},{"key_as_string":"2017-02-11T22:01:00.000Z","key":1486850460000,"doc_count":12},{"key_as_string":"2017-02-11T22:02:00.000Z","key":1486850520000,"doc_count":12},{"key_as_string":"2017-02-11T22:03:00.000Z","key":1486850580000,"doc_count":11},{"key_as_string":"2017-02-11T22:04:00.000Z","key":1486850640000,"doc_count":7},{"key_as_string":"2017-02-11T22:05:00.000Z","key":1486850700000,"doc_count":9},{"key_as_string":"2017-02-11T22:06:00.000Z","key":1486850760000,"doc_count":12},{"key_as_string":"2017-02-11T22:07:00.000Z","key":1486850820000,"doc_count":13},{"key_as_string":"2017-02-11T22:08:00.000Z","key":1486850880000,"doc_count":11},{"key_as_string":"2017-02-11T22:09:00.000Z","key":1486850940000,"doc_count":8},{"key_as_string":"2017-02-11T22:10:00.000Z","key":1486851000000,"doc_count":6},{"key_as_string":"2017-02-11T22:11:00.000Z","key":1486851060000,"doc_count":9},{"key_as_string":"2017-02-11T22:12:00.000Z","key":1486851120000,"doc_count":15},{"key_as_string":"2017-02-11T22:13:00.000Z","key":1486851180000,"doc_count":12},{"key_as_string":"2017-02-11T22:14:00.000Z","key":1486851240000,"doc_count":12},{"key_as_string":"2017-02-11T22:15:00.000Z","key":1486851300000,"doc_count":9},{"key_as_string":"2017-02-11T22:16:00.000Z","key":1486851360000,"doc_count":11},{"key_as_string":"2017-02-11T22:17:00.000Z","key":1486851420000,"doc_count":9},{"key_as_string":"2017-02-11T22:18:00.000Z","key":1486851480000,"doc_count":13},{"key_as_string":"2017-02-11T22:19:00.000Z","key":1486851540000,"doc_count":10},{"key_as_string":"2017-02-11T22:20:00.000Z","key":1486851600000,"doc_count":16},{"key_as_string":"2017-02-11T22:21:00.000Z","key":1486851660000,"doc_count":10},{"key_as_string":"2017-02-11T22:22:00.000Z","key":1486851720000,"doc_count":7},{"key_as_string":"2017-02-11T22:23:00.000Z","key":1486851780000,"doc_count":8},{"key_as_string":"2017-02-11T22:24:00.000Z","key":1486851840000,"doc_count":13},{"key_as_string":"2017-02-11T22:25:00.000Z","key":1486851900000,"doc_count":11},{"key_as_string":"2017-02-11T22:26:00.000Z","key":1486851960000,"doc_count":11},{"key_as_string":"2017-02-11T22:27:00.000Z","key":1486852020000,"doc_count":15},{"key_as_string":"2017-02-11T22:28:00.000Z","key":1486852080000,"doc_count":10},{"key_as_string":"2017-02-11T22:29:00.000Z","key":1486852140000,"doc_count":13},{"key_as_string":"2017-02-11T22:30:00.000Z","key":1486852200000,"doc_count":3},{"key_as_string":"2017-02-11T22:31:00.000Z","key":1486852260000,"doc_count":16},{"key_as_string":"2017-02-11T22:32:00.000Z","key":1486852320000,"doc_count":8},{"key_as_string":"2017-02-11T22:33:00.000Z","key":1486852380000,"doc_count":13},{"key_as_string":"2017-02-11T22:34:00.000Z","key":1486852440000,"doc_count":10},{"key_as_string":"2017-02-11T22:35:00.000Z","key":1486852500000,"doc_count":10},{"key_as_string":"2017-02-11T22:36:00.000Z","key":1486852560000,"doc_count":15},{"key_as_string":"2017-02-11T22:37:00.000Z","key":1486852620000,"doc_count":10},{"key_as_string":"2017-02-11T22:38:00.000Z","key":1486852680000,"doc_count":9},{"key_as_string":"2017-02-11T22:39:00.000Z","key":1486852740000,"doc_count":11},{"key_as_string":"2017-02-11T22:40:00.000Z","key":1486852800000,"doc_count":11},{"key_as_string":"2017-02-11T22:41:00.000Z","key":1486852860000,"doc_count":8},{"key_as_string":"2017-02-11T22:42:00.000Z","key":1486852920000,"doc_count":10},{"key_as_string":"2017-02-11T22:43:00.000Z","key":1486852980000,"doc_count":12},{"key_as_string":"2017-02-11T22:44:00.000Z","key":1486853040000,"doc_count":8},{"key_as_string":"2017-02-11T22:45:00.000Z","key":1486853100000,"doc_count":14},{"key_as_string":"2017-02-11T22:46:00.000Z","key":1486853160000,"doc_count":9},{"key_as_string":"2017-02-11T22:47:00.000Z","key":1486853220000,"doc_count":10},{"key_as_string":"2017-02-11T22:48:00.000Z","key":1486853280000,"doc_count":12},{"key_as_string":"2017-02-11T22:49:00.000Z","key":1486853340000,"doc_count":13},{"key_as_string":"2017-02-11T22:50:00.000Z","key":1486853400000,"doc_count":13},{"key_as_string":"2017-02-11T22:51:00.000Z","key":1486853460000,"doc_count":5},{"key_as_string":"2017-02-11T22:52:00.000Z","key":1486853520000,"doc_count":10},{"key_as_string":"2017-02-11T22:53:00.000Z","key":1486853580000,"doc_count":8},{"key_as_string":"2017-02-11T22:54:00.000Z","key":1486853640000,"doc_count":12},{"key_as_string":"2017-02-11T22:55:00.000Z","key":1486853700000,"doc_count":6},{"key_as_string":"2017-02-11T22:56:00.000Z","key":1486853760000,"doc_count":15},{"key_as_string":"2017-02-11T22:57:00.000Z","key":1486853820000,"doc_count":8},{"key_as_string":"2017-02-11T22:58:00.000Z","key":1486853880000,"doc_count":11},{"key_as_string":"2017-02-11T22:59:00.000Z","key":1486853940000,"doc_count":10},{"key_as_string":"2017-02-11T23:00:00.000Z","key":1486854000000,"doc_count":8},{"key_as_string":"2017-02-11T23:01:00.000Z","key":1486854060000,"doc_count":9},{"key_as_string":"2017-02-11T23:02:00.000Z","key":1486854120000,"doc_count":11},{"key_as_string":"2017-02-11T23:03:00.000Z","key":1486854180000,"doc_count":15},{"key_as_string":"2017-02-11T23:04:00.000Z","key":1486854240000,"doc_count":9},{"key_as_string":"2017-02-11T23:05:00.000Z","key":1486854300000,"doc_count":14},{"key_as_string":"2017-02-11T23:06:00.000Z","key":1486854360000,"doc_count":8},{"key_as_string":"2017-02-11T23:07:00.000Z","key":1486854420000,"doc_count":10},{"key_as_string":"2017-02-11T23:08:00.000Z","key":1486854480000,"doc_count":8},{"key_as_string":"2017-02-11T23:09:00.000Z","key":1486854540000,"doc_count":13},{"key_as_string":"2017-02-11T23:10:00.000Z","key":1486854600000,"doc_count":11},{"key_as_string":"2017-02-11T23:11:00.000Z","key":1486854660000,"doc_count":12},{"key_as_string":"2017-02-11T23:12:00.000Z","key":1486854720000,"doc_count":11},{"key_as_string":"2017-02-11T23:13:00.000Z","key":1486854780000,"doc_count":6},{"key_as_string":"2017-02-11T23:14:00.000Z","key":1486854840000,"doc_count":14},{"key_as_string":"2017-02-11T23:15:00.000Z","key":1486854900000,"doc_count":14},{"key_as_string":"2017-02-11T23:16:00.000Z","key":1486854960000,"doc_count":14},{"key_as_string":"2017-02-11T23:17:00.000Z","key":1486855020000,"doc_count":11},{"key_as_string":"2017-02-11T23:18:00.000Z","key":1486855080000,"doc_count":9},{"key_as_string":"2017-02-11T23:19:00.000Z","key":1486855140000,"doc_count":10},{"key_as_string":"2017-02-11T23:20:00.000Z","key":1486855200000,"doc_count":8},{"key_as_string":"2017-02-11T23:21:00.000Z","key":1486855260000,"doc_count":13},{"key_as_string":"2017-02-11T23:22:00.000Z","key":1486855320000,"doc_count":12},{"key_as_string":"2017-02-11T23:23:00.000Z","key":1486855380000,"doc_count":10},{"key_as_string":"2017-02-11T23:24:00.000Z","key":1486855440000,"doc_count":13},{"key_as_string":"2017-02-11T23:25:00.000Z","key":1486855500000,"doc_count":11},{"key_as_string":"2017-02-11T23:26:00.000Z","key":1486855560000,"doc_count":11},{"key_as_string":"2017-02-11T23:27:00.000Z","key":1486855620000,"doc_count":9},{"key_as_string":"2017-02-11T23:28:00.000Z","key":1486855680000,"doc_count":13},{"key_as_string":"2017-02-11T23:29:00.000Z","key":1486855740000,"doc_count":3},{"key_as_string":"2017-02-11T23:30:00.000Z","key":1486855800000,"doc_count":10},{"key_as_string":"2017-02-11T23:31:00.000Z","key":1486855860000,"doc_count":9},{"key_as_string":"2017-02-11T23:32:00.000Z","key":1486855920000,"doc_count":7},{"key_as_string":"2017-02-11T23:33:00.000Z","key":1486855980000,"doc_count":15},{"key_as_string":"2017-02-11T23:34:00.000Z","key":1486856040000,"doc_count":12},{"key_as_string":"2017-02-11T23:35:00.000Z","key":1486856100000,"doc_count":17},{"key_as_string":"2017-02-11T23:36:00.000Z","key":1486856160000,"doc_count":9},{"key_as_string":"2017-02-11T23:37:00.000Z","key":1486856220000,"doc_count":8},{"key_as_string":"2017-02-11T23:38:00.000Z","key":1486856280000,"doc_count":9},{"key_as_string":"2017-02-11T23:39:00.000Z","key":1486856340000,"doc_count":14},{"key_as_string":"2017-02-11T23:40:00.000Z","key":1486856400000,"doc_count":9},{"key_as_string":"2017-02-11T23:41:00.000Z","key":1486856460000,"doc_count":7},{"key_as_string":"2017-02-11T23:42:00.000Z","key":1486856520000,"doc_count":10},{"key_as_string":"2017-02-11T23:43:00.000Z","key":1486856580000,"doc_count":7},{"key_as_string":"2017-02-11T23:44:00.000Z","key":1486856640000,"doc_count":12},{"key_as_string":"2017-02-11T23:45:00.000Z","key":1486856700000,"doc_count":10},{"key_as_string":"2017-02-11T23:46:00.000Z","key":1486856760000,"doc_count":10},{"key_as_string":"2017-02-11T23:47:00.000Z","key":1486856820000,"doc_count":9},{"key_as_string":"2017-02-11T23:48:00.000Z","key":1486856880000,"doc_count":7},{"key_as_string":"2017-02-11T23:49:00.000Z","key":1486856940000,"doc_count":9},{"key_as_string":"2017-02-11T23:50:00.000Z","key":1486857000000,"doc_count":11},{"key_as_string":"2017-02-11T23:51:00.000Z","key":1486857060000,"doc_count":10},{"key_as_string":"2017-02-11T23:52:00.000Z","key":1486857120000,"doc_count":11},{"key_as_string":"2017-02-11T23:53:00.000Z","key":1486857180000,"doc_count":10},{"key_as_string":"2017-02-11T23:54:00.000Z","key":1486857240000,"doc_count":15},{"key_as_string":"2017-02-11T23:55:00.000Z","key":1486857300000,"doc_count":5},{"key_as_string":"2017-02-11T23:56:00.000Z","key":1486857360000,"doc_count":7},{"key_as_string":"2017-02-11T23:57:00.000Z","key":1486857420000,"doc_count":14},{"key_as_string":"2017-02-11T23:58:00.000Z","key":1486857480000,"doc_count":10},{"key_as_string":"2017-02-11T23:59:00.000Z","key":1486857540000,"doc_count":9}]}}} diff --git a/x-pack/plugins/ml/server/models/job_validation/__mocks__/mock_it_search_response.json b/x-pack/plugins/ml/server/models/job_validation/__mocks__/mock_it_search_response.json index b771fab4dd352..3f3f016cc7ff5 100644 --- a/x-pack/plugins/ml/server/models/job_validation/__mocks__/mock_it_search_response.json +++ b/x-pack/plugins/ml/server/models/job_validation/__mocks__/mock_it_search_response.json @@ -1 +1 @@ -{"took":3,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":325,"max_score":0,"hits":[]},"aggregations":{"non_empty_buckets":{"buckets":[{"key_as_string":"1485984480000","key":1485984480000,"doc_count":1},{"key_as_string":"1485993300000","key":1485993300000,"doc_count":1},{"key_as_string":"1486020960000","key":1486020960000,"doc_count":3},{"key_as_string":"1486022820000","key":1486022820000,"doc_count":1},{"key_as_string":"1486032720000","key":1486032720000,"doc_count":1},{"key_as_string":"1486036440000","key":1486036440000,"doc_count":1},{"key_as_string":"1486046040000","key":1486046040000,"doc_count":1},{"key_as_string":"1486059780000","key":1486059780000,"doc_count":1},{"key_as_string":"1486063560000","key":1486063560000,"doc_count":1},{"key_as_string":"1486063860000","key":1486063860000,"doc_count":1},{"key_as_string":"1486125420000","key":1486125420000,"doc_count":1},{"key_as_string":"1486129800000","key":1486129800000,"doc_count":1},{"key_as_string":"1486131000000","key":1486131000000,"doc_count":1},{"key_as_string":"1486138740000","key":1486138740000,"doc_count":4},{"key_as_string":"1486141560000","key":1486141560000,"doc_count":2},{"key_as_string":"1486147080000","key":1486147080000,"doc_count":4},{"key_as_string":"1486155720000","key":1486155720000,"doc_count":1},{"key_as_string":"1486165740000","key":1486165740000,"doc_count":3},{"key_as_string":"1486165800000","key":1486165800000,"doc_count":1},{"key_as_string":"1486165920000","key":1486165920000,"doc_count":4},{"key_as_string":"1486179960000","key":1486179960000,"doc_count":3},{"key_as_string":"1486181460000","key":1486181460000,"doc_count":1},{"key_as_string":"1486204860000","key":1486204860000,"doc_count":1},{"key_as_string":"1486225440000","key":1486225440000,"doc_count":1},{"key_as_string":"1486225680000","key":1486225680000,"doc_count":1},{"key_as_string":"1486250220000","key":1486250220000,"doc_count":1},{"key_as_string":"1486286340000","key":1486286340000,"doc_count":3},{"key_as_string":"1486288620000","key":1486288620000,"doc_count":1},{"key_as_string":"1486313760000","key":1486313760000,"doc_count":1},{"key_as_string":"1486316160000","key":1486316160000,"doc_count":1},{"key_as_string":"1486322520000","key":1486322520000,"doc_count":1},{"key_as_string":"1486377960000","key":1486377960000,"doc_count":1},{"key_as_string":"1486398720000","key":1486398720000,"doc_count":1},{"key_as_string":"1486551360000","key":1486551360000,"doc_count":1},{"key_as_string":"1486554120000","key":1486554120000,"doc_count":1},{"key_as_string":"1486564680000","key":1486564680000,"doc_count":1},{"key_as_string":"1486566900000","key":1486566900000,"doc_count":5},{"key_as_string":"1486566960000","key":1486566960000,"doc_count":8},{"key_as_string":"1486567020000","key":1486567020000,"doc_count":12},{"key_as_string":"1486567080000","key":1486567080000,"doc_count":16},{"key_as_string":"1486567140000","key":1486567140000,"doc_count":12},{"key_as_string":"1486567200000","key":1486567200000,"doc_count":16},{"key_as_string":"1486567260000","key":1486567260000,"doc_count":16},{"key_as_string":"1486567320000","key":1486567320000,"doc_count":12},{"key_as_string":"1486567380000","key":1486567380000,"doc_count":16},{"key_as_string":"1486567440000","key":1486567440000,"doc_count":16},{"key_as_string":"1486567500000","key":1486567500000,"doc_count":12},{"key_as_string":"1486567560000","key":1486567560000,"doc_count":16},{"key_as_string":"1486567620000","key":1486567620000,"doc_count":16},{"key_as_string":"1486567680000","key":1486567680000,"doc_count":12},{"key_as_string":"1486567740000","key":1486567740000,"doc_count":16},{"key_as_string":"1486567800000","key":1486567800000,"doc_count":16},{"key_as_string":"1486567860000","key":1486567860000,"doc_count":8},{"key_as_string":"1486567920000","key":1486567920000,"doc_count":3},{"key_as_string":"1486567980000","key":1486567980000,"doc_count":1},{"key_as_string":"1486589280000","key":1486589280000,"doc_count":1},{"key_as_string":"1486598100000","key":1486598100000,"doc_count":1},{"key_as_string":"1486625760000","key":1486625760000,"doc_count":3},{"key_as_string":"1486627620000","key":1486627620000,"doc_count":1},{"key_as_string":"1486637520000","key":1486637520000,"doc_count":1},{"key_as_string":"1486641240000","key":1486641240000,"doc_count":1},{"key_as_string":"1486650840000","key":1486650840000,"doc_count":1},{"key_as_string":"1486664580000","key":1486664580000,"doc_count":1},{"key_as_string":"1486668360000","key":1486668360000,"doc_count":1},{"key_as_string":"1486668660000","key":1486668660000,"doc_count":1},{"key_as_string":"1486730220000","key":1486730220000,"doc_count":1},{"key_as_string":"1486734600000","key":1486734600000,"doc_count":1},{"key_as_string":"1486735800000","key":1486735800000,"doc_count":1},{"key_as_string":"1486743540000","key":1486743540000,"doc_count":4},{"key_as_string":"1486746360000","key":1486746360000,"doc_count":2},{"key_as_string":"1486751880000","key":1486751880000,"doc_count":4},{"key_as_string":"1486760520000","key":1486760520000,"doc_count":1},{"key_as_string":"1486770540000","key":1486770540000,"doc_count":3},{"key_as_string":"1486770600000","key":1486770600000,"doc_count":1},{"key_as_string":"1486770720000","key":1486770720000,"doc_count":4},{"key_as_string":"1486784760000","key":1486784760000,"doc_count":3},{"key_as_string":"1486786260000","key":1486786260000,"doc_count":1},{"key_as_string":"1486809660000","key":1486809660000,"doc_count":1},{"key_as_string":"1486830240000","key":1486830240000,"doc_count":1},{"key_as_string":"1486830480000","key":1486830480000,"doc_count":1},{"key_as_string":"1486855020000","key":1486855020000,"doc_count":1}]}}} +{"took":3,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total": { "value": 325, "relation": "eq" },"max_score":0,"hits":[]},"aggregations":{"non_empty_buckets":{"buckets":[{"key_as_string":"1485984480000","key":1485984480000,"doc_count":1},{"key_as_string":"1485993300000","key":1485993300000,"doc_count":1},{"key_as_string":"1486020960000","key":1486020960000,"doc_count":3},{"key_as_string":"1486022820000","key":1486022820000,"doc_count":1},{"key_as_string":"1486032720000","key":1486032720000,"doc_count":1},{"key_as_string":"1486036440000","key":1486036440000,"doc_count":1},{"key_as_string":"1486046040000","key":1486046040000,"doc_count":1},{"key_as_string":"1486059780000","key":1486059780000,"doc_count":1},{"key_as_string":"1486063560000","key":1486063560000,"doc_count":1},{"key_as_string":"1486063860000","key":1486063860000,"doc_count":1},{"key_as_string":"1486125420000","key":1486125420000,"doc_count":1},{"key_as_string":"1486129800000","key":1486129800000,"doc_count":1},{"key_as_string":"1486131000000","key":1486131000000,"doc_count":1},{"key_as_string":"1486138740000","key":1486138740000,"doc_count":4},{"key_as_string":"1486141560000","key":1486141560000,"doc_count":2},{"key_as_string":"1486147080000","key":1486147080000,"doc_count":4},{"key_as_string":"1486155720000","key":1486155720000,"doc_count":1},{"key_as_string":"1486165740000","key":1486165740000,"doc_count":3},{"key_as_string":"1486165800000","key":1486165800000,"doc_count":1},{"key_as_string":"1486165920000","key":1486165920000,"doc_count":4},{"key_as_string":"1486179960000","key":1486179960000,"doc_count":3},{"key_as_string":"1486181460000","key":1486181460000,"doc_count":1},{"key_as_string":"1486204860000","key":1486204860000,"doc_count":1},{"key_as_string":"1486225440000","key":1486225440000,"doc_count":1},{"key_as_string":"1486225680000","key":1486225680000,"doc_count":1},{"key_as_string":"1486250220000","key":1486250220000,"doc_count":1},{"key_as_string":"1486286340000","key":1486286340000,"doc_count":3},{"key_as_string":"1486288620000","key":1486288620000,"doc_count":1},{"key_as_string":"1486313760000","key":1486313760000,"doc_count":1},{"key_as_string":"1486316160000","key":1486316160000,"doc_count":1},{"key_as_string":"1486322520000","key":1486322520000,"doc_count":1},{"key_as_string":"1486377960000","key":1486377960000,"doc_count":1},{"key_as_string":"1486398720000","key":1486398720000,"doc_count":1},{"key_as_string":"1486551360000","key":1486551360000,"doc_count":1},{"key_as_string":"1486554120000","key":1486554120000,"doc_count":1},{"key_as_string":"1486564680000","key":1486564680000,"doc_count":1},{"key_as_string":"1486566900000","key":1486566900000,"doc_count":5},{"key_as_string":"1486566960000","key":1486566960000,"doc_count":8},{"key_as_string":"1486567020000","key":1486567020000,"doc_count":12},{"key_as_string":"1486567080000","key":1486567080000,"doc_count":16},{"key_as_string":"1486567140000","key":1486567140000,"doc_count":12},{"key_as_string":"1486567200000","key":1486567200000,"doc_count":16},{"key_as_string":"1486567260000","key":1486567260000,"doc_count":16},{"key_as_string":"1486567320000","key":1486567320000,"doc_count":12},{"key_as_string":"1486567380000","key":1486567380000,"doc_count":16},{"key_as_string":"1486567440000","key":1486567440000,"doc_count":16},{"key_as_string":"1486567500000","key":1486567500000,"doc_count":12},{"key_as_string":"1486567560000","key":1486567560000,"doc_count":16},{"key_as_string":"1486567620000","key":1486567620000,"doc_count":16},{"key_as_string":"1486567680000","key":1486567680000,"doc_count":12},{"key_as_string":"1486567740000","key":1486567740000,"doc_count":16},{"key_as_string":"1486567800000","key":1486567800000,"doc_count":16},{"key_as_string":"1486567860000","key":1486567860000,"doc_count":8},{"key_as_string":"1486567920000","key":1486567920000,"doc_count":3},{"key_as_string":"1486567980000","key":1486567980000,"doc_count":1},{"key_as_string":"1486589280000","key":1486589280000,"doc_count":1},{"key_as_string":"1486598100000","key":1486598100000,"doc_count":1},{"key_as_string":"1486625760000","key":1486625760000,"doc_count":3},{"key_as_string":"1486627620000","key":1486627620000,"doc_count":1},{"key_as_string":"1486637520000","key":1486637520000,"doc_count":1},{"key_as_string":"1486641240000","key":1486641240000,"doc_count":1},{"key_as_string":"1486650840000","key":1486650840000,"doc_count":1},{"key_as_string":"1486664580000","key":1486664580000,"doc_count":1},{"key_as_string":"1486668360000","key":1486668360000,"doc_count":1},{"key_as_string":"1486668660000","key":1486668660000,"doc_count":1},{"key_as_string":"1486730220000","key":1486730220000,"doc_count":1},{"key_as_string":"1486734600000","key":1486734600000,"doc_count":1},{"key_as_string":"1486735800000","key":1486735800000,"doc_count":1},{"key_as_string":"1486743540000","key":1486743540000,"doc_count":4},{"key_as_string":"1486746360000","key":1486746360000,"doc_count":2},{"key_as_string":"1486751880000","key":1486751880000,"doc_count":4},{"key_as_string":"1486760520000","key":1486760520000,"doc_count":1},{"key_as_string":"1486770540000","key":1486770540000,"doc_count":3},{"key_as_string":"1486770600000","key":1486770600000,"doc_count":1},{"key_as_string":"1486770720000","key":1486770720000,"doc_count":4},{"key_as_string":"1486784760000","key":1486784760000,"doc_count":3},{"key_as_string":"1486786260000","key":1486786260000,"doc_count":1},{"key_as_string":"1486809660000","key":1486809660000,"doc_count":1},{"key_as_string":"1486830240000","key":1486830240000,"doc_count":1},{"key_as_string":"1486830480000","key":1486830480000,"doc_count":1},{"key_as_string":"1486855020000","key":1486855020000,"doc_count":1}]}}} diff --git a/x-pack/plugins/ml/server/models/job_validation/__mocks__/mock_time_range.json b/x-pack/plugins/ml/server/models/job_validation/__mocks__/mock_time_range.json index 6eb1808ea7d0c..1a22fc869f354 100644 --- a/x-pack/plugins/ml/server/models/job_validation/__mocks__/mock_time_range.json +++ b/x-pack/plugins/ml/server/models/job_validation/__mocks__/mock_time_range.json @@ -1 +1 @@ -{"took":0,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":32017,"max_score":0,"hits":[]},"aggregations":{"earliest":{"value":-252464400000,"value_as_string":"1961-12-31T23:00:00.000Z"},"latest":{"value":1419894000000,"value_as_string":"2014-12-29T23:00:00.000Z"}}} +{"took":0,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":{"value":32017,"relation":"eq"},"max_score":0,"hits":[]},"aggregations":{"earliest":{"value":-252464400000,"value_as_string":"1961-12-31T23:00:00.000Z"},"latest":{"value":1419894000000,"value_as_string":"2014-12-29T23:00:00.000Z"}}} diff --git a/x-pack/plugins/ml/server/models/job_validation/job_validation.test.ts b/x-pack/plugins/ml/server/models/job_validation/job_validation.test.ts index 810d0ae9dcd87..691b039c0ad37 100644 --- a/x-pack/plugins/ml/server/models/job_validation/job_validation.test.ts +++ b/x-pack/plugins/ml/server/models/job_validation/job_validation.test.ts @@ -22,7 +22,7 @@ const callAs = { }, }), }, - search: () => Promise.resolve({ body: {} }), + search: () => Promise.resolve({ body: { hits: { total: { value: 0, relation: 'eq' } } } }), }; const mlClusterClient = ({ diff --git a/x-pack/plugins/ml/server/models/job_validation/validate_cardinality.test.ts b/x-pack/plugins/ml/server/models/job_validation/validate_cardinality.test.ts index 1be0751e15f22..2e2a9e21aa959 100644 --- a/x-pack/plugins/ml/server/models/job_validation/validate_cardinality.test.ts +++ b/x-pack/plugins/ml/server/models/job_validation/validate_cardinality.test.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import cloneDeep from 'lodash/cloneDeep'; +import { cloneDeep } from 'lodash'; import { IScopedClusterClient } from 'kibana/server'; diff --git a/x-pack/plugins/ml/server/models/job_validation/validate_time_range.test.ts b/x-pack/plugins/ml/server/models/job_validation/validate_time_range.test.ts index 12458af0521a9..ddf73166e1858 100644 --- a/x-pack/plugins/ml/server/models/job_validation/validate_time_range.test.ts +++ b/x-pack/plugins/ml/server/models/job_validation/validate_time_range.test.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import cloneDeep from 'lodash/cloneDeep'; +import { cloneDeep } from 'lodash'; import { IScopedClusterClient } from 'kibana/server'; diff --git a/x-pack/plugins/ml/server/models/results_service/build_anomaly_table_items.js b/x-pack/plugins/ml/server/models/results_service/build_anomaly_table_items.js index 588e0e10a8d63..65820b5281338 100644 --- a/x-pack/plugins/ml/server/models/results_service/build_anomaly_table_items.js +++ b/x-pack/plugins/ml/server/models/results_service/build_anomaly_table_items.js @@ -4,8 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import sortBy from 'lodash/sortBy'; -import each from 'lodash/each'; +import { sortBy, each } from 'lodash'; import moment from 'moment-timezone'; import { diff --git a/x-pack/plugins/ml/server/models/results_service/results_service.ts b/x-pack/plugins/ml/server/models/results_service/results_service.ts index 190b5d99309d7..abb42a5a18689 100644 --- a/x-pack/plugins/ml/server/models/results_service/results_service.ts +++ b/x-pack/plugins/ml/server/models/results_service/results_service.ts @@ -4,9 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import sortBy from 'lodash/sortBy'; -import slice from 'lodash/slice'; -import get from 'lodash/get'; +import { sortBy, slice, get } from 'lodash'; import moment from 'moment'; import { SearchResponse } from 'elasticsearch'; import { IScopedClusterClient } from 'kibana/server'; @@ -144,9 +142,8 @@ export function resultsServiceProvider(client: IScopedClusterClient) { }); } - const { body } = await asInternalUser.search>({ + const { body } = await asInternalUser.search({ index: ML_RESULTS_INDEX_PATTERN, - rest_total_hits_as_int: true, size: maxRecords, body: { query: { @@ -178,9 +175,9 @@ export function resultsServiceProvider(client: IScopedClusterClient) { anomalies: [], interval: 'second', }; - if (body.hits.total !== 0) { + if (body.hits.total.value > 0) { let records: AnomalyRecordDoc[] = []; - body.hits.hits.forEach((hit) => { + body.hits.hits.forEach((hit: any) => { records.push(hit._source); }); @@ -382,7 +379,6 @@ export function resultsServiceProvider(client: IScopedClusterClient) { async function getCategoryExamples(jobId: string, categoryIds: any, maxExamples: number) { const { body } = await asInternalUser.search({ index: ML_RESULTS_INDEX_PATTERN, - rest_total_hits_as_int: true, size: ANOMALIES_TABLE_DEFAULT_QUERY_SIZE, // Matches size of records in anomaly summary table. body: { query: { @@ -394,7 +390,7 @@ export function resultsServiceProvider(client: IScopedClusterClient) { }); const examplesByCategoryId: { [key: string]: any } = {}; - if (body.hits.total !== 0) { + if (body.hits.total.value > 0) { body.hits.hits.forEach((hit: any) => { if (maxExamples) { examplesByCategoryId[hit._source.category_id] = slice( @@ -417,7 +413,6 @@ export function resultsServiceProvider(client: IScopedClusterClient) { async function getCategoryDefinition(jobId: string, categoryId: string) { const { body } = await asInternalUser.search({ index: ML_RESULTS_INDEX_PATTERN, - rest_total_hits_as_int: true, size: 1, body: { query: { @@ -429,7 +424,7 @@ export function resultsServiceProvider(client: IScopedClusterClient) { }); const definition = { categoryId, terms: null, regex: null, examples: [] }; - if (body.hits.total !== 0) { + if (body.hits.total.value > 0) { const source = body.hits.hits[0]._source; definition.categoryId = source.category_id; definition.regex = source.regex; diff --git a/x-pack/plugins/ml/server/shared.ts b/x-pack/plugins/ml/server/shared.ts index 100433b23f7d1..68ee489a3b5ce 100644 --- a/x-pack/plugins/ml/server/shared.ts +++ b/x-pack/plugins/ml/server/shared.ts @@ -7,5 +7,5 @@ export * from '../common/types/anomalies'; export * from '../common/types/anomaly_detection_jobs'; export * from './lib/capabilities/errors'; -export { ModuleSetupPayload } from './shared_services/providers/modules'; +export type { ModuleSetupPayload } from './shared_services/providers/modules'; export { getHistogramsForFields } from './models/data_visualizer/'; diff --git a/x-pack/plugins/monitoring/common/constants.ts b/x-pack/plugins/monitoring/common/constants.ts index 8be0eb0b06823..6eb0d6e93d58a 100644 --- a/x-pack/plugins/monitoring/common/constants.ts +++ b/x-pack/plugins/monitoring/common/constants.ts @@ -231,6 +231,7 @@ export const ALERT_PREFIX = 'monitoring_'; export const ALERT_LICENSE_EXPIRATION = `${ALERT_PREFIX}alert_license_expiration`; export const ALERT_CLUSTER_HEALTH = `${ALERT_PREFIX}alert_cluster_health`; export const ALERT_CPU_USAGE = `${ALERT_PREFIX}alert_cpu_usage`; +export const ALERT_DISK_USAGE = `${ALERT_PREFIX}alert_disk_usage`; export const ALERT_NODES_CHANGED = `${ALERT_PREFIX}alert_nodes_changed`; export const ALERT_ELASTICSEARCH_VERSION_MISMATCH = `${ALERT_PREFIX}alert_elasticsearch_version_mismatch`; export const ALERT_KIBANA_VERSION_MISMATCH = `${ALERT_PREFIX}alert_kibana_version_mismatch`; @@ -243,6 +244,7 @@ export const ALERTS = [ ALERT_LICENSE_EXPIRATION, ALERT_CLUSTER_HEALTH, ALERT_CPU_USAGE, + ALERT_DISK_USAGE, ALERT_NODES_CHANGED, ALERT_ELASTICSEARCH_VERSION_MISMATCH, ALERT_KIBANA_VERSION_MISMATCH, diff --git a/x-pack/plugins/monitoring/common/types.ts b/x-pack/plugins/monitoring/common/types.ts index f5dc85dce32e1..4216a046fef9f 100644 --- a/x-pack/plugins/monitoring/common/types.ts +++ b/x-pack/plugins/monitoring/common/types.ts @@ -27,8 +27,9 @@ export interface CommonAlertState { meta: any; } -// eslint-disable-next-line @typescript-eslint/no-empty-interface -export interface CommonAlertFilter {} +export interface CommonAlertFilter { + nodeUuid?: string; +} export interface CommonAlertCpuUsageFilter extends CommonAlertFilter { nodeUuid: string; diff --git a/x-pack/plugins/monitoring/public/alerts/cpu_usage_alert/expression.tsx b/x-pack/plugins/monitoring/public/alerts/components/duration/expression.tsx similarity index 85% rename from x-pack/plugins/monitoring/public/alerts/cpu_usage_alert/expression.tsx rename to x-pack/plugins/monitoring/public/alerts/components/duration/expression.tsx index 7dc6155de529e..2df7169efc675 100644 --- a/x-pack/plugins/monitoring/public/alerts/cpu_usage_alert/expression.tsx +++ b/x-pack/plugins/monitoring/public/alerts/components/duration/expression.tsx @@ -6,10 +6,10 @@ import React, { Fragment } from 'react'; import { EuiForm, EuiSpacer } from '@elastic/eui'; -import { CommonAlertParamDetails } from '../../../common/types'; -import { AlertParamDuration } from '../flyout_expressions/alert_param_duration'; -import { AlertParamType } from '../../../common/enums'; -import { AlertParamPercentage } from '../flyout_expressions/alert_param_percentage'; +import { CommonAlertParamDetails } from '../../../../common/types'; +import { AlertParamDuration } from '../../flyout_expressions/alert_param_duration'; +import { AlertParamType } from '../../../../common/enums'; +import { AlertParamPercentage } from '../../flyout_expressions/alert_param_percentage'; export interface Props { alertParams: { [property: string]: any }; diff --git a/x-pack/plugins/monitoring/public/alerts/cpu_usage_alert/validation.tsx b/x-pack/plugins/monitoring/public/alerts/components/duration/validation.tsx similarity index 62% rename from x-pack/plugins/monitoring/public/alerts/cpu_usage_alert/validation.tsx rename to x-pack/plugins/monitoring/public/alerts/components/duration/validation.tsx index 577ec12e634ed..892ee0926ca38 100644 --- a/x-pack/plugins/monitoring/public/alerts/cpu_usage_alert/validation.tsx +++ b/x-pack/plugins/monitoring/public/alerts/components/duration/validation.tsx @@ -6,25 +6,30 @@ import { i18n } from '@kbn/i18n'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ValidationResult } from '../../../../triggers_actions_ui/public/types'; +import { ValidationResult } from '../../../../../triggers_actions_ui/public/types'; -export function validate(opts: any): ValidationResult { +interface ValidateOptions { + duration: string; + threshold: number; +} + +export function validate(inputValues: ValidateOptions): ValidationResult { const validationResult = { errors: {} }; const errors: { [key: string]: string[] } = { duration: [], threshold: [], }; - if (!opts.duration) { + if (!inputValues.duration) { errors.duration.push( - i18n.translate('xpack.monitoring.alerts.cpuUsage.validation.duration', { + i18n.translate('xpack.monitoring.alerts.validation.duration', { defaultMessage: 'A valid duration is required.', }) ); } - if (isNaN(opts.threshold)) { + if (isNaN(inputValues.threshold)) { errors.threshold.push( - i18n.translate('xpack.monitoring.alerts.cpuUsage.validation.threshold', { + i18n.translate('xpack.monitoring.alerts.validation.threshold', { defaultMessage: 'A valid number is required.', }) ); diff --git a/x-pack/plugins/monitoring/public/alerts/cpu_usage_alert/cpu_usage_alert.tsx b/x-pack/plugins/monitoring/public/alerts/cpu_usage_alert/cpu_usage_alert.tsx index c9f82eb521433..fb4ecacf57fd6 100644 --- a/x-pack/plugins/monitoring/public/alerts/cpu_usage_alert/cpu_usage_alert.tsx +++ b/x-pack/plugins/monitoring/public/alerts/cpu_usage_alert/cpu_usage_alert.tsx @@ -6,9 +6,9 @@ import React from 'react'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { AlertTypeModel } from '../../../../triggers_actions_ui/public/types'; -import { validate } from './validation'; import { ALERT_CPU_USAGE } from '../../../common/constants'; -import { Expression } from './expression'; +import { validate } from '../components/duration/validation'; +import { Expression, Props } from '../components/duration/expression'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { CpuUsageAlert } from '../../../server/alerts'; @@ -18,7 +18,7 @@ export function createCpuUsageAlertType(): AlertTypeModel { id: ALERT_CPU_USAGE, name: alert.label, iconClass: 'bell', - alertParamsExpression: (props: any) => ( + alertParamsExpression: (props: Props) => ( ), validate, diff --git a/x-pack/plugins/monitoring/public/alerts/disk_usage_alert/index.tsx b/x-pack/plugins/monitoring/public/alerts/disk_usage_alert/index.tsx new file mode 100644 index 0000000000000..c2abb35612b38 --- /dev/null +++ b/x-pack/plugins/monitoring/public/alerts/disk_usage_alert/index.tsx @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React from 'react'; +import { validate } from '../components/duration/validation'; +import { Expression, Props } from '../components/duration/expression'; + +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { AlertTypeModel } from '../../../../triggers_actions_ui/public/types'; + +// eslint-disable-next-line @kbn/eslint/no-restricted-paths +import { DiskUsageAlert } from '../../../server/alerts'; + +export function createDiskUsageAlertType(): AlertTypeModel { + return { + id: DiskUsageAlert.TYPE, + name: DiskUsageAlert.LABEL, + iconClass: 'bell', + alertParamsExpression: (props: Props) => ( + + ), + validate, + defaultActionMessage: '{{context.internalFullMessage}}', + requiresAppContext: true, + }; +} diff --git a/x-pack/plugins/monitoring/public/alerts/lib/replace_tokens.tsx b/x-pack/plugins/monitoring/public/alerts/lib/replace_tokens.tsx index 29e0822ad684d..02f5703f66382 100644 --- a/x-pack/plugins/monitoring/public/alerts/lib/replace_tokens.tsx +++ b/x-pack/plugins/monitoring/public/alerts/lib/replace_tokens.tsx @@ -17,6 +17,7 @@ import { formatTimestampToDuration } from '../../../common'; import { CALCULATE_DURATION_UNTIL } from '../../../common/constants'; import { AlertMessageTokenType } from '../../../common/enums'; import { Legacy } from '../../legacy_shims'; +import { getSafeForExternalLink } from '../../lib/get_safe_for_external_link'; export function replaceTokens(alertMessage: AlertMessage): JSX.Element | string | null { if (!alertMessage) { @@ -58,10 +59,11 @@ export function replaceTokens(alertMessage: AlertMessage): JSX.Element | string const index = text.indexOf(linkPart[0]); const preString = text.substring(0, index); const postString = text.substring(index + linkPart[0].length); + const safeLink = getSafeForExternalLink(`#/${linkToken.url}`); element = ( {preString} - {linkPart[1]} + {linkPart[1]} {postString} ); @@ -83,7 +85,9 @@ export function replaceTokens(alertMessage: AlertMessage): JSX.Element | string element = ( {preString} - {linkPart[1]} + + {linkPart[1]} + {postString} ); diff --git a/x-pack/plugins/monitoring/public/components/cluster/overview/elasticsearch_panel.js b/x-pack/plugins/monitoring/public/components/cluster/overview/elasticsearch_panel.js index 91752be83eb4f..61a24f31ca89a 100644 --- a/x-pack/plugins/monitoring/public/components/cluster/overview/elasticsearch_panel.js +++ b/x-pack/plugins/monitoring/public/components/cluster/overview/elasticsearch_panel.js @@ -40,6 +40,7 @@ import { ALERT_LICENSE_EXPIRATION, ALERT_CLUSTER_HEALTH, ALERT_CPU_USAGE, + ALERT_DISK_USAGE, ALERT_NODES_CHANGED, ALERT_ELASTICSEARCH_VERSION_MISMATCH, } from '../../../../common/constants'; @@ -157,6 +158,7 @@ const OVERVIEW_PANEL_ALERTS = [ALERT_CLUSTER_HEALTH, ALERT_LICENSE_EXPIRATION]; const NODES_PANEL_ALERTS = [ ALERT_CPU_USAGE, + ALERT_DISK_USAGE, ALERT_NODES_CHANGED, ALERT_ELASTICSEARCH_VERSION_MISMATCH, ]; diff --git a/x-pack/plugins/monitoring/public/plugin.ts b/x-pack/plugins/monitoring/public/plugin.ts index 087e7acc4c703..a9c26ca7103a2 100644 --- a/x-pack/plugins/monitoring/public/plugin.ts +++ b/x-pack/plugins/monitoring/public/plugin.ts @@ -24,6 +24,7 @@ import { MonitoringStartPluginDependencies, MonitoringConfig } from './types'; import { TriggersAndActionsUIPublicPluginSetup } from '../../triggers_actions_ui/public'; import { createCpuUsageAlertType } from './alerts/cpu_usage_alert'; import { createLegacyAlertTypes } from './alerts/legacy_alert'; +import { createDiskUsageAlertType } from './alerts/disk_usage_alert'; interface MonitoringSetupPluginDependencies { home?: HomePublicPluginSetup; @@ -71,6 +72,7 @@ export class MonitoringPlugin } plugins.triggers_actions_ui.alertTypeRegistry.register(createCpuUsageAlertType()); + plugins.triggers_actions_ui.alertTypeRegistry.register(createDiskUsageAlertType()); const legacyAlertTypes = createLegacyAlertTypes(); for (const legacyAlertType of legacyAlertTypes) { plugins.triggers_actions_ui.alertTypeRegistry.register(legacyAlertType); diff --git a/x-pack/plugins/monitoring/public/views/elasticsearch/node/advanced/index.js b/x-pack/plugins/monitoring/public/views/elasticsearch/node/advanced/index.js index 5c4b4d28b93cb..8c30e4a2c1b07 100644 --- a/x-pack/plugins/monitoring/public/views/elasticsearch/node/advanced/index.js +++ b/x-pack/plugins/monitoring/public/views/elasticsearch/node/advanced/index.js @@ -17,7 +17,11 @@ import template from './index.html'; import { Legacy } from '../../../../legacy_shims'; import { AdvancedNode } from '../../../../components/elasticsearch/node/advanced'; import { MonitoringViewBaseController } from '../../../base_controller'; -import { CODE_PATH_ELASTICSEARCH, ALERT_CPU_USAGE } from '../../../../../common/constants'; +import { + CODE_PATH_ELASTICSEARCH, + ALERT_CPU_USAGE, + ALERT_DISK_USAGE, +} from '../../../../../common/constants'; function getPageData($injector) { const $http = $injector.get('$http'); @@ -67,7 +71,7 @@ uiRoutes.when('/elasticsearch/nodes/:node/advanced', { alerts: { shouldFetch: true, options: { - alertTypeIds: [ALERT_CPU_USAGE], + alertTypeIds: [ALERT_CPU_USAGE, ALERT_DISK_USAGE], filters: [ { nodeUuid: nodeName, diff --git a/x-pack/plugins/monitoring/public/views/elasticsearch/node/index.js b/x-pack/plugins/monitoring/public/views/elasticsearch/node/index.js index b4b3c7ca55303..ed2603e6dfff3 100644 --- a/x-pack/plugins/monitoring/public/views/elasticsearch/node/index.js +++ b/x-pack/plugins/monitoring/public/views/elasticsearch/node/index.js @@ -18,7 +18,11 @@ import { Node } from '../../../components/elasticsearch/node/node'; import { labels } from '../../../components/elasticsearch/shard_allocation/lib/labels'; import { nodesByIndices } from '../../../components/elasticsearch/shard_allocation/transformers/nodes_by_indices'; import { MonitoringViewBaseController } from '../../base_controller'; -import { CODE_PATH_ELASTICSEARCH, ALERT_CPU_USAGE } from '../../../../common/constants'; +import { + CODE_PATH_ELASTICSEARCH, + ALERT_CPU_USAGE, + ALERT_DISK_USAGE, +} from '../../../../common/constants'; uiRoutes.when('/elasticsearch/nodes/:node', { template, @@ -51,7 +55,7 @@ uiRoutes.when('/elasticsearch/nodes/:node', { alerts: { shouldFetch: true, options: { - alertTypeIds: [ALERT_CPU_USAGE], + alertTypeIds: [ALERT_CPU_USAGE, ALERT_DISK_USAGE], filters: [ { nodeUuid: nodeName, diff --git a/x-pack/plugins/monitoring/public/views/elasticsearch/nodes/index.js b/x-pack/plugins/monitoring/public/views/elasticsearch/nodes/index.js index 33584f802a56e..66fcac43e4fc5 100644 --- a/x-pack/plugins/monitoring/public/views/elasticsearch/nodes/index.js +++ b/x-pack/plugins/monitoring/public/views/elasticsearch/nodes/index.js @@ -19,6 +19,7 @@ import { ELASTICSEARCH_SYSTEM_ID, CODE_PATH_ELASTICSEARCH, ALERT_CPU_USAGE, + ALERT_DISK_USAGE, } from '../../../../common/constants'; uiRoutes.when('/elasticsearch/nodes', { @@ -86,7 +87,7 @@ uiRoutes.when('/elasticsearch/nodes', { alerts: { shouldFetch: true, options: { - alertTypeIds: [ALERT_CPU_USAGE], + alertTypeIds: [ALERT_CPU_USAGE, ALERT_DISK_USAGE], }, }, }); diff --git a/x-pack/plugins/monitoring/server/alerts/alerts_common.ts b/x-pack/plugins/monitoring/server/alerts/alerts_common.ts new file mode 100644 index 0000000000000..41c8bba17df0a --- /dev/null +++ b/x-pack/plugins/monitoring/server/alerts/alerts_common.ts @@ -0,0 +1,82 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { i18n } from '@kbn/i18n'; +import { AlertMessageDocLinkToken } from './types'; +import { AlertMessageTokenType } from '../../common/enums'; + +export class AlertingDefaults { + public static readonly ALERT_STATE = { + resolved: i18n.translate('xpack.monitoring.alerts.state.resolved', { + defaultMessage: 'resolved', + }), + firing: i18n.translate('xpack.monitoring.alerts.state.firing', { + defaultMessage: 'firing', + }), + }; + public static readonly ALERT_TYPE = { + context: { + internalShortMessage: { + name: 'internalShortMessage', + description: i18n.translate( + 'xpack.monitoring.alerts.actionVariables.internalShortMessage', + { + defaultMessage: 'The short internal message generated by Elastic.', + } + ), + }, + internalFullMessage: { + name: 'internalFullMessage', + description: i18n.translate('xpack.monitoring.alerts.actionVariables.internalFullMessage', { + defaultMessage: 'The full internal message generated by Elastic.', + }), + }, + state: { + name: 'state', + description: i18n.translate('xpack.monitoring.alerts.actionVariables.state', { + defaultMessage: 'The current state of the alert.', + }), + }, + clusterName: { + name: 'clusterName', + description: i18n.translate('xpack.monitoring.alerts.actionVariables.clusterName', { + defaultMessage: 'The cluster to which the nodes belong.', + }), + }, + action: { + name: 'action', + description: i18n.translate('xpack.monitoring.alerts.actionVariables.action', { + defaultMessage: 'The recommended action for this alert.', + }), + }, + actionPlain: { + name: 'actionPlain', + description: i18n.translate('xpack.monitoring.alerts.actionVariables.actionPlain', { + defaultMessage: 'The recommended action for this alert, without any markdown.', + }), + }, + }, + }; +} + +export const createLink = ( + linkText: string, + linkURL: string, + type: AlertMessageTokenType = AlertMessageTokenType.DocLink +) => { + const link = type === AlertMessageTokenType.DocLink ? { partialUrl: linkURL } : { url: linkURL }; + return { + text: linkText, + tokens: [ + { + ...link, + startToken: '#start_link', + endToken: '#end_link', + type, + } as AlertMessageDocLinkToken, + ], + }; +}; diff --git a/x-pack/plugins/monitoring/server/alerts/alerts_factory.test.ts b/x-pack/plugins/monitoring/server/alerts/alerts_factory.test.ts index d8fa703c7f785..60693eb42a30e 100644 --- a/x-pack/plugins/monitoring/server/alerts/alerts_factory.test.ts +++ b/x-pack/plugins/monitoring/server/alerts/alerts_factory.test.ts @@ -63,6 +63,6 @@ describe('AlertsFactory', () => { it('should get all', () => { const alerts = AlertsFactory.getAll(); - expect(alerts.length).toBe(7); + expect(alerts.length).toBe(8); }); }); diff --git a/x-pack/plugins/monitoring/server/alerts/alerts_factory.ts b/x-pack/plugins/monitoring/server/alerts/alerts_factory.ts index b91eab05cf912..6b1c0d5fffe18 100644 --- a/x-pack/plugins/monitoring/server/alerts/alerts_factory.ts +++ b/x-pack/plugins/monitoring/server/alerts/alerts_factory.ts @@ -6,6 +6,7 @@ import { CpuUsageAlert, + DiskUsageAlert, NodesChangedAlert, ClusterHealthAlert, LicenseExpirationAlert, @@ -18,6 +19,7 @@ import { ALERT_CLUSTER_HEALTH, ALERT_LICENSE_EXPIRATION, ALERT_CPU_USAGE, + ALERT_DISK_USAGE, ALERT_NODES_CHANGED, ALERT_LOGSTASH_VERSION_MISMATCH, ALERT_KIBANA_VERSION_MISMATCH, @@ -29,6 +31,7 @@ export const BY_TYPE = { [ALERT_CLUSTER_HEALTH]: ClusterHealthAlert, [ALERT_LICENSE_EXPIRATION]: LicenseExpirationAlert, [ALERT_CPU_USAGE]: CpuUsageAlert, + [ALERT_DISK_USAGE]: DiskUsageAlert, [ALERT_NODES_CHANGED]: NodesChangedAlert, [ALERT_LOGSTASH_VERSION_MISMATCH]: LogstashVersionMismatchAlert, [ALERT_KIBANA_VERSION_MISMATCH]: KibanaVersionMismatchAlert, diff --git a/x-pack/plugins/monitoring/server/alerts/base_alert.ts b/x-pack/plugins/monitoring/server/alerts/base_alert.ts index f583b4882f83c..aff84710d27ad 100644 --- a/x-pack/plugins/monitoring/server/alerts/base_alert.ts +++ b/x-pack/plugins/monitoring/server/alerts/base_alert.ts @@ -238,7 +238,7 @@ export class BaseAlert { ); const data = await this.fetchData(params, callCluster, clusters, uiSettings, availableCcs); - this.processData(data, clusters, services, logger); + return await this.processData(data, clusters, services, logger, state); } protected async fetchData( @@ -252,12 +252,13 @@ export class BaseAlert { throw new Error('Child classes must implement `fetchData`'); } - protected processData( + protected async processData( data: AlertData[], clusters: AlertCluster[], services: AlertServices, - logger: Logger - ) { + logger: Logger, + instanceState: unknown + ): Promise> { for (const item of data) { const cluster = clusters.find((c: AlertCluster) => c.clusterUuid === item.clusterUuid); if (!cluster) { diff --git a/x-pack/plugins/monitoring/server/alerts/cluster_health_alert.test.ts b/x-pack/plugins/monitoring/server/alerts/cluster_health_alert.test.ts index 66085b53516a2..22b6c6607016f 100644 --- a/x-pack/plugins/monitoring/server/alerts/cluster_health_alert.test.ts +++ b/x-pack/plugins/monitoring/server/alerts/cluster_health_alert.test.ts @@ -25,6 +25,7 @@ describe('ClusterHealthAlert', () => { expect(alert.defaultThrottle).toBe('1d'); // @ts-ignore expect(alert.actionVariables).toStrictEqual([ + { name: 'clusterHealth', description: 'The health of the cluster.' }, { name: 'internalShortMessage', description: 'The short internal message generated by Elastic.', @@ -34,7 +35,6 @@ describe('ClusterHealthAlert', () => { description: 'The full internal message generated by Elastic.', }, { name: 'state', description: 'The current state of the alert.' }, - { name: 'clusterHealth', description: 'The health of the cluster.' }, { name: 'clusterName', description: 'The cluster to which the nodes belong.' }, { name: 'action', description: 'The recommended action for this alert.' }, { @@ -129,7 +129,7 @@ describe('ClusterHealthAlert', () => { alertStates: [ { cluster: { clusterUuid: 'abc123', clusterName: 'testCluster' }, - ccs: null, + ccs: undefined, ui: { isFiring: true, message: { @@ -157,11 +157,10 @@ describe('ClusterHealthAlert', () => { ], }); expect(scheduleActions).toHaveBeenCalledWith('default', { - action: - '[Allocate missing replica shards.](http://localhost:5601/app/monitoring#elasticsearch/indices?_g=(cluster_uuid:abc123))', + action: '[Allocate missing replica shards.](elasticsearch/indices)', actionPlain: 'Allocate missing replica shards.', internalFullMessage: - 'Cluster health alert is firing for testCluster. Current health is yellow. [Allocate missing replica shards.](http://localhost:5601/app/monitoring#elasticsearch/indices?_g=(cluster_uuid:abc123))', + 'Cluster health alert is firing for testCluster. Current health is yellow. [Allocate missing replica shards.](elasticsearch/indices)', internalShortMessage: 'Cluster health alert is firing for testCluster. Current health is yellow. Allocate missing replica shards.', clusterName, @@ -210,7 +209,7 @@ describe('ClusterHealthAlert', () => { clusterUuid, clusterName, }, - ccs: null, + ccs: undefined, ui: { isFiring: true, message: null, @@ -242,7 +241,7 @@ describe('ClusterHealthAlert', () => { alertStates: [ { cluster: { clusterUuid, clusterName }, - ccs: null, + ccs: undefined, ui: { isFiring: false, message: { diff --git a/x-pack/plugins/monitoring/server/alerts/cluster_health_alert.ts b/x-pack/plugins/monitoring/server/alerts/cluster_health_alert.ts index bb6c471591417..427dd2f86de00 100644 --- a/x-pack/plugins/monitoring/server/alerts/cluster_health_alert.ts +++ b/x-pack/plugins/monitoring/server/alerts/cluster_health_alert.ts @@ -22,6 +22,7 @@ import { AlertMessageTokenType, AlertClusterHealthType } from '../../common/enum import { fetchLegacyAlerts } from '../lib/alerts/fetch_legacy_alerts'; import { mapLegacySeverity } from '../lib/alerts/map_legacy_severity'; import { CommonAlertParams } from '../../common/types'; +import { AlertingDefaults } from './alerts_common'; const RED_STATUS_MESSAGE = i18n.translate('xpack.monitoring.alerts.clusterHealth.redMessage', { defaultMessage: 'Allocate missing primary and replica shards', @@ -44,30 +45,6 @@ export class ClusterHealthAlert extends BaseAlert { public isLegacy = true; protected actionVariables = [ - { - name: 'internalShortMessage', - description: i18n.translate( - 'xpack.monitoring.alerts.clusterHealth.actionVariables.internalShortMessage', - { - defaultMessage: 'The short internal message generated by Elastic.', - } - ), - }, - { - name: 'internalFullMessage', - description: i18n.translate( - 'xpack.monitoring.alerts.clusterHealth.actionVariables.internalFullMessage', - { - defaultMessage: 'The full internal message generated by Elastic.', - } - ), - }, - { - name: 'state', - description: i18n.translate('xpack.monitoring.alerts.clusterHealth.actionVariables.state', { - defaultMessage: 'The current state of the alert.', - }), - }, { name: 'clusterHealth', description: i18n.translate( @@ -77,30 +54,7 @@ export class ClusterHealthAlert extends BaseAlert { } ), }, - { - name: 'clusterName', - description: i18n.translate( - 'xpack.monitoring.alerts.clusterHealth.actionVariables.clusterName', - { - defaultMessage: 'The cluster to which the nodes belong.', - } - ), - }, - { - name: 'action', - description: i18n.translate('xpack.monitoring.alerts.clusterHealth.actionVariables.action', { - defaultMessage: 'The recommended action for this alert.', - }), - }, - { - name: 'actionPlain', - description: i18n.translate( - 'xpack.monitoring.alerts.clusterHealth.actionVariables.actionPlain', - { - defaultMessage: 'The recommended action for this alert, without any markdown.', - } - ), - }, + ...Object.values(AlertingDefaults.ALERT_TYPE.context), ]; protected async fetchData( @@ -128,7 +82,6 @@ export class ClusterHealthAlert extends BaseAlert { shouldFire: !legacyAlert.resolved_timestamp, severity: mapLegacySeverity(legacyAlert.metadata.severity), meta: legacyAlert, - ccs: null, }); return accum; }, []); @@ -214,9 +167,7 @@ export class ClusterHealthAlert extends BaseAlert { }, } ), - state: i18n.translate('xpack.monitoring.alerts.clusterHealth.resolved', { - defaultMessage: `resolved`, - }), + state: AlertingDefaults.ALERT_STATE.resolved, clusterHealth: health, clusterName: cluster.clusterName, }); @@ -229,14 +180,8 @@ export class ClusterHealthAlert extends BaseAlert { : i18n.translate('xpack.monitoring.alerts.clusterHealth.action.warning', { defaultMessage: `Allocate missing replica shards.`, }); - const globalState = [`cluster_uuid:${cluster.clusterUuid}`]; - if (alertState.ccs) { - globalState.push(`ccs:${alertState.ccs}`); - } - const url = `${this.kibanaUrl}/app/monitoring#elasticsearch/indices?_g=(${globalState.join( - ',' - )})`; - const action = `[${actionText}](${url})`; + + const action = `[${actionText}](elasticsearch/indices)`; instance.scheduleActions('default', { internalShortMessage: i18n.translate( 'xpack.monitoring.alerts.clusterHealth.firing.internalShortMessage', @@ -260,9 +205,7 @@ export class ClusterHealthAlert extends BaseAlert { }, } ), - state: i18n.translate('xpack.monitoring.alerts.clusterHealth.firing', { - defaultMessage: `firing`, - }), + state: AlertingDefaults.ALERT_STATE.firing, clusterHealth: health, clusterName: cluster.clusterName, action, diff --git a/x-pack/plugins/monitoring/server/alerts/cpu_usage_alert.test.ts b/x-pack/plugins/monitoring/server/alerts/cpu_usage_alert.test.ts index 2705a77e0fce4..495fe993cca1b 100644 --- a/x-pack/plugins/monitoring/server/alerts/cpu_usage_alert.test.ts +++ b/x-pack/plugins/monitoring/server/alerts/cpu_usage_alert.test.ts @@ -27,6 +27,8 @@ describe('CpuUsageAlert', () => { expect(alert.defaultParams).toStrictEqual({ threshold: 85, duration: '5m' }); // @ts-ignore expect(alert.actionVariables).toStrictEqual([ + { name: 'nodes', description: 'The list of nodes reporting high cpu usage.' }, + { name: 'count', description: 'The number of nodes reporting high cpu usage.' }, { name: 'internalShortMessage', description: 'The short internal message generated by Elastic.', @@ -36,8 +38,6 @@ describe('CpuUsageAlert', () => { description: 'The full internal message generated by Elastic.', }, { name: 'state', description: 'The current state of the alert.' }, - { name: 'nodes', description: 'The list of nodes reporting high cpu usage.' }, - { name: 'count', description: 'The number of nodes reporting high cpu usage.' }, { name: 'clusterName', description: 'The cluster to which the nodes belong.' }, { name: 'action', description: 'The recommended action for this alert.' }, { @@ -78,6 +78,7 @@ describe('CpuUsageAlert', () => { }; const kibanaUrl = 'http://localhost:5601'; + const hasScheduledActions = jest.fn(); const replaceState = jest.fn(); const scheduleActions = jest.fn(); const getState = jest.fn(); @@ -86,6 +87,7 @@ describe('CpuUsageAlert', () => { callCluster: jest.fn(), alertInstanceFactory: jest.fn().mockImplementation(() => { return { + hasScheduledActions, replaceState, scheduleActions, getState, @@ -133,6 +135,7 @@ describe('CpuUsageAlert', () => { expect(replaceState).toHaveBeenCalledWith({ alertStates: [ { + ccs: undefined, cluster: { clusterUuid, clusterName }, cpuUsage, nodeId, @@ -193,9 +196,9 @@ describe('CpuUsageAlert', () => { ], }); expect(scheduleActions).toHaveBeenCalledWith('default', { - internalFullMessage: `CPU usage alert is firing for ${count} node(s) in cluster: ${clusterName}. [View nodes](http://localhost:5601/app/monitoring#elasticsearch/nodes?_g=(cluster_uuid:${clusterUuid}))`, + internalFullMessage: `CPU usage alert is firing for ${count} node(s) in cluster: ${clusterName}. [View nodes](elasticsearch/nodes)`, internalShortMessage: `CPU usage alert is firing for ${count} node(s) in cluster: ${clusterName}. Verify CPU levels across affected nodes.`, - action: `[View nodes](http://localhost:5601/app/monitoring#elasticsearch/nodes?_g=(cluster_uuid:${clusterUuid}))`, + action: `[View nodes](elasticsearch/nodes)`, actionPlain: 'Verify CPU levels across affected nodes.', clusterName, count, @@ -370,9 +373,9 @@ describe('CpuUsageAlert', () => { } as any); const count = 1; expect(scheduleActions).toHaveBeenCalledWith('default', { - internalFullMessage: `CPU usage alert is firing for ${count} node(s) in cluster: ${clusterName}. [View nodes](http://localhost:5601/app/monitoring#elasticsearch/nodes?_g=(cluster_uuid:${clusterUuid},ccs:${ccs}))`, + internalFullMessage: `CPU usage alert is firing for ${count} node(s) in cluster: ${clusterName}. [View nodes](elasticsearch/nodes)`, internalShortMessage: `CPU usage alert is firing for ${count} node(s) in cluster: ${clusterName}. Verify CPU levels across affected nodes.`, - action: `[View nodes](http://localhost:5601/app/monitoring#elasticsearch/nodes?_g=(cluster_uuid:${clusterUuid},ccs:${ccs}))`, + action: `[View nodes](elasticsearch/nodes)`, actionPlain: 'Verify CPU levels across affected nodes.', clusterName, count, @@ -559,11 +562,10 @@ describe('CpuUsageAlert', () => { expect(scheduleActions.mock.calls[0]).toEqual([ 'default', { - action: - '[View nodes](http://localhost:5601/app/monitoring#elasticsearch/nodes?_g=(cluster_uuid:abc123))', + action: '[View nodes](elasticsearch/nodes)', actionPlain: 'Verify CPU levels across affected nodes.', internalFullMessage: - 'CPU usage alert is firing for 1 node(s) in cluster: testCluster. [View nodes](http://localhost:5601/app/monitoring#elasticsearch/nodes?_g=(cluster_uuid:abc123))', + 'CPU usage alert is firing for 1 node(s) in cluster: testCluster. [View nodes](elasticsearch/nodes)', internalShortMessage: 'CPU usage alert is firing for 1 node(s) in cluster: testCluster. Verify CPU levels across affected nodes.', nodes: 'anotherNode:99.00', @@ -594,7 +596,7 @@ describe('CpuUsageAlert', () => { expect(scheduleActions).toHaveBeenCalledWith('default', { internalFullMessage: `CPU usage alert is firing for ${count} node(s) in cluster: ${clusterName}. Verify CPU levels across affected nodes.`, internalShortMessage: `CPU usage alert is firing for ${count} node(s) in cluster: ${clusterName}. Verify CPU levels across affected nodes.`, - action: `[View nodes](http://localhost:5601/app/monitoring#elasticsearch/nodes?_g=(cluster_uuid:${clusterUuid}))`, + action: `[View nodes](elasticsearch/nodes)`, actionPlain: 'Verify CPU levels across affected nodes.', clusterName, count, diff --git a/x-pack/plugins/monitoring/server/alerts/cpu_usage_alert.ts b/x-pack/plugins/monitoring/server/alerts/cpu_usage_alert.ts index 5bca84e33da3c..4228354f52748 100644 --- a/x-pack/plugins/monitoring/server/alerts/cpu_usage_alert.ts +++ b/x-pack/plugins/monitoring/server/alerts/cpu_usage_alert.ts @@ -3,7 +3,7 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ -import { IUiSettingsClient, Logger } from 'kibana/server'; +import { IUiSettingsClient } from 'kibana/server'; import { i18n } from '@kbn/i18n'; import { BaseAlert } from './base_alert'; import { @@ -16,7 +16,6 @@ import { AlertMessageTimeToken, AlertMessageLinkToken, AlertInstanceState, - AlertMessageDocLinkToken, } from './types'; import { AlertInstance, AlertServices } from '../../../alerts/server'; import { INDEX_PATTERN_ELASTICSEARCH, ALERT_CPU_USAGE } from '../../common/constants'; @@ -31,15 +30,9 @@ import { CommonAlertParams, CommonAlertParamDetail, } from '../../common/types'; +import { AlertingDefaults, createLink } from './alerts_common'; import { appendMetricbeatIndex } from '../lib/alerts/append_mb_index'; -const RESOLVED = i18n.translate('xpack.monitoring.alerts.cpuUsage.resolved', { - defaultMessage: 'resolved', -}); -const FIRING = i18n.translate('xpack.monitoring.alerts.cpuUsage.firing', { - defaultMessage: 'firing', -}); - const DEFAULT_THRESHOLD = 85; const DEFAULT_DURATION = '5m'; @@ -75,30 +68,6 @@ export class CpuUsageAlert extends BaseAlert { }; protected actionVariables = [ - { - name: 'internalShortMessage', - description: i18n.translate( - 'xpack.monitoring.alerts.cpuUsage.actionVariables.internalShortMessage', - { - defaultMessage: 'The short internal message generated by Elastic.', - } - ), - }, - { - name: 'internalFullMessage', - description: i18n.translate( - 'xpack.monitoring.alerts.cpuUsage.actionVariables.internalFullMessage', - { - defaultMessage: 'The full internal message generated by Elastic.', - } - ), - }, - { - name: 'state', - description: i18n.translate('xpack.monitoring.alerts.cpuUsage.actionVariables.state', { - defaultMessage: 'The current state of the alert.', - }), - }, { name: 'nodes', description: i18n.translate('xpack.monitoring.alerts.cpuUsage.actionVariables.nodes', { @@ -111,24 +80,7 @@ export class CpuUsageAlert extends BaseAlert { defaultMessage: 'The number of nodes reporting high cpu usage.', }), }, - { - name: 'clusterName', - description: i18n.translate('xpack.monitoring.alerts.cpuUsage.actionVariables.clusterName', { - defaultMessage: 'The cluster to which the nodes belong.', - }), - }, - { - name: 'action', - description: i18n.translate('xpack.monitoring.alerts.cpuUsage.actionVariables.action', { - defaultMessage: 'The recommended action for this alert.', - }), - }, - { - name: 'actionPlain', - description: i18n.translate('xpack.monitoring.alerts.cpuUsage.actionVariables.actionPlain', { - defaultMessage: 'The recommended action for this alert, without any markdown.', - }), - }, + ...Object.values(AlertingDefaults.ALERT_TYPE.context), ]; protected async fetchData( @@ -237,32 +189,18 @@ export class CpuUsageAlert extends BaseAlert { }, }), nextSteps: [ - { - text: i18n.translate('xpack.monitoring.alerts.cpuUsage.ui.nextSteps.hotThreads', { - defaultMessage: `#start_linkCheck hot threads#end_link`, + createLink( + i18n.translate('xpack.monitoring.alerts.cpuUsage.ui.nextSteps.hotThreads', { + defaultMessage: '#start_linkCheck hot threads#end_link', }), - tokens: [ - { - startToken: '#start_link', - endToken: '#end_link', - type: AlertMessageTokenType.DocLink, - partialUrl: `{elasticWebsiteUrl}/guide/en/elasticsearch/reference/{docLinkVersion}/cluster-nodes-hot-threads.html`, - } as AlertMessageDocLinkToken, - ], - }, - { - text: i18n.translate('xpack.monitoring.alerts.cpuUsage.ui.nextSteps.runningTasks', { - defaultMessage: `#start_linkCheck long running tasks#end_link`, + `{elasticWebsiteUrl}/guide/en/elasticsearch/reference/{docLinkVersion}/cluster-nodes-hot-threads.html` + ), + createLink( + i18n.translate('xpack.monitoring.alerts.cpuUsage.ui.nextSteps.runningTasks', { + defaultMessage: '#start_linkCheck long running tasks#end_link', }), - tokens: [ - { - startToken: '#start_link', - endToken: '#end_link', - type: AlertMessageTokenType.DocLink, - partialUrl: `{elasticWebsiteUrl}/guide/en/elasticsearch/reference/{docLinkVersion}/tasks.html`, - } as AlertMessageDocLinkToken, - ], - }, + `{elasticWebsiteUrl}/guide/en/elasticsearch/reference/{docLinkVersion}/tasks.html` + ), ], tokens: [ { @@ -292,13 +230,6 @@ export class CpuUsageAlert extends BaseAlert { return; } - const ccs = instanceState.alertStates.reduce((accum: string, state): string => { - if (state.ccs) { - return state.ccs; - } - return accum; - }, ''); - const firingCount = instanceState.alertStates.filter((alertState) => alertState.ui.isFiring) .length; const firingNodes = instanceState.alertStates @@ -315,14 +246,7 @@ export class CpuUsageAlert extends BaseAlert { const fullActionText = i18n.translate('xpack.monitoring.alerts.cpuUsage.fullAction', { defaultMessage: 'View nodes', }); - const globalState = [`cluster_uuid:${cluster.clusterUuid}`]; - if (ccs) { - globalState.push(`ccs:${ccs}`); - } - const url = `${this.kibanaUrl}/app/monitoring#elasticsearch/nodes?_g=(${globalState.join( - ',' - )})`; - const action = `[${fullActionText}](${url})`; + const action = `[${fullActionText}](elasticsearch/nodes)`; const internalShortMessage = i18n.translate( 'xpack.monitoring.alerts.cpuUsage.firing.internalShortMessage', { @@ -348,7 +272,7 @@ export class CpuUsageAlert extends BaseAlert { instance.scheduleActions('default', { internalShortMessage, internalFullMessage: this.isCloud ? internalShortMessage : internalFullMessage, - state: FIRING, + state: AlertingDefaults.ALERT_STATE.firing, nodes: firingNodes, count: firingCount, clusterName: cluster.clusterName, @@ -388,7 +312,7 @@ export class CpuUsageAlert extends BaseAlert { }, } ), - state: RESOLVED, + state: AlertingDefaults.ALERT_STATE.resolved, nodes: resolvedNodes, count: resolvedCount, clusterName: cluster.clusterName, @@ -397,18 +321,16 @@ export class CpuUsageAlert extends BaseAlert { } } - protected processData( + protected async processData( data: AlertData[], clusters: AlertCluster[], - services: AlertServices, - logger: Logger + services: AlertServices ) { for (const cluster of clusters) { const nodes = data.filter((_item) => _item.clusterUuid === cluster.clusterUuid); if (nodes.length === 0) { continue; } - const firingNodeUuids = nodes.reduce((list: string[], node) => { const stat = node.meta as AlertCpuUsageNodeStats; if (node.shouldFire) { @@ -437,13 +359,14 @@ export class CpuUsageAlert extends BaseAlert { } else { nodeState = this.getDefaultAlertState(cluster, node) as AlertCpuUsageState; } - nodeState.cpuUsage = stat.cpuUsage; nodeState.nodeId = stat.nodeId; nodeState.nodeName = stat.nodeName; if (node.shouldFire) { - nodeState.ui.triggeredMS = new Date().valueOf(); + if (!nodeState.ui.isFiring) { + nodeState.ui.triggeredMS = new Date().valueOf(); + } nodeState.ui.isFiring = true; nodeState.ui.message = this.getUiMessage(nodeState, node); nodeState.ui.severity = node.severity; @@ -455,7 +378,6 @@ export class CpuUsageAlert extends BaseAlert { nodeState.ui.message = this.getUiMessage(nodeState, node); shouldExecuteActions = true; } - if (indexInState === -1) { alertInstanceState.alertStates.push(nodeState); } else { @@ -466,7 +388,6 @@ export class CpuUsageAlert extends BaseAlert { ]; } } - instance.replaceState(alertInstanceState); if (shouldExecuteActions) { this.executeActions(instance, alertInstanceState, null, cluster); diff --git a/x-pack/plugins/monitoring/server/alerts/disk_usage_alert.test.ts b/x-pack/plugins/monitoring/server/alerts/disk_usage_alert.test.ts new file mode 100644 index 0000000000000..546399f666b6c --- /dev/null +++ b/x-pack/plugins/monitoring/server/alerts/disk_usage_alert.test.ts @@ -0,0 +1,221 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { DiskUsageAlert } from './disk_usage_alert'; +import { ALERT_DISK_USAGE } from '../../common/constants'; +import { fetchDiskUsageNodeStats } from '../lib/alerts/fetch_disk_usage_node_stats'; +import { fetchClusters } from '../lib/alerts/fetch_clusters'; + +type IDiskUsageAlertMock = DiskUsageAlert & { + defaultParams: { + threshold: number; + duration: string; + }; +} & { + actionVariables: Array<{ + name: string; + description: string; + }>; +}; + +const RealDate = Date; + +jest.mock('../lib/alerts/fetch_disk_usage_node_stats', () => ({ + fetchDiskUsageNodeStats: jest.fn(), +})); +jest.mock('../lib/alerts/fetch_clusters', () => ({ + fetchClusters: jest.fn(), +})); + +describe('DiskUsageAlert', () => { + it('should have defaults', () => { + const alert = new DiskUsageAlert() as IDiskUsageAlertMock; + expect(alert.type).toBe(ALERT_DISK_USAGE); + expect(alert.label).toBe('Disk Usage'); + expect(alert.defaultThrottle).toBe('1d'); + expect(alert.defaultParams).toStrictEqual({ threshold: 90, duration: '5m' }); + expect(alert.actionVariables).toStrictEqual([ + { name: 'nodes', description: 'The list of nodes reporting high disk usage.' }, + { name: 'count', description: 'The number of nodes reporting high disk usage.' }, + { + name: 'internalShortMessage', + description: 'The short internal message generated by Elastic.', + }, + { + name: 'internalFullMessage', + description: 'The full internal message generated by Elastic.', + }, + { name: 'state', description: 'The current state of the alert.' }, + { name: 'clusterName', description: 'The cluster to which the nodes belong.' }, + { name: 'action', description: 'The recommended action for this alert.' }, + { + name: 'actionPlain', + description: 'The recommended action for this alert, without any markdown.', + }, + ]); + }); + + describe('execute', () => { + const FakeDate = function () {}; + FakeDate.prototype.valueOf = () => 1; + + const clusterUuid = 'abc123'; + const clusterName = 'testCluster'; + const nodeId = 'myNodeId'; + const nodeName = 'myNodeName'; + const diskUsage = 91; + const stat = { + clusterUuid, + nodeId, + nodeName, + diskUsage, + }; + const getUiSettingsService = () => ({ + asScopedToClient: jest.fn(), + }); + const getLogger = () => ({ + debug: jest.fn(), + }); + const monitoringCluster = null; + const config = { + ui: { + ccs: { enabled: true }, + container: { elasticsearch: { enabled: false } }, + metricbeat: { index: 'metricbeat-*' }, + }, + }; + const kibanaUrl = 'http://localhost:5601'; + + const hasScheduledActions = jest.fn(); + const replaceState = jest.fn(); + const scheduleActions = jest.fn(); + const getState = jest.fn(); + const executorOptions = { + services: { + callCluster: jest.fn(), + alertInstanceFactory: jest.fn().mockImplementation(() => { + return { + hasScheduledActions, + replaceState, + scheduleActions, + getState, + }; + }), + }, + state: {}, + }; + + beforeEach(() => { + Date = FakeDate as DateConstructor; + (fetchDiskUsageNodeStats as jest.Mock).mockImplementation(() => { + return [stat]; + }); + (fetchClusters as jest.Mock).mockImplementation(() => { + return [{ clusterUuid, clusterName }]; + }); + }); + + afterEach(() => { + Date = RealDate; + replaceState.mockReset(); + scheduleActions.mockReset(); + getState.mockReset(); + }); + + it('should fire actions', async () => { + const alert = new DiskUsageAlert() as IDiskUsageAlertMock; + alert.initializeAlertType( + getUiSettingsService as any, + monitoringCluster as any, + getLogger as any, + config as any, + kibanaUrl, + false + ); + const type = alert.getAlertType(); + await type.executor({ + ...executorOptions, + params: alert.defaultParams, + } as any); + const count = 1; + expect(scheduleActions).toHaveBeenCalledWith('default', { + internalFullMessage: `Disk usage alert is firing for ${count} node(s) in cluster: ${clusterName}. [View nodes](elasticsearch/nodes)`, + internalShortMessage: `Disk usage alert is firing for ${count} node(s) in cluster: ${clusterName}. Verify disk usage levels across affected nodes.`, + action: `[View nodes](elasticsearch/nodes)`, + actionPlain: 'Verify disk usage levels across affected nodes.', + clusterName, + count, + nodes: `${nodeName}:${diskUsage.toFixed(2)}`, + state: 'firing', + }); + }); + + it('should handle ccs', async () => { + const ccs = 'testCluster'; + (fetchDiskUsageNodeStats as jest.Mock).mockImplementation(() => { + return [ + { + ...stat, + ccs, + }, + ]; + }); + const alert = new DiskUsageAlert() as IDiskUsageAlertMock; + alert.initializeAlertType( + getUiSettingsService as any, + monitoringCluster as any, + getLogger as any, + config as any, + kibanaUrl, + false + ); + const type = alert.getAlertType(); + await type.executor({ + ...executorOptions, + params: alert.defaultParams, + } as any); + const count = 1; + expect(scheduleActions).toHaveBeenCalledWith('default', { + internalFullMessage: `Disk usage alert is firing for ${count} node(s) in cluster: ${clusterName}. [View nodes](elasticsearch/nodes)`, + internalShortMessage: `Disk usage alert is firing for ${count} node(s) in cluster: ${clusterName}. Verify disk usage levels across affected nodes.`, + action: `[View nodes](elasticsearch/nodes)`, + actionPlain: 'Verify disk usage levels across affected nodes.', + clusterName, + count, + nodes: `${nodeName}:${diskUsage.toFixed(2)}`, + state: 'firing', + }); + }); + + it('should fire with different messaging for cloud', async () => { + const alert = new DiskUsageAlert() as IDiskUsageAlertMock; + alert.initializeAlertType( + getUiSettingsService as any, + monitoringCluster as any, + getLogger as any, + config as any, + kibanaUrl, + true + ); + const type = alert.getAlertType(); + await type.executor({ + ...executorOptions, + params: alert.defaultParams, + } as any); + const count = 1; + expect(scheduleActions).toHaveBeenCalledWith('default', { + internalFullMessage: `Disk usage alert is firing for ${count} node(s) in cluster: ${clusterName}. Verify disk usage levels across affected nodes.`, + internalShortMessage: `Disk usage alert is firing for ${count} node(s) in cluster: ${clusterName}. Verify disk usage levels across affected nodes.`, + action: `[View nodes](elasticsearch/nodes)`, + actionPlain: 'Verify disk usage levels across affected nodes.', + clusterName, + count, + nodes: `${nodeName}:${diskUsage.toFixed(2)}`, + state: 'firing', + }); + }); + }); +}); diff --git a/x-pack/plugins/monitoring/server/alerts/disk_usage_alert.ts b/x-pack/plugins/monitoring/server/alerts/disk_usage_alert.ts new file mode 100644 index 0000000000000..e43dca3ce87b1 --- /dev/null +++ b/x-pack/plugins/monitoring/server/alerts/disk_usage_alert.ts @@ -0,0 +1,343 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { IUiSettingsClient, Logger } from 'kibana/server'; +import { i18n } from '@kbn/i18n'; +import { BaseAlert } from './base_alert'; +import { + AlertData, + AlertCluster, + AlertState, + AlertMessage, + AlertDiskUsageState, + AlertMessageTimeToken, + AlertMessageLinkToken, + AlertInstanceState, +} from './types'; +import { AlertInstance, AlertServices } from '../../../alerts/server'; +import { INDEX_PATTERN_ELASTICSEARCH, ALERT_DISK_USAGE } from '../../common/constants'; +import { fetchDiskUsageNodeStats } from '../lib/alerts/fetch_disk_usage_node_stats'; +import { getCcsIndexPattern } from '../lib/alerts/get_ccs_index_pattern'; +import { AlertMessageTokenType, AlertSeverity, AlertParamType } from '../../common/enums'; +import { RawAlertInstance } from '../../../alerts/common'; +import { CommonAlertFilter, CommonAlertParams, CommonAlertParamDetail } from '../../common/types'; +import { AlertingDefaults, createLink } from './alerts_common'; +import { appendMetricbeatIndex } from '../lib/alerts/append_mb_index'; + +interface ParamDetails { + [key: string]: CommonAlertParamDetail; +} + +export class DiskUsageAlert extends BaseAlert { + public static readonly PARAM_DETAILS: ParamDetails = { + threshold: { + label: i18n.translate('xpack.monitoring.alerts.diskUsage.paramDetails.threshold.label', { + defaultMessage: `Notify when disk capacity is over`, + }), + type: AlertParamType.Percentage, + }, + duration: { + label: i18n.translate('xpack.monitoring.alerts.diskUsage.paramDetails.duration.label', { + defaultMessage: `Look at the average over`, + }), + type: AlertParamType.Duration, + }, + }; + public static paramDetails = DiskUsageAlert.PARAM_DETAILS; + public static readonly TYPE = ALERT_DISK_USAGE; + public static readonly LABEL = i18n.translate('xpack.monitoring.alerts.diskUsage.label', { + defaultMessage: 'Disk Usage', + }); + public type = DiskUsageAlert.TYPE; + public label = DiskUsageAlert.LABEL; + + protected defaultParams = { + threshold: 90, + duration: '5m', + }; + + protected actionVariables = [ + { + name: 'nodes', + description: i18n.translate('xpack.monitoring.alerts.diskUsage.actionVariables.nodes', { + defaultMessage: 'The list of nodes reporting high disk usage.', + }), + }, + { + name: 'count', + description: i18n.translate('xpack.monitoring.alerts.diskUsage.actionVariables.count', { + defaultMessage: 'The number of nodes reporting high disk usage.', + }), + }, + ...Object.values(AlertingDefaults.ALERT_TYPE.context), + ]; + + protected async fetchData( + params: CommonAlertParams, + callCluster: any, + clusters: AlertCluster[], + uiSettings: IUiSettingsClient, + availableCcs: string[] + ): Promise { + let esIndexPattern = appendMetricbeatIndex(this.config, INDEX_PATTERN_ELASTICSEARCH); + if (availableCcs) { + esIndexPattern = getCcsIndexPattern(esIndexPattern, availableCcs); + } + const { duration, threshold } = params; + const stats = await fetchDiskUsageNodeStats( + callCluster, + clusters, + esIndexPattern, + duration as string, + this.config.ui.max_bucket_size + ); + + return stats.map((stat) => { + const { clusterUuid, nodeId, diskUsage, ccs } = stat; + return { + instanceKey: `${clusterUuid}:${nodeId}`, + shouldFire: diskUsage > threshold, + severity: AlertSeverity.Danger, + meta: stat, + clusterUuid, + ccs, + }; + }); + } + + protected filterAlertInstance(alertInstance: RawAlertInstance, filters: CommonAlertFilter[]) { + const alertInstanceStates = alertInstance.state?.alertStates as AlertDiskUsageState[]; + const nodeUuid = filters?.find((filter) => filter.nodeUuid); + + if (!filters || !filters.length || !alertInstanceStates?.length || !nodeUuid) { + return true; + } + + const nodeAlerts = alertInstanceStates.filter(({ nodeId }) => nodeId === nodeUuid); + return Boolean(nodeAlerts.length); + } + + protected getDefaultAlertState(cluster: AlertCluster, item: AlertData): AlertState { + const currentState = super.getDefaultAlertState(cluster, item); + currentState.ui.severity = AlertSeverity.Warning; + return currentState; + } + + protected getUiMessage(alertState: AlertState, item: AlertData): AlertMessage { + const stat = item.meta as AlertDiskUsageState; + if (!alertState.ui.isFiring) { + return { + text: i18n.translate('xpack.monitoring.alerts.diskUsage.ui.resolvedMessage', { + defaultMessage: `The disk usage on node {nodeName} is now under the threshold, currently reporting at {diskUsage}% as of #resolved`, + values: { + nodeName: stat.nodeName, + diskUsage: stat.diskUsage.toFixed(2), + }, + }), + tokens: [ + { + startToken: '#resolved', + type: AlertMessageTokenType.Time, + isAbsolute: true, + isRelative: false, + timestamp: alertState.ui.resolvedMS, + } as AlertMessageTimeToken, + ], + }; + } + return { + text: i18n.translate('xpack.monitoring.alerts.diskUsage.ui.firingMessage', { + defaultMessage: `Node #start_link{nodeName}#end_link is reporting disk usage of {diskUsage}% at #absolute`, + values: { + nodeName: stat.nodeName, + diskUsage: stat.diskUsage, + }, + }), + nextSteps: [ + createLink( + i18n.translate('xpack.monitoring.alerts.diskUsage.ui.nextSteps.tuneDisk', { + defaultMessage: '#start_linkTune for disk usage#end_link', + }), + `{elasticWebsiteUrl}/guide/en/elasticsearch/reference/{docLinkVersion}/tune-for-disk-usage.html` + ), + createLink( + i18n.translate('xpack.monitoring.alerts.diskUsage.ui.nextSteps.identifyIndices', { + defaultMessage: '#start_linkIdentify large indices#end_link', + }), + 'elasticsearch/indices', + AlertMessageTokenType.Link + ), + createLink( + i18n.translate('xpack.monitoring.alerts.diskUsage.ui.nextSteps.ilmPolicies', { + defaultMessage: '#start_linkImplement ILM policies#end_link', + }), + `{elasticWebsiteUrl}/guide/en/elasticsearch/reference/{docLinkVersion}/index-lifecycle-management.html` + ), + createLink( + i18n.translate('xpack.monitoring.alerts.diskUsage.ui.nextSteps.addMoreNodes', { + defaultMessage: '#start_linkAdd more data nodes#end_link', + }), + `{elasticWebsiteUrl}/guide/en/elasticsearch/reference/{docLinkVersion}/add-elasticsearch-nodes.html` + ), + createLink( + i18n.translate('xpack.monitoring.alerts.diskUsage.ui.nextSteps.resizeYourDeployment', { + defaultMessage: '#start_linkResize your deployment (ECE)#end_link', + }), + `{elasticWebsiteUrl}/guide/en/cloud-enterprise/current/ece-resize-deployment.html` + ), + ], + tokens: [ + { + startToken: '#absolute', + type: AlertMessageTokenType.Time, + isAbsolute: true, + isRelative: false, + timestamp: alertState.ui.triggeredMS, + } as AlertMessageTimeToken, + { + startToken: '#start_link', + endToken: '#end_link', + type: AlertMessageTokenType.Link, + url: `elasticsearch/nodes/${stat.nodeId}`, + } as AlertMessageLinkToken, + ], + }; + } + + protected executeActions( + instance: AlertInstance, + { alertStates }: AlertInstanceState, + item: AlertData | null, + cluster: AlertCluster + ) { + const firingNodes = alertStates.filter( + (alertState) => alertState.ui.isFiring + ) as AlertDiskUsageState[]; + const firingCount = firingNodes.length; + + if (firingCount > 0) { + const shortActionText = i18n.translate('xpack.monitoring.alerts.diskUsage.shortAction', { + defaultMessage: 'Verify disk usage levels across affected nodes.', + }); + const fullActionText = i18n.translate('xpack.monitoring.alerts.diskUsage.fullAction', { + defaultMessage: 'View nodes', + }); + + const action = `[${fullActionText}](elasticsearch/nodes)`; + const internalShortMessage = i18n.translate( + 'xpack.monitoring.alerts.diskUsage.firing.internalShortMessage', + { + defaultMessage: `Disk usage alert is firing for {count} node(s) in cluster: {clusterName}. {shortActionText}`, + values: { + count: firingCount, + clusterName: cluster.clusterName, + shortActionText, + }, + } + ); + const internalFullMessage = i18n.translate( + 'xpack.monitoring.alerts.diskUsage.firing.internalFullMessage', + { + defaultMessage: `Disk usage alert is firing for {count} node(s) in cluster: {clusterName}. {action}`, + values: { + count: firingCount, + clusterName: cluster.clusterName, + action, + }, + } + ); + + instance.scheduleActions('default', { + internalShortMessage, + internalFullMessage: this.isCloud ? internalShortMessage : internalFullMessage, + state: AlertingDefaults.ALERT_STATE.firing, + nodes: firingNodes + .map((state) => `${state.nodeName}:${state.diskUsage.toFixed(2)}`) + .join(','), + count: firingCount, + clusterName: cluster.clusterName, + action, + actionPlain: shortActionText, + }); + } else { + const resolvedNodes = (alertStates as AlertDiskUsageState[]) + .filter((state) => !state.ui.isFiring) + .map((state) => `${state.nodeName}:${state.diskUsage.toFixed(2)}`); + const resolvedCount = resolvedNodes.length; + + if (resolvedCount > 0) { + const internalMessage = i18n.translate( + 'xpack.monitoring.alerts.diskUsage.resolved.internalMessage', + { + defaultMessage: `Disk usage alert is resolved for {count} node(s) in cluster: {clusterName}.`, + values: { + count: resolvedCount, + clusterName: cluster.clusterName, + }, + } + ); + + instance.scheduleActions('default', { + internalShortMessage: internalMessage, + internalFullMessage: internalMessage, + state: AlertingDefaults.ALERT_STATE.resolved, + nodes: resolvedNodes.join(','), + count: resolvedCount, + clusterName: cluster.clusterName, + }); + } + } + } + + protected async processData( + data: AlertData[], + clusters: AlertCluster[], + services: AlertServices, + logger: Logger, + state: any + ) { + const currentUTC = +new Date(); + for (const cluster of clusters) { + const nodes = data.filter((node) => node.clusterUuid === cluster.clusterUuid); + if (!nodes.length) { + continue; + } + + const firingNodeUuids = nodes + .filter((node) => node.shouldFire) + .map((node) => node.meta.nodeId) + .join(','); + const instanceId = `${this.type}:${cluster.clusterUuid}:${firingNodeUuids}`; + const instance = services.alertInstanceFactory(instanceId); + const newAlertStates: AlertDiskUsageState[] = []; + + for (const node of nodes) { + const stat = node.meta as AlertDiskUsageState; + const nodeState = this.getDefaultAlertState(cluster, node) as AlertDiskUsageState; + nodeState.diskUsage = stat.diskUsage; + nodeState.nodeId = stat.nodeId; + nodeState.nodeName = stat.nodeName; + + if (node.shouldFire) { + nodeState.ui.triggeredMS = currentUTC; + nodeState.ui.isFiring = true; + nodeState.ui.severity = node.severity; + newAlertStates.push(nodeState); + } + nodeState.ui.message = this.getUiMessage(nodeState, node); + } + + const alertInstanceState = { alertStates: newAlertStates }; + instance.replaceState(alertInstanceState); + if (newAlertStates.length && !instance.hasScheduledActions()) { + this.executeActions(instance, alertInstanceState, null, cluster); + state.lastExecutedAction = currentUTC; + } + } + + state.lastChecked = currentUTC; + return state; + } +} diff --git a/x-pack/plugins/monitoring/server/alerts/elasticsearch_version_mismatch_alert.test.ts b/x-pack/plugins/monitoring/server/alerts/elasticsearch_version_mismatch_alert.test.ts index 1db85f915d794..3422e8a7c78ad 100644 --- a/x-pack/plugins/monitoring/server/alerts/elasticsearch_version_mismatch_alert.test.ts +++ b/x-pack/plugins/monitoring/server/alerts/elasticsearch_version_mismatch_alert.test.ts @@ -25,6 +25,10 @@ describe('ElasticsearchVersionMismatchAlert', () => { expect(alert.defaultThrottle).toBe('1d'); // @ts-ignore expect(alert.actionVariables).toStrictEqual([ + { + name: 'versionList', + description: 'The versions of Elasticsearch running in this cluster.', + }, { name: 'internalShortMessage', description: 'The short internal message generated by Elastic.', @@ -34,10 +38,6 @@ describe('ElasticsearchVersionMismatchAlert', () => { description: 'The full internal message generated by Elastic.', }, { name: 'state', description: 'The current state of the alert.' }, - { - name: 'versionList', - description: 'The versions of Elasticsearch running in this cluster.', - }, { name: 'clusterName', description: 'The cluster to which the nodes belong.' }, { name: 'action', description: 'The recommended action for this alert.' }, { @@ -132,7 +132,7 @@ describe('ElasticsearchVersionMismatchAlert', () => { alertStates: [ { cluster: { clusterUuid: 'abc123', clusterName: 'testCluster' }, - ccs: null, + ccs: undefined, ui: { isFiring: true, message: { @@ -148,11 +148,10 @@ describe('ElasticsearchVersionMismatchAlert', () => { ], }); expect(scheduleActions).toHaveBeenCalledWith('default', { - action: - '[View nodes](http://localhost:5601/app/monitoring#elasticsearch/nodes?_g=(cluster_uuid:abc123))', + action: '[View nodes](elasticsearch/nodes)', actionPlain: 'Verify you have the same version across all nodes.', internalFullMessage: - 'Elasticsearch version mismatch alert is firing for testCluster. Elasticsearch is running [8.0.0, 7.2.1]. [View nodes](http://localhost:5601/app/monitoring#elasticsearch/nodes?_g=(cluster_uuid:abc123))', + 'Elasticsearch version mismatch alert is firing for testCluster. Elasticsearch is running [8.0.0, 7.2.1]. [View nodes](elasticsearch/nodes)', internalShortMessage: 'Elasticsearch version mismatch alert is firing for testCluster. Verify you have the same version across all nodes.', versionList: '[8.0.0, 7.2.1]', @@ -201,7 +200,7 @@ describe('ElasticsearchVersionMismatchAlert', () => { clusterUuid, clusterName, }, - ccs: null, + ccs: undefined, ui: { isFiring: true, message: null, @@ -233,7 +232,7 @@ describe('ElasticsearchVersionMismatchAlert', () => { alertStates: [ { cluster: { clusterUuid, clusterName }, - ccs: null, + ccs: undefined, ui: { isFiring: false, message: { diff --git a/x-pack/plugins/monitoring/server/alerts/elasticsearch_version_mismatch_alert.ts b/x-pack/plugins/monitoring/server/alerts/elasticsearch_version_mismatch_alert.ts index e3b952fbbe5d3..f26b21f0c64c5 100644 --- a/x-pack/plugins/monitoring/server/alerts/elasticsearch_version_mismatch_alert.ts +++ b/x-pack/plugins/monitoring/server/alerts/elasticsearch_version_mismatch_alert.ts @@ -20,14 +20,9 @@ import { getCcsIndexPattern } from '../lib/alerts/get_ccs_index_pattern'; import { AlertSeverity } from '../../common/enums'; import { CommonAlertParams } from '../../common/types'; import { fetchLegacyAlerts } from '../lib/alerts/fetch_legacy_alerts'; +import { AlertingDefaults } from './alerts_common'; const WATCH_NAME = 'elasticsearch_version_mismatch'; -const RESOLVED = i18n.translate('xpack.monitoring.alerts.elasticsearchVersionMismatch.resolved', { - defaultMessage: 'resolved', -}); -const FIRING = i18n.translate('xpack.monitoring.alerts.elasticsearchVersionMismatch.firing', { - defaultMessage: 'firing', -}); export class ElasticsearchVersionMismatchAlert extends BaseAlert { public type = ALERT_ELASTICSEARCH_VERSION_MISMATCH; @@ -37,33 +32,6 @@ export class ElasticsearchVersionMismatchAlert extends BaseAlert { public isLegacy = true; protected actionVariables = [ - { - name: 'internalShortMessage', - description: i18n.translate( - 'xpack.monitoring.alerts.elasticsearchVersionMismatch.actionVariables.internalShortMessage', - { - defaultMessage: 'The short internal message generated by Elastic.', - } - ), - }, - { - name: 'internalFullMessage', - description: i18n.translate( - 'xpack.monitoring.alerts.elasticsearchVersionMismatch.actionVariables.internalFullMessage', - { - defaultMessage: 'The full internal message generated by Elastic.', - } - ), - }, - { - name: 'state', - description: i18n.translate( - 'xpack.monitoring.alerts.elasticsearchVersionMismatch.actionVariables.state', - { - defaultMessage: 'The current state of the alert.', - } - ), - }, { name: 'versionList', description: i18n.translate( @@ -73,33 +41,7 @@ export class ElasticsearchVersionMismatchAlert extends BaseAlert { } ), }, - { - name: 'clusterName', - description: i18n.translate( - 'xpack.monitoring.alerts.elasticsearchVersionMismatch.actionVariables.clusterName', - { - defaultMessage: 'The cluster to which the nodes belong.', - } - ), - }, - { - name: 'action', - description: i18n.translate( - 'xpack.monitoring.alerts.elasticsearchVersionMismatch.actionVariables.action', - { - defaultMessage: 'The recommended action for this alert.', - } - ), - }, - { - name: 'actionPlain', - description: i18n.translate( - 'xpack.monitoring.alerts.elasticsearchVersionMismatch.actionVariables.actionPlain', - { - defaultMessage: 'The recommended action for this alert, without any markdown.', - } - ), - }, + ...Object.values(AlertingDefaults.ALERT_TYPE.context), ]; protected async fetchData( @@ -131,7 +73,6 @@ export class ElasticsearchVersionMismatchAlert extends BaseAlert { shouldFire: !legacyAlert.resolved_timestamp, severity, meta: legacyAlert, - ccs: null, }); return accum; }, []); @@ -206,7 +147,7 @@ export class ElasticsearchVersionMismatchAlert extends BaseAlert { }, } ), - state: RESOLVED, + state: AlertingDefaults.ALERT_STATE.resolved, clusterName: cluster.clusterName, }); } else { @@ -222,14 +163,7 @@ export class ElasticsearchVersionMismatchAlert extends BaseAlert { defaultMessage: 'View nodes', } ); - const globalState = [`cluster_uuid:${cluster.clusterUuid}`]; - if (alertState.ccs) { - globalState.push(`ccs:${alertState.ccs}`); - } - const url = `${this.kibanaUrl}/app/monitoring#elasticsearch/nodes?_g=(${globalState.join( - ',' - )})`; - const action = `[${fullActionText}](${url})`; + const action = `[${fullActionText}](elasticsearch/nodes)`; instance.scheduleActions('default', { internalShortMessage: i18n.translate( 'xpack.monitoring.alerts.elasticsearchVersionMismatch.firing.internalShortMessage', @@ -252,7 +186,7 @@ export class ElasticsearchVersionMismatchAlert extends BaseAlert { }, } ), - state: FIRING, + state: AlertingDefaults.ALERT_STATE.firing, clusterName: cluster.clusterName, versionList: versions, action, diff --git a/x-pack/plugins/monitoring/server/alerts/index.ts b/x-pack/plugins/monitoring/server/alerts/index.ts index 048e703d2222c..8fdac65514477 100644 --- a/x-pack/plugins/monitoring/server/alerts/index.ts +++ b/x-pack/plugins/monitoring/server/alerts/index.ts @@ -6,6 +6,7 @@ export { BaseAlert } from './base_alert'; export { CpuUsageAlert } from './cpu_usage_alert'; +export { DiskUsageAlert } from './disk_usage_alert'; export { ClusterHealthAlert } from './cluster_health_alert'; export { LicenseExpirationAlert } from './license_expiration_alert'; export { NodesChangedAlert } from './nodes_changed_alert'; diff --git a/x-pack/plugins/monitoring/server/alerts/kibana_version_mismatch_alert.test.ts b/x-pack/plugins/monitoring/server/alerts/kibana_version_mismatch_alert.test.ts index 362532a995f2d..1082e9f6311a4 100644 --- a/x-pack/plugins/monitoring/server/alerts/kibana_version_mismatch_alert.test.ts +++ b/x-pack/plugins/monitoring/server/alerts/kibana_version_mismatch_alert.test.ts @@ -25,6 +25,14 @@ describe('KibanaVersionMismatchAlert', () => { expect(alert.defaultThrottle).toBe('1d'); // @ts-ignore expect(alert.actionVariables).toStrictEqual([ + { + name: 'versionList', + description: 'The versions of Kibana running in this cluster.', + }, + { + name: 'clusterName', + description: 'The cluster to which the instances belong.', + }, { name: 'internalShortMessage', description: 'The short internal message generated by Elastic.', @@ -34,14 +42,6 @@ describe('KibanaVersionMismatchAlert', () => { description: 'The full internal message generated by Elastic.', }, { name: 'state', description: 'The current state of the alert.' }, - { - name: 'versionList', - description: 'The versions of Kibana running in this cluster.', - }, - { - name: 'clusterName', - description: 'The cluster to which the instances belong.', - }, { name: 'action', description: 'The recommended action for this alert.' }, { name: 'actionPlain', @@ -135,7 +135,7 @@ describe('KibanaVersionMismatchAlert', () => { alertStates: [ { cluster: { clusterUuid: 'abc123', clusterName: 'testCluster' }, - ccs: null, + ccs: undefined, ui: { isFiring: true, message: { @@ -150,11 +150,10 @@ describe('KibanaVersionMismatchAlert', () => { ], }); expect(scheduleActions).toHaveBeenCalledWith('default', { - action: - '[View instances](http://localhost:5601/app/monitoring#kibana/instances?_g=(cluster_uuid:abc123))', + action: '[View instances](kibana/instances)', actionPlain: 'Verify you have the same version across all instances.', internalFullMessage: - 'Kibana version mismatch alert is firing for testCluster. Kibana is running [8.0.0, 7.2.1]. [View instances](http://localhost:5601/app/monitoring#kibana/instances?_g=(cluster_uuid:abc123))', + 'Kibana version mismatch alert is firing for testCluster. Kibana is running [8.0.0, 7.2.1]. [View instances](kibana/instances)', internalShortMessage: 'Kibana version mismatch alert is firing for testCluster. Verify you have the same version across all instances.', versionList: '[8.0.0, 7.2.1]', @@ -203,7 +202,7 @@ describe('KibanaVersionMismatchAlert', () => { clusterUuid, clusterName, }, - ccs: null, + ccs: undefined, ui: { isFiring: true, message: null, @@ -235,7 +234,7 @@ describe('KibanaVersionMismatchAlert', () => { alertStates: [ { cluster: { clusterUuid, clusterName }, - ccs: null, + ccs: undefined, ui: { isFiring: false, message: { diff --git a/x-pack/plugins/monitoring/server/alerts/kibana_version_mismatch_alert.ts b/x-pack/plugins/monitoring/server/alerts/kibana_version_mismatch_alert.ts index 80e8701933f56..316f305603964 100644 --- a/x-pack/plugins/monitoring/server/alerts/kibana_version_mismatch_alert.ts +++ b/x-pack/plugins/monitoring/server/alerts/kibana_version_mismatch_alert.ts @@ -20,14 +20,9 @@ import { getCcsIndexPattern } from '../lib/alerts/get_ccs_index_pattern'; import { AlertSeverity } from '../../common/enums'; import { CommonAlertParams } from '../../common/types'; import { fetchLegacyAlerts } from '../lib/alerts/fetch_legacy_alerts'; +import { AlertingDefaults } from './alerts_common'; const WATCH_NAME = 'kibana_version_mismatch'; -const RESOLVED = i18n.translate('xpack.monitoring.alerts.kibanaVersionMismatch.resolved', { - defaultMessage: 'resolved', -}); -const FIRING = i18n.translate('xpack.monitoring.alerts.kibanaVersionMismatch.firing', { - defaultMessage: 'firing', -}); export class KibanaVersionMismatchAlert extends BaseAlert { public type = ALERT_KIBANA_VERSION_MISMATCH; @@ -37,33 +32,6 @@ export class KibanaVersionMismatchAlert extends BaseAlert { public isLegacy = true; protected actionVariables = [ - { - name: 'internalShortMessage', - description: i18n.translate( - 'xpack.monitoring.alerts.kibanaVersionMismatch.actionVariables.internalShortMessage', - { - defaultMessage: 'The short internal message generated by Elastic.', - } - ), - }, - { - name: 'internalFullMessage', - description: i18n.translate( - 'xpack.monitoring.alerts.kibanaVersionMismatch.actionVariables.internalFullMessage', - { - defaultMessage: 'The full internal message generated by Elastic.', - } - ), - }, - { - name: 'state', - description: i18n.translate( - 'xpack.monitoring.alerts.kibanaVersionMismatch.actionVariables.state', - { - defaultMessage: 'The current state of the alert.', - } - ), - }, { name: 'versionList', description: i18n.translate( @@ -82,24 +50,11 @@ export class KibanaVersionMismatchAlert extends BaseAlert { } ), }, - { - name: 'action', - description: i18n.translate( - 'xpack.monitoring.alerts.kibanaVersionMismatch.actionVariables.action', - { - defaultMessage: 'The recommended action for this alert.', - } - ), - }, - { - name: 'actionPlain', - description: i18n.translate( - 'xpack.monitoring.alerts.kibanaVersionMismatch.actionVariables.actionPlain', - { - defaultMessage: 'The recommended action for this alert, without any markdown.', - } - ), - }, + AlertingDefaults.ALERT_TYPE.context.internalShortMessage, + AlertingDefaults.ALERT_TYPE.context.internalFullMessage, + AlertingDefaults.ALERT_TYPE.context.state, + AlertingDefaults.ALERT_TYPE.context.action, + AlertingDefaults.ALERT_TYPE.context.actionPlain, ]; protected async fetchData( @@ -129,7 +84,6 @@ export class KibanaVersionMismatchAlert extends BaseAlert { shouldFire: !legacyAlert.resolved_timestamp, severity, meta: legacyAlert, - ccs: null, }); return accum; }, []); @@ -198,7 +152,7 @@ export class KibanaVersionMismatchAlert extends BaseAlert { }, } ), - state: RESOLVED, + state: AlertingDefaults.ALERT_STATE.resolved, clusterName: cluster.clusterName, }); } else { @@ -214,12 +168,7 @@ export class KibanaVersionMismatchAlert extends BaseAlert { defaultMessage: 'View instances', } ); - const globalState = [`cluster_uuid:${cluster.clusterUuid}`]; - if (alertState.ccs) { - globalState.push(`ccs:${alertState.ccs}`); - } - const url = `${this.kibanaUrl}/app/monitoring#kibana/instances?_g=(${globalState.join(',')})`; - const action = `[${fullActionText}](${url})`; + const action = `[${fullActionText}](kibana/instances)`; instance.scheduleActions('default', { internalShortMessage: i18n.translate( 'xpack.monitoring.alerts.kibanaVersionMismatch.firing.internalShortMessage', @@ -242,7 +191,7 @@ export class KibanaVersionMismatchAlert extends BaseAlert { }, } ), - state: FIRING, + state: AlertingDefaults.ALERT_STATE.firing, clusterName: cluster.clusterName, versionList: versions, action, diff --git a/x-pack/plugins/monitoring/server/alerts/license_expiration_alert.test.ts b/x-pack/plugins/monitoring/server/alerts/license_expiration_alert.test.ts index da94e4af83802..74c300d971898 100644 --- a/x-pack/plugins/monitoring/server/alerts/license_expiration_alert.test.ts +++ b/x-pack/plugins/monitoring/server/alerts/license_expiration_alert.test.ts @@ -32,6 +32,8 @@ describe('LicenseExpirationAlert', () => { expect(alert.defaultThrottle).toBe('1d'); // @ts-ignore expect(alert.actionVariables).toStrictEqual([ + { name: 'expiredDate', description: 'The date when the license expires.' }, + { name: 'clusterName', description: 'The cluster to which the license belong.' }, { name: 'internalShortMessage', description: 'The short internal message generated by Elastic.', @@ -41,9 +43,6 @@ describe('LicenseExpirationAlert', () => { description: 'The full internal message generated by Elastic.', }, { name: 'state', description: 'The current state of the alert.' }, - { name: 'expiredDate', description: 'The date when the license expires.' }, - - { name: 'clusterName', description: 'The cluster to which the license belong.' }, { name: 'action', description: 'The recommended action for this alert.' }, { name: 'actionPlain', @@ -139,7 +138,7 @@ describe('LicenseExpirationAlert', () => { alertStates: [ { cluster: { clusterUuid, clusterName }, - ccs: null, + ccs: undefined, ui: { isFiring: true, message: { @@ -177,11 +176,10 @@ describe('LicenseExpirationAlert', () => { ], }); expect(scheduleActions).toHaveBeenCalledWith('default', { - action: - '[Please update your license.](http://localhost:5601/app/monitoring#elasticsearch/nodes?_g=(cluster_uuid:abc123))', + action: '[Please update your license.](elasticsearch/nodes)', actionPlain: 'Please update your license.', internalFullMessage: - 'License expiration alert is firing for testCluster. Your license expires in THE_DATE. [Please update your license.](http://localhost:5601/app/monitoring#elasticsearch/nodes?_g=(cluster_uuid:abc123))', + 'License expiration alert is firing for testCluster. Your license expires in THE_DATE. [Please update your license.](elasticsearch/nodes)', internalShortMessage: 'License expiration alert is firing for testCluster. Your license expires in THE_DATE. Please update your license.', clusterName, @@ -230,7 +228,7 @@ describe('LicenseExpirationAlert', () => { clusterUuid, clusterName, }, - ccs: null, + ccs: undefined, ui: { isFiring: true, message: null, @@ -262,7 +260,7 @@ describe('LicenseExpirationAlert', () => { alertStates: [ { cluster: { clusterUuid, clusterName }, - ccs: null, + ccs: undefined, ui: { isFiring: false, message: { diff --git a/x-pack/plugins/monitoring/server/alerts/license_expiration_alert.ts b/x-pack/plugins/monitoring/server/alerts/license_expiration_alert.ts index 7a249db28d2db..f1412ff0fc91a 100644 --- a/x-pack/plugins/monitoring/server/alerts/license_expiration_alert.ts +++ b/x-pack/plugins/monitoring/server/alerts/license_expiration_alert.ts @@ -28,13 +28,7 @@ import { AlertMessageTokenType } from '../../common/enums'; import { CommonAlertParams } from '../../common/types'; import { fetchLegacyAlerts } from '../lib/alerts/fetch_legacy_alerts'; import { mapLegacySeverity } from '../lib/alerts/map_legacy_severity'; - -const RESOLVED = i18n.translate('xpack.monitoring.alerts.licenseExpiration.resolved', { - defaultMessage: 'resolved', -}); -const FIRING = i18n.translate('xpack.monitoring.alerts.licenseExpiration.firing', { - defaultMessage: 'firing', -}); +import { AlertingDefaults } from './alerts_common'; const WATCH_NAME = 'xpack_license_expiration'; @@ -45,33 +39,6 @@ export class LicenseExpirationAlert extends BaseAlert { }); public isLegacy = true; protected actionVariables = [ - { - name: 'internalShortMessage', - description: i18n.translate( - 'xpack.monitoring.alerts.licenseExpiration.actionVariables.internalShortMessage', - { - defaultMessage: 'The short internal message generated by Elastic.', - } - ), - }, - { - name: 'internalFullMessage', - description: i18n.translate( - 'xpack.monitoring.alerts.licenseExpiration.actionVariables.internalFullMessage', - { - defaultMessage: 'The full internal message generated by Elastic.', - } - ), - }, - { - name: 'state', - description: i18n.translate( - 'xpack.monitoring.alerts.licenseExpiration.actionVariables.state', - { - defaultMessage: 'The current state of the alert.', - } - ), - }, { name: 'expiredDate', description: i18n.translate( @@ -90,24 +57,11 @@ export class LicenseExpirationAlert extends BaseAlert { } ), }, - { - name: 'action', - description: i18n.translate( - 'xpack.monitoring.alerts.licenseExpiration.actionVariables.action', - { - defaultMessage: 'The recommended action for this alert.', - } - ), - }, - { - name: 'actionPlain', - description: i18n.translate( - 'xpack.monitoring.alerts.licenseExpiration.actionVariables.actionPlain', - { - defaultMessage: 'The recommended action for this alert, without any markdown.', - } - ), - }, + AlertingDefaults.ALERT_TYPE.context.internalShortMessage, + AlertingDefaults.ALERT_TYPE.context.internalFullMessage, + AlertingDefaults.ALERT_TYPE.context.state, + AlertingDefaults.ALERT_TYPE.context.action, + AlertingDefaults.ALERT_TYPE.context.actionPlain, ]; protected async fetchData( @@ -135,7 +89,6 @@ export class LicenseExpirationAlert extends BaseAlert { shouldFire: !legacyAlert.resolved_timestamp, severity: mapLegacySeverity(legacyAlert.metadata.severity), meta: legacyAlert, - ccs: null, }); return accum; }, []); @@ -211,7 +164,7 @@ export class LicenseExpirationAlert extends BaseAlert { }, } ), - state: RESOLVED, + state: AlertingDefaults.ALERT_STATE.resolved, expiredDate: $expiry.format(FORMAT_DURATION_TEMPLATE_SHORT).trim(), clusterName: cluster.clusterName, }); @@ -219,14 +172,7 @@ export class LicenseExpirationAlert extends BaseAlert { const actionText = i18n.translate('xpack.monitoring.alerts.licenseExpiration.action', { defaultMessage: 'Please update your license.', }); - const globalState = [`cluster_uuid:${cluster.clusterUuid}`]; - if (alertState.ccs) { - globalState.push(`ccs:${alertState.ccs}`); - } - const url = `${this.kibanaUrl}/app/monitoring#elasticsearch/nodes?_g=(${globalState.join( - ',' - )})`; - const action = `[${actionText}](${url})`; + const action = `[${actionText}](elasticsearch/nodes)`; const expiredDate = $expiry.format(FORMAT_DURATION_TEMPLATE_SHORT).trim(); instance.scheduleActions('default', { internalShortMessage: i18n.translate( @@ -251,7 +197,7 @@ export class LicenseExpirationAlert extends BaseAlert { }, } ), - state: FIRING, + state: AlertingDefaults.ALERT_STATE.firing, expiredDate, clusterName: cluster.clusterName, action, diff --git a/x-pack/plugins/monitoring/server/alerts/logstash_version_mismatch_alert.test.ts b/x-pack/plugins/monitoring/server/alerts/logstash_version_mismatch_alert.test.ts index 5ed189014cc6e..d3729660040d8 100644 --- a/x-pack/plugins/monitoring/server/alerts/logstash_version_mismatch_alert.test.ts +++ b/x-pack/plugins/monitoring/server/alerts/logstash_version_mismatch_alert.test.ts @@ -25,6 +25,10 @@ describe('LogstashVersionMismatchAlert', () => { expect(alert.defaultThrottle).toBe('1d'); // @ts-ignore expect(alert.actionVariables).toStrictEqual([ + { + name: 'versionList', + description: 'The versions of Logstash running in this cluster.', + }, { name: 'internalShortMessage', description: 'The short internal message generated by Elastic.', @@ -34,10 +38,6 @@ describe('LogstashVersionMismatchAlert', () => { description: 'The full internal message generated by Elastic.', }, { name: 'state', description: 'The current state of the alert.' }, - { - name: 'versionList', - description: 'The versions of Logstash running in this cluster.', - }, { name: 'clusterName', description: 'The cluster to which the nodes belong.' }, { name: 'action', description: 'The recommended action for this alert.' }, { @@ -132,7 +132,7 @@ describe('LogstashVersionMismatchAlert', () => { alertStates: [ { cluster: { clusterUuid: 'abc123', clusterName: 'testCluster' }, - ccs: null, + ccs: undefined, ui: { isFiring: true, message: { @@ -147,11 +147,10 @@ describe('LogstashVersionMismatchAlert', () => { ], }); expect(scheduleActions).toHaveBeenCalledWith('default', { - action: - '[View nodes](http://localhost:5601/app/monitoring#logstash/nodes?_g=(cluster_uuid:abc123))', + action: '[View nodes](logstash/nodes)', actionPlain: 'Verify you have the same version across all nodes.', internalFullMessage: - 'Logstash version mismatch alert is firing for testCluster. Logstash is running [8.0.0, 7.2.1]. [View nodes](http://localhost:5601/app/monitoring#logstash/nodes?_g=(cluster_uuid:abc123))', + 'Logstash version mismatch alert is firing for testCluster. Logstash is running [8.0.0, 7.2.1]. [View nodes](logstash/nodes)', internalShortMessage: 'Logstash version mismatch alert is firing for testCluster. Verify you have the same version across all nodes.', versionList: '[8.0.0, 7.2.1]', @@ -200,7 +199,7 @@ describe('LogstashVersionMismatchAlert', () => { clusterUuid, clusterName, }, - ccs: null, + ccs: undefined, ui: { isFiring: true, message: null, @@ -232,7 +231,7 @@ describe('LogstashVersionMismatchAlert', () => { alertStates: [ { cluster: { clusterUuid, clusterName }, - ccs: null, + ccs: undefined, ui: { isFiring: false, message: { diff --git a/x-pack/plugins/monitoring/server/alerts/logstash_version_mismatch_alert.ts b/x-pack/plugins/monitoring/server/alerts/logstash_version_mismatch_alert.ts index f996e54de28ef..37515e32e591a 100644 --- a/x-pack/plugins/monitoring/server/alerts/logstash_version_mismatch_alert.ts +++ b/x-pack/plugins/monitoring/server/alerts/logstash_version_mismatch_alert.ts @@ -20,14 +20,9 @@ import { getCcsIndexPattern } from '../lib/alerts/get_ccs_index_pattern'; import { AlertSeverity } from '../../common/enums'; import { CommonAlertParams } from '../../common/types'; import { fetchLegacyAlerts } from '../lib/alerts/fetch_legacy_alerts'; +import { AlertingDefaults } from './alerts_common'; const WATCH_NAME = 'logstash_version_mismatch'; -const RESOLVED = i18n.translate('xpack.monitoring.alerts.logstashVersionMismatch.resolved', { - defaultMessage: 'resolved', -}); -const FIRING = i18n.translate('xpack.monitoring.alerts.logstashVersionMismatch.firing', { - defaultMessage: 'firing', -}); export class LogstashVersionMismatchAlert extends BaseAlert { public type = ALERT_LOGSTASH_VERSION_MISMATCH; @@ -37,33 +32,6 @@ export class LogstashVersionMismatchAlert extends BaseAlert { public isLegacy = true; protected actionVariables = [ - { - name: 'internalShortMessage', - description: i18n.translate( - 'xpack.monitoring.alerts.logstashVersionMismatch.actionVariables.internalShortMessage', - { - defaultMessage: 'The short internal message generated by Elastic.', - } - ), - }, - { - name: 'internalFullMessage', - description: i18n.translate( - 'xpack.monitoring.alerts.logstashVersionMismatch.actionVariables.internalFullMessage', - { - defaultMessage: 'The full internal message generated by Elastic.', - } - ), - }, - { - name: 'state', - description: i18n.translate( - 'xpack.monitoring.alerts.logstashVersionMismatch.actionVariables.state', - { - defaultMessage: 'The current state of the alert.', - } - ), - }, { name: 'versionList', description: i18n.translate( @@ -73,33 +41,7 @@ export class LogstashVersionMismatchAlert extends BaseAlert { } ), }, - { - name: 'clusterName', - description: i18n.translate( - 'xpack.monitoring.alerts.logstashVersionMismatch.actionVariables.clusterName', - { - defaultMessage: 'The cluster to which the nodes belong.', - } - ), - }, - { - name: 'action', - description: i18n.translate( - 'xpack.monitoring.alerts.logstashVersionMismatch.actionVariables.action', - { - defaultMessage: 'The recommended action for this alert.', - } - ), - }, - { - name: 'actionPlain', - description: i18n.translate( - 'xpack.monitoring.alerts.logstashVersionMismatch.actionVariables.actionPlain', - { - defaultMessage: 'The recommended action for this alert, without any markdown.', - } - ), - }, + ...Object.values(AlertingDefaults.ALERT_TYPE.context), ]; protected async fetchData( @@ -130,7 +72,6 @@ export class LogstashVersionMismatchAlert extends BaseAlert { shouldFire: !legacyAlert.resolved_timestamp, severity, meta: legacyAlert, - ccs: null, }); return accum; }, []); @@ -202,7 +143,7 @@ export class LogstashVersionMismatchAlert extends BaseAlert { }, } ), - state: RESOLVED, + state: AlertingDefaults.ALERT_STATE.resolved, clusterName: cluster.clusterName, }); } else { @@ -218,12 +159,7 @@ export class LogstashVersionMismatchAlert extends BaseAlert { defaultMessage: 'View nodes', } ); - const globalState = [`cluster_uuid:${cluster.clusterUuid}`]; - if (alertState.ccs) { - globalState.push(`ccs:${alertState.ccs}`); - } - const url = `${this.kibanaUrl}/app/monitoring#logstash/nodes?_g=(${globalState.join(',')})`; - const action = `[${fullActionText}](${url})`; + const action = `[${fullActionText}](logstash/nodes)`; instance.scheduleActions('default', { internalShortMessage: i18n.translate( 'xpack.monitoring.alerts.logstashVersionMismatch.firing.internalShortMessage', @@ -246,7 +182,7 @@ export class LogstashVersionMismatchAlert extends BaseAlert { }, } ), - state: FIRING, + state: AlertingDefaults.ALERT_STATE.firing, clusterName: cluster.clusterName, versionList: versions, action, diff --git a/x-pack/plugins/monitoring/server/alerts/nodes_changed_alert.test.ts b/x-pack/plugins/monitoring/server/alerts/nodes_changed_alert.test.ts index ec2b19eb5dfae..63b061649027a 100644 --- a/x-pack/plugins/monitoring/server/alerts/nodes_changed_alert.test.ts +++ b/x-pack/plugins/monitoring/server/alerts/nodes_changed_alert.test.ts @@ -32,6 +32,9 @@ describe('NodesChangedAlert', () => { expect(alert.defaultThrottle).toBe('1d'); // @ts-ignore expect(alert.actionVariables).toStrictEqual([ + { name: 'added', description: 'The list of nodes added to the cluster.' }, + { name: 'removed', description: 'The list of nodes removed from the cluster.' }, + { name: 'restarted', description: 'The list of nodes restarted in the cluster.' }, { name: 'internalShortMessage', description: 'The short internal message generated by Elastic.', @@ -42,9 +45,6 @@ describe('NodesChangedAlert', () => { }, { name: 'state', description: 'The current state of the alert.' }, { name: 'clusterName', description: 'The cluster to which the nodes belong.' }, - { name: 'added', description: 'The list of nodes added to the cluster.' }, - { name: 'removed', description: 'The list of nodes removed from the cluster.' }, - { name: 'restarted', description: 'The list of nodes restarted in the cluster.' }, { name: 'action', description: 'The recommended action for this alert.' }, { name: 'actionPlain', @@ -145,7 +145,7 @@ describe('NodesChangedAlert', () => { alertStates: [ { cluster: { clusterUuid, clusterName }, - ccs: null, + ccs: undefined, ui: { isFiring: true, message: { @@ -160,11 +160,10 @@ describe('NodesChangedAlert', () => { ], }); expect(scheduleActions).toHaveBeenCalledWith('default', { - action: - '[View nodes](http://localhost:5601/app/monitoring#elasticsearch/nodes?_g=(cluster_uuid:abc123))', + action: '[View nodes](elasticsearch/nodes)', actionPlain: 'Verify that you added, removed, or restarted nodes.', internalFullMessage: - 'Nodes changed alert is firing for testCluster. The following Elasticsearch nodes have been added: removed: restarted:test. [View nodes](http://localhost:5601/app/monitoring#elasticsearch/nodes?_g=(cluster_uuid:abc123))', + 'Nodes changed alert is firing for testCluster. The following Elasticsearch nodes have been added: removed: restarted:test. [View nodes](elasticsearch/nodes)', internalShortMessage: 'Nodes changed alert is firing for testCluster. Verify that you added, removed, or restarted nodes.', added: '', @@ -212,7 +211,7 @@ describe('NodesChangedAlert', () => { // clusterUuid, // clusterName, // }, - // ccs: null, + // ccs: undefined, // ui: { // isFiring: true, // message: null, @@ -243,7 +242,7 @@ describe('NodesChangedAlert', () => { // alertStates: [ // { // cluster: { clusterUuid, clusterName }, - // ccs: null, + // ccs: undefined, // ui: { // isFiring: false, // message: { diff --git a/x-pack/plugins/monitoring/server/alerts/nodes_changed_alert.ts b/x-pack/plugins/monitoring/server/alerts/nodes_changed_alert.ts index 73f3ee055c928..e03e6ea53ab4e 100644 --- a/x-pack/plugins/monitoring/server/alerts/nodes_changed_alert.ts +++ b/x-pack/plugins/monitoring/server/alerts/nodes_changed_alert.ts @@ -21,14 +21,9 @@ import { getCcsIndexPattern } from '../lib/alerts/get_ccs_index_pattern'; import { CommonAlertParams } from '../../common/types'; import { fetchLegacyAlerts } from '../lib/alerts/fetch_legacy_alerts'; import { mapLegacySeverity } from '../lib/alerts/map_legacy_severity'; +import { AlertingDefaults } from './alerts_common'; const WATCH_NAME = 'elasticsearch_nodes'; -const RESOLVED = i18n.translate('xpack.monitoring.alerts.nodesChanged.resolved', { - defaultMessage: 'resolved', -}); -const FIRING = i18n.translate('xpack.monitoring.alerts.nodesChanged.firing', { - defaultMessage: 'firing', -}); export class NodesChangedAlert extends BaseAlert { public type = ALERT_NODES_CHANGED; @@ -38,39 +33,6 @@ export class NodesChangedAlert extends BaseAlert { public isLegacy = true; protected actionVariables = [ - { - name: 'internalShortMessage', - description: i18n.translate( - 'xpack.monitoring.alerts.nodesChanged.actionVariables.internalShortMessage', - { - defaultMessage: 'The short internal message generated by Elastic.', - } - ), - }, - { - name: 'internalFullMessage', - description: i18n.translate( - 'xpack.monitoring.alerts.nodesChanged.actionVariables.internalFullMessage', - { - defaultMessage: 'The full internal message generated by Elastic.', - } - ), - }, - { - name: 'state', - description: i18n.translate('xpack.monitoring.alerts.nodesChanged.actionVariables.state', { - defaultMessage: 'The current state of the alert.', - }), - }, - { - name: 'clusterName', - description: i18n.translate( - 'xpack.monitoring.alerts.nodesChanged.actionVariables.clusterName', - { - defaultMessage: 'The cluster to which the nodes belong.', - } - ), - }, { name: 'added', description: i18n.translate('xpack.monitoring.alerts.nodesChanged.actionVariables.added', { @@ -92,21 +54,7 @@ export class NodesChangedAlert extends BaseAlert { } ), }, - { - name: 'action', - description: i18n.translate('xpack.monitoring.alerts.nodesChanged.actionVariables.action', { - defaultMessage: 'The recommended action for this alert.', - }), - }, - { - name: 'actionPlain', - description: i18n.translate( - 'xpack.monitoring.alerts.nodesChanged.actionVariables.actionPlain', - { - defaultMessage: 'The recommended action for this alert, without any markdown.', - } - ), - }, + ...Object.values(AlertingDefaults.ALERT_TYPE.context), ]; private getNodeStates(legacyAlert: LegacyAlert): LegacyAlertNodesChangedList | undefined { @@ -138,7 +86,6 @@ export class NodesChangedAlert extends BaseAlert { shouldFire: true, // This alert always has a resolved timestamp severity: mapLegacySeverity(legacyAlert.metadata.severity), meta: legacyAlert, - ccs: null, }); return accum; }, []); @@ -234,7 +181,7 @@ export class NodesChangedAlert extends BaseAlert { }, } ), - state: RESOLVED, + state: AlertingDefaults.ALERT_STATE.resolved, clusterName: cluster.clusterName, }); } else { @@ -244,14 +191,7 @@ export class NodesChangedAlert extends BaseAlert { const fullActionText = i18n.translate('xpack.monitoring.alerts.nodesChanged.fullAction', { defaultMessage: 'View nodes', }); - const globalState = [`cluster_uuid:${cluster.clusterUuid}`]; - if (alertState.ccs) { - globalState.push(`ccs:${alertState.ccs}`); - } - const url = `${this.kibanaUrl}/app/monitoring#elasticsearch/nodes?_g=(${globalState.join( - ',' - )})`; - const action = `[${fullActionText}](${url})`; + const action = `[${fullActionText}](elasticsearch/nodes)`; const states = this.getNodeStates(legacyAlert) || { added: {}, removed: {}, restarted: {} }; const added = Object.values(states.added).join(','); const removed = Object.values(states.removed).join(','); @@ -280,7 +220,7 @@ export class NodesChangedAlert extends BaseAlert { }, } ), - state: FIRING, + state: AlertingDefaults.ALERT_STATE.firing, clusterName: cluster.clusterName, added, removed, diff --git a/x-pack/plugins/monitoring/server/alerts/types.d.ts b/x-pack/plugins/monitoring/server/alerts/types.d.ts index b6c8427375841..b685dcaed790f 100644 --- a/x-pack/plugins/monitoring/server/alerts/types.d.ts +++ b/x-pack/plugins/monitoring/server/alerts/types.d.ts @@ -11,13 +11,14 @@ export interface AlertEnableAction { config: { [key: string]: any }; } -export interface AlertInstanceState extends BaseAlertInstanceState { - alertStates: AlertState[]; +export interface AlertInstanceState { + alertStates: Array; + [x: string]: unknown; } export interface AlertState { cluster: AlertCluster; - ccs: string | null; + ccs?: string; ui: AlertUiState; } @@ -27,6 +28,12 @@ export interface AlertCpuUsageState extends AlertState { nodeName: string; } +export interface AlertDiskUsageState extends AlertState { + diskUsage: number; + nodeId: string; + nodeName?: string; +} + export interface AlertUiState { isFiring: boolean; severity: AlertSeverity; @@ -75,13 +82,21 @@ export interface AlertCpuUsageNodeStats { containerUsage: number; containerPeriods: number; containerQuota: number; - ccs: string | null; + ccs?: string; +} + +export interface AlertDiskUsageNodeStats { + clusterUuid: string; + nodeId: string; + nodeName: string; + diskUsage: number; + ccs?: string; } export interface AlertData { instanceKey: string; clusterUuid: string; - ccs: string | null; + ccs?: string; shouldFire: boolean; severity: AlertSeverity; meta: any; diff --git a/x-pack/plugins/monitoring/server/config.test.ts b/x-pack/plugins/monitoring/server/config.test.ts index f4ccb3f830af1..d264bbd83f561 100644 --- a/x-pack/plugins/monitoring/server/config.test.ts +++ b/x-pack/plugins/monitoring/server/config.test.ts @@ -72,7 +72,6 @@ describe('config schema', () => { "logFetchCount": 10, "logQueries": false, "pingTimeout": "PT30S", - "preserveHost": true, "requestHeadersWhitelist": Array [ "authorization", ], @@ -87,7 +86,6 @@ describe('config schema', () => { "truststore": Object {}, "verificationMode": "full", }, - "startupTimeout": "PT5S", }, "enabled": true, "logs": Object { diff --git a/x-pack/plugins/monitoring/server/lib/alerts/fetch_disk_usage_node_stats.test.ts b/x-pack/plugins/monitoring/server/lib/alerts/fetch_disk_usage_node_stats.test.ts new file mode 100644 index 0000000000000..4e221d3ebb35a --- /dev/null +++ b/x-pack/plugins/monitoring/server/lib/alerts/fetch_disk_usage_node_stats.test.ts @@ -0,0 +1,71 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { fetchDiskUsageNodeStats } from './fetch_disk_usage_node_stats'; + +describe('fetchDiskUsageNodeStats', () => { + let callCluster = jest.fn(); + const clusters = [ + { + clusterUuid: 'cluster123', + clusterName: 'test-cluster', + }, + ]; + const index = '.monitoring-es-*'; + const duration = '5m'; + const size = 10; + + it('fetch normal stats', async () => { + callCluster = jest.fn().mockImplementation(() => { + return { + aggregations: { + clusters: { + buckets: [ + { + key: clusters[0].clusterUuid, + nodes: { + buckets: [ + { + key: 'theNodeId', + index: { + buckets: [ + { + key: '.monitoring-es-*', + }, + ], + }, + name: { + buckets: [ + { + key: 'theNodeName', + }, + ], + }, + usage_ratio_percentile: { + value: 10, + }, + }, + ], + }, + }, + ], + }, + }, + }; + }); + + const result = await fetchDiskUsageNodeStats(callCluster, clusters, index, duration, size); + expect(result).toEqual([ + { + clusterUuid: clusters[0].clusterUuid, + nodeName: 'theNodeName', + nodeId: 'theNodeId', + diskUsage: 10, + ccs: null, + }, + ]); + }); +}); diff --git a/x-pack/plugins/monitoring/server/lib/alerts/fetch_disk_usage_node_stats.ts b/x-pack/plugins/monitoring/server/lib/alerts/fetch_disk_usage_node_stats.ts new file mode 100644 index 0000000000000..6201204ebebe0 --- /dev/null +++ b/x-pack/plugins/monitoring/server/lib/alerts/fetch_disk_usage_node_stats.ts @@ -0,0 +1,125 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { get } from 'lodash'; +import { AlertCluster, AlertDiskUsageNodeStats } from '../../alerts/types'; + +export async function fetchDiskUsageNodeStats( + callCluster: any, + clusters: AlertCluster[], + index: string, + duration: string, + size: number +): Promise { + const clustersIds = clusters.map((cluster) => cluster.clusterUuid); + const params = { + index, + filterPath: ['aggregations'], + body: { + size: 0, + query: { + bool: { + filter: [ + { + terms: { + cluster_uuid: clustersIds, + }, + }, + { + term: { + type: 'node_stats', + }, + }, + { + range: { + timestamp: { + gte: `now-${duration}`, + }, + }, + }, + ], + }, + }, + aggs: { + clusters: { + terms: { + field: 'cluster_uuid', + size, + include: clustersIds, + }, + aggs: { + nodes: { + terms: { + field: 'node_stats.node_id', + size, + }, + aggs: { + index: { + terms: { + field: '_index', + size: 1, + }, + }, + total_in_bytes: { + max: { + field: 'node_stats.fs.total.total_in_bytes', + }, + }, + available_in_bytes: { + max: { + field: 'node_stats.fs.total.available_in_bytes', + }, + }, + usage_ratio_percentile: { + bucket_script: { + buckets_path: { + available_in_bytes: 'available_in_bytes', + total_in_bytes: 'total_in_bytes', + }, + script: + '100 - Math.floor((params.available_in_bytes / params.total_in_bytes) * 100)', + }, + }, + name: { + terms: { + field: 'source_node.name', + size: 1, + }, + }, + }, + }, + }, + }, + }, + }, + }; + + const response = await callCluster('search', params); + const stats: AlertDiskUsageNodeStats[] = []; + const { buckets: clusterBuckets = [] } = response.aggregations.clusters; + + if (!clusterBuckets.length) { + return stats; + } + + for (const clusterBucket of clusterBuckets) { + for (const node of clusterBucket.nodes.buckets) { + const indexName = get(node, 'index.buckets[0].key', ''); + const diskUsage = Number(get(node, 'usage_ratio_percentile.value')); + if (isNaN(diskUsage) || diskUsage === undefined || diskUsage === null) { + continue; + } + stats.push({ + diskUsage, + clusterUuid: clusterBucket.key, + nodeId: node.key, + nodeName: get(node, 'name.buckets[0].key'), + ccs: indexName.includes(':') ? indexName.split(':')[0] : null, + }); + } + } + return stats; +} diff --git a/x-pack/plugins/monitoring/server/lib/alerts/fetch_status.test.ts b/x-pack/plugins/monitoring/server/lib/alerts/fetch_status.test.ts index ff674195f0730..fdd7253550624 100644 --- a/x-pack/plugins/monitoring/server/lib/alerts/fetch_status.test.ts +++ b/x-pack/plugins/monitoring/server/lib/alerts/fetch_status.test.ts @@ -85,7 +85,6 @@ describe('fetchStatus', () => { alertStates = [ { cluster: defaultClusterState, - ccs: null, ui: { ...defaultUiState, isFiring: true, @@ -111,7 +110,6 @@ describe('fetchStatus', () => { alertStates = [ { cluster: defaultClusterState, - ccs: null, ui: { ...defaultUiState, resolvedMS: 1500, diff --git a/x-pack/plugins/observability/.storybook/main.js b/x-pack/plugins/observability/.storybook/main.js new file mode 100644 index 0000000000000..1818aa44a9399 --- /dev/null +++ b/x-pack/plugins/observability/.storybook/main.js @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +module.exports = require('@kbn/storybook').defaultConfig; diff --git a/x-pack/plugins/observability/public/components/app/header/index.tsx b/x-pack/plugins/observability/public/components/app/header/index.tsx index e8bd229265e37..543ca2c3b3232 100644 --- a/x-pack/plugins/observability/public/components/app/header/index.tsx +++ b/x-pack/plugins/observability/public/components/app/header/index.tsx @@ -27,7 +27,7 @@ const Wrapper = styled.div<{ restrictWidth?: number }>` max-width: ${(props) => `${props.restrictWidth}px`}; margin: 0 auto; overflow: hidden; - padding: ${(props) => (props.restrictWidth ? 0 : '0 24px')}; + padding: 0 16px; `; interface Props { diff --git a/x-pack/plugins/observability/public/components/app/layout/with_header.tsx b/x-pack/plugins/observability/public/components/app/layout/with_header.tsx index a77487e1244e6..86a8e9089e035 100644 --- a/x-pack/plugins/observability/public/components/app/layout/with_header.tsx +++ b/x-pack/plugins/observability/public/components/app/layout/with_header.tsx @@ -9,12 +9,8 @@ import React from 'react'; import styled from 'styled-components'; import { Header } from '../header/index'; -const getPaddingSize = (props: EuiPageProps) => (props.restrictWidth ? 0 : '24px'); - const Page = styled(EuiPage)` background: transparent; - padding-right: ${getPaddingSize}; - padding-left: ${getPaddingSize}; `; const Container = styled.div<{ color?: string }>` diff --git a/x-pack/plugins/observability/public/pages/landing/index.tsx b/x-pack/plugins/observability/public/pages/landing/index.tsx index 66a52091ae04d..24620f641c204 100644 --- a/x-pack/plugins/observability/public/pages/landing/index.tsx +++ b/x-pack/plugins/observability/public/pages/landing/index.tsx @@ -23,6 +23,7 @@ import { WithHeaderLayout } from '../../components/app/layout/with_header'; import { usePluginContext } from '../../hooks/use_plugin_context'; import { useTrackPageview } from '../../hooks/use_track_metric'; import { appsSection } from '../home/section'; +import './styles.scss'; const EuiCardWithoutPadding = styled(EuiCard)` padding: 0; @@ -43,7 +44,7 @@ export function LandingPage() { > {/* title and description */} - +

{i18n.translate('xpack.observability.home.sectionTitle', { @@ -65,7 +66,7 @@ export function LandingPage() { - + {appsSection.map((app) => ( { + unregisterAll(); + + return ( + + + {storyFn(context)} + + + ); + }, +}); -const core = { +const core = ({ http: { basePath: { - prepend: (link) => `http://localhost:5601${link}`, + prepend: (link: string) => `http://localhost:5601${link}`, }, + get: () => Promise.resolve({ data: [] }), }, uiSettings: { get: (key: string) => { @@ -93,7 +119,7 @@ const core = { return euiSettings[key]; }, }, -} as AppMountContext['core']; +} as unknown) as AppMountContext['core']; const coreWithAlerts = ({ ...core, @@ -111,23 +137,19 @@ const coreWithNewsFeed = ({ }, } as unknown) as AppMountContext['core']; -function unregisterAll() { - unregisterDataHandler({ appName: 'apm' }); - unregisterDataHandler({ appName: 'infra_logs' }); - unregisterDataHandler({ appName: 'infra_metrics' }); - unregisterDataHandler({ appName: 'uptime' }); -} +const coreAlertsThrowsError = ({ + ...core, + http: { + ...core.http, + get: async () => { + throw new Error('Error fetching Alerts data'); + }, + }, +} as unknown) as AppMountContext['core']; storiesOf('app/Overview', module) - .addDecorator((storyFn) => ( - - - {storyFn()} - - - )) - .add('Empty state', () => { - unregisterAll(); + .addDecorator(withCore(core)) + .add('Empty State', () => { registerDataHandler({ appName: 'apm', fetchData: fetchApmData, @@ -150,52 +172,14 @@ storiesOf('app/Overview', module) }); return ; - }); - -storiesOf('app/Overview', module) - .addDecorator((storyFn) => ( - - - {storyFn()} - - - )) - .add('single panel', () => { - unregisterAll(); + }) + .add('Single Panel', () => { registerDataHandler({ appName: 'infra_logs', fetchData: fetchLogsData, hasData: async () => true, }); - return ( - - ); - }); -storiesOf('app/Overview', module) - .addDecorator((storyFn) => ( - - - {storyFn()} - - - )) - .add('logs and metrics', () => { - unregisterAll(); - registerDataHandler({ - appName: 'infra_logs', - fetchData: fetchLogsData, - hasData: async () => true, - }); - registerDataHandler({ - appName: 'infra_metrics', - fetchData: fetchMetricsData, - hasData: async () => true, - }); return ( ); - }); - -storiesOf('app/Overview', module) - .addDecorator((storyFn) => ( - - - {storyFn()} - - - )) - .add('logs, metrics and alerts', () => { - unregisterAll(); + }) + .add('Logs and Metrics', () => { registerDataHandler({ appName: 'infra_logs', fetchData: fetchLogsData, @@ -225,40 +199,7 @@ storiesOf('app/Overview', module) fetchData: fetchMetricsData, hasData: async () => true, }); - return ( - - ); - }); -storiesOf('app/Overview', module) - .addDecorator((storyFn) => ( - - - {storyFn()} - - - )) - .add('logs, metrics, APM and alerts', () => { - unregisterAll(); - registerDataHandler({ - appName: 'infra_logs', - fetchData: fetchLogsData, - hasData: async () => true, - }); - registerDataHandler({ - appName: 'infra_metrics', - fetchData: fetchMetricsData, - hasData: async () => true, - }); - registerDataHandler({ - appName: 'apm', - fetchData: fetchApmData, - hasData: async () => true, - }); return ( ); - }); + }) + .add( + 'Logs, Metrics, and Alerts', + () => { + registerDataHandler({ + appName: 'infra_logs', + fetchData: fetchLogsData, + hasData: async () => true, + }); + registerDataHandler({ + appName: 'infra_metrics', + fetchData: fetchMetricsData, + hasData: async () => true, + }); -storiesOf('app/Overview', module) - .addDecorator((storyFn) => ( - - - {storyFn()} - - - )) - .add('logs, metrics, APM and Uptime', () => { - unregisterAll(); - registerDataHandler({ - appName: 'apm', - fetchData: fetchApmData, - hasData: async () => true, - }); - registerDataHandler({ - appName: 'infra_logs', - fetchData: fetchLogsData, - hasData: async () => true, - }); - registerDataHandler({ - appName: 'infra_metrics', - fetchData: fetchMetricsData, - hasData: async () => true, - }); - registerDataHandler({ - appName: 'uptime', - fetchData: fetchUptimeData, - hasData: async () => true, - }); - return ( - - ); - }); + return ( + + ); + }, + { core: coreWithAlerts } + ) + .add( + 'Logs, Metrics, APM, and Alerts', + () => { + registerDataHandler({ + appName: 'infra_logs', + fetchData: fetchLogsData, + hasData: async () => true, + }); + registerDataHandler({ + appName: 'infra_metrics', + fetchData: fetchMetricsData, + hasData: async () => true, + }); + registerDataHandler({ + appName: 'apm', + fetchData: fetchApmData, + hasData: async () => true, + }); -storiesOf('app/Overview', module) - .addDecorator((storyFn) => ( - - - {storyFn()} - - - )) - .add('logs, metrics, APM, Uptime and Alerts', () => { - unregisterAll(); + return ( + + ); + }, + { core: coreWithAlerts } + ) + .add('Logs, Metrics, APM, and Uptime', () => { registerDataHandler({ appName: 'apm', fetchData: fetchApmData, @@ -337,45 +282,7 @@ storiesOf('app/Overview', module) fetchData: fetchUptimeData, hasData: async () => true, }); - return ( - - ); - }); -storiesOf('app/Overview', module) - .addDecorator((storyFn) => ( - - - {storyFn()} - - - )) - .add('logs, metrics, APM, Uptime and News feed', () => { - unregisterAll(); - registerDataHandler({ - appName: 'apm', - fetchData: fetchApmData, - hasData: async () => true, - }); - registerDataHandler({ - appName: 'infra_logs', - fetchData: fetchLogsData, - hasData: async () => true, - }); - registerDataHandler({ - appName: 'infra_metrics', - fetchData: fetchMetricsData, - hasData: async () => true, - }); - registerDataHandler({ - appName: 'uptime', - fetchData: fetchUptimeData, - hasData: async () => true, - }); return ( ); - }); + }) + .add( + 'Logs, Metrics, APM, Uptime, and Alerts', + () => { + registerDataHandler({ + appName: 'apm', + fetchData: fetchApmData, + hasData: async () => true, + }); + registerDataHandler({ + appName: 'infra_logs', + fetchData: fetchLogsData, + hasData: async () => true, + }); + registerDataHandler({ + appName: 'infra_metrics', + fetchData: fetchMetricsData, + hasData: async () => true, + }); + registerDataHandler({ + appName: 'uptime', + fetchData: fetchUptimeData, + hasData: async () => true, + }); -storiesOf('app/Overview', module) - .addDecorator((storyFn) => ( - - - {storyFn()} - - - )) - .add('no data', () => { - unregisterAll(); + return ( + + ); + }, + { core: coreWithAlerts } + ) + .add( + 'Logs, Metrics, APM, Uptime, and News Feed', + () => { + registerDataHandler({ + appName: 'apm', + fetchData: fetchApmData, + hasData: async () => true, + }); + registerDataHandler({ + appName: 'infra_logs', + fetchData: fetchLogsData, + hasData: async () => true, + }); + registerDataHandler({ + appName: 'infra_metrics', + fetchData: fetchMetricsData, + hasData: async () => true, + }); + registerDataHandler({ + appName: 'uptime', + fetchData: fetchUptimeData, + hasData: async () => true, + }); + return ( + + ); + }, + { core: coreWithNewsFeed } + ) + .add('No Data', () => { registerDataHandler({ appName: 'apm', fetchData: async () => emptyAPMResponse, @@ -415,113 +379,7 @@ storiesOf('app/Overview', module) fetchData: async () => emptyUptimeResponse, hasData: async () => true, }); - return ( - - ); - }); - -const coreAlertsThrowsError = ({ - ...core, - http: { - ...core.http, - get: async () => { - throw new Error('Error fetching Alerts data'); - }, - }, -} as unknown) as AppMountContext['core']; -storiesOf('app/Overview', module) - .addDecorator((storyFn) => ( - - - {storyFn()} - - - )) - .add('fetch data with error', () => { - unregisterAll(); - registerDataHandler({ - appName: 'apm', - fetchData: async () => { - throw new Error('Error fetching APM data'); - }, - hasData: async () => true, - }); - registerDataHandler({ - appName: 'infra_logs', - fetchData: async () => { - throw new Error('Error fetching Logs data'); - }, - hasData: async () => true, - }); - registerDataHandler({ - appName: 'infra_metrics', - fetchData: async () => { - throw new Error('Error fetching Metric data'); - }, - hasData: async () => true, - }); - registerDataHandler({ - appName: 'uptime', - fetchData: async () => { - throw new Error('Error fetching Uptime data'); - }, - hasData: async () => true, - }); - return ( - - ); - }); -storiesOf('app/Overview', module) - .addDecorator((storyFn) => ( - - - {storyFn()} - - - )) - .add('hasData with error and alerts', () => { - unregisterAll(); - registerDataHandler({ - appName: 'apm', - fetchData: fetchApmData, - // @ts-ignore thows an error instead - hasData: async () => { - throw new Error('Error has data'); - }, - }); - registerDataHandler({ - appName: 'infra_logs', - fetchData: fetchLogsData, - // @ts-ignore thows an error instead - hasData: async () => { - throw new Error('Error has data'); - }, - }); - registerDataHandler({ - appName: 'infra_metrics', - fetchData: fetchMetricsData, - // @ts-ignore thows an error instead - hasData: async () => { - throw new Error('Error has data'); - }, - }); - registerDataHandler({ - appName: 'uptime', - fetchData: fetchUptimeData, - // @ts-ignore thows an error instead - hasData: async () => { - throw new Error('Error has data'); - }, - }); return ( ); - }); -storiesOf('app/Overview', module) - .addDecorator((storyFn) => ( - - - {storyFn()} - - - )) - .add('hasData with error', () => { - unregisterAll(); + }) + .add( + 'Fetch Data with Error', + () => { + registerDataHandler({ + appName: 'apm', + fetchData: async () => { + throw new Error('Error fetching APM data'); + }, + hasData: async () => true, + }); + registerDataHandler({ + appName: 'infra_logs', + fetchData: async () => { + throw new Error('Error fetching Logs data'); + }, + hasData: async () => true, + }); + registerDataHandler({ + appName: 'infra_metrics', + fetchData: async () => { + throw new Error('Error fetching Metric data'); + }, + hasData: async () => true, + }); + registerDataHandler({ + appName: 'uptime', + fetchData: async () => { + throw new Error('Error fetching Uptime data'); + }, + hasData: async () => true, + }); + return ( + + ); + }, + { core: coreAlertsThrowsError } + ) + .add( + 'hasData with Error and Alerts', + () => { + registerDataHandler({ + appName: 'apm', + fetchData: fetchApmData, + // @ts-ignore thows an error instead + hasData: async () => { + throw new Error('Error has data'); + }, + }); + registerDataHandler({ + appName: 'infra_logs', + fetchData: fetchLogsData, + // @ts-ignore thows an error instead + hasData: async () => { + throw new Error('Error has data'); + }, + }); + registerDataHandler({ + appName: 'infra_metrics', + fetchData: fetchMetricsData, + // @ts-ignore thows an error instead + hasData: async () => { + throw new Error('Error has data'); + }, + }); + registerDataHandler({ + appName: 'uptime', + fetchData: fetchUptimeData, + // @ts-ignore thows an error instead + hasData: async () => { + throw new Error('Error has data'); + }, + }); + return ( + + ); + }, + { core: coreWithAlerts } + ) + .add('hasData with Error', () => { registerDataHandler({ appName: 'apm', fetchData: fetchApmData, @@ -572,6 +507,7 @@ storiesOf('app/Overview', module) throw new Error('Error has data'); }, }); + return ( Promise; export type ObservabilityFetchDataPlugins = Exclude< ObservabilityApp, - 'observability' | 'stack_monitoring' + 'observability' | 'stack_monitoring' | 'ux' >; export interface DataHandler< diff --git a/x-pack/plugins/observability/typings/common.ts b/x-pack/plugins/observability/typings/common.ts index 845652031a578..c86eb924a051e 100644 --- a/x-pack/plugins/observability/typings/common.ts +++ b/x-pack/plugins/observability/typings/common.ts @@ -10,7 +10,8 @@ export type ObservabilityApp = | 'apm' | 'uptime' | 'observability' - | 'stack_monitoring'; + | 'stack_monitoring' + | 'ux'; export type PromiseReturnType = Func extends (...args: any[]) => Promise ? Value diff --git a/x-pack/plugins/reporting/public/components/report_diagnostic.tsx b/x-pack/plugins/reporting/public/components/report_diagnostic.tsx index b5b055207ddbb..385b8841fabd8 100644 --- a/x-pack/plugins/reporting/public/components/report_diagnostic.tsx +++ b/x-pack/plugins/reporting/public/components/report_diagnostic.tsx @@ -107,13 +107,13 @@ export const ReportDiagnostic = ({ apiClient }: Props) => { const steps = [ { title: i18n.translate('xpack.reporting.listing.diagnosticConfigTitle', { - defaultMessage: 'Verify Kibana Configuration', + defaultMessage: 'Verify Kibana configuration', }), children: ( { > @@ -136,14 +136,13 @@ export const ReportDiagnostic = ({ apiClient }: Props) => { if (configStatus === 'complete') { steps.push({ title: i18n.translate('xpack.reporting.listing.diagnosticBrowserTitle', { - defaultMessage: 'Check Browser', + defaultMessage: 'Check browser', }), children: ( { > @@ -166,13 +165,13 @@ export const ReportDiagnostic = ({ apiClient }: Props) => { if (chromeStatus === 'complete') { steps.push({ title: i18n.translate('xpack.reporting.listing.diagnosticScreenshotTitle', { - defaultMessage: 'Check Screen Capture Capabilities', + defaultMessage: 'Check screen capture', }), children: ( { > @@ -201,7 +200,7 @@ export const ReportDiagnostic = ({ apiClient }: Props) => { ), @@ -212,7 +211,7 @@ export const ReportDiagnostic = ({ apiClient }: Props) => { if (!success) { steps.push({ title: i18n.translate('xpack.reporting.listing.diagnosticFailureTitle', { - defaultMessage: "Whoops! Looks like something isn't working properly.", + defaultMessage: "Something isn't working properly.", }), children: ( @@ -228,7 +227,7 @@ export const ReportDiagnostic = ({ apiClient }: Props) => { {logs} @@ -257,7 +256,7 @@ export const ReportDiagnostic = ({ apiClient }: Props) => { @@ -273,7 +272,7 @@ export const ReportDiagnostic = ({ apiClient }: Props) => { diff --git a/x-pack/plugins/reporting/public/components/report_listing.tsx b/x-pack/plugins/reporting/public/components/report_listing.tsx index cea402d6a98f2..a512b1305b8e0 100644 --- a/x-pack/plugins/reporting/public/components/report_listing.tsx +++ b/x-pack/plugins/reporting/public/components/report_listing.tsx @@ -154,7 +154,7 @@ class ReportListingUi extends Component {

diff --git a/x-pack/plugins/reporting/server/routes/lib/jobs_query.ts b/x-pack/plugins/reporting/server/routes/lib/jobs_query.ts index d1270215b4821..5a5cedc03aa0e 100644 --- a/x-pack/plugins/reporting/server/routes/lib/jobs_query.ts +++ b/x-pack/plugins/reporting/server/routes/lib/jobs_query.ts @@ -162,7 +162,7 @@ export function jobsQueryFactory(reportingCore: ReportingCore) { async delete(deleteIndex: string, id: string) { try { - const query = { id, index: deleteIndex }; + const query = { id, index: deleteIndex, refresh: true }; return callAsInternalUser('delete', query); } catch (error) { throw new Error( diff --git a/x-pack/plugins/reporting/server/usage/reporting_usage_collector.test.ts b/x-pack/plugins/reporting/server/usage/reporting_usage_collector.test.ts index fc2dce441c621..f12b76ccce847 100644 --- a/x-pack/plugins/reporting/server/usage/reporting_usage_collector.test.ts +++ b/x-pack/plugins/reporting/server/usage/reporting_usage_collector.test.ts @@ -467,6 +467,575 @@ describe('Ready for collection observable', () => { "fetch": [Function], "formatForBulkUpload": [Function], "isReady": [Function], + "schema": Object { + "PNG": Object { + "available": Object { + "type": "boolean", + }, + "total": Object { + "type": "long", + }, + }, + "_all": Object { + "type": "long", + }, + "available": Object { + "type": "boolean", + }, + "browser_type": Object { + "type": "keyword", + }, + "csv": Object { + "available": Object { + "type": "boolean", + }, + "total": Object { + "type": "long", + }, + }, + "enabled": Object { + "type": "boolean", + }, + "last7Days": Object { + "PNG": Object { + "available": Object { + "type": "boolean", + }, + "total": Object { + "type": "long", + }, + }, + "_all": Object { + "type": "long", + }, + "csv": Object { + "available": Object { + "type": "boolean", + }, + "total": Object { + "type": "long", + }, + }, + "printable_pdf": Object { + "app": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "available": Object { + "type": "boolean", + }, + "layout": Object { + "preserve_layout": Object { + "type": "long", + }, + "print": Object { + "type": "long", + }, + }, + "total": Object { + "type": "long", + }, + }, + "status": Object { + "cancelled": Object { + "type": "long", + }, + "completed": Object { + "type": "long", + }, + "completed_with_warnings": Object { + "type": "long", + }, + "failed": Object { + "type": "long", + }, + "pending": Object { + "type": "long", + }, + "processing": Object { + "type": "long", + }, + }, + "statuses": Object { + "cancelled": Object { + "PNG": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "csv": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "printable_pdf": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + }, + "completed": Object { + "PNG": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "csv": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "printable_pdf": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + }, + "completed_with_warnings": Object { + "PNG": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "csv": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "printable_pdf": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + }, + "failed": Object { + "PNG": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "csv": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "printable_pdf": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + }, + "pending": Object { + "PNG": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "csv": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "printable_pdf": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + }, + "processing": Object { + "PNG": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "csv": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "printable_pdf": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + }, + }, + }, + "printable_pdf": Object { + "app": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "available": Object { + "type": "boolean", + }, + "layout": Object { + "preserve_layout": Object { + "type": "long", + }, + "print": Object { + "type": "long", + }, + }, + "total": Object { + "type": "long", + }, + }, + "status": Object { + "cancelled": Object { + "type": "long", + }, + "completed": Object { + "type": "long", + }, + "completed_with_warnings": Object { + "type": "long", + }, + "failed": Object { + "type": "long", + }, + "pending": Object { + "type": "long", + }, + "processing": Object { + "type": "long", + }, + }, + "statuses": Object { + "cancelled": Object { + "PNG": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "csv": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "printable_pdf": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + }, + "completed": Object { + "PNG": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "csv": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "printable_pdf": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + }, + "completed_with_warnings": Object { + "PNG": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "csv": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "printable_pdf": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + }, + "failed": Object { + "PNG": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "csv": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "printable_pdf": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + }, + "pending": Object { + "PNG": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "csv": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "printable_pdf": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + }, + "processing": Object { + "PNG": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "csv": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + "printable_pdf": Object { + "canvas workpad": Object { + "type": "long", + }, + "dashboard": Object { + "type": "long", + }, + "visualization": Object { + "type": "long", + }, + }, + }, + }, + }, "type": "reporting", } `); diff --git a/x-pack/plugins/reporting/server/usage/reporting_usage_collector.ts b/x-pack/plugins/reporting/server/usage/reporting_usage_collector.ts index 8f26579726ff1..176d3dcb37dfc 100644 --- a/x-pack/plugins/reporting/server/usage/reporting_usage_collector.ts +++ b/x-pack/plugins/reporting/server/usage/reporting_usage_collector.ts @@ -13,6 +13,7 @@ import { ReportingSetupDeps } from '../types'; import { GetLicense } from './'; import { getReportingUsage } from './get_reporting_usage'; import { ReportingUsageType } from './types'; +import { reportingSchema } from './schema'; // places the reporting data as kibana stats const METATYPE = 'kibana_stats'; @@ -41,6 +42,7 @@ export function getReportingUsageCollector( return getReportingUsage(config, getLicense, callCluster, exportTypesRegistry); }, isReady, + schema: reportingSchema, /* * Format the response data into a model for internal upload * 1. Make this data part of the "kibana_stats" type diff --git a/x-pack/plugins/reporting/server/usage/schema.ts b/x-pack/plugins/reporting/server/usage/schema.ts new file mode 100644 index 0000000000000..63ac3a7152e77 --- /dev/null +++ b/x-pack/plugins/reporting/server/usage/schema.ts @@ -0,0 +1,67 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { MakeSchemaFrom } from 'src/plugins/usage_collection/server'; +import { AppCounts, AvailableTotal, JobTypes, RangeStats, ReportingUsageType } from './types'; + +const appCountsSchema: MakeSchemaFrom = { + 'canvas workpad': { type: 'long' }, + dashboard: { type: 'long' }, + visualization: { type: 'long' }, +}; + +const byAppCountsSchema: MakeSchemaFrom = { + csv: appCountsSchema, + PNG: appCountsSchema, + printable_pdf: appCountsSchema, +}; + +const availableTotalSchema: MakeSchemaFrom = { + available: { type: 'boolean' }, + total: { type: 'long' }, +}; + +const jobTypesSchema: MakeSchemaFrom = { + csv: availableTotalSchema, + PNG: availableTotalSchema, + printable_pdf: { + ...availableTotalSchema, + app: appCountsSchema, + layout: { + print: { type: 'long' }, + preserve_layout: { type: 'long' }, + }, + }, +}; + +const rangeStatsSchema: MakeSchemaFrom = { + ...jobTypesSchema, + _all: { type: 'long' }, + status: { + cancelled: { type: 'long' }, + completed: { type: 'long' }, + completed_with_warnings: { type: 'long' }, + failed: { type: 'long' }, + pending: { type: 'long' }, + processing: { type: 'long' }, + }, + statuses: { + cancelled: byAppCountsSchema, + completed: byAppCountsSchema, + completed_with_warnings: byAppCountsSchema, + failed: byAppCountsSchema, + pending: byAppCountsSchema, + processing: byAppCountsSchema, + }, +}; + +export const reportingSchema: MakeSchemaFrom = { + ...rangeStatsSchema, + available: { type: 'boolean' }, + browser_type: { type: 'keyword' }, + enabled: { type: 'boolean' }, + last7Days: rangeStatsSchema, +}; diff --git a/x-pack/plugins/reporting/server/usage/types.ts b/x-pack/plugins/reporting/server/usage/types.ts index 5430a1cfc33bd..1ff680eff8eaf 100644 --- a/x-pack/plugins/reporting/server/usage/types.ts +++ b/x-pack/plugins/reporting/server/usage/types.ts @@ -162,8 +162,3 @@ export interface SearchResponse { }; }; } - -export interface AvailableTotal { - available: boolean; - total: number; -} diff --git a/x-pack/plugins/security_solution/.storybook/main.js b/x-pack/plugins/security_solution/.storybook/main.js new file mode 100644 index 0000000000000..1818aa44a9399 --- /dev/null +++ b/x-pack/plugins/security_solution/.storybook/main.js @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +module.exports = require('@kbn/storybook').defaultConfig; diff --git a/x-pack/plugins/security_solution/common/ecs/file/index.ts b/x-pack/plugins/security_solution/common/ecs/file/index.ts index 808e9eaa3c854..dd96ac0104851 100644 --- a/x-pack/plugins/security_solution/common/ecs/file/index.ts +++ b/x-pack/plugins/security_solution/common/ecs/file/index.ts @@ -4,6 +4,17 @@ * you may not use this file except in compliance with the Elastic License. */ +export interface CodeSignature { + subject_name: string[]; + trusted: string[]; +} +export interface Ext { + code_signature: CodeSignature[] | CodeSignature; +} +export interface Hash { + sha256: string[]; +} + export interface FileEcs { name?: string[]; @@ -13,6 +24,8 @@ export interface FileEcs { extension?: string[]; + Ext?: Ext; + type?: string[]; device?: string[]; @@ -34,4 +47,6 @@ export interface FileEcs { mtime?: string[]; ctime?: string[]; + + hash?: Hash; } diff --git a/x-pack/plugins/security_solution/common/ecs/rule/index.ts b/x-pack/plugins/security_solution/common/ecs/rule/index.ts index 47316c7791e4b..fa200b46b37b4 100644 --- a/x-pack/plugins/security_solution/common/ecs/rule/index.ts +++ b/x-pack/plugins/security_solution/common/ecs/rule/index.ts @@ -7,6 +7,7 @@ export interface RuleEcs { id?: string[]; rule_id?: string[]; + name?: string[]; false_positives: string[]; saved_id?: string[]; timeline_id?: string[]; diff --git a/x-pack/plugins/security_solution/common/endpoint/constants.ts b/x-pack/plugins/security_solution/common/endpoint/constants.ts index 74ccf9105ba6b..4cfa9347b2b58 100644 --- a/x-pack/plugins/security_solution/common/endpoint/constants.ts +++ b/x-pack/plugins/security_solution/common/endpoint/constants.ts @@ -7,8 +7,8 @@ export const eventsIndexPattern = 'logs-endpoint.events.*'; export const alertsIndexPattern = 'logs-endpoint.alerts-*'; export const metadataIndexPattern = 'metrics-endpoint.metadata-*'; -export const metadataCurrentIndexPattern = 'metrics-endpoint.metadata_current-*'; -export const metadataTransformPrefix = 'metrics-endpoint.metadata-current-default'; +export const metadataCurrentIndexPattern = 'metrics-endpoint.metadata_current_*'; +export const metadataTransformPrefix = 'endpoint.metadata_current-default'; export const policyIndexPattern = 'metrics-endpoint.policy-*'; export const telemetryIndexPattern = 'metrics-endpoint.telemetry-*'; export const LIMITED_CONCURRENCY_ENDPOINT_ROUTE_TAG = 'endpoint:limited-concurrency'; diff --git a/x-pack/plugins/security_solution/common/endpoint/generate_data.ts b/x-pack/plugins/security_solution/common/endpoint/generate_data.ts index 7f31c71fe712b..ec7a49da469fe 100644 --- a/x-pack/plugins/security_solution/common/endpoint/generate_data.ts +++ b/x-pack/plugins/security_solution/common/endpoint/generate_data.ts @@ -67,7 +67,7 @@ const Windows: OSFields[] = [ full: 'Windows 10', version: '10.0', platform: 'Windows', - family: 'Windows', + family: 'windows', Ext: { variant: 'Windows Pro', }, @@ -77,7 +77,7 @@ const Windows: OSFields[] = [ full: 'Windows Server 2016', version: '10.0', platform: 'Windows', - family: 'Windows', + family: 'windows', Ext: { variant: 'Windows Server', }, @@ -87,7 +87,7 @@ const Windows: OSFields[] = [ full: 'Windows Server 2012', version: '6.2', platform: 'Windows', - family: 'Windows', + family: 'windows', Ext: { variant: 'Windows Server', }, @@ -97,7 +97,7 @@ const Windows: OSFields[] = [ full: 'Windows Server 2012R2', version: '6.3', platform: 'Windows', - family: 'Windows', + family: 'windows', Ext: { variant: 'Windows Server Release 2', }, @@ -110,6 +110,12 @@ const Mac: OSFields[] = []; const OS: OSFields[] = [...Windows, ...Mac, ...Linux]; +const POLICY_RESPONSE_STATUSES: HostPolicyResponseActionStatus[] = [ + HostPolicyResponseActionStatus.success, + HostPolicyResponseActionStatus.failure, + HostPolicyResponseActionStatus.warning, +]; + const APPLIED_POLICIES: Array<{ name: string; id: string; @@ -125,6 +131,11 @@ const APPLIED_POLICIES: Array<{ id: 'C2A9093E-E289-4C0A-AA44-8C32A414FA7A', status: HostPolicyResponseActionStatus.success, }, + { + name: 'Detect Malware Only', + id: '47d7965d-6869-478b-bd9c-fb0d2bb3959f', + status: HostPolicyResponseActionStatus.success, + }, ]; const FILE_OPERATIONS: string[] = ['creation', 'open', 'rename', 'execution', 'deletion']; @@ -364,15 +375,12 @@ export class EndpointDocGenerator { } /** - * Creates new random policy id for the host to simulate new policy application + * Updates the current Host common record applied Policy to a different one from the list + * of random choices and gives it a random policy response status. */ - public updatePolicyId() { - this.commonInfo.Endpoint.policy.applied.id = this.randomChoice(APPLIED_POLICIES).id; - this.commonInfo.Endpoint.policy.applied.status = this.randomChoice([ - HostPolicyResponseActionStatus.success, - HostPolicyResponseActionStatus.failure, - HostPolicyResponseActionStatus.warning, - ]); + public updateHostPolicyData() { + this.commonInfo.Endpoint.policy.applied = this.randomChoice(APPLIED_POLICIES); + this.commonInfo.Endpoint.policy.applied.status = this.randomChoice(POLICY_RESPONSE_STATUSES); } private createHostData(): HostInfo { diff --git a/x-pack/plugins/security_solution/common/endpoint/index_data.ts b/x-pack/plugins/security_solution/common/endpoint/index_data.ts index b8c2fdbe65f1e..bf3d12f231c86 100644 --- a/x-pack/plugins/security_solution/common/endpoint/index_data.ts +++ b/x-pack/plugins/security_solution/common/endpoint/index_data.ts @@ -6,25 +6,66 @@ import { Client } from '@elastic/elasticsearch'; import seedrandom from 'seedrandom'; +import { KbnClient } from '@kbn/dev-utils'; +import { AxiosResponse } from 'axios'; import { EndpointDocGenerator, TreeOptions, Event } from './generate_data'; import { firstNonNullValue } from './models/ecs_safety_helpers'; +import { + CreateAgentPolicyRequest, + CreateAgentPolicyResponse, + CreatePackagePolicyRequest, + CreatePackagePolicyResponse, + GetPackagesResponse, + PostAgentEnrollRequest, + AGENT_API_ROUTES, + AGENT_POLICY_API_ROUTES, + EPM_API_ROUTES, + PACKAGE_POLICY_API_ROUTES, + ENROLLMENT_API_KEY_ROUTES, + GetEnrollmentAPIKeysResponse, + GetOneEnrollmentAPIKeyResponse, + PostAgentEnrollResponse, + PostAgentCheckinRequest, + PostAgentCheckinResponse, + PostAgentAcksResponse, + PostAgentAcksRequest, +} from '../../../ingest_manager/common'; +import { factory as policyConfigFactory } from './models/policy_config'; +import { HostMetadata } from './types'; +import { KbnClientWithApiKeySupport } from '../../scripts/endpoint/kbn_client_with_api_key_support'; export async function indexHostsAndAlerts( client: Client, + kbnClient: KbnClientWithApiKeySupport, seed: string, numHosts: number, numDocs: number, metadataIndex: string, - policyIndex: string, + policyResponseIndex: string, eventIndex: string, alertIndex: string, alertsPerHost: number, + fleet: boolean, options: TreeOptions = {} ) { const random = seedrandom(seed); + const epmEndpointPackage = await getEndpointPackageInfo(kbnClient); + // Keep a map of host applied policy ids (fake) to real ingest package configs (policy record) + const realPolicies: Record = {}; + for (let i = 0; i < numHosts; i++) { const generator = new EndpointDocGenerator(random); - await indexHostDocs(numDocs, client, metadataIndex, policyIndex, generator); + await indexHostDocs( + numDocs, + client, + kbnClient, + realPolicies, + epmEndpointPackage, + metadataIndex, + policyResponseIndex, + fleet, + generator + ); await indexAlerts(client, eventIndex, alertIndex, generator, alertsPerHost, options); } await client.indices.refresh({ @@ -43,22 +84,78 @@ function delay(ms: number) { async function indexHostDocs( numDocs: number, client: Client, + kbnClient: KbnClientWithApiKeySupport, + realPolicies: Record, + epmEndpointPackage: GetPackagesResponse['response'][0], metadataIndex: string, - policyIndex: string, + policyResponseIndex: string, + enrollFleet: boolean, generator: EndpointDocGenerator ) { const timeBetweenDocs = 6 * 3600 * 1000; // 6 hours between metadata documents const timestamp = new Date().getTime(); + let hostMetadata: HostMetadata; + let wasAgentEnrolled = false; + let enrolledAgent: undefined | PostAgentEnrollResponse['item']; + for (let j = 0; j < numDocs; j++) { generator.updateHostData(); - generator.updatePolicyId(); + generator.updateHostPolicyData(); + + hostMetadata = generator.generateHostMetadata(timestamp - timeBetweenDocs * (numDocs - j - 1)); + + if (enrollFleet) { + const { id: appliedPolicyId, name: appliedPolicyName } = hostMetadata.Endpoint.policy.applied; + + // If we don't yet have a "real" policy record, then create it now in ingest (package config) + if (!realPolicies[appliedPolicyId]) { + // eslint-disable-next-line require-atomic-updates + realPolicies[appliedPolicyId] = await createPolicy( + kbnClient, + appliedPolicyName, + epmEndpointPackage.version + ); + } + + // If we did not yet enroll an agent for this Host, do it now that we have good policy id + if (!wasAgentEnrolled) { + wasAgentEnrolled = true; + enrolledAgent = await fleetEnrollAgentForHost( + kbnClient, + hostMetadata!, + realPolicies[appliedPolicyId].policy_id + ); + } + // Update the Host metadata record with the ID of the "real" policy along with the enrolled agent id + hostMetadata = { + ...hostMetadata, + elastic: { + ...hostMetadata.elastic, + agent: { + ...hostMetadata.elastic.agent, + id: enrolledAgent?.id ?? hostMetadata.elastic.agent.id, + }, + }, + Endpoint: { + ...hostMetadata.Endpoint, + policy: { + ...hostMetadata.Endpoint.policy, + applied: { + ...hostMetadata.Endpoint.policy.applied, + id: realPolicies[appliedPolicyId].id, + }, + }, + }, + }; + } + await client.index({ index: metadataIndex, - body: generator.generateHostMetadata(timestamp - timeBetweenDocs * (numDocs - j - 1)), + body: hostMetadata, op_type: 'create', }); await client.index({ - index: policyIndex, + index: policyResponseIndex, body: generator.generatePolicyResponse(timestamp - timeBetweenDocs * (numDocs - j - 1)), op_type: 'create', }); @@ -98,3 +195,287 @@ async function indexAlerts( await client.bulk({ body, refresh: true }); } } + +const createPolicy = async ( + kbnClient: KbnClient, + policyName: string, + endpointPackageVersion: string +): Promise => { + // Create Agent Policy first + const newAgentPolicyData: CreateAgentPolicyRequest['body'] = { + name: `Policy for ${policyName}`, + description: '', + namespace: 'default', + }; + let agentPolicy; + try { + agentPolicy = (await kbnClient.request({ + path: AGENT_POLICY_API_ROUTES.CREATE_PATTERN, + method: 'POST', + body: newAgentPolicyData, + })) as AxiosResponse; + } catch (error) { + throw new Error(`create policy ${error}`); + } + + // Create Package Configuration + const newPackagePolicyData: CreatePackagePolicyRequest['body'] = { + name: policyName, + description: 'Protect the worlds data', + policy_id: agentPolicy.data.item.id, + enabled: true, + output_id: '', + inputs: [ + { + type: 'endpoint', + enabled: true, + streams: [], + config: { + policy: { + value: policyConfigFactory(), + }, + }, + }, + ], + namespace: 'default', + package: { + name: 'endpoint', + title: 'endpoint', + version: endpointPackageVersion, + }, + }; + const packagePolicy = (await kbnClient.request({ + path: PACKAGE_POLICY_API_ROUTES.CREATE_PATTERN, + method: 'POST', + body: newPackagePolicyData, + })) as AxiosResponse; + return packagePolicy.data.item; +}; + +const getEndpointPackageInfo = async ( + kbnClient: KbnClient +): Promise => { + const endpointPackage = ((await kbnClient.request({ + path: `${EPM_API_ROUTES.LIST_PATTERN}?category=security`, + method: 'GET', + })) as AxiosResponse).data.response.find( + (epmPackage) => epmPackage.name === 'endpoint' + ); + + if (!endpointPackage) { + throw new Error('EPM Endpoint package was not found!'); + } + + return endpointPackage; +}; + +const fleetEnrollAgentForHost = async ( + kbnClient: KbnClientWithApiKeySupport, + endpointHost: HostMetadata, + agentPolicyId: string +): Promise => { + // Get Enrollement key for host's applied policy + const enrollmentApiKey = await kbnClient + .request({ + path: ENROLLMENT_API_KEY_ROUTES.LIST_PATTERN, + method: 'GET', + query: { + kuery: `fleet-enrollment-api-keys.policy_id:"${agentPolicyId}"`, + }, + }) + .then((apiKeysResponse) => { + const apiKey = apiKeysResponse.data.list[0]; + + if (!apiKey) { + return Promise.reject( + new Error(`no API enrollment key found for agent policy id ${agentPolicyId}`) + ); + } + + return kbnClient + .request({ + path: ENROLLMENT_API_KEY_ROUTES.INFO_PATTERN.replace('{keyId}', apiKey.id), + method: 'GET', + }) + .catch((error) => { + // eslint-disable-next-line no-console + console.log('unable to retrieve enrollment api key for policy'); + return Promise.reject(error); + }); + }) + .then((apiKeyDetailsResponse) => { + return apiKeyDetailsResponse.data.item.api_key; + }) + .catch((error) => { + // eslint-disable-next-line no-console + console.error(error); + return ''; + }); + + if (enrollmentApiKey.length === 0) { + return; + } + + const fetchKibanaVersion = async () => { + const version = ((await kbnClient.request({ + path: '/api/status', + method: 'GET', + })) as AxiosResponse).data.version.number; + if (!version) { + // eslint-disable-next-line no-console + console.log('failed to retrieve kibana version'); + } + return version; + }; + + // Enroll an agent for the Host + const body: PostAgentEnrollRequest['body'] = { + type: 'PERMANENT', + metadata: { + local: { + elastic: { + agent: { + version: await fetchKibanaVersion(), + }, + }, + host: { + architecture: 'x86_64', + hostname: endpointHost.host, + name: endpointHost.host, + id: '1c032ec0-3a94-4d54-9ad2-c5610c0eaba4', + ip: ['fe80::703b:b9e6:887d:7f5/64', '10.0.2.15/24', '::1/128', '127.0.0.1/8'], + mac: ['08:00:27:d8:c5:c0'], + }, + os: { + family: 'windows', + kernel: '10.0.19041.388 (WinBuild.160101.0800)', + platform: 'windows', + version: '10.0', + name: 'Windows 10 Pro', + full: 'Windows 10 Pro(10.0)', + }, + }, + user_provided: { + dev_agent_version: '0.0.1', + region: 'us-east', + }, + }, + }; + + try { + // First enroll the agent + const res = await kbnClient.requestWithApiKey(AGENT_API_ROUTES.ENROLL_PATTERN, { + method: 'POST', + body: JSON.stringify(body), + headers: { + 'kbn-xsrf': 'xxx', + Authorization: `ApiKey ${enrollmentApiKey}`, + 'Content-Type': 'application/json', + }, + }); + + if (res) { + const enrollObj: PostAgentEnrollResponse = await res.json(); + if (!res.ok) { + // eslint-disable-next-line no-console + console.error('unable to enroll agent', enrollObj); + return; + } + // ------------------------------------------------ + // now check the agent in so that it can complete enrollment + const checkinBody: PostAgentCheckinRequest['body'] = { + events: [ + { + type: 'STATE', + subtype: 'RUNNING', + message: 'state changed from STOPPED to RUNNING', + timestamp: new Date().toISOString(), + payload: { + random: 'data', + state: 'RUNNING', + previous_state: 'STOPPED', + }, + agent_id: enrollObj.item.id, + }, + ], + }; + const checkinRes = await kbnClient + .requestWithApiKey( + AGENT_API_ROUTES.CHECKIN_PATTERN.replace('{agentId}', enrollObj.item.id), + { + method: 'POST', + body: JSON.stringify(checkinBody), + headers: { + 'kbn-xsrf': 'xxx', + Authorization: `ApiKey ${enrollObj.item.access_api_key}`, + 'Content-Type': 'application/json', + }, + } + ) + .catch((error) => { + return Promise.reject(error); + }); + + // Agent unenrolling? + if (checkinRes.status === 403) { + return; + } + + const checkinObj: PostAgentCheckinResponse = await checkinRes.json(); + if (!checkinRes.ok) { + // eslint-disable-next-line no-console + console.error( + `failed to checkin agent [${enrollObj.item.id}] for endpoint [${endpointHost.host.id}]` + ); + return enrollObj.item; + } + + // ------------------------------------------------ + // If we have an action to ack(), then do it now + if (checkinObj.actions.length) { + const ackActionBody: PostAgentAcksRequest['body'] = { + // @ts-ignore + events: checkinObj.actions.map((action) => { + return { + action_id: action.id, + type: 'ACTION_RESULT', + subtype: 'CONFIG', + timestamp: new Date().toISOString(), + agent_id: action.agent_id, + policy_id: agentPolicyId, + message: `endpoint generator: Endpoint Started`, + }; + }), + }; + const ackActionResp = await kbnClient.requestWithApiKey( + AGENT_API_ROUTES.ACKS_PATTERN.replace('{agentId}', enrollObj.item.id), + { + method: 'POST', + body: JSON.stringify(ackActionBody), + headers: { + 'kbn-xsrf': 'xxx', + Authorization: `ApiKey ${enrollObj.item.access_api_key}`, + 'Content-Type': 'application/json', + }, + } + ); + + const ackActionObj: PostAgentAcksResponse = await ackActionResp.json(); + if (!ackActionResp.ok) { + // eslint-disable-next-line no-console + console.error( + `failed to ACK Actions provided to agent [${enrollObj.item.id}] for endpoint [${endpointHost.host.id}]` + ); + // eslint-disable-next-line no-console + console.error(JSON.stringify(ackActionObj, null, 2)); + return enrollObj.item; + } + } + + return enrollObj.item; + } + } catch (error) { + // eslint-disable-next-line no-console + console.error(error); + } +}; diff --git a/x-pack/plugins/security_solution/cypress/cypress.json b/x-pack/plugins/security_solution/cypress/cypress.json index b097b0432e75d..173514565c8bb 100644 --- a/x-pack/plugins/security_solution/cypress/cypress.json +++ b/x-pack/plugins/security_solution/cypress/cypress.json @@ -1,6 +1,9 @@ { "baseUrl": "http://localhost:5601", "defaultCommandTimeout": 120000, + "retries": { + "runMode": 2 + }, "screenshotsFolder": "../../../target/kibana-security-solution/cypress/screenshots", "trashAssetsBeforeRuns": false, "video": false, diff --git a/x-pack/plugins/security_solution/cypress/integration/alerts.spec.ts b/x-pack/plugins/security_solution/cypress/integration/alerts.spec.ts index 7f02d41ad1b0c..db841d2a732c4 100644 --- a/x-pack/plugins/security_solution/cypress/integration/alerts.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/alerts.spec.ts @@ -158,6 +158,7 @@ describe('Alerts', () => { }); }); }); + context('Opening alerts', () => { beforeEach(() => { esArchiverLoad('closed_alerts'); @@ -204,6 +205,7 @@ describe('Alerts', () => { }); }); }); + context('Marking alerts as in-progress', () => { beforeEach(() => { esArchiverLoad('alerts'); diff --git a/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules.spec.ts b/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules.spec.ts index 20cf624b3360d..3fa304ab7cf19 100644 --- a/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules.spec.ts @@ -43,6 +43,7 @@ describe('Alerts detection rules', () => { waitForAlertsIndexToBeCreated(); goToManageAlertsDetectionRules(); waitForLoadElasticPrebuiltDetectionRulesTableToBeLoaded(); + cy.get(RULE_NAME) .eq(FIFTH_RULE) .invoke('text') @@ -56,7 +57,6 @@ describe('Alerts detection rules', () => { activateRule(SEVENTH_RULE); waitForRuleToBeActivated(); sortByActivatedRules(); - cy.get(RULE_NAME) .eq(FIRST_RULE) .invoke('text') @@ -70,7 +70,6 @@ describe('Alerts detection rules', () => { cy.wrap(expectedRulesNames).should('include', seventhRuleName); }); }); - cy.get(RULE_SWITCH).eq(FIRST_RULE).should('have.attr', 'role', 'switch'); cy.get(RULE_SWITCH).eq(SECOND_RULE).should('have.attr', 'role', 'switch'); }); diff --git a/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_custom.spec.ts b/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_custom.spec.ts index 17ff1dad79960..f999c5cecc392 100644 --- a/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_custom.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_custom.spec.ts @@ -4,7 +4,15 @@ * you may not use this file except in compliance with the Elastic License. */ -import { newRule, existingRule } from '../objects/rule'; +import { newRule, existingRule, indexPatterns, editedRule } from '../objects/rule'; +import { + ALERT_RULE_METHOD, + ALERT_RULE_NAME, + ALERT_RULE_RISK_SCORE, + ALERT_RULE_SEVERITY, + ALERT_RULE_VERSION, + NUMBER_OF_ALERTS, +} from '../screens/alerts'; import { CUSTOM_RULES_BTN, @@ -12,20 +20,49 @@ import { RULE_NAME, RULES_ROW, RULES_TABLE, + RULE_SWITCH, SEVERITY, SHOWING_RULES_TEXT, } from '../screens/alerts_detection_rules'; import { + ABOUT_CONTINUE_BTN, + ABOUT_EDIT_BUTTON, + ACTIONS_THROTTLE_INPUT, + CUSTOM_QUERY_INPUT, + DEFINE_CONTINUE_BUTTON, + DEFINE_EDIT_BUTTON, + DEFINE_INDEX_INPUT, + RISK_INPUT, + RULE_DESCRIPTION_INPUT, + RULE_NAME_INPUT, + SCHEDULE_INTERVAL_AMOUNT_INPUT, + SCHEDULE_INTERVAL_UNITS_INPUT, + SEVERITY_DROPDOWN, + TAGS_FIELD, +} from '../screens/create_new_rule'; +import { + ADDITIONAL_LOOK_BACK_DETAILS, + ABOUT_DETAILS, ABOUT_INVESTIGATION_NOTES, ABOUT_RULE_DESCRIPTION, + CUSTOM_QUERY_DETAILS, + DEFINITION_DETAILS, + FALSE_POSITIVES_DETAILS, + getDetails, + INDEX_PATTERNS_DETAILS, INVESTIGATION_NOTES_MARKDOWN, INVESTIGATION_NOTES_TOGGLE, + MITRE_ATTACK_DETAILS, + REFERENCE_URLS_DETAILS, + RISK_SCORE_DETAILS, RULE_ABOUT_DETAILS_HEADER_TOGGLE, RULE_NAME_HEADER, - getDescriptionForTitle, - ABOUT_DETAILS, - DEFINITION_DETAILS, + RULE_TYPE_DETAILS, + RUNS_EVERY_DETAILS, SCHEDULE_DETAILS, + SEVERITY_DETAILS, + TAGS_DETAILS, + TIMELINE_TEMPLATE_DETAILS, } from '../screens/rule_details'; import { @@ -37,46 +74,46 @@ import { changeToThreeHundredRowsPerPage, deleteFirstRule, deleteSelectedRules, + editFirstRule, filterByCustomRules, goToCreateNewRule, goToRuleDetails, selectNumberOfRules, waitForLoadElasticPrebuiltDetectionRulesTableToBeLoaded, waitForRulesToBeLoaded, - editFirstRule, } from '../tasks/alerts_detection_rules'; import { createAndActivateRule, + fillAboutRule, fillAboutRuleAndContinue, fillDefineCustomRuleWithImportedQueryAndContinue, + fillScheduleRuleAndContinue, goToAboutStepTab, - goToScheduleStepTab, goToActionsStepTab, - fillAboutRule, + goToScheduleStepTab, + waitForTheRuleToBeExecuted, } from '../tasks/create_new_rule'; +import { saveEditedRule } from '../tasks/edit_rule'; import { esArchiverLoad, esArchiverUnload } from '../tasks/es_archiver'; import { loginAndWaitForPageWithoutDateRange } from '../tasks/login'; +import { refreshPage } from '../tasks/security_header'; import { DETECTIONS_URL } from '../urls/navigation'; -import { - ACTIONS_THROTTLE_INPUT, - CUSTOM_QUERY_INPUT, - DEFINE_INDEX_INPUT, - RULE_NAME_INPUT, - RULE_DESCRIPTION_INPUT, - TAGS_FIELD, - SEVERITY_DROPDOWN, - RISK_INPUT, - SCHEDULE_INTERVAL_AMOUNT_INPUT, - SCHEDULE_INTERVAL_UNITS_INPUT, - DEFINE_EDIT_BUTTON, - DEFINE_CONTINUE_BUTTON, - ABOUT_EDIT_BUTTON, - ABOUT_CONTINUE_BTN, -} from '../screens/create_new_rule'; -import { saveEditedRule } from '../tasks/edit_rule'; -describe('Detection rules, custom', () => { +const expectedUrls = newRule.referenceUrls.join(''); +const expectedFalsePositives = newRule.falsePositivesExamples.join(''); +const expectedTags = newRule.tags.join(''); +const expectedMitre = newRule.mitre + .map(function (mitre) { + return mitre.tactic + mitre.techniques.join(''); + }) + .join(''); +const expectedNumberOfRules = 1; +const expectedEditedtags = editedRule.tags.join(''); +const expectedEditedIndexPatterns = + editedRule.index && editedRule.index.length ? editedRule.index : indexPatterns; + +describe('Custom detection rules creation', () => { before(() => { esArchiverLoad('timeline'); }); @@ -85,7 +122,7 @@ describe('Detection rules, custom', () => { esArchiverUnload('timeline'); }); - it('Creates and activates a new custom rule', () => { + it('Creates and activates a new rule', () => { loginAndWaitForPageWithoutDateRange(DETECTIONS_URL); waitForAlertsPanelToBeLoaded(); waitForAlertsIndexToBeCreated(); @@ -94,27 +131,27 @@ describe('Detection rules, custom', () => { goToCreateNewRule(); fillDefineCustomRuleWithImportedQueryAndContinue(newRule); fillAboutRuleAndContinue(newRule); + fillScheduleRuleAndContinue(newRule); // expect define step to repopulate cy.get(DEFINE_EDIT_BUTTON).click(); - cy.get(CUSTOM_QUERY_INPUT).invoke('text').should('eq', newRule.customQuery); + cy.get(CUSTOM_QUERY_INPUT).should('have.text', newRule.customQuery); cy.get(DEFINE_CONTINUE_BUTTON).should('exist').click({ force: true }); cy.get(DEFINE_CONTINUE_BUTTON).should('not.exist'); // expect about step to populate cy.get(ABOUT_EDIT_BUTTON).click(); - cy.get(RULE_NAME_INPUT).invoke('val').should('eq', newRule.name); + cy.get(RULE_NAME_INPUT).invoke('val').should('eql', newRule.name); cy.get(ABOUT_CONTINUE_BTN).should('exist').click({ force: true }); cy.get(ABOUT_CONTINUE_BTN).should('not.exist'); createAndActivateRule(); - cy.get(CUSTOM_RULES_BTN).invoke('text').should('eql', 'Custom rules (1)'); + cy.get(CUSTOM_RULES_BTN).should('have.text', 'Custom rules (1)'); changeToThreeHundredRowsPerPage(); waitForRulesToBeLoaded(); - const expectedNumberOfRules = 1; cy.get(RULES_TABLE).then(($table) => { cy.wrap($table.find(RULES_ROW).length).should('eql', expectedNumberOfRules); }); @@ -124,78 +161,59 @@ describe('Detection rules, custom', () => { cy.get(RULES_TABLE).then(($table) => { cy.wrap($table.find(RULES_ROW).length).should('eql', 1); }); - cy.get(RULE_NAME).invoke('text').should('eql', newRule.name); - cy.get(RISK_SCORE).invoke('text').should('eql', newRule.riskScore); - cy.get(SEVERITY).invoke('text').should('eql', newRule.severity); - cy.get('[data-test-subj="rule-switch"]').should('have.attr', 'aria-checked', 'true'); + cy.get(RULE_NAME).should('have.text', newRule.name); + cy.get(RISK_SCORE).should('have.text', newRule.riskScore); + cy.get(SEVERITY).should('have.text', newRule.severity); + cy.get(RULE_SWITCH).should('have.attr', 'aria-checked', 'true'); goToRuleDetails(); - let expectedUrls = ''; - newRule.referenceUrls.forEach((url) => { - expectedUrls = expectedUrls + url; - }); - let expectedFalsePositives = ''; - newRule.falsePositivesExamples.forEach((falsePositive) => { - expectedFalsePositives = expectedFalsePositives + falsePositive; - }); - let expectedTags = ''; - newRule.tags.forEach((tag) => { - expectedTags = expectedTags + tag; - }); - let expectedMitre = ''; - newRule.mitre.forEach((mitre) => { - expectedMitre = expectedMitre + mitre.tactic; - mitre.techniques.forEach((technique) => { - expectedMitre = expectedMitre + technique; - }); - }); - const expectedIndexPatterns = [ - 'apm-*-transaction*', - 'auditbeat-*', - 'endgame-*', - 'filebeat-*', - 'logs-*', - 'packetbeat-*', - 'winlogbeat-*', - ]; - - cy.get(RULE_NAME_HEADER).invoke('text').should('eql', `${newRule.name} Beta`); - - cy.get(ABOUT_RULE_DESCRIPTION).invoke('text').should('eql', newRule.description); + cy.get(RULE_NAME_HEADER).should('have.text', `${newRule.name} Beta`); + cy.get(ABOUT_RULE_DESCRIPTION).should('have.text', newRule.description); cy.get(ABOUT_DETAILS).within(() => { - getDescriptionForTitle('Severity').invoke('text').should('eql', newRule.severity); - getDescriptionForTitle('Risk score').invoke('text').should('eql', newRule.riskScore); - getDescriptionForTitle('Reference URLs').invoke('text').should('eql', expectedUrls); - getDescriptionForTitle('False positive examples') - .invoke('text') - .should('eql', expectedFalsePositives); - getDescriptionForTitle('MITRE ATT&CK').invoke('text').should('eql', expectedMitre); - getDescriptionForTitle('Tags').invoke('text').should('eql', expectedTags); + getDetails(SEVERITY_DETAILS).should('have.text', newRule.severity); + getDetails(RISK_SCORE_DETAILS).should('have.text', newRule.riskScore); + getDetails(REFERENCE_URLS_DETAILS).should('have.text', expectedUrls); + getDetails(FALSE_POSITIVES_DETAILS).should('have.text', expectedFalsePositives); + getDetails(MITRE_ATTACK_DETAILS).should('have.text', expectedMitre); + getDetails(TAGS_DETAILS).should('have.text', expectedTags); }); - cy.get(RULE_ABOUT_DETAILS_HEADER_TOGGLE).eq(INVESTIGATION_NOTES_TOGGLE).click({ force: true }); - cy.get(ABOUT_INVESTIGATION_NOTES).invoke('text').should('eql', INVESTIGATION_NOTES_MARKDOWN); - + cy.get(ABOUT_INVESTIGATION_NOTES).should('have.text', INVESTIGATION_NOTES_MARKDOWN); cy.get(DEFINITION_DETAILS).within(() => { - getDescriptionForTitle('Index patterns') - .invoke('text') - .should('eql', expectedIndexPatterns.join('')); - getDescriptionForTitle('Custom query') - .invoke('text') - .should('eql', `${newRule.customQuery} `); - getDescriptionForTitle('Rule type').invoke('text').should('eql', 'Query'); - getDescriptionForTitle('Timeline template').invoke('text').should('eql', 'None'); + getDetails(INDEX_PATTERNS_DETAILS).should('have.text', indexPatterns.join('')); + getDetails(CUSTOM_QUERY_DETAILS).should('have.text', `${newRule.customQuery} `); + getDetails(RULE_TYPE_DETAILS).should('have.text', 'Query'); + getDetails(TIMELINE_TEMPLATE_DETAILS).should('have.text', 'None'); }); - cy.get(SCHEDULE_DETAILS).within(() => { - getDescriptionForTitle('Runs every').invoke('text').should('eql', '5m'); - getDescriptionForTitle('Additional look-back time').invoke('text').should('eql', '1m'); + getDetails(RUNS_EVERY_DETAILS).should( + 'have.text', + `${newRule.runsEvery.interval}${newRule.runsEvery.type}` + ); + getDetails(ADDITIONAL_LOOK_BACK_DETAILS).should( + 'have.text', + `${newRule.lookBack.interval}${newRule.lookBack.type}` + ); }); + + refreshPage(); + waitForTheRuleToBeExecuted(); + + cy.get(NUMBER_OF_ALERTS) + .invoke('text') + .then((numberOfAlertsText) => { + cy.wrap(parseInt(numberOfAlertsText, 10)).should('be.above', 0); + }); + cy.get(ALERT_RULE_NAME).first().should('have.text', newRule.name); + cy.get(ALERT_RULE_VERSION).first().should('have.text', '1'); + cy.get(ALERT_RULE_METHOD).first().should('have.text', 'query'); + cy.get(ALERT_RULE_SEVERITY).first().should('have.text', newRule.severity.toLowerCase()); + cy.get(ALERT_RULE_RISK_SCORE).first().should('have.text', newRule.riskScore); }); }); -describe('Deletes custom rules', () => { +describe('Custom detection rules deletion and edition', () => { beforeEach(() => { esArchiverLoad('custom_rules'); loginAndWaitForPageWithoutDateRange(DETECTIONS_URL); @@ -208,143 +226,132 @@ describe('Deletes custom rules', () => { esArchiverUnload('custom_rules'); }); - it('Deletes one rule', () => { - cy.get(RULES_TABLE) - .find(RULES_ROW) - .then((rules) => { - const initialNumberOfRules = rules.length; - const expectedNumberOfRulesAfterDeletion = initialNumberOfRules - 1; - - cy.get(SHOWING_RULES_TEXT) - .invoke('text') - .should('eql', `Showing ${initialNumberOfRules} rules`); - - deleteFirstRule(); - waitForRulesToBeLoaded(); - - cy.get(RULES_TABLE).then(($table) => { - cy.wrap($table.find(RULES_ROW).length).should('eql', expectedNumberOfRulesAfterDeletion); - }); - cy.get(SHOWING_RULES_TEXT) - .invoke('text') - .should('eql', `Showing ${expectedNumberOfRulesAfterDeletion} rules`); - cy.get(CUSTOM_RULES_BTN) - .invoke('text') - .should('eql', `Custom rules (${expectedNumberOfRulesAfterDeletion})`); - }); - }); - - it('Deletes more than one rule', () => { - cy.get(RULES_TABLE) - .find(RULES_ROW) - .then((rules) => { - const initialNumberOfRules = rules.length; - const numberOfRulesToBeDeleted = 3; - const expectedNumberOfRulesAfterDeletion = initialNumberOfRules - numberOfRulesToBeDeleted; - - selectNumberOfRules(numberOfRulesToBeDeleted); - deleteSelectedRules(); - waitForRulesToBeLoaded(); - - cy.get(RULES_TABLE).then(($table) => { - cy.wrap($table.find(RULES_ROW).length).should('eql', expectedNumberOfRulesAfterDeletion); + context('Deletion', () => { + it('Deletes one rule', () => { + cy.get(RULES_TABLE) + .find(RULES_ROW) + .then((rules) => { + const initialNumberOfRules = rules.length; + const expectedNumberOfRulesAfterDeletion = initialNumberOfRules - 1; + + cy.get(SHOWING_RULES_TEXT).should('have.text', `Showing ${initialNumberOfRules} rules`); + + deleteFirstRule(); + waitForRulesToBeLoaded(); + + cy.get(RULES_TABLE).then(($table) => { + cy.wrap($table.find(RULES_ROW).length).should( + 'eql', + expectedNumberOfRulesAfterDeletion + ); + }); + cy.get(SHOWING_RULES_TEXT).should( + 'have.text', + `Showing ${expectedNumberOfRulesAfterDeletion} rules` + ); + cy.get(CUSTOM_RULES_BTN).should( + 'have.text', + `Custom rules (${expectedNumberOfRulesAfterDeletion})` + ); }); - cy.get(SHOWING_RULES_TEXT) - .invoke('text') - .should('eql', `Showing ${expectedNumberOfRulesAfterDeletion} rule`); - cy.get(CUSTOM_RULES_BTN) - .invoke('text') - .should('eql', `Custom rules (${expectedNumberOfRulesAfterDeletion})`); - }); - }); - - it('Allows a rule to be edited', () => { - editFirstRule(); - - // expect define step to populate - cy.get(CUSTOM_QUERY_INPUT).invoke('text').should('eq', existingRule.customQuery); - if (existingRule.index && existingRule.index.length > 0) { - cy.get(DEFINE_INDEX_INPUT).invoke('text').should('eq', existingRule.index.join('')); - } - - goToAboutStepTab(); - - // expect about step to populate - cy.get(RULE_NAME_INPUT).invoke('val').should('eql', existingRule.name); - cy.get(RULE_DESCRIPTION_INPUT).invoke('text').should('eql', existingRule.description); - cy.get(TAGS_FIELD).invoke('text').should('eql', existingRule.tags.join('')); - - cy.get(SEVERITY_DROPDOWN).invoke('text').should('eql', existingRule.severity); - cy.get(RISK_INPUT).invoke('val').should('eql', existingRule.riskScore); - - goToScheduleStepTab(); - - // expect schedule step to populate - const intervalParts = existingRule.interval && existingRule.interval.match(/[0-9]+|[a-zA-Z]+/g); - if (intervalParts) { - const [amount, unit] = intervalParts; - cy.get(SCHEDULE_INTERVAL_AMOUNT_INPUT).invoke('val').should('eql', amount); - cy.get(SCHEDULE_INTERVAL_UNITS_INPUT).invoke('val').should('eql', unit); - } else { - throw new Error('Cannot assert scheduling info on a rule without an interval'); - } - - goToActionsStepTab(); - - cy.get(ACTIONS_THROTTLE_INPUT).invoke('val').should('eql', 'no_actions'); - - goToAboutStepTab(); - - const editedRule = { - ...existingRule, - severity: 'Medium', - description: 'Edited Rule description', - }; - - fillAboutRule(editedRule); - saveEditedRule(); - - const expectedTags = editedRule.tags.join(''); - const expectedIndexPatterns = - editedRule.index && editedRule.index.length - ? editedRule.index - : [ - 'apm-*-transaction*', - 'auditbeat-*', - 'endgame-*', - 'filebeat-*', - 'logs-*', - 'packetbeat-*', - 'winlogbeat-*', - ]; - - cy.get(RULE_NAME_HEADER).invoke('text').should('eql', `${editedRule.name} Beta`); - - cy.get(ABOUT_RULE_DESCRIPTION).invoke('text').should('eql', editedRule.description); - cy.get(ABOUT_DETAILS).within(() => { - getDescriptionForTitle('Severity').invoke('text').should('eql', editedRule.severity); - getDescriptionForTitle('Risk score').invoke('text').should('eql', editedRule.riskScore); - getDescriptionForTitle('Tags').invoke('text').should('eql', expectedTags); }); - cy.get(RULE_ABOUT_DETAILS_HEADER_TOGGLE).eq(INVESTIGATION_NOTES_TOGGLE).click({ force: true }); - cy.get(ABOUT_INVESTIGATION_NOTES).invoke('text').should('eql', editedRule.note); - - cy.get(DEFINITION_DETAILS).within(() => { - getDescriptionForTitle('Index patterns') - .invoke('text') - .should('eql', expectedIndexPatterns.join('')); - getDescriptionForTitle('Custom query') - .invoke('text') - .should('eql', `${editedRule.customQuery} `); - getDescriptionForTitle('Rule type').invoke('text').should('eql', 'Query'); - getDescriptionForTitle('Timeline template').invoke('text').should('eql', 'None'); + it('Deletes more than one rule', () => { + cy.get(RULES_TABLE) + .find(RULES_ROW) + .then((rules) => { + const initialNumberOfRules = rules.length; + const numberOfRulesToBeDeleted = 3; + const expectedNumberOfRulesAfterDeletion = + initialNumberOfRules - numberOfRulesToBeDeleted; + + selectNumberOfRules(numberOfRulesToBeDeleted); + deleteSelectedRules(); + waitForRulesToBeLoaded(); + + cy.get(RULES_TABLE).then(($table) => { + cy.wrap($table.find(RULES_ROW).length).should( + 'eql', + expectedNumberOfRulesAfterDeletion + ); + }); + cy.get(SHOWING_RULES_TEXT).should( + 'have.text', + `Showing ${expectedNumberOfRulesAfterDeletion} rule` + ); + cy.get(CUSTOM_RULES_BTN).should( + 'have.text', + `Custom rules (${expectedNumberOfRulesAfterDeletion})` + ); + }); }); + }); - if (editedRule.interval) { - cy.get(SCHEDULE_DETAILS).within(() => { - getDescriptionForTitle('Runs every').invoke('text').should('eql', editedRule.interval); + context('Edition', () => { + it('Allows a rule to be edited', () => { + editFirstRule(); + + // expect define step to populate + cy.get(CUSTOM_QUERY_INPUT).should('have.text', existingRule.customQuery); + if (existingRule.index && existingRule.index.length > 0) { + cy.get(DEFINE_INDEX_INPUT).should('have.text', existingRule.index.join('')); + } + + goToAboutStepTab(); + + // expect about step to populate + cy.get(RULE_NAME_INPUT).invoke('val').should('eql', existingRule.name); + cy.get(RULE_DESCRIPTION_INPUT).should('have.text', existingRule.description); + cy.get(TAGS_FIELD).should('have.text', existingRule.tags.join('')); + cy.get(SEVERITY_DROPDOWN).should('have.text', existingRule.severity); + cy.get(RISK_INPUT).invoke('val').should('eql', existingRule.riskScore); + + goToScheduleStepTab(); + + // expect schedule step to populate + const intervalParts = + existingRule.interval && existingRule.interval.match(/[0-9]+|[a-zA-Z]+/g); + if (intervalParts) { + const [amount, unit] = intervalParts; + cy.get(SCHEDULE_INTERVAL_AMOUNT_INPUT).invoke('val').should('eql', amount); + cy.get(SCHEDULE_INTERVAL_UNITS_INPUT).invoke('val').should('eql', unit); + } else { + throw new Error('Cannot assert scheduling info on a rule without an interval'); + } + + goToActionsStepTab(); + + cy.get(ACTIONS_THROTTLE_INPUT).invoke('val').should('eql', 'no_actions'); + + goToAboutStepTab(); + fillAboutRule(editedRule); + saveEditedRule(); + + cy.get(RULE_NAME_HEADER).should('have.text', `${editedRule.name} Beta`); + cy.get(ABOUT_RULE_DESCRIPTION).should('have.text', editedRule.description); + cy.get(ABOUT_DETAILS).within(() => { + getDetails(SEVERITY_DETAILS).should('have.text', editedRule.severity); + getDetails(RISK_SCORE_DETAILS).should('have.text', editedRule.riskScore); + getDetails(TAGS_DETAILS).should('have.text', expectedEditedtags); + }); + cy.get(RULE_ABOUT_DETAILS_HEADER_TOGGLE) + .eq(INVESTIGATION_NOTES_TOGGLE) + .click({ force: true }); + cy.get(ABOUT_INVESTIGATION_NOTES).should('have.text', editedRule.note); + cy.get(DEFINITION_DETAILS).within(() => { + getDetails(INDEX_PATTERNS_DETAILS).should( + 'have.text', + expectedEditedIndexPatterns.join('') + ); + getDetails(CUSTOM_QUERY_DETAILS).should('have.text', `${editedRule.customQuery} `); + getDetails(RULE_TYPE_DETAILS).should('have.text', 'Query'); + getDetails(TIMELINE_TEMPLATE_DETAILS).should('have.text', 'None'); }); - } + if (editedRule.interval) { + cy.get(SCHEDULE_DETAILS).within(() => { + getDetails(RUNS_EVERY_DETAILS).should('have.text', editedRule.interval); + }); + } + }); }); }); diff --git a/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_eql.spec.ts b/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_eql.spec.ts index 76871929fe050..e2ff51dd544a2 100644 --- a/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_eql.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_eql.spec.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { eqlRule } from '../objects/rule'; +import { eqlRule, indexPatterns } from '../objects/rule'; import { CUSTOM_RULES_BTN, @@ -12,19 +12,32 @@ import { RULE_NAME, RULES_ROW, RULES_TABLE, + RULE_SWITCH, SEVERITY, } from '../screens/alerts_detection_rules'; import { ABOUT_DETAILS, ABOUT_INVESTIGATION_NOTES, ABOUT_RULE_DESCRIPTION, + ADDITIONAL_LOOK_BACK_DETAILS, + CUSTOM_QUERY_DETAILS, DEFINITION_DETAILS, - getDescriptionForTitle, + FALSE_POSITIVES_DETAILS, + getDetails, + INDEX_PATTERNS_DETAILS, INVESTIGATION_NOTES_MARKDOWN, INVESTIGATION_NOTES_TOGGLE, + MITRE_ATTACK_DETAILS, + REFERENCE_URLS_DETAILS, + RISK_SCORE_DETAILS, RULE_ABOUT_DETAILS_HEADER_TOGGLE, RULE_NAME_HEADER, + RULE_TYPE_DETAILS, + RUNS_EVERY_DETAILS, SCHEDULE_DETAILS, + SEVERITY_DETAILS, + TAGS_DETAILS, + TIMELINE_TEMPLATE_DETAILS, } from '../screens/rule_details'; import { @@ -43,14 +56,25 @@ import { import { createAndActivateRule, fillAboutRuleAndContinue, - selectEqlRuleType, fillDefineEqlRuleAndContinue, + fillScheduleRuleAndContinue, + selectEqlRuleType, } from '../tasks/create_new_rule'; import { esArchiverLoad, esArchiverUnload } from '../tasks/es_archiver'; import { loginAndWaitForPageWithoutDateRange } from '../tasks/login'; import { DETECTIONS_URL } from '../urls/navigation'; +const expectedUrls = eqlRule.referenceUrls.join(''); +const expectedFalsePositives = eqlRule.falsePositivesExamples.join(''); +const expectedTags = eqlRule.tags.join(''); +const expectedMitre = eqlRule.mitre + .map(function (mitre) { + return mitre.tactic + mitre.techniques.join(''); + }) + .join(''); +const expectedNumberOfRules = 1; + describe('Detection rules, EQL', () => { before(() => { esArchiverLoad('timeline'); @@ -70,14 +94,14 @@ describe('Detection rules, EQL', () => { selectEqlRuleType(); fillDefineEqlRuleAndContinue(eqlRule); fillAboutRuleAndContinue(eqlRule); + fillScheduleRuleAndContinue(eqlRule); createAndActivateRule(); - cy.get(CUSTOM_RULES_BTN).invoke('text').should('eql', 'Custom rules (1)'); + cy.get(CUSTOM_RULES_BTN).should('have.text', 'Custom rules (1)'); changeToThreeHundredRowsPerPage(); waitForRulesToBeLoaded(); - const expectedNumberOfRules = 1; cy.get(RULES_TABLE).then(($table) => { cy.wrap($table.find(RULES_ROW).length).should('eql', expectedNumberOfRules); }); @@ -87,73 +111,40 @@ describe('Detection rules, EQL', () => { cy.get(RULES_TABLE).then(($table) => { cy.wrap($table.find(RULES_ROW).length).should('eql', 1); }); - cy.get(RULE_NAME).invoke('text').should('eql', eqlRule.name); - cy.get(RISK_SCORE).invoke('text').should('eql', eqlRule.riskScore); - cy.get(SEVERITY).invoke('text').should('eql', eqlRule.severity); - cy.get('[data-test-subj="rule-switch"]').should('have.attr', 'aria-checked', 'true'); + cy.get(RULE_NAME).should('have.text', eqlRule.name); + cy.get(RISK_SCORE).should('have.text', eqlRule.riskScore); + cy.get(SEVERITY).should('have.text', eqlRule.severity); + cy.get(RULE_SWITCH).should('have.attr', 'aria-checked', 'true'); goToRuleDetails(); - let expectedUrls = ''; - eqlRule.referenceUrls.forEach((url) => { - expectedUrls = expectedUrls + url; - }); - let expectedFalsePositives = ''; - eqlRule.falsePositivesExamples.forEach((falsePositive) => { - expectedFalsePositives = expectedFalsePositives + falsePositive; - }); - let expectedTags = ''; - eqlRule.tags.forEach((tag) => { - expectedTags = expectedTags + tag; - }); - let expectedMitre = ''; - eqlRule.mitre.forEach((mitre) => { - expectedMitre = expectedMitre + mitre.tactic; - mitre.techniques.forEach((technique) => { - expectedMitre = expectedMitre + technique; - }); - }); - const expectedIndexPatterns = [ - 'apm-*-transaction*', - 'auditbeat-*', - 'endgame-*', - 'filebeat-*', - 'logs-*', - 'packetbeat-*', - 'winlogbeat-*', - ]; - - cy.get(RULE_NAME_HEADER).invoke('text').should('eql', `${eqlRule.name} Beta`); - - cy.get(ABOUT_RULE_DESCRIPTION).invoke('text').should('eql', eqlRule.description); + cy.get(RULE_NAME_HEADER).should('have.text', `${eqlRule.name} Beta`); + cy.get(ABOUT_RULE_DESCRIPTION).should('have.text', eqlRule.description); cy.get(ABOUT_DETAILS).within(() => { - getDescriptionForTitle('Severity').invoke('text').should('eql', eqlRule.severity); - getDescriptionForTitle('Risk score').invoke('text').should('eql', eqlRule.riskScore); - getDescriptionForTitle('Reference URLs').invoke('text').should('eql', expectedUrls); - getDescriptionForTitle('False positive examples') - .invoke('text') - .should('eql', expectedFalsePositives); - getDescriptionForTitle('MITRE ATT&CK').invoke('text').should('eql', expectedMitre); - getDescriptionForTitle('Tags').invoke('text').should('eql', expectedTags); + getDetails(SEVERITY_DETAILS).should('have.text', eqlRule.severity); + getDetails(RISK_SCORE_DETAILS).should('have.text', eqlRule.riskScore); + getDetails(REFERENCE_URLS_DETAILS).should('have.text', expectedUrls); + getDetails(FALSE_POSITIVES_DETAILS).should('have.text', expectedFalsePositives); + getDetails(MITRE_ATTACK_DETAILS).should('have.text', expectedMitre); + getDetails(TAGS_DETAILS).should('have.text', expectedTags); }); - cy.get(RULE_ABOUT_DETAILS_HEADER_TOGGLE).eq(INVESTIGATION_NOTES_TOGGLE).click({ force: true }); - cy.get(ABOUT_INVESTIGATION_NOTES).invoke('text').should('eql', INVESTIGATION_NOTES_MARKDOWN); - + cy.get(ABOUT_INVESTIGATION_NOTES).should('have.text', INVESTIGATION_NOTES_MARKDOWN); cy.get(DEFINITION_DETAILS).within(() => { - getDescriptionForTitle('Index patterns') - .invoke('text') - .should('eql', expectedIndexPatterns.join('')); - getDescriptionForTitle('Custom query') - .invoke('text') - .should('eql', `${eqlRule.customQuery} `); - getDescriptionForTitle('Rule type').invoke('text').should('eql', 'Event Correlation'); - getDescriptionForTitle('Timeline template').invoke('text').should('eql', 'None'); + getDetails(INDEX_PATTERNS_DETAILS).should('have.text', indexPatterns.join('')); + getDetails(CUSTOM_QUERY_DETAILS).should('have.text', `${eqlRule.customQuery} `); + getDetails(RULE_TYPE_DETAILS).should('have.text', 'Event Correlation'); + getDetails(TIMELINE_TEMPLATE_DETAILS).should('have.text', 'None'); }); - cy.get(SCHEDULE_DETAILS).within(() => { - getDescriptionForTitle('Runs every').invoke('text').should('eql', '5m'); - getDescriptionForTitle('Additional look-back time').invoke('text').should('eql', '1m'); + getDetails(RUNS_EVERY_DETAILS).should( + 'have.text', + `${eqlRule.runsEvery.interval}${eqlRule.runsEvery.type}` + ); + getDetails(ADDITIONAL_LOOK_BACK_DETAILS).should( + 'have.text', + `${eqlRule.lookBack.interval}${eqlRule.lookBack.type}` + ); }); }); }); diff --git a/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_ml.spec.ts b/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_ml.spec.ts index 47e49d48e2aec..49ec6381cbc89 100644 --- a/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_ml.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_ml.spec.ts @@ -16,14 +16,25 @@ import { SEVERITY, } from '../screens/alerts_detection_rules'; import { + ABOUT_DETAILS, ABOUT_RULE_DESCRIPTION, + ADDITIONAL_LOOK_BACK_DETAILS, + ANOMALY_SCORE_DETAILS, + DEFINITION_DETAILS, + FALSE_POSITIVES_DETAILS, + getDetails, MACHINE_LEARNING_JOB_ID, MACHINE_LEARNING_JOB_STATUS, + MITRE_ATTACK_DETAILS, + REFERENCE_URLS_DETAILS, + RISK_SCORE_DETAILS, RULE_NAME_HEADER, - getDescriptionForTitle, - ABOUT_DETAILS, - DEFINITION_DETAILS, + RULE_TYPE_DETAILS, + RUNS_EVERY_DETAILS, SCHEDULE_DETAILS, + SEVERITY_DETAILS, + TAGS_DETAILS, + TIMELINE_TEMPLATE_DETAILS, } from '../screens/rule_details'; import { @@ -43,6 +54,7 @@ import { createAndActivateRule, fillAboutRuleAndContinue, fillDefineMachineLearningRuleAndContinue, + fillScheduleRuleAndContinue, selectMachineLearningRuleType, } from '../tasks/create_new_rule'; import { esArchiverLoad, esArchiverUnload } from '../tasks/es_archiver'; @@ -50,6 +62,16 @@ import { loginAndWaitForPageWithoutDateRange } from '../tasks/login'; import { DETECTIONS_URL } from '../urls/navigation'; +const expectedUrls = machineLearningRule.referenceUrls.join(''); +const expectedFalsePositives = machineLearningRule.falsePositivesExamples.join(''); +const expectedTags = machineLearningRule.tags.join(''); +const expectedMitre = machineLearningRule.mitre + .map(function (mitre) { + return mitre.tactic + mitre.techniques.join(''); + }) + .join(''); +const expectedNumberOfRules = totalNumberOfPrebuiltRulesInEsArchive + 1; + describe('Detection rules, machine learning', () => { before(() => { esArchiverLoad('prebuilt_rules_loaded'); @@ -69,6 +91,7 @@ describe('Detection rules, machine learning', () => { selectMachineLearningRuleType(); fillDefineMachineLearningRuleAndContinue(machineLearningRule); fillAboutRuleAndContinue(machineLearningRule); + fillScheduleRuleAndContinue(machineLearningRule); createAndActivateRule(); cy.get(CUSTOM_RULES_BTN).invoke('text').should('eql', 'Custom rules (1)'); @@ -76,7 +99,6 @@ describe('Detection rules, machine learning', () => { changeToThreeHundredRowsPerPage(); waitForRulesToBeLoaded(); - const expectedNumberOfRules = totalNumberOfPrebuiltRulesInEsArchive + 1; cy.get(RULES_TABLE).then(($table) => { cy.wrap($table.find(RULES_ROW).length).should('eql', expectedNumberOfRules); }); @@ -86,67 +108,42 @@ describe('Detection rules, machine learning', () => { cy.get(RULES_TABLE).then(($table) => { cy.wrap($table.find(RULES_ROW).length).should('eql', 1); }); - cy.get(RULE_NAME).invoke('text').should('eql', machineLearningRule.name); - cy.get(RISK_SCORE).invoke('text').should('eql', machineLearningRule.riskScore); - cy.get(SEVERITY).invoke('text').should('eql', machineLearningRule.severity); + cy.get(RULE_NAME).should('have.text', machineLearningRule.name); + cy.get(RISK_SCORE).should('have.text', machineLearningRule.riskScore); + cy.get(SEVERITY).should('have.text', machineLearningRule.severity); cy.get(RULE_SWITCH).should('have.attr', 'aria-checked', 'true'); goToRuleDetails(); - let expectedUrls = ''; - machineLearningRule.referenceUrls.forEach((url) => { - expectedUrls = expectedUrls + url; - }); - let expectedFalsePositives = ''; - machineLearningRule.falsePositivesExamples.forEach((falsePositive) => { - expectedFalsePositives = expectedFalsePositives + falsePositive; - }); - let expectedTags = ''; - machineLearningRule.tags.forEach((tag) => { - expectedTags = expectedTags + tag; - }); - let expectedMitre = ''; - machineLearningRule.mitre.forEach((mitre) => { - expectedMitre = expectedMitre + mitre.tactic; - mitre.techniques.forEach((technique) => { - expectedMitre = expectedMitre + technique; - }); - }); - - cy.get(RULE_NAME_HEADER).invoke('text').should('eql', `${machineLearningRule.name} Beta`); - - cy.get(ABOUT_RULE_DESCRIPTION).invoke('text').should('eql', machineLearningRule.description); + cy.get(RULE_NAME_HEADER).should('have.text', `${machineLearningRule.name} Beta`); + cy.get(ABOUT_RULE_DESCRIPTION).should('have.text', machineLearningRule.description); cy.get(ABOUT_DETAILS).within(() => { - getDescriptionForTitle('Severity').invoke('text').should('eql', machineLearningRule.severity); - getDescriptionForTitle('Risk score') - .invoke('text') - .should('eql', machineLearningRule.riskScore); - getDescriptionForTitle('Reference URLs').invoke('text').should('eql', expectedUrls); - getDescriptionForTitle('False positive examples') - .invoke('text') - .should('eql', expectedFalsePositives); - getDescriptionForTitle('MITRE ATT&CK').invoke('text').should('eql', expectedMitre); - getDescriptionForTitle('Tags').invoke('text').should('eql', expectedTags); + getDetails(SEVERITY_DETAILS).should('have.text', machineLearningRule.severity); + getDetails(RISK_SCORE_DETAILS).should('have.text', machineLearningRule.riskScore); + getDetails(REFERENCE_URLS_DETAILS).should('have.text', expectedUrls); + getDetails(FALSE_POSITIVES_DETAILS).should('have.text', expectedFalsePositives); + getDetails(MITRE_ATTACK_DETAILS).should('have.text', expectedMitre); + getDetails(TAGS_DETAILS).should('have.text', expectedTags); }); - cy.get(DEFINITION_DETAILS).within(() => { - getDescriptionForTitle('Anomaly score') - .invoke('text') - .should('eql', machineLearningRule.anomalyScoreThreshold); - getDescriptionForTitle('Anomaly score') - .invoke('text') - .should('eql', machineLearningRule.anomalyScoreThreshold); - getDescriptionForTitle('Rule type').invoke('text').should('eql', 'Machine Learning'); - getDescriptionForTitle('Timeline template').invoke('text').should('eql', 'None'); - cy.get(MACHINE_LEARNING_JOB_STATUS).invoke('text').should('eql', 'Stopped'); - cy.get(MACHINE_LEARNING_JOB_ID) - .invoke('text') - .should('eql', machineLearningRule.machineLearningJob); + getDetails(ANOMALY_SCORE_DETAILS).should( + 'have.text', + machineLearningRule.anomalyScoreThreshold + ); + getDetails(RULE_TYPE_DETAILS).should('have.text', 'Machine Learning'); + getDetails(TIMELINE_TEMPLATE_DETAILS).should('have.text', 'None'); + cy.get(MACHINE_LEARNING_JOB_STATUS).should('have.text', 'Stopped'); + cy.get(MACHINE_LEARNING_JOB_ID).should('have.text', machineLearningRule.machineLearningJob); }); - cy.get(SCHEDULE_DETAILS).within(() => { - getDescriptionForTitle('Runs every').invoke('text').should('eql', '5m'); - getDescriptionForTitle('Additional look-back time').invoke('text').should('eql', '1m'); + getDetails(RUNS_EVERY_DETAILS).should( + 'have.text', + `${machineLearningRule.runsEvery.interval}${machineLearningRule.runsEvery.type}` + ); + getDetails(ADDITIONAL_LOOK_BACK_DETAILS).should( + 'have.text', + `${machineLearningRule.lookBack.interval}${machineLearningRule.lookBack.type}` + ); }); }); }); diff --git a/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_override.spec.ts b/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_override.spec.ts index 4edf5e1866087..090012de72534 100644 --- a/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_override.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_override.spec.ts @@ -4,33 +4,58 @@ * you may not use this file except in compliance with the Elastic License. */ -import { newOverrideRule } from '../objects/rule'; +import { indexPatterns, newOverrideRule, severitiesOverride } from '../objects/rule'; +import { + NUMBER_OF_ALERTS, + ALERT_RULE_NAME, + ALERT_RULE_METHOD, + ALERT_RULE_RISK_SCORE, + ALERT_RULE_SEVERITY, + ALERT_RULE_VERSION, +} from '../screens/alerts'; import { CUSTOM_RULES_BTN, RISK_SCORE, RULE_NAME, + RULE_SWITCH, RULES_ROW, RULES_TABLE, SEVERITY, } from '../screens/alerts_detection_rules'; import { ABOUT_INVESTIGATION_NOTES, + ABOUT_DETAILS, ABOUT_RULE_DESCRIPTION, + ADDITIONAL_LOOK_BACK_DETAILS, + CUSTOM_QUERY_DETAILS, + DEFINITION_DETAILS, + DETAILS_DESCRIPTION, + DETAILS_TITLE, + FALSE_POSITIVES_DETAILS, + getDetails, + INDEX_PATTERNS_DETAILS, INVESTIGATION_NOTES_MARKDOWN, INVESTIGATION_NOTES_TOGGLE, + MITRE_ATTACK_DETAILS, + REFERENCE_URLS_DETAILS, + RISK_SCORE_DETAILS, + RISK_SCORE_OVERRIDE_DETAILS, RULE_ABOUT_DETAILS_HEADER_TOGGLE, RULE_NAME_HEADER, - ABOUT_DETAILS, - getDescriptionForTitle, - DEFINITION_DETAILS, + RULE_NAME_OVERRIDE_DETAILS, + RULE_TYPE_DETAILS, + RUNS_EVERY_DETAILS, SCHEDULE_DETAILS, - DETAILS_TITLE, - DETAILS_DESCRIPTION, + SEVERITY_DETAILS, + TAGS_DETAILS, + TIMELINE_TEMPLATE_DETAILS, + TIMESTAMP_OVERRIDE_DETAILS, } from '../screens/rule_details'; import { goToManageAlertsDetectionRules, + sortRiskScore, waitForAlertsIndexToBeCreated, waitForAlertsPanelToBeLoaded, } from '../tasks/alerts'; @@ -46,12 +71,24 @@ import { createAndActivateRule, fillAboutRuleWithOverrideAndContinue, fillDefineCustomRuleWithImportedQueryAndContinue, + fillScheduleRuleAndContinue, + waitForTheRuleToBeExecuted, } from '../tasks/create_new_rule'; import { esArchiverLoad, esArchiverUnload } from '../tasks/es_archiver'; import { loginAndWaitForPageWithoutDateRange } from '../tasks/login'; +import { refreshPage } from '../tasks/security_header'; import { DETECTIONS_URL } from '../urls/navigation'; +const expectedUrls = newOverrideRule.referenceUrls.join(''); +const expectedFalsePositives = newOverrideRule.falsePositivesExamples.join(''); +const expectedTags = newOverrideRule.tags.join(''); +const expectedMitre = newOverrideRule.mitre + .map(function (mitre) { + return mitre.tactic + mitre.techniques.join(''); + }) + .join(''); + describe('Detection rules, override', () => { before(() => { esArchiverLoad('timeline'); @@ -70,9 +107,10 @@ describe('Detection rules, override', () => { goToCreateNewRule(); fillDefineCustomRuleWithImportedQueryAndContinue(newOverrideRule); fillAboutRuleWithOverrideAndContinue(newOverrideRule); + fillScheduleRuleAndContinue(newOverrideRule); createAndActivateRule(); - cy.get(CUSTOM_RULES_BTN).invoke('text').should('eql', 'Custom rules (1)'); + cy.get(CUSTOM_RULES_BTN).should('have.text', 'Custom rules (1)'); changeToThreeHundredRowsPerPage(); waitForRulesToBeLoaded(); @@ -87,98 +125,75 @@ describe('Detection rules, override', () => { cy.get(RULES_TABLE).then(($table) => { cy.wrap($table.find(RULES_ROW).length).should('eql', 1); }); - cy.get(RULE_NAME).invoke('text').should('eql', newOverrideRule.name); - cy.get(RISK_SCORE).invoke('text').should('eql', newOverrideRule.riskScore); - cy.get(SEVERITY).invoke('text').should('eql', newOverrideRule.severity); - cy.get('[data-test-subj="rule-switch"]').should('have.attr', 'aria-checked', 'true'); + cy.get(RULE_NAME).should('have.text', newOverrideRule.name); + cy.get(RISK_SCORE).should('have.text', newOverrideRule.riskScore); + cy.get(SEVERITY).should('have.text', newOverrideRule.severity); + cy.get(RULE_SWITCH).should('have.attr', 'aria-checked', 'true'); goToRuleDetails(); - let expectedUrls = ''; - newOverrideRule.referenceUrls.forEach((url) => { - expectedUrls = expectedUrls + url; - }); - let expectedFalsePositives = ''; - newOverrideRule.falsePositivesExamples.forEach((falsePositive) => { - expectedFalsePositives = expectedFalsePositives + falsePositive; - }); - let expectedTags = ''; - newOverrideRule.tags.forEach((tag) => { - expectedTags = expectedTags + tag; - }); - let expectedMitre = ''; - newOverrideRule.mitre.forEach((mitre) => { - expectedMitre = expectedMitre + mitre.tactic; - mitre.techniques.forEach((technique) => { - expectedMitre = expectedMitre + technique; - }); - }); - const expectedIndexPatterns = [ - 'apm-*-transaction*', - 'auditbeat-*', - 'endgame-*', - 'filebeat-*', - 'logs-*', - 'packetbeat-*', - 'winlogbeat-*', - ]; - - cy.get(RULE_NAME_HEADER).invoke('text').should('eql', `${newOverrideRule.name} Beta`); - - cy.get(ABOUT_RULE_DESCRIPTION).invoke('text').should('eql', newOverrideRule.description); - - const expectedOverrideSeverities = ['Low', 'Medium', 'High', 'Critical']; - + cy.get(RULE_NAME_HEADER).should('have.text', `${newOverrideRule.name} Beta`); + cy.get(ABOUT_RULE_DESCRIPTION).should('have.text', newOverrideRule.description); cy.get(ABOUT_DETAILS).within(() => { - getDescriptionForTitle('Severity').invoke('text').should('eql', newOverrideRule.severity); - getDescriptionForTitle('Risk score').invoke('text').should('eql', newOverrideRule.riskScore); - getDescriptionForTitle('Risk score override') - .invoke('text') - .should('eql', `${newOverrideRule.riskOverride}signal.rule.risk_score`); - getDescriptionForTitle('Rule name override') - .invoke('text') - .should('eql', newOverrideRule.nameOverride); - getDescriptionForTitle('Reference URLs').invoke('text').should('eql', expectedUrls); - getDescriptionForTitle('False positive examples') - .invoke('text') - .should('eql', expectedFalsePositives); - getDescriptionForTitle('MITRE ATT&CK').invoke('text').should('eql', expectedMitre); - getDescriptionForTitle('Tags').invoke('text').should('eql', expectedTags); - getDescriptionForTitle('Timestamp override') - .invoke('text') - .should('eql', newOverrideRule.timestampOverride); + getDetails(SEVERITY_DETAILS).should('have.text', newOverrideRule.severity); + getDetails(RISK_SCORE_DETAILS).should('have.text', newOverrideRule.riskScore); + getDetails(RISK_SCORE_OVERRIDE_DETAILS).should( + 'have.text', + `${newOverrideRule.riskOverride}signal.rule.risk_score` + ); + getDetails(RULE_NAME_OVERRIDE_DETAILS).should('have.text', newOverrideRule.nameOverride); + getDetails(REFERENCE_URLS_DETAILS).should('have.text', expectedUrls); + getDetails(FALSE_POSITIVES_DETAILS).should('have.text', expectedFalsePositives); + getDetails(MITRE_ATTACK_DETAILS).should('have.text', expectedMitre); + getDetails(TAGS_DETAILS).should('have.text', expectedTags); + getDetails(TIMESTAMP_OVERRIDE_DETAILS).should('have.text', newOverrideRule.timestampOverride); cy.contains(DETAILS_TITLE, 'Severity override') .invoke('index', DETAILS_TITLE) // get index relative to other titles, not all siblings .then((severityOverrideIndex) => { newOverrideRule.severityOverride.forEach((severity, i) => { cy.get(DETAILS_DESCRIPTION) .eq(severityOverrideIndex + i) - .invoke('text') .should( - 'eql', - `${severity.sourceField}:${severity.sourceValue}${expectedOverrideSeverities[i]}` + 'have.text', + `${severity.sourceField}:${severity.sourceValue}${severitiesOverride[i]}` ); }); }); }); - cy.get(RULE_ABOUT_DETAILS_HEADER_TOGGLE).eq(INVESTIGATION_NOTES_TOGGLE).click({ force: true }); - cy.get(ABOUT_INVESTIGATION_NOTES).invoke('text').should('eql', INVESTIGATION_NOTES_MARKDOWN); - + cy.get(ABOUT_INVESTIGATION_NOTES).should('have.text', INVESTIGATION_NOTES_MARKDOWN); cy.get(DEFINITION_DETAILS).within(() => { - getDescriptionForTitle('Index patterns') - .invoke('text') - .should('eql', expectedIndexPatterns.join('')); - getDescriptionForTitle('Custom query') - .invoke('text') - .should('eql', `${newOverrideRule.customQuery} `); - getDescriptionForTitle('Rule type').invoke('text').should('eql', 'Query'); - getDescriptionForTitle('Timeline template').invoke('text').should('eql', 'None'); + getDetails(INDEX_PATTERNS_DETAILS).should('have.text', indexPatterns.join('')); + getDetails(CUSTOM_QUERY_DETAILS).should('have.text', `${newOverrideRule.customQuery} `); + getDetails(RULE_TYPE_DETAILS).should('have.text', 'Query'); + getDetails(TIMELINE_TEMPLATE_DETAILS).should('have.text', 'None'); }); - cy.get(SCHEDULE_DETAILS).within(() => { - getDescriptionForTitle('Runs every').invoke('text').should('eql', '5m'); - getDescriptionForTitle('Additional look-back time').invoke('text').should('eql', '1m'); + getDetails(RUNS_EVERY_DETAILS).should( + 'have.text', + `${newOverrideRule.runsEvery.interval}${newOverrideRule.runsEvery.type}` + ); + getDetails(ADDITIONAL_LOOK_BACK_DETAILS).should( + 'have.text', + `${newOverrideRule.lookBack.interval}${newOverrideRule.lookBack.type}` + ); }); + + refreshPage(); + waitForTheRuleToBeExecuted(); + + cy.get(NUMBER_OF_ALERTS) + .invoke('text') + .then((numberOfAlertsText) => { + cy.wrap(parseInt(numberOfAlertsText, 10)).should('be.above', 0); + }); + cy.get(ALERT_RULE_NAME).first().should('have.text', 'auditbeat'); + cy.get(ALERT_RULE_VERSION).first().should('have.text', '1'); + cy.get(ALERT_RULE_METHOD).first().should('have.text', 'query'); + cy.get(ALERT_RULE_SEVERITY).first().should('have.text', 'critical'); + + sortRiskScore(); + + cy.get(ALERT_RULE_RISK_SCORE).first().should('have.text', '80'); }); }); diff --git a/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_prebuilt.spec.ts b/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_prebuilt.spec.ts index 986a7c7177a79..6088a9dedbd06 100644 --- a/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_prebuilt.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_prebuilt.spec.ts @@ -56,7 +56,7 @@ describe('Alerts rules, prebuilt rules', () => { loadPrebuiltDetectionRules(); waitForPrebuiltDetectionRulesToBeLoaded(); - cy.get(ELASTIC_RULES_BTN).invoke('text').should('eql', expectedElasticRulesBtnText); + cy.get(ELASTIC_RULES_BTN).should('have.text', expectedElasticRulesBtnText); changeToThreeHundredRowsPerPage(); waitForRulesToBeLoaded(); @@ -81,7 +81,7 @@ describe('Deleting prebuilt rules', () => { loadPrebuiltDetectionRules(); waitForPrebuiltDetectionRulesToBeLoaded(); - cy.get(ELASTIC_RULES_BTN).invoke('text').should('eql', expectedElasticRulesBtnText); + cy.get(ELASTIC_RULES_BTN).should('have.text', expectedElasticRulesBtnText); changeToThreeHundredRowsPerPage(); waitForRulesToBeLoaded(); @@ -113,16 +113,15 @@ describe('Deleting prebuilt rules', () => { changeToThreeHundredRowsPerPage(); waitForRulesToBeLoaded(); - cy.get(ELASTIC_RULES_BTN) - .invoke('text') - .should('eql', `Elastic rules (${expectedNumberOfRulesAfterDeletion})`); + cy.get(ELASTIC_RULES_BTN).should( + 'have.text', + `Elastic rules (${expectedNumberOfRulesAfterDeletion})` + ); cy.get(RULES_TABLE).then(($table) => { cy.wrap($table.find(RULES_ROW).length).should('eql', expectedNumberOfRulesAfterDeletion); }); cy.get(RELOAD_PREBUILT_RULES_BTN).should('exist'); - cy.get(RELOAD_PREBUILT_RULES_BTN) - .invoke('text') - .should('eql', 'Install 1 Elastic prebuilt rule '); + cy.get(RELOAD_PREBUILT_RULES_BTN).should('have.text', 'Install 1 Elastic prebuilt rule '); reloadDeletedRules(); @@ -135,9 +134,10 @@ describe('Deleting prebuilt rules', () => { cy.get(RULES_TABLE).then(($table) => { cy.wrap($table.find(RULES_ROW).length).should('eql', expectedNumberOfRulesAfterRecovering); }); - cy.get(ELASTIC_RULES_BTN) - .invoke('text') - .should('eql', `Elastic rules (${expectedNumberOfRulesAfterRecovering})`); + cy.get(ELASTIC_RULES_BTN).should( + 'have.text', + `Elastic rules (${expectedNumberOfRulesAfterRecovering})` + ); }); it('Deletes and recovers more than one rule', () => { @@ -152,12 +152,14 @@ describe('Deleting prebuilt rules', () => { waitForRulesToBeLoaded(); cy.get(RELOAD_PREBUILT_RULES_BTN).should('exist'); - cy.get(RELOAD_PREBUILT_RULES_BTN) - .invoke('text') - .should('eql', `Install ${numberOfRulesToBeSelected} Elastic prebuilt rules `); - cy.get(ELASTIC_RULES_BTN) - .invoke('text') - .should('eql', `Elastic rules (${expectedNumberOfRulesAfterDeletion})`); + cy.get(RELOAD_PREBUILT_RULES_BTN).should( + 'have.text', + `Install ${numberOfRulesToBeSelected} Elastic prebuilt rules ` + ); + cy.get(ELASTIC_RULES_BTN).should( + 'have.text', + `Elastic rules (${expectedNumberOfRulesAfterDeletion})` + ); cy.get(RULES_TABLE).then(($table) => { cy.wrap($table.find(RULES_ROW).length).should('eql', expectedNumberOfRulesAfterDeletion); }); @@ -173,8 +175,9 @@ describe('Deleting prebuilt rules', () => { cy.get(RULES_TABLE).then(($table) => { cy.wrap($table.find(RULES_ROW).length).should('eql', expectedNumberOfRulesAfterRecovering); }); - cy.get(ELASTIC_RULES_BTN) - .invoke('text') - .should('eql', `Elastic rules (${expectedNumberOfRulesAfterRecovering})`); + cy.get(ELASTIC_RULES_BTN).should( + 'have.text', + `Elastic rules (${expectedNumberOfRulesAfterRecovering})` + ); }); }); diff --git a/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_threshold.spec.ts b/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_threshold.spec.ts index 00175ed3baeb8..5ee7e69e877e3 100644 --- a/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_threshold.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/alerts_detection_rules_threshold.spec.ts @@ -4,27 +4,49 @@ * you may not use this file except in compliance with the Elastic License. */ -import { newThresholdRule } from '../objects/rule'; +import { indexPatterns, newThresholdRule } from '../objects/rule'; +import { + ALERT_RULE_METHOD, + ALERT_RULE_NAME, + ALERT_RULE_RISK_SCORE, + ALERT_RULE_SEVERITY, + ALERT_RULE_VERSION, + NUMBER_OF_ALERTS, +} from '../screens/alerts'; import { CUSTOM_RULES_BTN, RISK_SCORE, RULE_NAME, + RULE_SWITCH, RULES_ROW, RULES_TABLE, SEVERITY, } from '../screens/alerts_detection_rules'; import { + ABOUT_DETAILS, ABOUT_INVESTIGATION_NOTES, ABOUT_RULE_DESCRIPTION, + ADDITIONAL_LOOK_BACK_DETAILS, + CUSTOM_QUERY_DETAILS, + FALSE_POSITIVES_DETAILS, + DEFINITION_DETAILS, + getDetails, + INDEX_PATTERNS_DETAILS, INVESTIGATION_NOTES_MARKDOWN, INVESTIGATION_NOTES_TOGGLE, + MITRE_ATTACK_DETAILS, + REFERENCE_URLS_DETAILS, + RISK_SCORE_DETAILS, RULE_ABOUT_DETAILS_HEADER_TOGGLE, RULE_NAME_HEADER, - getDescriptionForTitle, - ABOUT_DETAILS, - DEFINITION_DETAILS, + RULE_TYPE_DETAILS, + RUNS_EVERY_DETAILS, SCHEDULE_DETAILS, + SEVERITY_DETAILS, + TAGS_DETAILS, + THRESHOLD_DETAILS, + TIMELINE_TEMPLATE_DETAILS, } from '../screens/rule_details'; import { @@ -44,13 +66,25 @@ import { createAndActivateRule, fillAboutRuleAndContinue, fillDefineThresholdRuleAndContinue, + fillScheduleRuleAndContinue, selectThresholdRuleType, + waitForTheRuleToBeExecuted, } from '../tasks/create_new_rule'; import { esArchiverLoad, esArchiverUnload } from '../tasks/es_archiver'; import { loginAndWaitForPageWithoutDateRange } from '../tasks/login'; +import { refreshPage } from '../tasks/security_header'; import { DETECTIONS_URL } from '../urls/navigation'; +const expectedUrls = newThresholdRule.referenceUrls.join(''); +const expectedFalsePositives = newThresholdRule.falsePositivesExamples.join(''); +const expectedTags = newThresholdRule.tags.join(''); +const expectedMitre = newThresholdRule.mitre + .map(function (mitre) { + return mitre.tactic + mitre.techniques.join(''); + }) + .join(''); + describe('Detection rules, threshold', () => { before(() => { esArchiverLoad('timeline'); @@ -70,9 +104,10 @@ describe('Detection rules, threshold', () => { selectThresholdRuleType(); fillDefineThresholdRuleAndContinue(newThresholdRule); fillAboutRuleAndContinue(newThresholdRule); + fillScheduleRuleAndContinue(newThresholdRule); createAndActivateRule(); - cy.get(CUSTOM_RULES_BTN).invoke('text').should('eql', 'Custom rules (1)'); + cy.get(CUSTOM_RULES_BTN).should('have.text', 'Custom rules (1)'); changeToThreeHundredRowsPerPage(); waitForRulesToBeLoaded(); @@ -87,79 +122,60 @@ describe('Detection rules, threshold', () => { cy.get(RULES_TABLE).then(($table) => { cy.wrap($table.find(RULES_ROW).length).should('eql', 1); }); - cy.get(RULE_NAME).invoke('text').should('eql', newThresholdRule.name); - cy.get(RISK_SCORE).invoke('text').should('eql', newThresholdRule.riskScore); - cy.get(SEVERITY).invoke('text').should('eql', newThresholdRule.severity); - cy.get('[data-test-subj="rule-switch"]').should('have.attr', 'aria-checked', 'true'); + cy.get(RULE_NAME).should('have.text', newThresholdRule.name); + cy.get(RISK_SCORE).should('have.text', newThresholdRule.riskScore); + cy.get(SEVERITY).should('have.text', newThresholdRule.severity); + cy.get(RULE_SWITCH).should('have.attr', 'aria-checked', 'true'); goToRuleDetails(); - let expectedUrls = ''; - newThresholdRule.referenceUrls.forEach((url) => { - expectedUrls = expectedUrls + url; - }); - let expectedFalsePositives = ''; - newThresholdRule.falsePositivesExamples.forEach((falsePositive) => { - expectedFalsePositives = expectedFalsePositives + falsePositive; - }); - let expectedTags = ''; - newThresholdRule.tags.forEach((tag) => { - expectedTags = expectedTags + tag; - }); - let expectedMitre = ''; - newThresholdRule.mitre.forEach((mitre) => { - expectedMitre = expectedMitre + mitre.tactic; - mitre.techniques.forEach((technique) => { - expectedMitre = expectedMitre + technique; - }); - }); - const expectedIndexPatterns = [ - 'apm-*-transaction*', - 'auditbeat-*', - 'endgame-*', - 'filebeat-*', - 'logs-*', - 'packetbeat-*', - 'winlogbeat-*', - ]; - - cy.get(RULE_NAME_HEADER).invoke('text').should('eql', `${newThresholdRule.name} Beta`); - - cy.get(ABOUT_RULE_DESCRIPTION).invoke('text').should('eql', newThresholdRule.description); + cy.get(RULE_NAME_HEADER).should('have.text', `${newThresholdRule.name} Beta`); + cy.get(ABOUT_RULE_DESCRIPTION).should('have.text', newThresholdRule.description); cy.get(ABOUT_DETAILS).within(() => { - getDescriptionForTitle('Severity').invoke('text').should('eql', newThresholdRule.severity); - getDescriptionForTitle('Risk score').invoke('text').should('eql', newThresholdRule.riskScore); - getDescriptionForTitle('Reference URLs').invoke('text').should('eql', expectedUrls); - getDescriptionForTitle('False positive examples') - .invoke('text') - .should('eql', expectedFalsePositives); - getDescriptionForTitle('MITRE ATT&CK').invoke('text').should('eql', expectedMitre); - getDescriptionForTitle('Tags').invoke('text').should('eql', expectedTags); + getDetails(SEVERITY_DETAILS).should('have.text', newThresholdRule.severity); + getDetails(RISK_SCORE_DETAILS).should('have.text', newThresholdRule.riskScore); + getDetails(REFERENCE_URLS_DETAILS).should('have.text', expectedUrls); + getDetails(FALSE_POSITIVES_DETAILS).should('have.text', expectedFalsePositives); + getDetails(MITRE_ATTACK_DETAILS).should('have.text', expectedMitre); + getDetails(TAGS_DETAILS).should('have.text', expectedTags); }); - cy.get(RULE_ABOUT_DETAILS_HEADER_TOGGLE).eq(INVESTIGATION_NOTES_TOGGLE).click({ force: true }); - cy.get(ABOUT_INVESTIGATION_NOTES).invoke('text').should('eql', INVESTIGATION_NOTES_MARKDOWN); - + cy.get(ABOUT_INVESTIGATION_NOTES).should('have.text', INVESTIGATION_NOTES_MARKDOWN); cy.get(DEFINITION_DETAILS).within(() => { - getDescriptionForTitle('Index patterns') - .invoke('text') - .should('eql', expectedIndexPatterns.join('')); - getDescriptionForTitle('Custom query') - .invoke('text') - .should('eql', `${newThresholdRule.customQuery} `); - getDescriptionForTitle('Rule type').invoke('text').should('eql', 'Threshold'); - getDescriptionForTitle('Timeline template').invoke('text').should('eql', 'None'); - getDescriptionForTitle('Threshold') - .invoke('text') - .should( - 'eql', - `Results aggregated by ${newThresholdRule.thresholdField} >= ${newThresholdRule.threshold}` - ); + getDetails(INDEX_PATTERNS_DETAILS).should('have.text', indexPatterns.join('')); + getDetails(CUSTOM_QUERY_DETAILS).should('have.text', `${newThresholdRule.customQuery} `); + getDetails(RULE_TYPE_DETAILS).should('have.text', 'Threshold'); + getDetails(TIMELINE_TEMPLATE_DETAILS).should('have.text', 'None'); + getDetails(THRESHOLD_DETAILS).should( + 'have.text', + `Results aggregated by ${newThresholdRule.thresholdField} >= ${newThresholdRule.threshold}` + ); }); - cy.get(SCHEDULE_DETAILS).within(() => { - getDescriptionForTitle('Runs every').invoke('text').should('eql', '5m'); - getDescriptionForTitle('Additional look-back time').invoke('text').should('eql', '1m'); + getDetails(RUNS_EVERY_DETAILS).should( + 'have.text', + `${newThresholdRule.runsEvery.interval}${newThresholdRule.runsEvery.type}` + ); + getDetails(ADDITIONAL_LOOK_BACK_DETAILS).should( + 'have.text', + `${newThresholdRule.lookBack.interval}${newThresholdRule.lookBack.type}` + ); }); + + refreshPage(); + waitForTheRuleToBeExecuted(); + + cy.get(NUMBER_OF_ALERTS) + .invoke('text') + .then((numberOfAlertsText) => { + cy.wrap(parseInt(numberOfAlertsText, 10)).should('be.below', 100); + }); + cy.get(ALERT_RULE_NAME).first().should('have.text', newThresholdRule.name); + cy.get(ALERT_RULE_VERSION).first().should('have.text', '1'); + cy.get(ALERT_RULE_METHOD).first().should('have.text', 'threshold'); + cy.get(ALERT_RULE_SEVERITY) + .first() + .should('have.text', newThresholdRule.severity.toLowerCase()); + cy.get(ALERT_RULE_RISK_SCORE).first().should('have.text', newThresholdRule.riskScore); }); }); diff --git a/x-pack/plugins/security_solution/cypress/integration/alerts_timeline.spec.ts b/x-pack/plugins/security_solution/cypress/integration/alerts_timeline.spec.ts index 2fed23755963b..31d8e4666d91d 100644 --- a/x-pack/plugins/security_solution/cypress/integration/alerts_timeline.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/alerts_timeline.spec.ts @@ -35,7 +35,7 @@ describe('Alerts timeline', () => { .invoke('text') .then((eventId) => { investigateFirstAlertInTimeline(); - cy.get(PROVIDER_BADGE).invoke('text').should('eql', `_id: "${eventId}"`); + cy.get(PROVIDER_BADGE).should('have.text', `_id: "${eventId}"`); }); }); }); diff --git a/x-pack/plugins/security_solution/cypress/integration/events_viewer.spec.ts b/x-pack/plugins/security_solution/cypress/integration/events_viewer.spec.ts index 4e2edcb282cfc..13fa9592469e4 100644 --- a/x-pack/plugins/security_solution/cypress/integration/events_viewer.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/events_viewer.spec.ts @@ -14,8 +14,6 @@ import { HOST_GEO_CITY_NAME_HEADER, HOST_GEO_COUNTRY_NAME_HEADER, INSPECT_MODAL, - LOAD_MORE, - LOCAL_EVENTS_COUNT, } from '../screens/hosts/events'; import { HEADERS_GROUP } from '../screens/timeline'; @@ -46,8 +44,7 @@ const defaultHeadersInDefaultEcsCategory = [ { id: 'destination.ip' }, ]; -// https://github.com/elastic/kibana/issues/70757 -describe.skip('Events Viewer', () => { +describe('Events Viewer', () => { context('Fields rendering', () => { before(() => { loginAndWaitForPage(HOSTS_URL); @@ -143,18 +140,9 @@ describe.skip('Events Viewer', () => { cy.get(HEADER_SUBTITLE).invoke('text').should('not.equal', initialNumberOfEvents); }); }); - - it('loads more events when the load more button is clicked', () => { - const defaultNumberOfLoadedEvents = '25'; - cy.get(LOCAL_EVENTS_COUNT).invoke('text').should('equal', defaultNumberOfLoadedEvents); - - cy.get(LOAD_MORE).click({ force: true }); - - cy.get(LOCAL_EVENTS_COUNT).invoke('text').should('not.equal', defaultNumberOfLoadedEvents); - }); }); - context('Events columns', () => { + context.skip('Events columns', () => { before(() => { loginAndWaitForPage(HOSTS_URL); openEvents(); diff --git a/x-pack/plugins/security_solution/cypress/integration/inspect.spec.ts b/x-pack/plugins/security_solution/cypress/integration/inspect.spec.ts index 8414b4ef8f1a2..c19e51c3ada40 100644 --- a/x-pack/plugins/security_solution/cypress/integration/inspect.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/inspect.spec.ts @@ -21,8 +21,7 @@ import { import { HOSTS_URL, NETWORK_URL } from '../urls/navigation'; -// FLAKY: https://github.com/elastic/kibana/issues/78496 -describe.skip('Inspect', () => { +describe('Inspect', () => { context('Hosts stats and tables', () => { before(() => { loginAndWaitForPage(HOSTS_URL); diff --git a/x-pack/plugins/security_solution/cypress/integration/url_state.spec.ts b/x-pack/plugins/security_solution/cypress/integration/url_state.spec.ts index 2588c580dedd3..906fba28a7721 100644 --- a/x-pack/plugins/security_solution/cypress/integration/url_state.spec.ts +++ b/x-pack/plugins/security_solution/cypress/integration/url_state.spec.ts @@ -14,7 +14,7 @@ import { import { HOSTS_NAMES } from '../screens/hosts/all_hosts'; import { ANOMALIES_TAB } from '../screens/hosts/main'; import { BREADCRUMBS, HOSTS, KQL_INPUT, NETWORK } from '../screens/security_header'; -import { SERVER_SIDE_EVENT_COUNT, TIMELINE_TITLE } from '../screens/timeline'; +import { TIMELINE_TITLE } from '../screens/timeline'; import { loginAndWaitForPage, loginAndWaitForPageWithoutDateRange } from '../tasks/login'; import { @@ -32,16 +32,18 @@ import { waitForIpsTableToBeLoaded } from '../tasks/network/flows'; import { clearSearchBar, kqlSearch, navigateFromHeaderTo } from '../tasks/security_header'; import { openTimelineUsingToggle } from '../tasks/security_main'; import { - addDescriptionToTimeline, addNameToTimeline, closeTimeline, - executeTimelineKQL, + populateTimeline, waitForTimelineChanges, } from '../tasks/timeline'; import { HOSTS_URL } from '../urls/navigation'; import { ABSOLUTE_DATE_RANGE } from '../urls/state'; +import { timeline } from '../objects/timeline'; +import { TIMELINE } from '../screens/create_new_case'; + const ABSOLUTE_DATE = { endTime: '2019-08-01T20:33:29.186Z', endTimeTimeline: '2019-08-02T21:03:29.186Z', @@ -51,8 +53,7 @@ const ABSOLUTE_DATE = { startTimeTimeline: '2019-08-02T20:03:29.186Z', }; -// FLAKY: https://github.com/elastic/kibana/issues/61612 -describe.skip('url state', () => { +describe('url state', () => { it('sets the global start and end dates from the url', () => { loginAndWaitForPageWithoutDateRange(ABSOLUTE_DATE_RANGE.url); cy.get(DATE_PICKER_START_DATE_POPOVER_BUTTON).should( @@ -222,23 +223,12 @@ describe.skip('url state', () => { it('sets and reads the url state for timeline by id', () => { loginAndWaitForPage(HOSTS_URL); openTimelineUsingToggle(); - executeTimelineKQL('host.name: *'); - - cy.get(SERVER_SIDE_EVENT_COUNT) - .invoke('text') - .then((strCount) => { - const intCount = +strCount; - cy.wrap(intCount).should('be.above', 0); - }); + populateTimeline(); cy.server(); cy.route('PATCH', '**/api/timeline').as('timeline'); - const timelineName = 'Security'; - const timelineDescription = 'This is the best timeline of the world'; - addNameToTimeline(timelineName); - waitForTimelineChanges(); - addDescriptionToTimeline(timelineDescription); + addNameToTimeline(timeline.title); waitForTimelineChanges(); cy.wait('@timeline').then((response) => { @@ -249,9 +239,10 @@ describe.skip('url state', () => { cy.visit('/app/home'); cy.visit(`/app/security/timelines?timeline=(id:'${timelineId}',isOpen:!t)`); cy.get(DATE_PICKER_APPLY_BUTTON_TIMELINE).should('exist'); - cy.get(DATE_PICKER_APPLY_BUTTON_TIMELINE).invoke('text').should('not.equal', 'Updating'); + cy.get(DATE_PICKER_APPLY_BUTTON_TIMELINE).should('not.have.text', 'Updating'); + cy.get(TIMELINE).should('be.visible'); cy.get(TIMELINE_TITLE).should('be.visible'); - cy.get(TIMELINE_TITLE).should('have.attr', 'value', timelineName); + cy.get(TIMELINE_TITLE).should('have.attr', 'value', timeline.title); }); }); }); diff --git a/x-pack/plugins/security_solution/cypress/objects/rule.ts b/x-pack/plugins/security_solution/cypress/objects/rule.ts index 2a5c60815f450..e84e2b7b1669f 100644 --- a/x-pack/plugins/security_solution/cypress/objects/rule.ts +++ b/x-pack/plugins/security_solution/cypress/objects/rule.ts @@ -23,6 +23,12 @@ interface SeverityOverride { sourceValue: string; } +interface Interval { + interval: string; + timeType: string; + type: string; +} + export interface CustomRule { customQuery: string; name: string; @@ -38,6 +44,8 @@ export interface CustomRule { mitre: Mitre[]; note: string; timelineId: string; + runsEvery: Interval; + lookBack: Interval; } export interface ThresholdRule extends CustomRule { @@ -65,6 +73,8 @@ export interface MachineLearningRule { falsePositivesExamples: string[]; mitre: Mitre[]; note: string; + runsEvery: Interval; + lookBack: Interval; } const mitre1: Mitre = { @@ -83,8 +93,8 @@ const severityOverride1: SeverityOverride = { }; const severityOverride2: SeverityOverride = { - sourceField: 'agent.type', - sourceValue: 'endpoint', + sourceField: '@timestamp', + sourceValue: '10/02/2020', }; const severityOverride3: SeverityOverride = { @@ -93,8 +103,20 @@ const severityOverride3: SeverityOverride = { }; const severityOverride4: SeverityOverride = { - sourceField: '@timestamp', - sourceValue: '10/02/2020', + sourceField: 'agent.type', + sourceValue: 'auditbeat', +}; + +const runsEvery: Interval = { + interval: '1', + timeType: 'Seconds', + type: 's', +}; + +const lookBack: Interval = { + interval: '17520', + timeType: 'Hours', + type: 'h', }; export const newRule: CustomRule = { @@ -109,6 +131,8 @@ export const newRule: CustomRule = { mitre: [mitre1, mitre2], note: '# test markdown', timelineId: '0162c130-78be-11ea-9718-118a926974a4', + runsEvery, + lookBack, }; export const existingRule: CustomRule = { @@ -132,6 +156,8 @@ export const existingRule: CustomRule = { mitre: [], note: 'This is my note', timelineId: '', + runsEvery, + lookBack, }; export const newOverrideRule: OverrideRule = { @@ -150,6 +176,8 @@ export const newOverrideRule: OverrideRule = { riskOverride: 'destination.port', nameOverride: 'agent.type', timestampOverride: '@timestamp', + runsEvery, + lookBack, }; export const newThresholdRule: ThresholdRule = { @@ -166,6 +194,8 @@ export const newThresholdRule: ThresholdRule = { timelineId: '0162c130-78be-11ea-9718-118a926974a4', thresholdField: 'host.name', threshold: '10', + runsEvery, + lookBack, }; export const machineLearningRule: MachineLearningRule = { @@ -180,6 +210,8 @@ export const machineLearningRule: MachineLearningRule = { falsePositivesExamples: ['False1'], mitre: [mitre1], note: '# test markdown', + runsEvery, + lookBack, }; export const eqlRule: CustomRule = { @@ -194,4 +226,24 @@ export const eqlRule: CustomRule = { mitre: [mitre1, mitre2], note: '# test markdown', timelineId: '0162c130-78be-11ea-9718-118a926974a4', + runsEvery, + lookBack, +}; + +export const indexPatterns = [ + 'apm-*-transaction*', + 'auditbeat-*', + 'endgame-*', + 'filebeat-*', + 'logs-*', + 'packetbeat-*', + 'winlogbeat-*', +]; + +export const severitiesOverride = ['Low', 'Medium', 'High', 'Critical']; + +export const editedRule = { + ...existingRule, + severity: 'Medium', + description: 'Edited Rule description', }; diff --git a/x-pack/plugins/security_solution/cypress/screens/alerts.ts b/x-pack/plugins/security_solution/cypress/screens/alerts.ts index fb7e7e73986b9..ed05874bd4c4d 100644 --- a/x-pack/plugins/security_solution/cypress/screens/alerts.ts +++ b/x-pack/plugins/security_solution/cypress/screens/alerts.ts @@ -4,45 +4,57 @@ * you may not use this file except in compliance with the Elastic License. */ -export const EXPAND_ALERT_BTN = '[data-test-subj="expand-event"]'; +export const ALERTS = '[data-test-subj="event"]'; -export const LOADING_ALERTS_PANEL = '[data-test-subj="loading-alerts-panel"]'; +export const ALERT_CHECKBOX = '[data-test-subj="select-event-container"] .euiCheckbox__input'; -export const MANAGE_ALERT_DETECTION_RULES_BTN = '[data-test-subj="manage-alert-detection-rules"]'; +export const ALERT_ID = '[data-test-subj="draggable-content-_id"]'; -export const NUMBER_OF_ALERTS = '[data-test-subj="server-side-event-count"] .euiBadge__text'; +export const ALERT_RISK_SCORE_HEADER = '[data-test-subj="header-text-signal.rule.risk_score"]'; -export const OPENED_ALERTS_FILTER_BTN = '[data-test-subj="openAlerts"]'; +export const ALERT_RULE_METHOD = '[data-test-subj="draggable-content-signal.rule.type"]'; -export const CLOSED_ALERTS_FILTER_BTN = '[data-test-subj="closedAlerts"]'; +export const ALERT_RULE_NAME = '[data-test-subj="draggable-content-signal.rule.name"]'; -export const IN_PROGRESS_ALERTS_FILTER_BTN = '[data-test-subj="inProgressAlerts"]'; +export const ALERT_RULE_RISK_SCORE = '[data-test-subj="draggable-content-signal.rule.risk_score"]'; -export const SELECTED_ALERTS = '[data-test-subj="selectedAlerts"]'; +export const ALERT_RULE_SEVERITY = '[data-test-subj="draggable-content-signal.rule.severity"]'; -export const SEND_ALERT_TO_TIMELINE_BTN = '[data-test-subj="send-alert-to-timeline-button"]'; +export const ALERT_RULE_VERSION = '[data-test-subj="draggable-content-signal.rule.version"]'; -export const SHOWING_ALERTS = '[data-test-subj="showingAlerts"]'; +export const CLOSE_ALERT_BTN = '[data-test-subj="close-alert-status"]'; -export const ALERTS = '[data-test-subj="event"]'; +export const CLOSE_SELECTED_ALERTS_BTN = '[data-test-subj="closeSelectedAlertsButton"]'; -export const ALERT_ID = '[data-test-subj="draggable-content-_id"]'; +export const CLOSED_ALERTS_FILTER_BTN = '[data-test-subj="closedAlerts"]'; -export const ALERT_CHECKBOX = '[data-test-subj="select-event-container"] .euiCheckbox__input'; +export const EXPAND_ALERT_BTN = '[data-test-subj="expand-event"]'; -export const TAKE_ACTION_POPOVER_BTN = '[data-test-subj="alertActionPopover"] button'; +export const IN_PROGRESS_ALERTS_FILTER_BTN = '[data-test-subj="inProgressAlerts"]'; -export const TIMELINE_CONTEXT_MENU_BTN = '[data-test-subj="timeline-context-menu-button"]'; +export const LOADING_ALERTS_PANEL = '[data-test-subj="loading-alerts-panel"]'; -export const OPEN_SELECTED_ALERTS_BTN = '[data-test-subj="openSelectedAlertsButton"]'; +export const MANAGE_ALERT_DETECTION_RULES_BTN = '[data-test-subj="manage-alert-detection-rules"]'; -export const CLOSE_SELECTED_ALERTS_BTN = '[data-test-subj="closeSelectedAlertsButton"]'; +export const MARK_ALERT_IN_PROGRESS_BTN = '[data-test-subj="in-progress-alert-status"]'; export const MARK_SELECTED_ALERTS_IN_PROGRESS_BTN = '[data-test-subj="markSelectedAlertsInProgressButton"]'; +export const NUMBER_OF_ALERTS = '[data-test-subj="server-side-event-count"] .euiBadge__text'; + export const OPEN_ALERT_BTN = '[data-test-subj="open-alert-status"]'; -export const CLOSE_ALERT_BTN = '[data-test-subj="close-alert-status"]'; +export const OPEN_SELECTED_ALERTS_BTN = '[data-test-subj="openSelectedAlertsButton"]'; -export const MARK_ALERT_IN_PROGRESS_BTN = '[data-test-subj="in-progress-alert-status"]'; +export const OPENED_ALERTS_FILTER_BTN = '[data-test-subj="openAlerts"]'; + +export const SELECTED_ALERTS = '[data-test-subj="selectedAlerts"]'; + +export const SEND_ALERT_TO_TIMELINE_BTN = '[data-test-subj="send-alert-to-timeline-button"]'; + +export const SHOWING_ALERTS = '[data-test-subj="showingAlerts"]'; + +export const TAKE_ACTION_POPOVER_BTN = '[data-test-subj="alertActionPopover"] button'; + +export const TIMELINE_CONTEXT_MENU_BTN = '[data-test-subj="timeline-context-menu-button"]'; diff --git a/x-pack/plugins/security_solution/cypress/screens/create_new_rule.ts b/x-pack/plugins/security_solution/cypress/screens/create_new_rule.ts index dda371126d5aa..e1ab5ff30572f 100644 --- a/x-pack/plugins/security_solution/cypress/screens/create_new_rule.ts +++ b/x-pack/plugins/security_solution/cypress/screens/create_new_rule.ts @@ -57,6 +57,12 @@ export const INVESTIGATION_NOTES_TEXTAREA = export const FALSE_POSITIVES_INPUT = '[data-test-subj="detectionEngineStepAboutRuleFalsePositives"] input'; +export const LOOK_BACK_INTERVAL = + '[data-test-subj="detectionEngineStepScheduleRuleFrom"] [data-test-subj="interval"]'; + +export const LOOK_BACK_TIME_TYPE = + '[data-test-subj="detectionEngineStepScheduleRuleFrom"] [data-test-subj="timeType"]'; + export const MACHINE_LEARNING_DROPDOWN = '[data-test-subj="mlJobSelect"] button'; export const MACHINE_LEARNING_LIST = '.euiContextMenuItem__text'; @@ -73,6 +79,8 @@ export const MITRE_TECHNIQUES_INPUT = export const REFERENCE_URLS_INPUT = '[data-test-subj="detectionEngineStepAboutRuleReferenceUrls"] input'; +export const REFRESH_BUTTON = '[data-test-subj="refreshButton"]'; + export const RISK_INPUT = '.euiRangeInput'; export const RISK_MAPPING_OVERRIDE_OPTION = '#risk_score-mapping-override'; @@ -88,21 +96,29 @@ export const RULE_NAME_INPUT = export const RULE_NAME_OVERRIDE = '[data-test-subj="detectionEngineStepAboutRuleRuleNameOverride"]'; +export const RULE_STATUS = '[data-test-subj="ruleStatus"]'; + export const RULE_TIMESTAMP_OVERRIDE = '[data-test-subj="detectionEngineStepAboutRuleTimestampOverride"]'; +export const RUNS_EVERY_INTERVAL = + '[data-test-subj="detectionEngineStepScheduleRuleInterval"] [data-test-subj="interval"]'; + +export const RUNS_EVERY_TIME_TYPE = + '[data-test-subj="detectionEngineStepScheduleRuleInterval"] [data-test-subj="timeType"]'; + export const SCHEDULE_CONTINUE_BUTTON = '[data-test-subj="schedule-continue"]'; export const SCHEDULE_EDIT_TAB = '[data-test-subj="edit-rule-schedule-tab"]'; export const SCHEDULE_INTERVAL_AMOUNT_INPUT = - '[data-test-subj="detectionEngineStepScheduleRuleInterval"] [data-test-subj="schedule-amount-input"]'; + '[data-test-subj="detectionEngineStepScheduleRuleInterval"] [data-test-subj="interval"]'; export const SCHEDULE_INTERVAL_UNITS_INPUT = - '[data-test-subj="detectionEngineStepScheduleRuleInterval"] [data-test-subj="schedule-units-input"]'; + '[data-test-subj="detectionEngineStepScheduleRuleInterval"] [data-test-subj="timeType"]'; export const SCHEDULE_LOOKBACK_AMOUNT_INPUT = - '[data-test-subj="detectionEngineStepScheduleRuleFrom"] [data-test-subj="schedule-amount-input"]'; + '[data-test-subj="detectionEngineStepScheduleRuleFrom"] [data-test-subj="timeType"]'; export const SCHEDULE_LOOKBACK_UNITS_INPUT = '[data-test-subj="detectionEngineStepScheduleRuleFrom"] [data-test-subj="schedule-units-input"]'; diff --git a/x-pack/plugins/security_solution/cypress/screens/hosts/events.ts b/x-pack/plugins/security_solution/cypress/screens/hosts/events.ts index 4b1ca19bd96fe..0434de7bff88e 100644 --- a/x-pack/plugins/security_solution/cypress/screens/hosts/events.ts +++ b/x-pack/plugins/security_solution/cypress/screens/hosts/events.ts @@ -30,9 +30,6 @@ export const INSPECT_MODAL = '[data-test-subj="modal-inspect-euiModal"]'; export const INSPECT_QUERY = '[data-test-subj="events-viewer-panel"] [data-test-subj="inspect-icon-button"]'; -export const LOCAL_EVENTS_COUNT = - '[data-test-subj="events-viewer-panel"] [data-test-subj="local-events-count"'; - export const LOAD_MORE = '[data-test-subj="events-viewer-panel"] [data-test-subj="TimelineMoreButton"'; diff --git a/x-pack/plugins/security_solution/cypress/screens/rule_details.ts b/x-pack/plugins/security_solution/cypress/screens/rule_details.ts index 98fc7b06a9908..5a376e95e38dd 100644 --- a/x-pack/plugins/security_solution/cypress/screens/rule_details.ts +++ b/x-pack/plugins/security_solution/cypress/screens/rule_details.ts @@ -4,12 +4,6 @@ * you may not use this file except in compliance with the Elastic License. */ -export const getDescriptionForTitle = (title: string) => - cy.get(DETAILS_TITLE).contains(title).next(DETAILS_DESCRIPTION); - -export const DETAILS_DESCRIPTION = '.euiDescriptionList__description'; -export const DETAILS_TITLE = '.euiDescriptionList__title'; - export const ABOUT_INVESTIGATION_NOTES = '[data-test-subj="stepAboutDetailsNoteContent"]'; export const ABOUT_RULE_DESCRIPTION = '[data-test-subj=stepAboutRuleDetailsToggleDescriptionText]'; @@ -17,9 +11,23 @@ export const ABOUT_RULE_DESCRIPTION = '[data-test-subj=stepAboutRuleDetailsToggl export const ABOUT_DETAILS = '[data-test-subj="aboutRule"] [data-test-subj="listItemColumnStepRuleDescription"]'; +export const ADDITIONAL_LOOK_BACK_DETAILS = 'Additional look-back time'; + +export const ANOMALY_SCORE_DETAILS = 'Anomaly score'; + +export const CUSTOM_QUERY_DETAILS = 'Custom query'; + export const DEFINITION_DETAILS = '[data-test-subj=definitionRule] [data-test-subj="listItemColumnStepRuleDescription"]'; +export const DETAILS_DESCRIPTION = '.euiDescriptionList__description'; + +export const DETAILS_TITLE = '.euiDescriptionList__title'; + +export const FALSE_POSITIVES_DETAILS = 'False positive examples'; + +export const INDEX_PATTERNS_DETAILS = 'Index patterns'; + export const INVESTIGATION_NOTES_MARKDOWN = 'test markdown'; export const INVESTIGATION_NOTES_TOGGLE = 1; @@ -28,11 +36,38 @@ export const MACHINE_LEARNING_JOB_ID = '[data-test-subj="machineLearningJobId"]' export const MACHINE_LEARNING_JOB_STATUS = '[data-test-subj="machineLearningJobStatus"]'; +export const MITRE_ATTACK_DETAILS = 'MITRE ATT&CK'; + export const RULE_ABOUT_DETAILS_HEADER_TOGGLE = '[data-test-subj="stepAboutDetailsToggle"]'; export const RULE_NAME_HEADER = '[data-test-subj="header-page-title"]'; +export const RULE_NAME_OVERRIDE_DETAILS = 'Rule name override'; + +export const RISK_SCORE_DETAILS = 'Risk score'; + +export const RISK_SCORE_OVERRIDE_DETAILS = 'Risk score override'; + +export const REFERENCE_URLS_DETAILS = 'Reference URLs'; + +export const RULE_TYPE_DETAILS = 'Rule type'; + +export const RUNS_EVERY_DETAILS = 'Runs every'; + export const SCHEDULE_DETAILS = '[data-test-subj=schedule] [data-test-subj="listItemColumnStepRuleDescription"]'; export const SCHEDULE_STEP = '[data-test-subj="schedule"] .euiDescriptionList__description'; + +export const SEVERITY_DETAILS = 'Severity'; + +export const TAGS_DETAILS = 'Tags'; + +export const THRESHOLD_DETAILS = 'Threshold'; + +export const TIMELINE_TEMPLATE_DETAILS = 'Timeline template'; + +export const TIMESTAMP_OVERRIDE_DETAILS = 'Timestamp override'; + +export const getDetails = (title: string) => + cy.get(DETAILS_TITLE).contains(title).next(DETAILS_DESCRIPTION); diff --git a/x-pack/plugins/security_solution/cypress/tasks/alerts.ts b/x-pack/plugins/security_solution/cypress/tasks/alerts.ts index f7ef5a904de99..c846ced2febfd 100644 --- a/x-pack/plugins/security_solution/cypress/tasks/alerts.ts +++ b/x-pack/plugins/security_solution/cypress/tasks/alerts.ts @@ -22,8 +22,10 @@ import { OPEN_SELECTED_ALERTS_BTN, MARK_ALERT_IN_PROGRESS_BTN, MARK_SELECTED_ALERTS_IN_PROGRESS_BTN, + ALERT_RISK_SCORE_HEADER, } from '../screens/alerts'; import { REFRESH_BUTTON } from '../screens/security_header'; +import { TIMELINE_COLUMN_SPINNER } from '../screens/timeline'; export const closeFirstAlert = () => { cy.get(TIMELINE_CONTEXT_MENU_BTN).first().click({ force: true }); @@ -81,6 +83,12 @@ export const selectNumberOfAlerts = (numberOfAlerts: number) => { } }; +export const sortRiskScore = () => { + cy.get(ALERT_RISK_SCORE_HEADER).click(); + cy.get(TIMELINE_COLUMN_SPINNER).should('exist'); + cy.get(TIMELINE_COLUMN_SPINNER).should('not.exist'); +}; + export const investigateFirstAlertInTimeline = () => { cy.get(SEND_ALERT_TO_TIMELINE_BTN).first().click({ force: true }); }; diff --git a/x-pack/plugins/security_solution/cypress/tasks/create_new_rule.ts b/x-pack/plugins/security_solution/cypress/tasks/create_new_rule.ts index dc89a39d082bc..914566a13a9a9 100644 --- a/x-pack/plugins/security_solution/cypress/tasks/create_new_rule.ts +++ b/x-pack/plugins/security_solution/cypress/tasks/create_new_rule.ts @@ -28,6 +28,8 @@ import { IMPORT_QUERY_FROM_SAVED_TIMELINE_LINK, INPUT, INVESTIGATION_NOTES_TEXTAREA, + LOOK_BACK_INTERVAL, + LOOK_BACK_TIME_TYPE, MACHINE_LEARNING_DROPDOWN, MACHINE_LEARNING_LIST, MACHINE_LEARNING_TYPE, @@ -36,13 +38,17 @@ import { MITRE_TACTIC_DROPDOWN, MITRE_TECHNIQUES_INPUT, REFERENCE_URLS_INPUT, + REFRESH_BUTTON, RISK_INPUT, RISK_MAPPING_OVERRIDE_OPTION, RISK_OVERRIDE, RULE_DESCRIPTION_INPUT, RULE_NAME_INPUT, RULE_NAME_OVERRIDE, + RULE_STATUS, RULE_TIMESTAMP_OVERRIDE, + RUNS_EVERY_INTERVAL, + RUNS_EVERY_TIME_TYPE, SCHEDULE_CONTINUE_BUTTON, SCHEDULE_EDIT_TAB, SEVERITY_DROPDOWN, @@ -190,6 +196,13 @@ export const fillDefineCustomRuleWithImportedQueryAndContinue = ( cy.get(CUSTOM_QUERY_INPUT).should('not.exist'); }; +export const fillScheduleRuleAndContinue = (rule: CustomRule | MachineLearningRule) => { + cy.get(RUNS_EVERY_INTERVAL).clear().type(rule.runsEvery.interval); + cy.get(RUNS_EVERY_TIME_TYPE).select(rule.runsEvery.timeType); + cy.get(LOOK_BACK_INTERVAL).clear().type(rule.lookBack.interval); + cy.get(LOOK_BACK_TIME_TYPE).select(rule.lookBack.timeType); +}; + export const fillDefineThresholdRuleAndContinue = (rule: ThresholdRule) => { const thresholdField = 0; const threshold = 1; @@ -251,6 +264,14 @@ export const selectThresholdRuleType = () => { cy.get(THRESHOLD_TYPE).click({ force: true }); }; +export const waitForTheRuleToBeExecuted = async () => { + let status = ''; + while (status !== 'succeeded') { + cy.get(REFRESH_BUTTON).click(); + status = await cy.get(RULE_STATUS).invoke('text').promisify(); + } +}; + export const selectEqlRuleType = () => { cy.get(EQL_TYPE).click({ force: true }); }; diff --git a/x-pack/plugins/security_solution/cypress/tasks/security_header.ts b/x-pack/plugins/security_solution/cypress/tasks/security_header.ts index 7427104a9d889..28efc47120d32 100644 --- a/x-pack/plugins/security_solution/cypress/tasks/security_header.ts +++ b/x-pack/plugins/security_solution/cypress/tasks/security_header.ts @@ -21,3 +21,7 @@ export const navigateFromHeaderTo = (page: string) => { export const refreshPage = () => { cy.get(REFRESH_BUTTON).click({ force: true }).invoke('text').should('not.equal', 'Updating'); }; + +export const waitForThePageToBeUpdated = () => { + cy.get(REFRESH_BUTTON).should('not.equal', 'Updating'); +}; diff --git a/x-pack/plugins/security_solution/kibana.json b/x-pack/plugins/security_solution/kibana.json index 7b5c3b5337c02..7bd76838c7559 100644 --- a/x-pack/plugins/security_solution/kibana.json +++ b/x-pack/plugins/security_solution/kibana.json @@ -27,7 +27,8 @@ "spaces", "usageCollection", "lists", - "home" + "home", + "telemetry" ], "server": true, "ui": true, diff --git a/x-pack/plugins/security_solution/package.json b/x-pack/plugins/security_solution/package.json index 6d79557fdaa28..4c9e3bc06037e 100644 --- a/x-pack/plugins/security_solution/package.json +++ b/x-pack/plugins/security_solution/package.json @@ -11,7 +11,7 @@ "cypress:open": "cypress open --config-file ./cypress/cypress.json", "cypress:open-as-ci": "node ../../../scripts/functional_tests --config ../../test/security_solution_cypress/visual_config.ts", "cypress:run": "cypress run --browser chrome --headless --spec ./cypress/integration/**/*.spec.ts --config-file ./cypress/cypress.json --reporter ../../node_modules/cypress-multi-reporters --reporter-options configFile=./cypress/reporter_config.json; status=$?; ../../node_modules/.bin/mochawesome-merge ../../../target/kibana-security-solution/cypress/results/mochawesome*.json > ../../../target/kibana-security-solution/cypress/results/output.json; ../../../node_modules/.bin/marge ../../../target/kibana-security-solution/cypress/results/output.json --reportDir ../../../target/kibana-security-solution/cypress/results; mkdir -p ../../../target/junit && cp ../../../target/kibana-security-solution/cypress/results/*.xml ../../../target/junit/ && exit $status;", - "cypress:run-as-ci": "node ../../../scripts/functional_tests --config ../../test/security_solution_cypress/cli_config.ts", + "cypress:run-as-ci": "node --max-old-space-size=2048 ../../../scripts/functional_tests --config ../../test/security_solution_cypress/cli_config.ts", "test:generate": "node scripts/endpoint/resolver_generator" }, "devDependencies": { diff --git a/x-pack/plugins/security_solution/public/common/components/and_or_badge/__examples__/index.stories.tsx b/x-pack/plugins/security_solution/public/common/components/and_or_badge/__examples__/index.stories.tsx index 7465d3ca1e63a..af27f6ffabbf6 100644 --- a/x-pack/plugins/security_solution/public/common/components/and_or_badge/__examples__/index.stories.tsx +++ b/x-pack/plugins/security_solution/public/common/components/and_or_badge/__examples__/index.stories.tsx @@ -18,7 +18,7 @@ const withTheme = (storyFn: () => ReactNode) => ( ({ eui: euiLightVars, darkMode: true })}>{storyFn()} ); -storiesOf('components/AndOrBadge', module) +storiesOf('Components/AndOrBadge', module) .addDecorator(withTheme) .add('and', () => ) .add('or', () => ) diff --git a/x-pack/plugins/security_solution/public/common/components/conditions_table/__snapshots__/index.test.tsx.snap b/x-pack/plugins/security_solution/public/common/components/conditions_table/__snapshots__/index.test.tsx.snap new file mode 100644 index 0000000000000..3d37aea431df3 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/conditions_table/__snapshots__/index.test.tsx.snap @@ -0,0 +1,174 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`conditions_table ConditionsTable should render multi item table with and badge correctly 1`] = ` + + + + + + + + + + +`; + +exports[`conditions_table ConditionsTable should render multi item table with or badge correctly 1`] = ` + + + + + + + + + + +`; + +exports[`conditions_table ConditionsTable should render single item table correctly 1`] = ` + + + + + +`; diff --git a/x-pack/plugins/security_solution/public/common/components/conditions_table/index.stories.tsx b/x-pack/plugins/security_solution/public/common/components/conditions_table/index.stories.tsx new file mode 100644 index 0000000000000..b179dbb6a405e --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/conditions_table/index.stories.tsx @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import React from 'react'; +import { ThemeProvider } from 'styled-components'; +import { storiesOf, addDecorator } from '@storybook/react'; +import euiLightVars from '@elastic/eui/dist/eui_theme_light.json'; + +import { createItems, TEST_COLUMNS } from './test_utils'; +import { ConditionsTable } from '.'; + +addDecorator((storyFn) => ( + ({ eui: euiLightVars, darkMode: false })}>{storyFn()} +)); + +storiesOf('Components|ConditionsTable', module) + .add('single item', () => { + return ; + }) + .add('and', () => { + return ; + }) + .add('or', () => { + return ; + }); diff --git a/x-pack/plugins/security_solution/public/common/components/conditions_table/index.test.tsx b/x-pack/plugins/security_solution/public/common/components/conditions_table/index.test.tsx new file mode 100644 index 0000000000000..e563e3604952a --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/conditions_table/index.test.tsx @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { shallow } from 'enzyme'; +import React from 'react'; + +import { ConditionsTable } from '.'; +import { createItems, TEST_COLUMNS } from './test_utils'; + +describe('conditions_table', () => { + describe('ConditionsTable', () => { + it('should render single item table correctly', () => { + const element = shallow( + + ); + + expect(element).toMatchSnapshot(); + }); + + it('should render multi item table with and badge correctly', () => { + const element = shallow( + + ); + + expect(element).toMatchSnapshot(); + }); + + it('should render multi item table with or badge correctly', () => { + const element = shallow( + + ); + + expect(element).toMatchSnapshot(); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/common/components/conditions_table/index.tsx b/x-pack/plugins/security_solution/public/common/components/conditions_table/index.tsx new file mode 100644 index 0000000000000..c90af8e619ff0 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/conditions_table/index.tsx @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React from 'react'; +import styled from 'styled-components'; +import { + EuiBasicTableProps, + EuiBasicTable, + EuiFlexGroup, + EuiFlexItem, + EuiHideFor, +} from '@elastic/eui'; + +import { AndOr, AndOrBadge } from '../and_or_badge'; + +const AndOrBadgeContainer = styled(EuiFlexItem)` + padding-top: ${({ theme }) => theme.eui.euiSizeXL}; + padding-bottom: ${({ theme }) => theme.eui.euiSizeS}; +`; + +type ConditionsTableProps = EuiBasicTableProps & { + badge: AndOr; +}; + +export const ConditionsTable = ({ badge, ...props }: ConditionsTableProps) => { + return ( + + {props.items.length > 1 && ( + + + + + + )} + + + + + ); +}; + +ConditionsTable.displayName = 'ConditionsTable'; diff --git a/x-pack/plugins/security_solution/public/common/components/conditions_table/test_utils.ts b/x-pack/plugins/security_solution/public/common/components/conditions_table/test_utils.ts new file mode 100644 index 0000000000000..eee61293ee7b3 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/conditions_table/test_utils.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { EuiTableFieldDataColumnType } from '@elastic/eui'; + +export interface TestItem { + name: string; + value: string; +} + +export const TEST_COLUMNS: Array> = [ + { field: 'name', name: 'Name', textOnly: true, width: '50%' }, + { field: 'value', name: 'Value', textOnly: true, width: '50%' }, +]; + +export const createItems = (count: number): TestItem[] => + [...new Array(count).keys()].map((item) => ({ name: `item ${item}`, value: `value ${item}` })); diff --git a/x-pack/plugins/security_solution/public/common/components/exceptions/add_exception_modal/index.test.tsx b/x-pack/plugins/security_solution/public/common/components/exceptions/add_exception_modal/index.test.tsx index fa9838aa37015..ef2a5770eee8d 100644 --- a/x-pack/plugins/security_solution/public/common/components/exceptions/add_exception_modal/index.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/exceptions/add_exception_modal/index.test.tsx @@ -20,7 +20,6 @@ import { useAddOrUpdateException } from '../use_add_exception'; import { useFetchOrCreateRuleExceptionList } from '../use_fetch_or_create_rule_exception_list'; import { useSignalIndex } from '../../../../detections/containers/detection_engine/alerts/use_signal_index'; import { Ecs } from '../../../../../common/ecs'; -import { TimelineNonEcsData } from '../../../../../common/search_strategy/timeline'; import * as builder from '../builder'; import * as helpers from '../helpers'; import { getExceptionListItemSchemaMock } from '../../../../../../lists/common/schemas/response/exception_list_item_schema.mock'; @@ -148,10 +147,8 @@ describe('When the add exception modal is opened', () => { describe('when there is alert data passed to an endpoint list exception', () => { let wrapper: ReactWrapper; beforeEach(async () => { - const alertDataMock: { ecsData: Ecs; nonEcsData: TimelineNonEcsData[] } = { - ecsData: { _id: 'test-id' }, - nonEcsData: [{ field: 'file.path', value: ['test/path'] }], - }; + const alertDataMock: Ecs = { _id: 'test-id', file: { path: ['test/path'] } }; + wrapper = mount( ({ eui: euiLightVars, darkMode: false })}> { describe('when there is alert data passed to a detection list exception', () => { let wrapper: ReactWrapper; beforeEach(async () => { - const alertDataMock: { ecsData: Ecs; nonEcsData: TimelineNonEcsData[] } = { - ecsData: { _id: 'test-id' }, - nonEcsData: [{ field: 'file.path', value: ['test/path'] }], - }; + const alertDataMock: Ecs = { _id: 'test-id', file: { path: ['test/path'] } }; + wrapper = mount( ({ eui: euiLightVars, darkMode: false })}> { }, }, ]); - const alertDataMock: { ecsData: Ecs; nonEcsData: TimelineNonEcsData[] } = { - ecsData: { _id: 'test-id' }, - nonEcsData: [{ field: 'file.path', value: ['test/path'] }], - }; + const alertDataMock: Ecs = { _id: 'test-id', file: { path: ['test/path'] } }; wrapper = mount( ({ eui: euiLightVars, darkMode: false })}> void; onConfirm: (didCloseAlert: boolean, didBulkCloseAlert: boolean) => void; onRuleChange?: () => void; - alertStatus?: Status; } const Modal = styled(EuiModal)` @@ -218,12 +210,12 @@ export const AddExceptionModal = memo(function AddExceptionModal({ }); const initialExceptionItems = useMemo((): ExceptionsBuilderExceptionItem[] => { - if (exceptionListType === 'endpoint' && alertData !== undefined && ruleExceptionList) { + if (exceptionListType === 'endpoint' && alertData != null && ruleExceptionList) { return defaultEndpointExceptionItems( exceptionListType, ruleExceptionList.list_id, ruleName, - alertData.nonEcsData + alertData ); } else { return []; @@ -275,15 +267,12 @@ export const AddExceptionModal = memo(function AddExceptionModal({ const retrieveAlertOsTypes = useCallback((): string[] => { const osDefaults = ['windows', 'macos']; - if (alertData) { - const osTypes = getMappedNonEcsValue({ - data: alertData.nonEcsData, - fieldName: 'host.os.family', - }); - if (osTypes.length === 0) { - return osDefaults; + if (alertData != null) { + const osTypes = alertData.host && alertData.host.os && alertData.host.os.family; + if (osTypes != null && osTypes.length > 0) { + return osTypes; } - return osTypes; + return osDefaults; } return osDefaults; }, [alertData]); @@ -304,10 +293,10 @@ export const AddExceptionModal = memo(function AddExceptionModal({ }, [comment, exceptionItemsToAdd, exceptionListType, retrieveAlertOsTypes]); const onAddExceptionConfirm = useCallback((): void => { - if (addOrUpdateExceptionItems !== null) { - const alertIdToClose = shouldCloseAlert && alertData ? alertData.ecsData._id : undefined; + if (addOrUpdateExceptionItems != null) { + const alertIdToClose = shouldCloseAlert && alertData ? alertData._id : undefined; const bulkCloseIndex = - shouldBulkCloseAlert && signalIndexName !== null ? [signalIndexName] : undefined; + shouldBulkCloseAlert && signalIndexName != null ? [signalIndexName] : undefined; addOrUpdateExceptionItems(ruleId, enrichExceptionItems(), alertIdToClose, bulkCloseIndex); } }, [ diff --git a/x-pack/plugins/security_solution/public/common/components/exceptions/builder/logic_buttons.stories.tsx b/x-pack/plugins/security_solution/public/common/components/exceptions/builder/logic_buttons.stories.tsx index e4508fa2a9a1d..64da43dc5b1c2 100644 --- a/x-pack/plugins/security_solution/public/common/components/exceptions/builder/logic_buttons.stories.tsx +++ b/x-pack/plugins/security_solution/public/common/components/exceptions/builder/logic_buttons.stories.tsx @@ -16,7 +16,7 @@ addDecorator((storyFn) => ( ({ eui: euiLightVars, darkMode: false })}>{storyFn()} )); -storiesOf('Exceptions|BuilderLogicButtons', module) +storiesOf('Exceptions/BuilderLogicButtons', module) .add('and/or buttons', () => { return ( { ]); }); }); + + describe('getPrepopulatedItem', () => { + test('it returns prepopulated items', () => { + const prepopulatedItem = getPrepopulatedItem({ + listType: 'endpoint', + listId: 'some_id', + ruleName: 'my rule', + codeSignature: { subjectName: '', trusted: '' }, + filePath: '', + sha256Hash: '', + eventCode: '', + }); + + expect(prepopulatedItem.entries).toEqual([ + { + entries: [ + { field: 'subject_name', operator: 'included', type: 'match', value: '' }, + { field: 'trusted', operator: 'included', type: 'match', value: '' }, + ], + field: 'file.Ext.code_signature', + type: 'nested', + }, + { field: 'file.path.text', operator: 'included', type: 'match', value: '' }, + { field: 'file.hash.sha256', operator: 'included', type: 'match', value: '' }, + { field: 'event.code', operator: 'included', type: 'match', value: '' }, + ]); + }); + + test('it returns prepopulated items with values', () => { + const prepopulatedItem = getPrepopulatedItem({ + listType: 'endpoint', + listId: 'some_id', + ruleName: 'my rule', + codeSignature: { subjectName: 'someSubjectName', trusted: 'false' }, + filePath: 'some-file-path', + sha256Hash: 'some-hash', + eventCode: 'some-event-code', + }); + + expect(prepopulatedItem.entries).toEqual([ + { + entries: [ + { + field: 'subject_name', + operator: 'included', + type: 'match', + value: 'someSubjectName', + }, + { field: 'trusted', operator: 'included', type: 'match', value: 'false' }, + ], + field: 'file.Ext.code_signature', + type: 'nested', + }, + { field: 'file.path.text', operator: 'included', type: 'match', value: 'some-file-path' }, + { field: 'file.hash.sha256', operator: 'included', type: 'match', value: 'some-hash' }, + { field: 'event.code', operator: 'included', type: 'match', value: 'some-event-code' }, + ]); + }); + }); + + describe('getCodeSignatureValue', () => { + test('it works when file.Ext.code_signature is an object', () => { + const codeSignatures = getCodeSignatureValue({ + _id: '123', + file: { + Ext: { + code_signature: { + subject_name: ['some_subject'], + trusted: ['false'], + }, + }, + }, + }); + + expect(codeSignatures).toEqual([{ subjectName: 'some_subject', trusted: 'false' }]); + }); + + test('it works when file.Ext.code_signature is nested type', () => { + const codeSignatures = getCodeSignatureValue({ + _id: '123', + file: { + Ext: { + code_signature: [ + { subject_name: ['some_subject'], trusted: ['false'] }, + { subject_name: ['some_subject_2'], trusted: ['true'] }, + ], + }, + }, + }); + + expect(codeSignatures).toEqual([ + { subjectName: 'some_subject', trusted: 'false' }, + { + subjectName: 'some_subject_2', + trusted: 'true', + }, + ]); + }); + + test('it returns default when file.Ext.code_signatures values are empty', () => { + const codeSignatures = getCodeSignatureValue({ + _id: '123', + file: { + Ext: { + code_signature: { subject_name: [], trusted: [] }, + }, + }, + }); + + expect(codeSignatures).toEqual([{ subjectName: '', trusted: '' }]); + }); + + test('it returns default when file.Ext.code_signatures is empty array', () => { + const codeSignatures = getCodeSignatureValue({ + _id: '123', + file: { + Ext: { + code_signature: [], + }, + }, + }); + + expect(codeSignatures).toEqual([{ subjectName: '', trusted: '' }]); + }); + + test('it returns default when file.Ext.code_signatures does not exist', () => { + const codeSignatures = getCodeSignatureValue({ + _id: '123', + }); + + expect(codeSignatures).toEqual([{ subjectName: '', trusted: '' }]); + }); + }); + + describe('defaultEndpointExceptionItems', () => { + test('it should return pre-populated items', () => { + const defaultItems = defaultEndpointExceptionItems('endpoint', 'list_id', 'my_rule', { + _id: '123', + file: { + Ext: { + code_signature: [ + { subject_name: ['some_subject'], trusted: ['false'] }, + { subject_name: ['some_subject_2'], trusted: ['true'] }, + ], + }, + path: ['some file path'], + hash: { + sha256: ['some hash'], + }, + }, + event: { + code: ['some event code'], + }, + }); + + expect(defaultItems[0].entries).toEqual([ + { + entries: [ + { + field: 'subject_name', + operator: 'included', + type: 'match', + value: 'some_subject', + }, + { field: 'trusted', operator: 'included', type: 'match', value: 'false' }, + ], + field: 'file.Ext.code_signature', + type: 'nested', + }, + { + field: 'file.path.text', + operator: 'included', + type: 'match', + value: 'some file path', + }, + { field: 'file.hash.sha256', operator: 'included', type: 'match', value: 'some hash' }, + { field: 'event.code', operator: 'included', type: 'match', value: 'some event code' }, + ]); + expect(defaultItems[1].entries).toEqual([ + { + entries: [ + { + field: 'subject_name', + operator: 'included', + type: 'match', + value: 'some_subject_2', + }, + { field: 'trusted', operator: 'included', type: 'match', value: 'true' }, + ], + field: 'file.Ext.code_signature', + type: 'nested', + }, + { + field: 'file.path.text', + operator: 'included', + type: 'match', + value: 'some file path', + }, + { field: 'file.hash.sha256', operator: 'included', type: 'match', value: 'some hash' }, + { field: 'event.code', operator: 'included', type: 'match', value: 'some event code' }, + ]); + }); + }); }); diff --git a/x-pack/plugins/security_solution/public/common/components/exceptions/helpers.tsx b/x-pack/plugins/security_solution/public/common/components/exceptions/helpers.tsx index 3c3c71a2b33e7..d4acfa39f995d 100644 --- a/x-pack/plugins/security_solution/public/common/components/exceptions/helpers.tsx +++ b/x-pack/plugins/security_solution/public/common/components/exceptions/helpers.tsx @@ -38,7 +38,8 @@ import { } from '../../../shared_imports'; import { IIndexPattern } from '../../../../../../../src/plugins/data/common'; import { validate } from '../../../../common/validate'; -import { TimelineNonEcsData } from '../../../../common/search_strategy/timeline'; +import { Ecs } from '../../../../common/ecs'; +import { CodeSignature } from '../../../../common/ecs/file'; import { WithCopyToClipboard } from '../../lib/clipboard/with_copy_to_clipboard'; /** @@ -367,23 +368,6 @@ export const lowercaseHashValues = ( }); }; -/** - * Returns the value for the given fieldname within TimelineNonEcsData if it exists - */ -export const getMappedNonEcsValue = ({ - data, - fieldName, -}: { - data: TimelineNonEcsData[]; - fieldName: string; -}): string[] => { - const item = data.find((d) => d.field === fieldName); - if (item != null && item.value != null) { - return item.value; - } - return []; -}; - export const entryHasListType = ( exceptionItems: Array ) => { @@ -397,6 +381,105 @@ export const entryHasListType = ( return false; }; +/** + * Returns the value for `file.Ext.code_signature` which + * can be an object or array of objects + */ +export const getCodeSignatureValue = ( + alertData: Ecs +): Array<{ subjectName: string; trusted: string }> => { + const { file } = alertData; + const codeSignature = file && file.Ext && file.Ext.code_signature; + + // Pre 7.10 file.Ext.code_signature was mistakenly populated as + // a single object with subject_name and trusted. + if (Array.isArray(codeSignature) && codeSignature.length > 0) { + return codeSignature.map((signature) => ({ + subjectName: (signature.subject_name && signature.subject_name[0]) ?? '', + trusted: (signature.trusted && signature.trusted[0]) ?? '', + })); + } else { + const signature: CodeSignature | undefined = !Array.isArray(codeSignature) + ? codeSignature + : undefined; + const subjectName: string | undefined = + signature && signature.subject_name && signature.subject_name[0]; + const trusted: string | undefined = signature && signature.trusted && signature.trusted[0]; + + return [ + { + subjectName: subjectName ?? '', + trusted: trusted ?? '', + }, + ]; + } +}; + +/** + * Returns the default values from the alert data to autofill new endpoint exceptions + */ +export const getPrepopulatedItem = ({ + listType, + listId, + ruleName, + codeSignature, + filePath, + sha256Hash, + eventCode, + listNamespace = 'agnostic', +}: { + listType: ExceptionListType; + listId: string; + listNamespace?: NamespaceType; + ruleName: string; + codeSignature: { subjectName: string; trusted: string }; + filePath: string; + sha256Hash: string; + eventCode: string; +}): ExceptionsBuilderExceptionItem => { + return { + ...getNewExceptionItem({ listType, listId, namespaceType: listNamespace, ruleName }), + entries: [ + { + field: 'file.Ext.code_signature', + type: 'nested', + entries: [ + { + field: 'subject_name', + operator: 'included', + type: 'match', + value: codeSignature != null ? codeSignature.subjectName : '', + }, + { + field: 'trusted', + operator: 'included', + type: 'match', + value: codeSignature != null ? codeSignature.trusted : '', + }, + ], + }, + { + field: 'file.path.text', + operator: 'included', + type: 'match', + value: filePath ?? '', + }, + { + field: 'file.hash.sha256', + operator: 'included', + type: 'match', + value: sha256Hash ?? '', + }, + { + field: 'event.code', + operator: 'included', + type: 'match', + value: eventCode ?? '', + }, + ], + }; +}; + /** * Determines whether or not any entries within the given exceptionItems contain values not in the specified ECS mapping */ @@ -434,62 +517,19 @@ export const defaultEndpointExceptionItems = ( listType: ExceptionListType, listId: string, ruleName: string, - alertData: TimelineNonEcsData[] + alertEcsData: Ecs ): ExceptionsBuilderExceptionItem[] => { - const [filePath] = getMappedNonEcsValue({ data: alertData, fieldName: 'file.path' }); - const [signatureSigner] = getMappedNonEcsValue({ - data: alertData, - fieldName: 'file.Ext.code_signature.subject_name', - }); - const [signatureTrusted] = getMappedNonEcsValue({ - data: alertData, - fieldName: 'file.Ext.code_signature.trusted', - }); - const [sha256Hash] = getMappedNonEcsValue({ data: alertData, fieldName: 'file.hash.sha256' }); - const [eventCode] = getMappedNonEcsValue({ data: alertData, fieldName: 'event.code' }); - const namespaceType = 'agnostic'; - - return [ - { - ...getNewExceptionItem({ listType, listId, namespaceType, ruleName }), - entries: [ - { - field: 'file.Ext.code_signature', - type: 'nested', - entries: [ - { - field: 'subject_name', - operator: 'included', - type: 'match', - value: signatureSigner ?? '', - }, - { - field: 'trusted', - operator: 'included', - type: 'match', - value: signatureTrusted ?? '', - }, - ], - }, - { - field: 'file.path.text', - operator: 'included', - type: 'match', - value: filePath ?? '', - }, - { - field: 'file.hash.sha256', - operator: 'included', - type: 'match', - value: sha256Hash ?? '', - }, - { - field: 'event.code', - operator: 'included', - type: 'match', - value: eventCode ?? '', - }, - ], - }, - ]; + const { file, event: alertEvent } = alertEcsData; + + return getCodeSignatureValue(alertEcsData).map((codeSignature) => + getPrepopulatedItem({ + listType, + listId, + ruleName, + filePath: file && file.path ? file.path[0] : '', + sha256Hash: file && file.hash && file.hash.sha256 ? file.hash.sha256[0] : '', + eventCode: alertEvent && alertEvent.code ? alertEvent.code[0] : '', + codeSignature, + }) + ); }; diff --git a/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exception_item/index.stories.tsx b/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exception_item/index.stories.tsx index a540a34b70677..39f34ae8a3cf3 100644 --- a/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exception_item/index.stories.tsx +++ b/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exception_item/index.stories.tsx @@ -17,7 +17,7 @@ addDecorator((storyFn) => ( ({ eui: euiLightVars, darkMode: false })}>{storyFn()} )); -storiesOf('Components|ExceptionItem', module) +storiesOf('Components/ExceptionItem', module) .add('with os', () => { const payload = getExceptionListItemSchemaMock(); payload.description = ''; diff --git a/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exceptions_viewer_header.stories.tsx b/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exceptions_viewer_header.stories.tsx index d79d46817f153..f7e7411db23a4 100644 --- a/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exceptions_viewer_header.stories.tsx +++ b/x-pack/plugins/security_solution/public/common/components/exceptions/viewer/exceptions_viewer_header.stories.tsx @@ -16,7 +16,7 @@ addDecorator((storyFn) => ( ({ eui: euiLightVars, darkMode: false })}>{storyFn()} )); -storiesOf('Components|ExceptionsViewerHeader', module) +storiesOf('Components/ExceptionsViewerHeader', module) .add('loading', () => { return ( + + + primary + + +
+`; + +exports[`item_details_card ItemDetailsCard should render correctly with actions 1`] = ` + + + + + + + + + + + + + + + some text + + some node + + + + + + + primary + + + + + secondary + + + + + danger + + + + + + + + + + +`; + +exports[`item_details_card ItemDetailsCard should render correctly with no actions 1`] = ` + + + + + + + + + + + + + + + some text + + some node + + + + + + + + + + + +`; + +exports[`item_details_card ItemDetailsPropertySummary should render correctly 1`] = ` + + + name 1 + + + value 1 + + +`; diff --git a/x-pack/plugins/security_solution/public/common/components/item_details_card/index.stories.tsx b/x-pack/plugins/security_solution/public/common/components/item_details_card/index.stories.tsx new file mode 100644 index 0000000000000..b16f4be598866 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/item_details_card/index.stories.tsx @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import React from 'react'; +import { ThemeProvider } from 'styled-components'; +import { storiesOf, addDecorator } from '@storybook/react'; +import euiLightVars from '@elastic/eui/dist/eui_theme_light.json'; + +import { ItemDetailsAction, ItemDetailsCard, ItemDetailsPropertySummary } from '.'; + +addDecorator((storyFn) => ( + ({ eui: euiLightVars, darkMode: false })}>{storyFn()} +)); + +storiesOf('Components|ItemDetailsCard', module).add('default', () => { + return ( + + + + + + {'content text'} + {'content node'} + + + {'primary'} + + + {'secondary'} + + + {'danger'} + + + ); +}); diff --git a/x-pack/plugins/security_solution/public/common/components/item_details_card/index.test.tsx b/x-pack/plugins/security_solution/public/common/components/item_details_card/index.test.tsx new file mode 100644 index 0000000000000..3f8578606aab9 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/item_details_card/index.test.tsx @@ -0,0 +1,73 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { shallow } from 'enzyme'; +import React from 'react'; + +import { ItemDetailsAction, ItemDetailsCard, ItemDetailsPropertySummary } from '.'; + +describe('item_details_card', () => { + describe('ItemDetailsPropertySummary', () => { + it('should render correctly', () => { + const element = shallow(); + + expect(element).toMatchSnapshot(); + }); + }); + + describe('ItemDetailsAction', () => { + it('should render correctly', () => { + const element = shallow( + + {'primary'} + + ); + + expect(element).toMatchSnapshot(); + }); + }); + + describe('ItemDetailsCard', () => { + it('should render correctly with no actions', () => { + const element = shallow( + + + + + + {'some text'} + {'some node'} + + ); + + expect(element).toMatchSnapshot(); + }); + + it('should render correctly with actions', () => { + const element = shallow( + + + + + + {'some text'} + {'some node'} + + + {'primary'} + + + {'secondary'} + + + {'danger'} + + + ); + + expect(element).toMatchSnapshot(); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/common/components/item_details_card/index.tsx b/x-pack/plugins/security_solution/public/common/components/item_details_card/index.tsx new file mode 100644 index 0000000000000..ee1c3e1bead1a --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/components/item_details_card/index.tsx @@ -0,0 +1,129 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { FC, isValidElement, memo, ReactElement, ReactNode, useMemo } from 'react'; +import styled from 'styled-components'; +import { + EuiPanel, + EuiFlexGroup, + EuiFlexItem, + EuiButton, + EuiDescriptionList, + EuiDescriptionListTitle, + EuiDescriptionListDescription, + EuiButtonProps, + PropsForButton, +} from '@elastic/eui'; + +const OTHER_NODES = {}; + +const groupChildrenByType = ( + children: ReactNode | ReactNode[], + types: Array +) => { + const result = new Map(); + + types.forEach((type) => result.set(type, [])); + result.set(OTHER_NODES, []); + + React.Children.toArray(children).forEach((child) => { + const key = isValidElement(child) ? child.type : OTHER_NODES; + + if (!result.has(key)) { + result.get(OTHER_NODES)?.push(child); + } else { + result.get(key)?.push(child); + } + }); + + return result; +}; + +const SummarySection = styled(EuiFlexItem)` + background-color: ${({ theme }) => theme.eui.euiColorLightestShade}; + padding: ${({ theme }) => theme.eui.euiSize}; +`; + +const DetailsSection = styled(EuiFlexItem)` + padding: ${({ theme }) => theme.eui.euiSize}; +`; + +const DescriptionListTitle = styled(EuiDescriptionListTitle)` + width: 40%; +`; + +const DescriptionListDescription = styled(EuiDescriptionListDescription)` + width: 60%; +`; + +interface ItemDetailsPropertySummaryProps { + name: ReactNode | ReactNode[]; + value: ReactNode | ReactNode[]; +} + +export const ItemDetailsPropertySummary: FC = memo( + ({ name, value }) => ( + <> + {name} + {value} + + ) +); + +ItemDetailsPropertySummary.displayName = 'ItemPropertySummary'; + +export const ItemDetailsAction: FC> = memo( + ({ children, ...rest }) => ( + + + {children} + + + ) +); + +ItemDetailsAction.displayName = 'ItemDetailsAction'; + +export const ItemDetailsCard: FC = memo(({ children }) => { + const childElements = useMemo( + () => groupChildrenByType(children, [ItemDetailsPropertySummary, ItemDetailsAction]), + [children] + ); + + return ( + + + + + + + {childElements.get(ItemDetailsPropertySummary)} + + + + + {childElements.get(OTHER_NODES)} + {childElements.has(ItemDetailsAction) && ( + + + {childElements.get(ItemDetailsAction)?.map((action, index) => ( + + {action} + + ))} + + + )} + + + + + + + ); +}); + +ItemDetailsCard.displayName = 'ItemDetailsCard'; diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx index 82fed152ea66d..1a0b35620c9c9 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/alert_context_menu.tsx @@ -14,6 +14,7 @@ import { EuiContextMenuItem, } from '@elastic/eui'; import styled from 'styled-components'; +import { getOr } from 'lodash/fp'; import { useAppToasts } from '../../../../common/hooks/use_app_toasts'; import { TimelineId } from '../../../../../common/types/timeline'; @@ -28,12 +29,7 @@ import { FILTER_OPEN, FILTER_CLOSED, FILTER_IN_PROGRESS } from '../alerts_filter import { updateAlertStatusAction } from '../actions'; import { SetEventsDeletedProps, SetEventsLoadingProps } from '../types'; import { Ecs } from '../../../../../common/ecs'; -import { TimelineNonEcsData } from '../../../../../common/search_strategy/timeline'; -import { - AddExceptionModal as AddExceptionModalComponent, - AddExceptionModalBaseProps, -} from '../../../../common/components/exceptions/add_exception_modal'; -import { getMappedNonEcsValue } from '../../../../common/components/exceptions/helpers'; +import { AddExceptionModal as AddExceptionModalComponent } from '../../../../common/components/exceptions/add_exception_modal'; import * as i18nCommon from '../../../../common/translations'; import * as i18n from '../translations'; import { @@ -43,27 +39,18 @@ import { } from '../../../../common/components/toasters'; import { inputsModel } from '../../../../common/store'; import { useUserData } from '../../user_info'; +import { ExceptionListType } from '../../../../../common/shared_imports'; interface AlertContextMenuProps { disabled: boolean; ecsRowData: Ecs; - nonEcsRowData: TimelineNonEcsData[]; refetch: inputsModel.Refetch; timelineId: string; } -const addExceptionModalInitialState: AddExceptionModalBaseProps = { - ruleName: '', - ruleId: '', - ruleIndices: [], - exceptionListType: 'detection', - alertData: undefined, -}; - const AlertContextMenuComponent: React.FC = ({ disabled, ecsRowData, - nonEcsRowData, refetch, timelineId, }) => { @@ -74,6 +61,23 @@ const AlertContextMenuComponent: React.FC = ({ (ecsRowData.signal?.status && (ecsRowData.signal.status[0] as Status)) ?? undefined ); const eventId = ecsRowData._id; + const ruleId = useMemo( + (): string | null => + (ecsRowData.signal?.rule && ecsRowData.signal.rule.id && ecsRowData.signal.rule.id[0]) ?? + null, + [ecsRowData] + ); + const ruleName = useMemo( + (): string => + (ecsRowData.signal?.rule && ecsRowData.signal.rule.name && ecsRowData.signal.rule.name[0]) ?? + '', + [ecsRowData] + ); + const ruleIndices = useMemo( + (): string[] => + (ecsRowData.signal?.rule && ecsRowData.signal.rule.index) ?? DEFAULT_INDEX_PATTERN, + [ecsRowData] + ); const { addWarning } = useAppToasts(); @@ -81,34 +85,25 @@ const AlertContextMenuComponent: React.FC = ({ setPopover(!isPopoverOpen); }, [isPopoverOpen]); - const closePopover = useCallback(() => { + const closePopover = useCallback((): void => { setPopover(false); }, []); - const [shouldShowAddExceptionModal, setShouldShowAddExceptionModal] = useState(false); - const [addExceptionModalState, setAddExceptionModalState] = useState( - addExceptionModalInitialState - ); + const [exceptionModalType, setOpenAddExceptionModal] = useState(null); const [{ canUserCRUD, hasIndexWrite }] = useUserData(); - const isEndpointAlert = useMemo(() => { - if (!nonEcsRowData) { + const isEndpointAlert = useMemo((): boolean => { + if (ecsRowData == null) { return false; } - const [module] = getMappedNonEcsValue({ - data: nonEcsRowData, - fieldName: 'signal.original_event.module', - }); - const [kind] = getMappedNonEcsValue({ - data: nonEcsRowData, - fieldName: 'signal.original_event.kind', - }); - return module === 'endpoint' && kind === 'alert'; - }, [nonEcsRowData]); + const eventModules = getOr([], 'signal.original_event.module', ecsRowData); + const kinds = getOr([], 'signal.original_event.kind', ecsRowData); - const closeAddExceptionModal = useCallback(() => { - setShouldShowAddExceptionModal(false); - setAddExceptionModalState(addExceptionModalInitialState); + return eventModules.includes('endpoint') && kinds.includes('alert'); + }, [ecsRowData]); + + const closeAddExceptionModal = useCallback((): void => { + setOpenAddExceptionModal(null); }, []); const onAddExceptionCancel = useCallback(() => { @@ -283,28 +278,6 @@ const AlertContextMenuComponent: React.FC = ({ ); - const openAddExceptionModal = useCallback( - ({ - ruleName, - ruleIndices, - ruleId, - exceptionListType, - alertData, - }: AddExceptionModalBaseProps) => { - if (alertData !== null && alertData !== undefined) { - setShouldShowAddExceptionModal(true); - setAddExceptionModalState({ - ruleName, - ruleId, - ruleIndices, - exceptionListType, - alertData, - }); - } - }, - [setShouldShowAddExceptionModal, setAddExceptionModalState] - ); - const button = ( = ({ /> ); - const handleAddEndpointExceptionClick = useCallback(() => { - const [ruleName] = getMappedNonEcsValue({ - data: nonEcsRowData, - fieldName: 'signal.rule.name', - }); - const [ruleId] = getMappedNonEcsValue({ - data: nonEcsRowData, - fieldName: 'signal.rule.id', - }); - const ruleIndices = getMappedNonEcsValue({ - data: nonEcsRowData, - fieldName: 'signal.rule.index', - }); - + const handleAddEndpointExceptionClick = useCallback((): void => { closePopover(); - - if (ruleId !== undefined) { - openAddExceptionModal({ - ruleName: ruleName ?? '', - ruleId, - ruleIndices: ruleIndices.length > 0 ? ruleIndices : DEFAULT_INDEX_PATTERN, - exceptionListType: 'endpoint', - alertData: { - ecsData: ecsRowData, - nonEcsData: nonEcsRowData, - }, - }); - } - }, [closePopover, ecsRowData, nonEcsRowData, openAddExceptionModal]); + setOpenAddExceptionModal('endpoint'); + }, [closePopover]); const addEndpointExceptionComponent = ( = ({ ); - const handleAddExceptionClick = useCallback(() => { - const [ruleName] = getMappedNonEcsValue({ - data: nonEcsRowData, - fieldName: 'signal.rule.name', - }); - const [ruleId] = getMappedNonEcsValue({ - data: nonEcsRowData, - fieldName: 'signal.rule.id', - }); - const ruleIndices = getMappedNonEcsValue({ - data: nonEcsRowData, - fieldName: 'signal.rule.index', - }); - + const handleAddExceptionClick = useCallback((): void => { closePopover(); + setOpenAddExceptionModal('detection'); + }, [closePopover]); - if (ruleId !== undefined) { - openAddExceptionModal({ - ruleName: ruleName ?? '', - ruleId, - ruleIndices: ruleIndices.length > 0 ? ruleIndices : DEFAULT_INDEX_PATTERN, - exceptionListType: 'detection', - alertData: { - ecsData: ecsRowData, - nonEcsData: nonEcsRowData, - }, - }); - } - }, [closePopover, ecsRowData, nonEcsRowData, openAddExceptionModal]); - - const areExceptionsAllowed = useMemo(() => { - const ruleTypes = getMappedNonEcsValue({ - data: nonEcsRowData, - fieldName: 'signal.rule.type', - }); + const areExceptionsAllowed = useMemo((): boolean => { + const ruleTypes = getOr([], 'signal.rule.type', ecsRowData); const [ruleType] = ruleTypes as Type[]; return !isMlRule(ruleType) && !isThresholdRule(ruleType); - }, [nonEcsRowData]); + }, [ecsRowData]); const addExceptionComponent = ( = ({ - {shouldShowAddExceptionModal === true && addExceptionModalState.alertData !== null && ( + {exceptionModalType != null && ruleId != null && ecsRowData != null && ( = ({ ruleId, ruleEnabled }) <> - {currentStatus?.status ?? getEmptyTagValue()} + + {currentStatus?.status ?? getEmptyTagValue()} + {currentStatus?.status_date != null && currentStatus?.status != null && ( @@ -84,6 +86,7 @@ const RuleStatusComponent: React.FC = ({ ruleId, ruleEnabled }) )} } > diff --git a/x-pack/plugins/security_solution/public/graphql/types.ts b/x-pack/plugins/security_solution/public/graphql/types.ts index df8333ea63055..5cc8fd1f37d2e 100644 --- a/x-pack/plugins/security_solution/public/graphql/types.ts +++ b/x-pack/plugins/security_solution/public/graphql/types.ts @@ -506,17 +506,17 @@ export interface CloudFields { machine?: Maybe; - provider?: Maybe<(Maybe)[]>; + provider?: Maybe[]>; - region?: Maybe<(Maybe)[]>; + region?: Maybe[]>; } export interface CloudInstance { - id?: Maybe<(Maybe)[]>; + id?: Maybe[]>; } export interface CloudMachine { - type?: Maybe<(Maybe)[]>; + type?: Maybe[]>; } export interface EndpointFields { @@ -776,7 +776,7 @@ export interface SortTimelineResult { } export interface ResponseTimelines { - timeline: (Maybe)[]; + timeline: Maybe[]; totalCount?: Maybe; @@ -1527,9 +1527,9 @@ export interface HostFields { id?: Maybe; - ip?: Maybe<(Maybe)[]>; + ip?: Maybe[]>; - mac?: Maybe<(Maybe)[]>; + mac?: Maybe[]>; name?: Maybe; @@ -1545,7 +1545,7 @@ export interface IndexField { /** Example of field's value */ example?: Maybe; /** whether the field's belong to an alias index */ - indexes: (Maybe)[]; + indexes: Maybe[]; /** The name of the field */ name: string; /** The type of the field's values as recognized by Kibana */ @@ -1772,21 +1772,21 @@ export namespace GetHostOverviewQuery { machine: Maybe; - provider: Maybe<(Maybe)[]>; + provider: Maybe[]>; - region: Maybe<(Maybe)[]>; + region: Maybe[]>; }; export type Instance = { __typename?: 'CloudInstance'; - id: Maybe<(Maybe)[]>; + id: Maybe[]>; }; export type Machine = { __typename?: 'CloudMachine'; - type: Maybe<(Maybe)[]>; + type: Maybe[]>; }; export type Inspect = { @@ -1969,7 +1969,7 @@ export namespace GetAllTimeline { favoriteCount: Maybe; - timeline: (Maybe)[]; + timeline: Maybe[]; }; export type Timeline = { diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/action.ts b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/action.ts index c2a838404b0bb..dce135dd213b3 100644 --- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/action.ts +++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/action.ts @@ -113,6 +113,26 @@ interface AppRequestedEndpointList { type: 'appRequestedEndpointList'; } +interface ServerReturnedAgenstWithEndpointsTotal { + type: 'serverReturnedAgenstWithEndpointsTotal'; + payload: number; +} + +interface ServerFailedToReturnAgenstWithEndpointsTotal { + type: 'serverFailedToReturnAgenstWithEndpointsTotal'; + payload: ServerApiError; +} + +interface ServerReturnedEndpointsTotal { + type: 'serverReturnedEndpointsTotal'; + payload: number; +} + +interface ServerFailedToReturnEndpointsTotal { + type: 'serverFailedToReturnEndpointsTotal'; + payload: ServerApiError; +} + export type EndpointAction = | ServerReturnedEndpointList | ServerFailedToReturnEndpointList @@ -131,5 +151,9 @@ export type EndpointAction = | ServerFailedToReturnMetadataPatterns | AppRequestedEndpointList | ServerReturnedEndpointNonExistingPolicies + | ServerReturnedAgenstWithEndpointsTotal | ServerReturnedEndpointAgentPolicies - | UserUpdatedEndpointListRefreshOptions; + | UserUpdatedEndpointListRefreshOptions + | ServerReturnedEndpointsTotal + | ServerFailedToReturnAgenstWithEndpointsTotal + | ServerFailedToReturnEndpointsTotal; diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/index.test.ts b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/index.test.ts index 61bcd222b1b1e..84d1dabe86910 100644 --- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/index.test.ts +++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/index.test.ts @@ -58,6 +58,10 @@ describe('EndpointList store concerns', () => { patternsError: undefined, isAutoRefreshEnabled: true, autoRefreshInterval: DEFAULT_POLL_INTERVAL, + agentsWithEndpointsTotal: 0, + endpointsTotal: 0, + agentsWithEndpointsTotalError: undefined, + endpointsTotalError: undefined, queryStrategyVersion: undefined, }); }); diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts index 7872c8824a8ee..17e0101426b07 100644 --- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts +++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/middleware.ts @@ -24,6 +24,7 @@ import { sendGetEndpointSpecificPackagePolicies, sendGetEndpointSecurityPackage, sendGetAgentPolicyList, + sendGetFleetAgentsWithEndpoint, } from '../../policy/store/policy_list/services/ingest'; import { AGENT_POLICY_SAVED_OBJECT_TYPE } from '../../../../../../ingest_manager/common'; import { metadataCurrentIndexPattern } from '../../../../../common/endpoint/constants'; @@ -87,6 +88,32 @@ export const endpointMiddlewareFactory: ImmutableMiddlewareFactory => { +const endpointsTotal = async (http: HttpStart): Promise => { try { return ( - ( - await http.post('/api/endpoint/metadata', { - body: JSON.stringify({ - paging_properties: [{ page_index: 0 }, { page_size: 1 }], - }), - }) - ).hosts.length !== 0 - ); + await http.post('/api/endpoint/metadata', { + body: JSON.stringify({ + paging_properties: [{ page_index: 0 }, { page_size: 1 }], + }), + }) + ).total; + } catch (error) { + // eslint-disable-next-line no-console + console.error(`error while trying to check for total endpoints`); + // eslint-disable-next-line no-console + console.error(error); + } + return 0; +}; + +const doEndpointsExist = async (http: HttpStart): Promise => { + try { + return (await endpointsTotal(http)) > 0; } catch (error) { // eslint-disable-next-line no-console console.error(`error while trying to check if endpoints exist`); diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/mock_endpoint_result_list.ts b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/mock_endpoint_result_list.ts index 43b6d4d349ddf..ff3bd2d9973c7 100644 --- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/mock_endpoint_result_list.ts +++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/mock_endpoint_result_list.ts @@ -18,11 +18,13 @@ import { INGEST_API_AGENT_POLICIES, INGEST_API_EPM_PACKAGES, INGEST_API_PACKAGE_POLICIES, + INGEST_API_FLEET_AGENTS, } from '../../policy/store/policy_list/services/ingest'; import { GetAgentPoliciesResponse, GetAgentPoliciesResponseItem, GetPackagesResponse, + GetAgentsResponse, } from '../../../../../../ingest_manager/common/types/rest_spec'; import { GetPolicyListResponse } from '../../policy/types'; @@ -87,6 +89,7 @@ const endpointListApiPathHandlerMocks = ({ policyResponse = generator.generatePolicyResponse(), agentPolicy = generator.generateAgentPolicy(), queryStrategyVersion = MetadataQueryStrategyVersions.VERSION_2, + totalAgentsUsingEndpoint = 0, }: { /** route handlers will be setup for each individual host in this array */ endpointsResults?: HostResultList['hosts']; @@ -95,6 +98,7 @@ const endpointListApiPathHandlerMocks = ({ policyResponse?: HostPolicyResponse; agentPolicy?: GetAgentPoliciesResponseItem; queryStrategyVersion?: MetadataQueryStrategyVersions; + totalAgentsUsingEndpoint?: number; } = {}) => { const apiHandlers = { // endpoint package info @@ -143,6 +147,17 @@ const endpointListApiPathHandlerMocks = ({ total: endpointPackagePolicies?.length, }; }, + + // List of Agents using Endpoint + [INGEST_API_FLEET_AGENTS]: (): GetAgentsResponse => { + return { + total: totalAgentsUsingEndpoint, + list: [], + totalInactive: 0, + page: 1, + perPage: 10, + }; + }, }; // Build a GET route handler for each endpoint details based on the list of Endpoints passed on input @@ -185,11 +200,15 @@ export const setEndpointListApiMockImplementation: ( throw new Error(`un-expected call to http.post: ${args}`); }) // First time called, return list of endpoints + .mockImplementationOnce(async () => { + return apiHandlers['/api/endpoint/metadata'](); + }) + // Metadata is called a second time to get the full total of Endpoints regardless of filters. .mockImplementationOnce(async () => { return apiHandlers['/api/endpoint/metadata'](); }); - // If the endpoints list results is zero, then mock the second call to `/metadata` to return + // If the endpoints list results is zero, then mock the third call to `/metadata` to return // empty list - indicating there are no endpoints currently present on the system if (!endpointsResults.length) { mockedHttpService.post.mockImplementationOnce(async () => { diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/reducer.ts b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/reducer.ts index 0f948f74a48e4..26d8dda2f4aec 100644 --- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/reducer.ts +++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/reducer.ts @@ -36,6 +36,10 @@ export const initialEndpointListState: Immutable = { patternsError: undefined, isAutoRefreshEnabled: true, autoRefreshInterval: DEFAULT_POLL_INTERVAL, + agentsWithEndpointsTotal: 0, + agentsWithEndpointsTotalError: undefined, + endpointsTotal: 0, + endpointsTotalError: undefined, queryStrategyVersion: undefined, }; @@ -160,6 +164,28 @@ export const endpointListReducer: ImmutableReducer = ( ...state, endpointsExist: action.payload, }; + } else if (action.type === 'serverReturnedAgenstWithEndpointsTotal') { + return { + ...state, + agentsWithEndpointsTotal: action.payload, + agentsWithEndpointsTotalError: undefined, + }; + } else if (action.type === 'serverFailedToReturnAgenstWithEndpointsTotal') { + return { + ...state, + agentsWithEndpointsTotalError: action.payload, + }; + } else if (action.type === 'serverReturnedEndpointsTotal') { + return { + ...state, + endpointsTotal: action.payload, + endpointsTotalError: undefined, + }; + } else if (action.type === 'serverFailedToReturnEndpointsTotal') { + return { + ...state, + endpointsTotalError: action.payload, + }; } else if (action.type === 'userUpdatedEndpointListRefreshOptions') { return { ...state, diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/selectors.ts b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/selectors.ts index fe47d60afc339..29d9185b6cea5 100644 --- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/selectors.ts +++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/store/selectors.ts @@ -55,6 +55,14 @@ export const isAutoRefreshEnabled = (state: Immutable) => state.i export const autoRefreshInterval = (state: Immutable) => state.autoRefreshInterval; +export const areEndpointsEnrolling = (state: Immutable) => { + return state.agentsWithEndpointsTotal > state.endpointsTotal; +}; + +export const agentsWithEndpointsTotalError = (state: Immutable) => + state.agentsWithEndpointsTotalError; + +export const endpointsTotalError = (state: Immutable) => state.endpointsTotalError; const queryStrategyVersion = (state: Immutable) => state.queryStrategyVersion; export const endpointPackageVersion = createSelector( diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/types.ts b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/types.ts index bdd0d5e942cef..e3e2dc7b55a5e 100644 --- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/types.ts +++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/types.ts @@ -66,6 +66,14 @@ export interface EndpointState { isAutoRefreshEnabled: boolean; /** The current auto refresh interval for data in ms */ autoRefreshInterval: number; + /** The total Agents that contain an Endpoint package */ + agentsWithEndpointsTotal: number; + /** api error for total Agents that contain an Endpoint package */ + agentsWithEndpointsTotalError?: ServerApiError; + /** The total, actual number of Endpoints regardless of any filtering */ + endpointsTotal: number; + /** api error for total, actual Endpoints */ + endpointsTotalError?: ServerApiError; /** The query strategy version that informs whether the transform for KQL is enabled or not */ queryStrategyVersion?: MetadataQueryStrategyVersions; } diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.test.tsx b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.test.tsx index bb4be42b04d4e..debdde901407a 100644 --- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.test.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.test.tsx @@ -150,6 +150,63 @@ describe('when on the list page', () => { }); }); + describe('when determining when to show the enrolling message', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should display the enrolling message when there are less Endpoints than Agents', async () => { + reactTestingLibrary.act(() => { + const mockedEndpointListData = mockEndpointResultList({ + total: 4, + }); + setEndpointListApiMockImplementation(coreStart.http, { + endpointsResults: mockedEndpointListData.hosts, + totalAgentsUsingEndpoint: 5, + }); + }); + const renderResult = render(); + await reactTestingLibrary.act(async () => { + await middlewareSpy.waitForAction('serverReturnedAgenstWithEndpointsTotal'); + }); + expect(renderResult.queryByTestId('endpointsEnrollingNotification')).not.toBeNull(); + }); + + it('should NOT display the enrolling message when there are equal Endpoints than Agents', async () => { + reactTestingLibrary.act(() => { + const mockedEndpointListData = mockEndpointResultList({ + total: 5, + }); + setEndpointListApiMockImplementation(coreStart.http, { + endpointsResults: mockedEndpointListData.hosts, + totalAgentsUsingEndpoint: 5, + }); + }); + const renderResult = render(); + await reactTestingLibrary.act(async () => { + await middlewareSpy.waitForAction('serverReturnedAgenstWithEndpointsTotal'); + }); + expect(renderResult.queryByTestId('endpointsEnrollingNotification')).toBeNull(); + }); + + it('should NOT display the enrolling message when there are more Endpoints than Agents', async () => { + reactTestingLibrary.act(() => { + const mockedEndpointListData = mockEndpointResultList({ + total: 6, + }); + setEndpointListApiMockImplementation(coreStart.http, { + endpointsResults: mockedEndpointListData.hosts, + totalAgentsUsingEndpoint: 5, + }); + }); + const renderResult = render(); + await reactTestingLibrary.act(async () => { + await middlewareSpy.waitForAction('serverReturnedAgenstWithEndpointsTotal'); + }); + expect(renderResult.queryByTestId('endpointsEnrollingNotification')).toBeNull(); + }); + }); + describe('when there is no selected host in the url', () => { it('should not show the flyout', () => { const renderResult = render(); diff --git a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx index 3e1f08eee7b94..4bb9335496ef4 100644 --- a/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/endpoint_hosts/view/index.tsx @@ -23,6 +23,7 @@ import { EuiButtonIcon, EuiFlexGroup, EuiFlexItem, + EuiCallOut, } from '@elastic/eui'; import { useHistory } from 'react-router-dom'; import { i18n } from '@kbn/i18n'; @@ -135,6 +136,9 @@ export const EndpointList = () => { autoRefreshInterval, isAutoRefreshEnabled, patternsError, + areEndpointsEnrolling, + agentsWithEndpointsTotalError, + endpointsTotalError, isTransformEnabled, } = useEndpointSelector(selector); const { formatUrl, search } = useFormatUrl(SecurityPageName.administration); @@ -486,7 +490,7 @@ export const EndpointList = () => { }, [formatUrl, queryParams, search, agentPolicies, services?.application?.getUrlForApp]); const renderTableOrEmptyState = useMemo(() => { - if (endpointsExist) { + if (endpointsExist || areEndpointsEnrolling) { return ( { handleSelectableOnChange, selectionOptions, handleCreatePolicyClick, + areEndpointsEnrolling, ]); const hasListData = listData && listData.length > 0; @@ -544,6 +549,10 @@ export const EndpointList = () => { return !endpointsExist ? DEFAULT_POLL_INTERVAL : autoRefreshInterval; }, [endpointsExist, autoRefreshInterval]); + const hasErrorFindingTotals = useMemo(() => { + return endpointsTotalError || agentsWithEndpointsTotalError ? true : false; + }, [endpointsTotalError, agentsWithEndpointsTotalError]); + const shouldShowKQLBar = useMemo(() => { return endpointsExist && !patternsError && isTransformEnabled; }, [endpointsExist, patternsError, isTransformEnabled]); @@ -567,6 +576,21 @@ export const EndpointList = () => { > {hasSelectedEndpoint && } <> + {areEndpointsEnrolling && !hasErrorFindingTotals && ( + <> + + } + /> + + + )} {shouldShowKQLBar && ( diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_list/services/ingest.ts b/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_list/services/ingest.ts index e3b12e06a7025..48ee6e4f67ad0 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_list/services/ingest.ts +++ b/x-pack/plugins/security_solution/public/management/pages/policy/store/policy_list/services/ingest.ts @@ -8,6 +8,7 @@ import { HttpFetchOptions, HttpStart } from 'kibana/public'; import { GetPackagePoliciesRequest, GetAgentStatusResponse, + GetAgentsResponse, DeletePackagePoliciesResponse, DeletePackagePoliciesRequest, PACKAGE_POLICY_SAVED_OBJECT_TYPE, @@ -23,6 +24,7 @@ export const INGEST_API_PACKAGE_POLICIES = `${INGEST_API_ROOT}/package_policies` export const INGEST_API_AGENT_POLICIES = `${INGEST_API_ROOT}/agent_policies`; const INGEST_API_FLEET = `${INGEST_API_ROOT}/fleet`; const INGEST_API_FLEET_AGENT_STATUS = `${INGEST_API_FLEET}/agent-status`; +export const INGEST_API_FLEET_AGENTS = `${INGEST_API_FLEET}/agents`; export const INGEST_API_EPM_PACKAGES = `${INGEST_API_ROOT}/epm/packages`; const INGEST_API_DELETE_PACKAGE_POLICY = `${INGEST_API_PACKAGE_POLICIES}/delete`; @@ -131,6 +133,26 @@ export const sendGetFleetAgentStatusForPolicy = ( }); }; +/** + * Get a status summary for all Agents that are currently assigned to a given agent policy + * + * @param http + * @param options + */ +export const sendGetFleetAgentsWithEndpoint = ( + http: HttpStart, + options: Exclude = {} +): Promise => { + return http.get(INGEST_API_FLEET_AGENTS, { + ...options, + query: { + page: 1, + perPage: 1, + kuery: 'fleet-agents.packages : "endpoint"', + }, + }); +}; + /** * Get Endpoint Security Package information */ diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/__snapshots__/trusted_apps_list.test.tsx.snap b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/__snapshots__/trusted_apps_list.test.tsx.snap index ccd94c63e96c8..d33c74a021f86 100644 --- a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/__snapshots__/trusted_apps_list.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/__snapshots__/trusted_apps_list.test.tsx.snap @@ -115,6 +115,21 @@ exports[`TrustedAppsList renders correctly initially 1`] = ` + +
+ +
+ @@ -123,7 +138,7 @@ exports[`TrustedAppsList renders correctly initially 1`] = ` >
+ +
+ +
+ @@ -266,7 +296,7 @@ exports[`TrustedAppsList renders correctly when failed loading data for the firs >
+ +
+ +
+ @@ -414,7 +459,7 @@ exports[`TrustedAppsList renders correctly when failed loading data for the seco >
`; -exports[`TrustedAppsList renders correctly when loaded data 1`] = ` +exports[`TrustedAppsList renders correctly when item details expanded 1`] = ` +.c0 { + background-color: #f5f7fa; + padding: 16px; +} + +.c3 { + padding: 16px; +} + +.c1 { + width: 40%; +} + +.c2 { + width: 60%; +} +
+ +
+ +
+ - Delete + Remove
+ +
+ +
+ + + + +
+
+
+
+
+
+
+
+ Name +
+
+ trusted app 0 +
+
+ OS +
+
+ Windows +
+
+ Date Created +
+
+ 1 minute ago +
+
+ Created By +
+
+ someone +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + +
+
+
+ + Field + +
+
+
+ + Operator + +
+
+
+ + Value + +
+
+
+ + No items found + +
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ - Delete + Remove
+ +
+ +
+ - Delete + Remove
+ +
+ +
+ - Delete + Remove
+ +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove - -
- Name + +
+ + + + +
+ Name +
+
+ + trusted app 15 + +
+ + +
+ OS +
+
+ Windows +
+ + +
+ Date Created +
+
+ 1 minute ago +
+ + +
+ Created By +
+
+ + someone + +
+ + +
+ + + + Remove + + +
+ + +
+ +
+ + + + +
+ Name +
+
+ + trusted app 16 + +
+ + +
+ OS +
+
+ Mac OS +
+ + +
+ Date Created +
+
+ 1 minute ago +
+ + +
+ Created By +
+
+ + someone + +
+ + +
+ + + + Remove + + +
+ + +
+ +
+ + + + +
+ Name +
+
+ + trusted app 17 + +
+ + +
+ OS +
+
+ Linux +
+ + +
+ Date Created +
+
+ 1 minute ago +
+ + +
+ Created By +
+
+ + someone + +
+ + +
+ + + + Remove + + +
+ + +
+ +
+ + + + +
+ Name +
+
+ + trusted app 18 + +
+ + +
+ OS +
+
+ Windows +
+ + +
+ Date Created +
+
+ 1 minute ago +
+ + +
+ Created By +
+
+ + someone + +
+ + +
+ + + + Remove + + +
+ + +
+ +
+ + + + +
+ Name +
+
+ + trusted app 19 + +
+ + +
+ OS +
+
+ Mac OS +
+ + +
+ Date Created +
+
+ 1 minute ago +
+ + +
+ Created By +
+
+ + someone + +
+ + +
+ + + + Remove + + +
+ + +
+ +
+ + + + + +
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +`; + +exports[`TrustedAppsList renders correctly when loaded data 1`] = ` +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + Name + +
+
+
+ + OS + +
+
+
+ + Date Created + +
+
+
+ + Created By + +
+
+
+ + Actions + +
+
+
+ +
+
+
+ Name +
+
+ + trusted app 0 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ + + + Remove + + +
+
+
+ +
+
+
+ Name +
+
+ + trusted app 1 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ + + + Remove + + +
+
+
+ +
+
+
+ Name +
+
+ + trusted app 2 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ + + + Remove + + +
+
+
+ +
+
+
+ Name +
+
+ + trusted app 3 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ + + + Remove + + +
+
+
+ +
+
+
+ Name +
+
+ + trusted app 4 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ + + + Remove + + +
+
+
+ +
+
+
+ Name +
+
+ + trusted app 5 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ + + + Remove + + +
+
+
+ +
+
+
+ Name +
+
+ + trusted app 6 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ + + + Remove + + +
+
+
+ +
+
+
+ Name +
+
+ + trusted app 7 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ + + + Remove + + +
+
+
+ +
+
+
+ Name +
+
+ + trusted app 8 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ + + + Remove + + +
+
+
+ +
+
+
+ Name +
+
+ + trusted app 9 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ + + + Remove + + +
+
+
+ +
+
+
+ Name +
+
+ + trusted app 10 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ + + + Remove + + +
+
+
+ +
+
+
+ Name +
+
+ + trusted app 11 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ + + + Remove + + +
+
+
+ +
+
+
+ Name +
+
+ + trusted app 12 + +
+
+
+ OS +
+
+ Windows +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ + + + Remove + + +
+
+
+ +
+
+
+ Name +
+
+ + trusted app 13 + +
+
+
+ OS +
+
+ Mac OS +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ + + + Remove + + +
+
+
+ +
+
+
+ Name +
+
+ + trusted app 14 + +
+
+
+ OS +
+
+ Linux +
+
+
+ Date Created +
+
+ 1 minute ago +
+
+
+ Created By +
+
+ + someone + +
+
+
+ + + + Remove + + +
+
+
+ +
+
+
+ Name
- Delete + Remove
+
+ +
+
- Delete + Remove +
+ +
+
- Delete + Remove +
+ +
+
- Delete + Remove +
+ +
+
- Delete + Remove +
+ +
+
@@ -2859,6 +6333,21 @@ exports[`TrustedAppsList renders correctly when loading data for the first time
+ +
+ +
+ @@ -2867,7 +6356,7 @@ exports[`TrustedAppsList renders correctly when loading data for the first time >
+ +
+ +
+ - Delete + Remove
+ +
+ +
+ - Delete + Remove
+ +
+ +
+ - Delete + Remove
+ +
+ +
+ - Delete + Remove
+ +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ @@ -5307,11 +9231,26 @@ exports[`TrustedAppsList renders correctly when new page and page size set (not + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ - Delete + Remove + +
+ +
+ diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/components/create_trusted_app_form.tsx b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/components/create_trusted_app_form.tsx index 32170ed6fc4d8..08cb1835c5363 100644 --- a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/components/create_trusted_app_form.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/components/create_trusted_app_form.tsx @@ -23,7 +23,7 @@ import { TrustedApp, } from '../../../../../../common/endpoint/types'; import { LogicalConditionBuilderProps } from './logical_condition/logical_condition_builder'; -import { OS_TITLES } from '../constants'; +import { OS_TITLES } from '../translations'; import { isMacosLinuxTrustedAppCondition, isTrustedAppSupportedOs, diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/components/trusted_app_card/__snapshots__/index.test.tsx.snap b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/components/trusted_app_card/__snapshots__/index.test.tsx.snap new file mode 100644 index 0000000000000..3928f4ddec837 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/components/trusted_app_card/__snapshots__/index.test.tsx.snap @@ -0,0 +1,66 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`trusted_app_card TrustedAppCard should render correctly 1`] = ` + + + + + } + /> + + + + Remove + + +`; diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/components/trusted_app_card/index.stories.tsx b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/components/trusted_app_card/index.stories.tsx new file mode 100644 index 0000000000000..713e5e7095e12 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/components/trusted_app_card/index.stories.tsx @@ -0,0 +1,61 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import React from 'react'; +import { ThemeProvider } from 'styled-components'; +import { storiesOf, addDecorator } from '@storybook/react'; +import { action } from '@storybook/addon-actions'; +import euiLightVars from '@elastic/eui/dist/eui_theme_light.json'; + +import { KibanaContextProvider } from '../../../../../../../../../../src/plugins/kibana_react/public'; +import { TrustedApp } from '../../../../../../../common/endpoint/types'; + +import { createSampleTrustedApp } from '../../../test_utils'; + +import { TrustedAppCard } from '.'; + +addDecorator((storyFn) => ( + 'MMM D, YYYY @ HH:mm:ss.SSS' } }}> + ({ eui: euiLightVars, darkMode: false })}> + {storyFn()} + + +)); + +storiesOf('TrustedApps|TrustedAppCard', module) + .add('default', () => { + const trustedApp: TrustedApp = createSampleTrustedApp(5); + trustedApp.created_at = '2020-09-17T14:52:33.899Z'; + trustedApp.entries = [ + { + field: 'process.path.text', + operator: 'included', + type: 'match', + value: '/some/path/on/file/system', + }, + ]; + + return ; + }) + .add('multiple entries', () => { + const trustedApp: TrustedApp = createSampleTrustedApp(5); + trustedApp.created_at = '2020-09-17T14:52:33.899Z'; + trustedApp.entries = [ + { + field: 'process.path.text', + operator: 'included', + type: 'match', + value: '/some/path/on/file/system', + }, + { + field: 'process.code_signature', + operator: 'included', + type: 'match', + value: 'Elastic', + }, + ]; + + return ; + }); diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/components/trusted_app_card/index.test.tsx b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/components/trusted_app_card/index.test.tsx new file mode 100644 index 0000000000000..163883b3dc3b8 --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/components/trusted_app_card/index.test.tsx @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { shallow } from 'enzyme'; +import React from 'react'; + +import { TrustedAppCard } from '.'; +import { createSampleTrustedApp } from '../../../test_utils'; + +describe('trusted_app_card', () => { + describe('TrustedAppCard', () => { + it('should render correctly', () => { + const element = shallow( + {}} /> + ); + + expect(element).toMatchSnapshot(); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/components/trusted_app_card/index.tsx b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/components/trusted_app_card/index.tsx new file mode 100644 index 0000000000000..73dbe5482573a --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/components/trusted_app_card/index.tsx @@ -0,0 +1,95 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import React, { memo, useCallback, useMemo } from 'react'; +import { i18n } from '@kbn/i18n'; +import { EuiTableFieldDataColumnType } from '@elastic/eui'; + +import { + Immutable, + TrustedApp, + MacosLinuxConditionEntry, + WindowsConditionEntry, +} from '../../../../../../../common/endpoint/types'; + +import { FormattedDate } from '../../../../../../common/components/formatted_date'; +import { ConditionsTable } from '../../../../../../common/components/conditions_table'; +import { + ItemDetailsAction, + ItemDetailsCard, + ItemDetailsPropertySummary, +} from '../../../../../../common/components/item_details_card'; + +import { OS_TITLES, PROPERTY_TITLES, ENTRY_PROPERTY_TITLES } from '../../translations'; + +type Entry = MacosLinuxConditionEntry | WindowsConditionEntry; + +const getEntriesColumnDefinitions = (): Array> => [ + { + field: 'field', + name: ENTRY_PROPERTY_TITLES.field, + sortable: false, + truncateText: true, + textOnly: true, + width: '30%', + }, + { + field: 'operator', + name: ENTRY_PROPERTY_TITLES.operator, + sortable: false, + truncateText: true, + width: '20%', + }, + { + field: 'value', + name: ENTRY_PROPERTY_TITLES.value, + sortable: false, + truncateText: true, + width: '60%', + }, +]; + +interface TrustedAppCardProps { + trustedApp: Immutable; + onDelete: (id: string) => void; +} + +export const TrustedAppCard = memo(({ trustedApp, onDelete }: TrustedAppCardProps) => { + const handleDelete = useCallback(() => onDelete(trustedApp.id), [onDelete, trustedApp.id]); + + return ( + + + + + } + /> + + + getEntriesColumnDefinitions(), [])} + items={useMemo(() => [...trustedApp.entries], [trustedApp.entries])} + badge="and" + responsive + /> + + + {i18n.translate('xpack.securitySolution.trustedapps.card.removeButtonLabel', { + defaultMessage: 'Remove', + })} + + + ); +}); + +TrustedAppCard.displayName = 'TrustedAppCard'; diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/constants.ts b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/constants.ts deleted file mode 100644 index d5df8c528511a..0000000000000 --- a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/constants.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { i18n } from '@kbn/i18n'; -import { TrustedApp } from '../../../../../common/endpoint/types'; - -export const OS_TITLES: Readonly<{ [K in TrustedApp['os']]: string }> = { - windows: i18n.translate('xpack.securitySolution.trustedapps.os.windows', { - defaultMessage: 'Windows', - }), - macos: i18n.translate('xpack.securitySolution.trustedapps.os.macos', { - defaultMessage: 'Mac OS', - }), - linux: i18n.translate('xpack.securitySolution.trustedapps.os.linux', { - defaultMessage: 'Linux', - }), -}; diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/translations.ts b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/translations.ts new file mode 100644 index 0000000000000..e16155df6d2db --- /dev/null +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/translations.ts @@ -0,0 +1,76 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { i18n } from '@kbn/i18n'; +import { + TrustedApp, + MacosLinuxConditionEntry, + WindowsConditionEntry, +} from '../../../../../common/endpoint/types'; + +export const OS_TITLES: Readonly<{ [K in TrustedApp['os']]: string }> = { + windows: i18n.translate('xpack.securitySolution.trustedapps.os.windows', { + defaultMessage: 'Windows', + }), + macos: i18n.translate('xpack.securitySolution.trustedapps.os.macos', { + defaultMessage: 'Mac OS', + }), + linux: i18n.translate('xpack.securitySolution.trustedapps.os.linux', { + defaultMessage: 'Linux', + }), +}; + +export const PROPERTY_TITLES: Readonly< + { [K in keyof Omit]: string } +> = { + name: i18n.translate('xpack.securitySolution.trustedapps.trustedapp.name', { + defaultMessage: 'Name', + }), + os: i18n.translate('xpack.securitySolution.trustedapps.trustedapp.os', { + defaultMessage: 'OS', + }), + created_at: i18n.translate('xpack.securitySolution.trustedapps.trustedapp.createdAt', { + defaultMessage: 'Date Created', + }), + created_by: i18n.translate('xpack.securitySolution.trustedapps.trustedapp.createdBy', { + defaultMessage: 'Created By', + }), +}; + +export const ENTRY_PROPERTY_TITLES: Readonly< + { [K in keyof Omit]: string } +> = { + field: i18n.translate('xpack.securitySolution.trustedapps.trustedapp.entry.field', { + defaultMessage: 'Field', + }), + operator: i18n.translate('xpack.securitySolution.trustedapps.trustedapp.entry.operator', { + defaultMessage: 'Operator', + }), + value: i18n.translate('xpack.securitySolution.trustedapps.trustedapp.entry.value', { + defaultMessage: 'Value', + }), +}; + +export const ACTIONS_COLUMN_TITLE = i18n.translate( + 'xpack.securitySolution.trustedapps.list.columns.actions', + { + defaultMessage: 'Actions', + } +); + +export const LIST_ACTIONS = { + delete: { + name: i18n.translate('xpack.securitySolution.trustedapps.list.actions.delete', { + defaultMessage: 'Remove', + }), + description: i18n.translate( + 'xpack.securitySolution.trustedapps.list.actions.delete.description', + { + defaultMessage: 'Remove this entry', + } + ), + }, +}; diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/trusted_apps_list.test.tsx b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/trusted_apps_list.test.tsx index a457ecd0d088f..1468871a655a5 100644 --- a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/trusted_apps_list.test.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/trusted_apps_list.test.tsx @@ -6,6 +6,8 @@ import { render } from '@testing-library/react'; import React from 'react'; import { Provider } from 'react-redux'; +import { ThemeProvider } from 'styled-components'; +import euiLightVars from '@elastic/eui/dist/eui_theme_light.json'; import { TrustedAppsList } from './trusted_apps_list'; import { @@ -25,7 +27,13 @@ jest.mock('@elastic/eui/lib/services/accessibility/html_id_generator', () => ({ const now = 111111; const renderList = (store: ReturnType) => { - const Wrapper: React.FC = ({ children }) => {children}; + const Wrapper: React.FC = ({ children }) => ( + + ({ eui: euiLightVars, darkMode: false })}> + {children} + + + ); return render(, { wrapper: Wrapper }); }; @@ -111,6 +119,22 @@ describe('TrustedAppsList', () => { expect(renderList(store).container).toMatchSnapshot(); }); + it('renders correctly when item details expanded', async () => { + const store = createGlobalNoMiddlewareStore(); + + store.dispatch( + createTrustedAppsListResourceStateChangedAction( + createListLoadedResourceState({ index: 0, size: 20 }, 200, now) + ) + ); + + const element = renderList(store); + + (await element.findAllByTestId('trustedAppsListItemExpandButton'))[0].click(); + + expect(element.container).toMatchSnapshot(); + }); + it('triggers deletion dialog when delete action clicked', async () => { const store = createGlobalNoMiddlewareStore(); diff --git a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/trusted_apps_list.tsx b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/trusted_apps_list.tsx index 5e5b83ccd8c03..d0c1fb477ea46 100644 --- a/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/trusted_apps_list.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/trusted_apps/view/trusted_apps_list.tsx @@ -5,11 +5,16 @@ */ import { Dispatch } from 'redux'; -import React, { memo, useCallback, useMemo } from 'react'; +import React, { memo, ReactNode, useCallback, useMemo, useState } from 'react'; import { useDispatch } from 'react-redux'; import { useHistory } from 'react-router-dom'; -import { EuiBasicTable, EuiBasicTableColumn, EuiTableActionsColumnType } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; +import { + EuiBasicTable, + EuiBasicTableColumn, + EuiButtonIcon, + EuiTableActionsColumnType, + RIGHT_ALIGNMENT, +} from '@elastic/eui'; import { Immutable } from '../../../../../common/endpoint/types'; import { AppAction } from '../../../../common/store/actions'; @@ -29,41 +34,51 @@ import { import { useTrustedAppsSelector } from './hooks'; import { FormattedDate } from '../../../../common/components/formatted_date'; -import { OS_TITLES } from './constants'; - -const COLUMN_TITLES: Readonly< - { [K in keyof Omit | 'actions']: string } -> = { - name: i18n.translate('xpack.securitySolution.trustedapps.list.columns.name', { - defaultMessage: 'Name', - }), - os: i18n.translate('xpack.securitySolution.trustedapps.list.columns.os', { - defaultMessage: 'OS', - }), - created_at: i18n.translate('xpack.securitySolution.trustedapps.list.columns.createdAt', { - defaultMessage: 'Date Created', - }), - created_by: i18n.translate('xpack.securitySolution.trustedapps.list.columns.createdBy', { - defaultMessage: 'Created By', - }), - actions: i18n.translate('xpack.securitySolution.trustedapps.list.columns.actions', { - defaultMessage: 'Actions', - }), -}; +import { ACTIONS_COLUMN_TITLE, LIST_ACTIONS, OS_TITLES, PROPERTY_TITLES } from './translations'; +import { TrustedAppCard } from './components/trusted_app_card'; + +interface DetailsMap { + [K: string]: ReactNode; +} + +interface TrustedAppsListContext { + dispatch: Dispatch>; + detailsMapState: [DetailsMap, (value: DetailsMap) => void]; +} +type ColumnsList = Array>>; type ActionsList = EuiTableActionsColumnType>['actions']; -const getActionDefinitions = (dispatch: Dispatch>): ActionsList => [ +const toggleItemDetailsInMap = ( + map: DetailsMap, + item: Immutable, + { dispatch }: TrustedAppsListContext +): DetailsMap => { + const changedMap = { ...map }; + + if (changedMap[item.id]) { + delete changedMap[item.id]; + } else { + changedMap[item.id] = ( + { + dispatch({ + type: 'trustedAppDeletionDialogStarted', + payload: { entry: item }, + }); + }} + /> + ); + } + + return changedMap; +}; + +const getActionDefinitions = ({ dispatch }: TrustedAppsListContext): ActionsList => [ { - name: i18n.translate('xpack.securitySolution.trustedapps.list.actions.delete', { - defaultMessage: 'Delete', - }), - description: i18n.translate( - 'xpack.securitySolution.trustedapps.list.actions.delete.description', - { - defaultMessage: 'Delete this entry', - } - ), + name: LIST_ACTIONS.delete.name, + description: LIST_ACTIONS.delete.description, 'data-test-subj': 'trustedAppDeleteAction', isPrimary: true, icon: 'trash', @@ -78,44 +93,62 @@ const getActionDefinitions = (dispatch: Dispatch>): Actions }, ]; -type ColumnsList = Array>>; +const getColumnDefinitions = (context: TrustedAppsListContext): ColumnsList => { + const [itemDetailsMap, setItemDetailsMap] = context.detailsMapState; -const getColumnDefinitions = (dispatch: Dispatch>): ColumnsList => [ - { - field: 'name', - name: COLUMN_TITLES.name, - }, - { - field: 'os', - name: COLUMN_TITLES.os, - render(value: TrustedApp['os'], record: Immutable) { - return OS_TITLES[value]; + return [ + { + field: 'name', + name: PROPERTY_TITLES.name, }, - }, - { - field: 'created_at', - name: COLUMN_TITLES.created_at, - render(value: TrustedApp['created_at'], record: Immutable) { - return ( - - ); + { + field: 'os', + name: PROPERTY_TITLES.os, + render(value: TrustedApp['os'], record: Immutable) { + return OS_TITLES[value]; + }, }, - }, - { - field: 'created_by', - name: COLUMN_TITLES.created_by, - }, - { - name: COLUMN_TITLES.actions, - actions: getActionDefinitions(dispatch), - }, -]; + { + field: 'created_at', + name: PROPERTY_TITLES.created_at, + render(value: TrustedApp['created_at'], record: Immutable) { + return ( + + ); + }, + }, + { + field: 'created_by', + name: PROPERTY_TITLES.created_by, + }, + { + name: ACTIONS_COLUMN_TITLE, + actions: getActionDefinitions(context), + }, + { + align: RIGHT_ALIGNMENT, + width: '40px', + isExpander: true, + render(item: Immutable) { + return ( + setItemDetailsMap(toggleItemDetailsInMap(itemDetailsMap, item, context))} + aria-label={itemDetailsMap[item.id] ? 'Collapse' : 'Expand'} + iconType={itemDetailsMap[item.id] ? 'arrowUp' : 'arrowDown'} + data-test-subj="trustedAppsListItemExpandButton" + /> + ); + }, + }, + ]; +}; export const TrustedAppsList = memo(() => { + const [detailsMap, setDetailsMap] = useState({}); const pageIndex = useTrustedAppsSelector(getListCurrentPageIndex); const pageSize = useTrustedAppsSelector(getListCurrentPageSize); const totalItemCount = useTrustedAppsSelector(getListTotalItemsCount); @@ -125,10 +158,16 @@ export const TrustedAppsList = memo(() => { return ( getColumnDefinitions(dispatch), [dispatch])} + columns={useMemo( + () => getColumnDefinitions({ dispatch, detailsMapState: [detailsMap, setDetailsMap] }), + [dispatch, detailsMap, setDetailsMap] + )} items={useMemo(() => [...listItems], [listItems])} error={useTrustedAppsSelector(getListErrorMessage)} loading={useTrustedAppsSelector(isListLoading)} + itemId="id" + itemIdToExpandedRowMap={detailsMap} + isExpandable={true} pagination={useMemo( () => ({ pageIndex, diff --git a/x-pack/plugins/security_solution/public/resolver/data_access_layer/factory.ts b/x-pack/plugins/security_solution/public/resolver/data_access_layer/factory.ts index 7b09e748c0c28..ae07104fa0e22 100644 --- a/x-pack/plugins/security_solution/public/resolver/data_access_layer/factory.ts +++ b/x-pack/plugins/security_solution/public/resolver/data_access_layer/factory.ts @@ -44,7 +44,7 @@ export function dataAccessLayerFactory( * Return events that have `process.entity_id` that includes `entityID` and that have * a `event.category` that includes `category`. */ - async eventsWithEntityIDAndCategory( + eventsWithEntityIDAndCategory( entityID: string, category: string, after?: string @@ -64,7 +64,7 @@ export function dataAccessLayerFactory( const response: ResolverPaginatedEvents = await context.services.http.post( '/api/endpoint/resolver/events', { - query: {}, + query: { limit: 1 }, body: JSON.stringify({ filter: `event.id:"${eventID}"` }), } ); diff --git a/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/no_ancestors_two_children_with_related_events_and_cursor_on_origin.ts b/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/no_ancestors_two_children_with_related_events_and_cursor_on_origin.ts new file mode 100644 index 0000000000000..7682165ac5e94 --- /dev/null +++ b/x-pack/plugins/security_solution/public/resolver/data_access_layer/mocks/no_ancestors_two_children_with_related_events_and_cursor_on_origin.ts @@ -0,0 +1,147 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { DataAccessLayer } from '../../types'; +import { + mockTreeWithNoAncestorsAndTwoChildrenAndRelatedEventsOnOrigin, + firstRelatedEventID, + secondRelatedEventID, +} from '../../mocks/resolver_tree'; +import { + ResolverRelatedEvents, + ResolverTree, + ResolverEntityIndex, + SafeResolverEvent, +} from '../../../../common/endpoint/types'; +import * as eventModel from '../../../../common/endpoint/models/event'; + +interface Metadata { + /** + * The `_id` of the document being analyzed. + */ + databaseDocumentID: string; + /** + * A record of entityIDs to be used in tests assertions. + */ + entityIDs: { + /** + * The entityID of the node related to the document being analyzed. + */ + origin: 'origin'; + /** + * The entityID of the first child of the origin. + */ + firstChild: 'firstChild'; + /** + * The entityID of the second child of the origin. + */ + secondChild: 'secondChild'; + }; +} + +/** + * See the other mock `noAncestorsTwoChildrenWithRelatedEventsOnOrigin` but this one + * has one of the related events "after" the first (i.e. you have to call with `after` to + * get the second one). + */ +export function noAncestorsTwoChildrenWithRelatedEventsOnOriginWithOneAfterCursor(): { + dataAccessLayer: DataAccessLayer; + metadata: Metadata; +} { + const metadata: Metadata = { + databaseDocumentID: '_id', + entityIDs: { origin: 'origin', firstChild: 'firstChild', secondChild: 'secondChild' }, + }; + const tree = mockTreeWithNoAncestorsAndTwoChildrenAndRelatedEventsOnOrigin({ + originID: metadata.entityIDs.origin, + firstChildID: metadata.entityIDs.firstChild, + secondChildID: metadata.entityIDs.secondChild, + }); + + return { + metadata, + dataAccessLayer: { + /** + * Fetch related events for an entity ID + */ + async relatedEvents(entityID: string): Promise { + /** + * Respond with the mocked related events when the origin's related events are fetched. + **/ + const events = entityID === metadata.entityIDs.origin ? tree.relatedEvents.events : []; + + return { + entityID, + events, + nextEvent: null, + }; + }, + + /** + * Any of the origin's related events by category. + * `entityID` must match the origin node's `process.entity_id`. + * These are split by the `after` cursor: Calling without the cursor will + * return the first event, calling with the cursor set to the id of the first event + * will return the second. + */ + async eventsWithEntityIDAndCategory( + entityID: string, + category: string, + after?: string + ): Promise<{ events: SafeResolverEvent[]; nextEvent: string | null }> { + /** + * For testing: This 'fakes' the behavior of one related event being `after` + * a cursor for an earlier event. + * @param event A `SafeResolverEvent` to filter + */ + function splitOnCursor(event: SafeResolverEvent) { + if (typeof after === 'undefined') { + return eventModel.eventID(event) === firstRelatedEventID; + } + if (after === firstRelatedEventID) { + return eventModel.eventID(event) === secondRelatedEventID; + } + return false; + } + + const events = + entityID === metadata.entityIDs.origin + ? tree.relatedEvents.events.filter( + (event) => + eventModel.eventCategory(event).includes(category) && splitOnCursor(event) + ) + : []; + return { + events, + nextEvent: typeof after === 'undefined' ? firstRelatedEventID : null, + }; + }, + + /** + * Any of the origin's related events by event.id + */ + async event(eventID: string): Promise { + return ( + tree.relatedEvents.events.find((event) => eventModel.eventID(event) === eventID) ?? null + ); + }, + + /** + * Fetch a ResolverTree for a entityID + */ + async resolverTree(): Promise { + return tree; + }, + + /** + * Get entities matching a document. + */ + async entities(): Promise { + return [{ entity_id: metadata.entityIDs.origin }]; + }, + }, + }; +} diff --git a/x-pack/plugins/security_solution/public/resolver/mocks/resolver_tree.ts b/x-pack/plugins/security_solution/public/resolver/mocks/resolver_tree.ts index 3f7c58efc762b..5b851d588543d 100644 --- a/x-pack/plugins/security_solution/public/resolver/mocks/resolver_tree.ts +++ b/x-pack/plugins/security_solution/public/resolver/mocks/resolver_tree.ts @@ -307,6 +307,15 @@ export function mockTreeWithNoProcessEvents(): ResolverTree { }; } +/** + * first ID (to check in the mock data access layer) + */ +export const firstRelatedEventID = 'id of first related event'; +/** + * second ID (to check in the mock data access layer) + */ +export const secondRelatedEventID = 'id of second related event'; + export function mockTreeWithNoAncestorsAndTwoChildrenAndRelatedEventsOnOrigin({ originID, firstChildID, @@ -326,14 +335,14 @@ export function mockTreeWithNoAncestorsAndTwoChildrenAndRelatedEventsOnOrigin({ mockEndpointEvent({ entityID: originID, parentEntityID, - eventID: 'first related event', + eventID: firstRelatedEventID, eventType: 'access', eventCategory: 'registry', }), mockEndpointEvent({ entityID: originID, parentEntityID, - eventID: 'second related event', + eventID: secondRelatedEventID, eventType: 'access', eventCategory: 'registry', }), diff --git a/x-pack/plugins/security_solution/public/resolver/models/location_search.ts b/x-pack/plugins/security_solution/public/resolver/models/location_search.ts index 6c1dc7991e298..ab6e4c84b1548 100644 --- a/x-pack/plugins/security_solution/public/resolver/models/location_search.ts +++ b/x-pack/plugins/security_solution/public/resolver/models/location_search.ts @@ -30,17 +30,17 @@ export const isPanelViewAndParameters: ( }), }), schema.object({ - panelView: schema.literal('nodeEventsOfType' as const), + panelView: schema.literal('nodeEventsInCategory' as const), panelParameters: schema.object({ nodeID: schema.string(), - eventType: schema.string(), + eventCategory: schema.string(), }), }), schema.object({ panelView: schema.literal('eventDetail' as const), panelParameters: schema.object({ nodeID: schema.string(), - eventType: schema.string(), + eventCategory: schema.string(), eventID: schema.string(), }), }), diff --git a/x-pack/plugins/security_solution/public/resolver/store/data/action.ts b/x-pack/plugins/security_solution/public/resolver/store/data/action.ts index 0cb1cd1cec771..40a103ac6add7 100644 --- a/x-pack/plugins/security_solution/public/resolver/store/data/action.ts +++ b/x-pack/plugins/security_solution/public/resolver/store/data/action.ts @@ -4,7 +4,12 @@ * you may not use this file except in compliance with the Elastic License. */ -import { ResolverRelatedEvents, ResolverTree } from '../../../../common/endpoint/types'; +import { + ResolverRelatedEvents, + ResolverTree, + SafeEndpointEvent, + SafeResolverEvent, +} from '../../../../common/endpoint/types'; import { TreeFetcherParameters } from '../../types'; interface ServerReturnedResolverData { @@ -53,9 +58,47 @@ interface ServerReturnedRelatedEventData { readonly payload: ResolverRelatedEvents; } +interface ServerReturnedNodeEventsInCategory { + readonly type: 'serverReturnedNodeEventsInCategory'; + readonly payload: { + /** + * Events with `event.category` that include `eventCategory` and that are related to `nodeID`. + */ + events: SafeEndpointEvent[]; + /** + * The cursor, if any, that can be used to retrieve more events. + */ + cursor: string | null; + /** + * The nodeID that `events` are related to. + */ + nodeID: string; + /** + * The category that `events` have in common. + */ + eventCategory: string; + }; +} +interface AppRequestedCurrentRelatedEventData { + type: 'appRequestedCurrentRelatedEventData'; +} + +interface ServerFailedToReturnCurrentRelatedEventData { + type: 'serverFailedToReturnCurrentRelatedEventData'; +} + +interface ServerReturnedCurrentRelatedEventData { + readonly type: 'serverReturnedCurrentRelatedEventData'; + readonly payload: SafeResolverEvent; +} + export type DataAction = | ServerReturnedResolverData | ServerFailedToReturnResolverData + | AppRequestedCurrentRelatedEventData + | ServerReturnedCurrentRelatedEventData + | ServerFailedToReturnCurrentRelatedEventData | ServerReturnedRelatedEventData + | ServerReturnedNodeEventsInCategory | AppRequestedResolverData | AppAbortedResolverDataRequest; diff --git a/x-pack/plugins/security_solution/public/resolver/store/data/node_events_in_category_model.ts b/x-pack/plugins/security_solution/public/resolver/store/data/node_events_in_category_model.ts new file mode 100644 index 0000000000000..b834671458d6b --- /dev/null +++ b/x-pack/plugins/security_solution/public/resolver/store/data/node_events_in_category_model.ts @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import { PanelViewAndParameters, NodeEventsInCategoryState } from '../../types'; + +/** + * `NodeEventsInCategoryState` is used to model an ordered collection of events that are all related to the same node and which all belong to a given category. + * The app requests these via the data access layer and aggregates the responses from multiple requests. When a different node or category is selected, or when a different panel entirely is selected, the state is cleared out. + */ + +/** + * True if `nodeEventsInCategory` contains data that is relevant to `panelViewAndParameters`. + * This is used by the reducer to enforce that the nodeEventsInCategory state is always valid. + */ +export function isRelevantToPanelViewAndParameters( + nodeEventsInCategory: NodeEventsInCategoryState, + panelViewAndParameters: PanelViewAndParameters +): boolean { + return ( + panelViewAndParameters.panelView === 'nodeEventsInCategory' && + panelViewAndParameters.panelParameters.nodeID === nodeEventsInCategory.nodeID && + panelViewAndParameters.panelParameters.eventCategory === nodeEventsInCategory.eventCategory + ); +} + +/** + * Return an updated `NodeEventsInCategoryState` that has data from `first` and `second`. The `cursor` from `second` is used. + * Returns undefined if `first` and `second` don't contain data form the same set. + */ +export function updatedWith( + first: NodeEventsInCategoryState, + second: NodeEventsInCategoryState +): NodeEventsInCategoryState | undefined { + if (first.nodeID === second.nodeID && first.eventCategory === second.eventCategory) { + return { + nodeID: first.nodeID, + eventCategory: first.eventCategory, + events: [...first.events, ...second.events], + cursor: second.cursor, + }; + } else { + return undefined; + } +} diff --git a/x-pack/plugins/security_solution/public/resolver/store/data/reducer.ts b/x-pack/plugins/security_solution/public/resolver/store/data/reducer.ts index 1819407a19516..7760bda19ff07 100644 --- a/x-pack/plugins/security_solution/public/resolver/store/data/reducer.ts +++ b/x-pack/plugins/security_solution/public/resolver/store/data/reducer.ts @@ -8,8 +8,14 @@ import { Reducer } from 'redux'; import { DataState } from '../../types'; import { ResolverAction } from '../actions'; import * as treeFetcherParameters from '../../models/tree_fetcher_parameters'; +import * as selectors from './selectors'; +import * as nodeEventsInCategoryModel from './node_events_in_category_model'; const initialState: DataState = { + currentRelatedEvent: { + loading: false, + data: null, + }, relatedEvents: new Map(), resolverComponentInstanceID: undefined, }; @@ -26,8 +32,21 @@ export const dataReducer: Reducer = (state = initialS }, }, resolverComponentInstanceID: action.payload.resolverComponentInstanceID, + locationSearch: action.payload.locationSearch, + }; + const panelViewAndParameters = selectors.panelViewAndParameters(nextState); + return { + ...nextState, + // If the panel view or parameters have changed, the `nodeEventsInCategory` may no longer be relevant. In that case, remove them. + nodeEventsInCategory: + nextState.nodeEventsInCategory && + nodeEventsInCategoryModel.isRelevantToPanelViewAndParameters( + nextState.nodeEventsInCategory, + panelViewAndParameters + ) + ? nextState.nodeEventsInCategory + : undefined, }; - return nextState; } else if (action.type === 'appRequestedResolverData') { // keep track of what we're requesting, this way we know when to request and when not to. const nextState: DataState = { @@ -101,6 +120,70 @@ export const dataReducer: Reducer = (state = initialS relatedEvents: new Map([...state.relatedEvents, [action.payload.entityID, action.payload]]), }; return nextState; + } else if (action.type === 'serverReturnedNodeEventsInCategory') { + // The data in the action could be irrelevant if the panel view or parameters have changed since the corresponding request was made. In that case, ignore this action. + if ( + nodeEventsInCategoryModel.isRelevantToPanelViewAndParameters( + action.payload, + selectors.panelViewAndParameters(state) + ) + ) { + if (state.nodeEventsInCategory) { + // If there are already `nodeEventsInCategory` in state then combine those with the new data in the payload. + const updated = nodeEventsInCategoryModel.updatedWith( + state.nodeEventsInCategory, + action.payload + ); + // The 'updatedWith' method will fail if the old and new data don't represent events from the same node and event category + if (updated) { + const next: DataState = { + ...state, + nodeEventsInCategory: updated, + }; + return next; + } else { + // this should never happen. This reducer ensures that any `nodeEventsInCategory` that are in state are relevant to the `panelViewAndParameters`. + throw new Error('Could not handle related event data because of an internal error.'); + } + } else { + // There is no existing data, use the new data. + const next: DataState = { + ...state, + nodeEventsInCategory: action.payload, + }; + return next; + } + } else { + // the action is stale, ignore it + return state; + } + } else if (action.type === 'appRequestedCurrentRelatedEventData') { + const nextState: DataState = { + ...state, + currentRelatedEvent: { + loading: true, + data: null, + }, + }; + return nextState; + } else if (action.type === 'serverReturnedCurrentRelatedEventData') { + const nextState: DataState = { + ...state, + currentRelatedEvent: { + loading: false, + data: action.payload, + }, + }; + return nextState; + } else if (action.type === 'serverFailedToReturnCurrentRelatedEventData') { + const nextState: DataState = { + ...state, + currentRelatedEvent: { + loading: false, + data: null, + }, + }; + return nextState; } else { return state; } diff --git a/x-pack/plugins/security_solution/public/resolver/store/data/selectors.ts b/x-pack/plugins/security_solution/public/resolver/store/data/selectors.ts index c7829fa8a69b3..8e06b26b5c316 100644 --- a/x-pack/plugins/security_solution/public/resolver/store/data/selectors.ts +++ b/x-pack/plugins/security_solution/public/resolver/store/data/selectors.ts @@ -6,6 +6,7 @@ import rbush from 'rbush'; import { createSelector, defaultMemoize } from 'reselect'; +import { panelViewAndParameters as panelViewAndParametersFromLocationSearchAndResolverComponentInstanceID } from '../panel_view_and_parameters'; import { DataState, Vector2, @@ -182,6 +183,27 @@ export function relatedEventsByEntityId(data: DataState): Map (nodeID: string, eventType: string) => number | undefined = createSelector( +) => (nodeID: string, eventCategory: string) => number | undefined = createSelector( relatedEventsStats, (statsMap) => { - return (nodeID: string, eventType: string): number | undefined => { + return (nodeID: string, eventCategory: string): number | undefined => { const stats = statsMap(nodeID); if (stats) { - const value = Object.prototype.hasOwnProperty.call(stats.events.byCategory, eventType); + const value = Object.prototype.hasOwnProperty.call(stats.events.byCategory, eventCategory); if (typeof value === 'number' && Number.isFinite(value)) { return value; } @@ -587,3 +609,59 @@ export const relatedEventTotalForProcess: ( }; } ); + +/** + * Total count of events related to `node`. + * Based on `ResolverNodeStats` + */ +export const totalRelatedEventCountForNode: ( + state: DataState +) => (nodeID: string) => number | undefined = createSelector( + relatedEventsStats, + (stats) => (nodeID: string) => { + const nodeStats = stats(nodeID); + return nodeStats === undefined ? undefined : nodeStats.events.total; + } +); + +/** + * Count of events with `category` related to `nodeID`. + * Based on `ResolverNodeStats` + */ +export const relatedEventCountOfTypeForNode: ( + state: DataState +) => (nodeID: string, category: string) => number | undefined = createSelector( + relatedEventsStats, + (stats) => (nodeID: string, category: string) => { + const nodeStats = stats(nodeID); + if (!nodeStats) { + return undefined; + } else { + return nodeStats.events.byCategory[category]; + } + } +); + +/** + * Which view should show in the panel, as well as what parameters should be used. + * Calculated using the query string + */ +export const panelViewAndParameters = createSelector( + (state: DataState) => state.locationSearch, + resolverComponentInstanceID, + /* eslint-disable-next-line no-shadow */ + (locationSearch, resolverComponentInstanceID) => { + return panelViewAndParametersFromLocationSearchAndResolverComponentInstanceID({ + locationSearch, + resolverComponentInstanceID, + }); + } +); + +/** + * Events related to the panel node that are in the panel category. + * NB: This cannot tell the view loading information. For example, this does not tell the view if data has been requested or if data failed to load. + */ +export const nodeEventsInCategory = (state: DataState) => { + return state.nodeEventsInCategory?.events ?? []; +}; diff --git a/x-pack/plugins/security_solution/public/resolver/store/middleware/current_related_event_fetcher.ts b/x-pack/plugins/security_solution/public/resolver/store/middleware/current_related_event_fetcher.ts new file mode 100644 index 0000000000000..9ff9c35dbac3c --- /dev/null +++ b/x-pack/plugins/security_solution/public/resolver/store/middleware/current_related_event_fetcher.ts @@ -0,0 +1,67 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { Dispatch, MiddlewareAPI } from 'redux'; +import { isEqual } from 'lodash'; +import { SafeResolverEvent } from '../../../../common/endpoint/types'; + +import { ResolverState, DataAccessLayer, PanelViewAndParameters } from '../../types'; +import * as selectors from '../selectors'; +import { ResolverAction } from '../actions'; + +/** + * + * @description - This api is called after every state change. + * If the current view is the `eventDetail` view it will request the event details from the server. + * @export + * @param {DataAccessLayer} dataAccessLayer + * @param {MiddlewareAPI, ResolverState>} api + * @returns {() => void} + */ +export function CurrentRelatedEventFetcher( + dataAccessLayer: DataAccessLayer, + api: MiddlewareAPI, ResolverState> +): () => void { + let last: PanelViewAndParameters | undefined; + + return async () => { + const state = api.getState(); + + const newParams = selectors.panelViewAndParameters(state); + + const oldParams = last; + last = newParams; + + // If the panel view params have changed and the current panel view is the `eventDetail`, then fetch the event details for that eventID. + if (!isEqual(newParams, oldParams) && newParams.panelView === 'eventDetail') { + const currentEventID = newParams.panelParameters.eventID; + + api.dispatch({ + type: 'appRequestedCurrentRelatedEventData', + }); + + let result: SafeResolverEvent | undefined | null; + try { + result = await dataAccessLayer.event(currentEventID); + } catch (error) { + api.dispatch({ + type: 'serverFailedToReturnCurrentRelatedEventData', + }); + } + + if (result) { + api.dispatch({ + type: 'serverReturnedCurrentRelatedEventData', + payload: result, + }); + } else { + api.dispatch({ + type: 'serverFailedToReturnCurrentRelatedEventData', + }); + } + } + }; +} diff --git a/x-pack/plugins/security_solution/public/resolver/store/middleware/index.ts b/x-pack/plugins/security_solution/public/resolver/store/middleware/index.ts index 5dca858b4fabe..3bc4612026c12 100644 --- a/x-pack/plugins/security_solution/public/resolver/store/middleware/index.ts +++ b/x-pack/plugins/security_solution/public/resolver/store/middleware/index.ts @@ -10,6 +10,7 @@ import { ResolverTreeFetcher } from './resolver_tree_fetcher'; import { ResolverAction } from '../actions'; import { RelatedEventsFetcher } from './related_events_fetcher'; +import { CurrentRelatedEventFetcher } from './current_related_event_fetcher'; type MiddlewareFactory = ( dataAccessLayer: DataAccessLayer @@ -27,11 +28,13 @@ export const resolverMiddlewareFactory: MiddlewareFactory = (dataAccessLayer: Da return (api) => (next) => { const resolverTreeFetcher = ResolverTreeFetcher(dataAccessLayer, api); const relatedEventsFetcher = RelatedEventsFetcher(dataAccessLayer, api); + const currentRelatedEventFetcher = CurrentRelatedEventFetcher(dataAccessLayer, api); return async (action: ResolverAction) => { next(action); resolverTreeFetcher(); relatedEventsFetcher(); + currentRelatedEventFetcher(); }; }; }; diff --git a/x-pack/plugins/security_solution/public/resolver/store/middleware/related_events_fetcher.ts b/x-pack/plugins/security_solution/public/resolver/store/middleware/related_events_fetcher.ts index b83e3cff90736..0b0a469a047c3 100644 --- a/x-pack/plugins/security_solution/public/resolver/store/middleware/related_events_fetcher.ts +++ b/x-pack/plugins/security_solution/public/resolver/store/middleware/related_events_fetcher.ts @@ -6,7 +6,7 @@ import { Dispatch, MiddlewareAPI } from 'redux'; import { isEqual } from 'lodash'; -import { ResolverRelatedEvents } from '../../../../common/endpoint/types'; +import { ResolverPaginatedEvents, ResolverRelatedEvents } from '../../../../common/endpoint/types'; import { ResolverState, DataAccessLayer, PanelViewAndParameters } from '../../types'; import * as selectors from '../selectors'; @@ -29,20 +29,42 @@ export function RelatedEventsFetcher( // Update this each time before fetching data (or even if we don't fetch data) so that subsequent actions that call this (concurrently) will have up to date info. last = newParams; - // If the panel view params have changed and the current panel view is either `nodeEventsOfType` or `eventDetail`, then fetch the related events for that nodeID. - if ( - !isEqual(newParams, oldParams) && - (newParams.panelView === 'nodeEventsOfType' || newParams.panelView === 'eventDetail') - ) { - const nodeID = newParams.panelParameters.nodeID; + // If the panel view params have changed and the current panel view is either `nodeEventsInCategory` or `eventDetail`, then fetch the related events for that nodeID. + if (!isEqual(newParams, oldParams)) { + if (newParams.panelView === 'nodeEventsInCategory') { + const nodeID = newParams.panelParameters.nodeID; - const result: ResolverRelatedEvents | undefined = await dataAccessLayer.relatedEvents(nodeID); + const result: + | ResolverPaginatedEvents + | undefined = await dataAccessLayer.eventsWithEntityIDAndCategory( + nodeID, + newParams.panelParameters.eventCategory + ); - if (result) { - api.dispatch({ - type: 'serverReturnedRelatedEventData', - payload: result, - }); + if (result) { + api.dispatch({ + type: 'serverReturnedNodeEventsInCategory', + payload: { + events: result.events, + eventCategory: newParams.panelParameters.eventCategory, + cursor: result.nextEvent, + nodeID, + }, + }); + } + } else if (newParams.panelView === 'eventDetail') { + const nodeID = newParams.panelParameters.nodeID; + + const result: ResolverRelatedEvents | undefined = await dataAccessLayer.relatedEvents( + nodeID + ); + + if (result) { + api.dispatch({ + type: 'serverReturnedRelatedEventData', + payload: result, + }); + } } } }; diff --git a/x-pack/plugins/security_solution/public/resolver/store/panel_view_and_parameters.ts b/x-pack/plugins/security_solution/public/resolver/store/panel_view_and_parameters.ts new file mode 100644 index 0000000000000..4818c518e9e69 --- /dev/null +++ b/x-pack/plugins/security_solution/public/resolver/store/panel_view_and_parameters.ts @@ -0,0 +1,49 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { decode } from 'rison-node'; +import { isPanelViewAndParameters } from '../models/location_search'; +import { PanelViewAndParameters } from '../types'; +import { parameterName } from './parameter_name'; + +/** + * Return a value `PanelViewAndParameters` based on `locationSearch` and `resolverComponentInstanceID`. + * Used by selectors. + */ +export function panelViewAndParameters({ + locationSearch, + resolverComponentInstanceID, +}: { + locationSearch?: string; + resolverComponentInstanceID?: string; +}): PanelViewAndParameters { + if (locationSearch === undefined || resolverComponentInstanceID === undefined) { + // Equivalent to `null` + return defaultParameters(); + } + const urlSearchParams = new URLSearchParams(locationSearch); + const value = urlSearchParams.get(parameterName(resolverComponentInstanceID)); + if (value === null) { + // Equivalent to `null` + return defaultParameters(); + } + const decodedValue: unknown = decode(value); + if (isPanelViewAndParameters(decodedValue)) { + return decodedValue; + } + return defaultParameters(); +} + +/** + * The default parameters to use when no (valid) location search is available. + */ +function defaultParameters(): PanelViewAndParameters { + // Note, this really should be a selector. it needs to know about the state of the app so it can select + // the origin event. + return { + panelView: 'nodes', + }; +} diff --git a/x-pack/plugins/infra/scripts/storybook.js b/x-pack/plugins/security_solution/public/resolver/store/parameter_name.ts similarity index 53% rename from x-pack/plugins/infra/scripts/storybook.js rename to x-pack/plugins/security_solution/public/resolver/store/parameter_name.ts index 05d5daedf58f2..02dfa605e74f7 100644 --- a/x-pack/plugins/infra/scripts/storybook.js +++ b/x-pack/plugins/security_solution/public/resolver/store/parameter_name.ts @@ -3,11 +3,9 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ - -import { join } from 'path'; - -// eslint-disable-next-line -require('@kbn/storybook').runStorybookCli({ - name: 'infra', - storyGlobs: [join(__dirname, '..', 'public', 'components', '**', '*.stories.tsx')], -}); +/** + * The parameter name that we use to read/write state to the query string + */ +export function parameterName(resolverComponentInstanceID: string): string { + return `resolver-${resolverComponentInstanceID}`; +} diff --git a/x-pack/plugins/security_solution/public/resolver/store/selectors.ts b/x-pack/plugins/security_solution/public/resolver/store/selectors.ts index 3c99a186ac0c2..8809b4b15a3fb 100644 --- a/x-pack/plugins/security_solution/public/resolver/store/selectors.ts +++ b/x-pack/plugins/security_solution/public/resolver/store/selectors.ts @@ -131,11 +131,27 @@ export const relatedEventTotalCount: ( dataSelectors.relatedEventTotalCount ); -export const relatedEventCountByType: ( +export const relatedEventCountByCategory: ( state: ResolverState -) => (nodeID: string, eventType: string) => number | undefined = composeSelectors( +) => (nodeID: string, eventCategory: string) => number | undefined = composeSelectors( dataStateSelector, - dataSelectors.relatedEventCountByType + dataSelectors.relatedEventCountByCategory +); + +/** + * the loading state of the current related event data for the `event_detail` view + */ +export const isCurrentRelatedEventLoading = composeSelectors( + dataStateSelector, + dataSelectors.isCurrentRelatedEventLoading +); + +/** + * the current related event data for the `event_detail` view + */ +export const currentRelatedEventData = composeSelectors( + dataStateSelector, + dataSelectors.currentRelatedEventData ); /** @@ -312,7 +328,7 @@ export const panelViewAndParameters = composeSelectors( export const relativeHref = composeSelectors(uiStateSelector, uiSelectors.relativeHref); /** - * @deprecated + * @deprecated use `useLinkProps` */ export const relatedEventsRelativeHrefs = composeSelectors( uiStateSelector, @@ -320,11 +336,32 @@ export const relatedEventsRelativeHrefs = composeSelectors( ); /** - * @deprecated + * Total count of events related to `nodeID`. + * Based on `ResolverNodeStats` */ -export const relatedEventDetailHrefs = composeSelectors( - uiStateSelector, - uiSelectors.relatedEventDetailHrefs +export const totalRelatedEventCountForNode = composeSelectors( + dataStateSelector, + dataSelectors.totalRelatedEventCountForNode +); + +/** + * Count of events with `category` related to `nodeID`. + * Based on `ResolverNodeStats` + * Used to populate the breadcrumbs in the `nodeEventsInCategory` panel. + */ +export const relatedEventCountOfTypeForNode = composeSelectors( + dataStateSelector, + dataSelectors.relatedEventCountOfTypeForNode +); + +/** + * Events related to the panel node that are in the panel category. + * Used to populate the breadcrumbs in the `nodeEventsInCategory` panel. + * NB: This cannot tell the view loading information. For example, this does not tell the view if data has been request or if data failed to load. + */ +export const nodeEventsInCategory = composeSelectors( + dataStateSelector, + dataSelectors.nodeEventsInCategory ); /** diff --git a/x-pack/plugins/security_solution/public/resolver/store/ui/selectors.ts b/x-pack/plugins/security_solution/public/resolver/store/ui/selectors.ts index a8882d835fce1..6f185db4bd8b6 100644 --- a/x-pack/plugins/security_solution/public/resolver/store/ui/selectors.ts +++ b/x-pack/plugins/security_solution/public/resolver/store/ui/selectors.ts @@ -4,13 +4,12 @@ * you may not use this file except in compliance with the Elastic License. */ -import { decode, encode } from 'rison-node'; +import { encode } from 'rison-node'; import { createSelector } from 'reselect'; import { PanelViewAndParameters, ResolverUIState } from '../../types'; -import { SafeResolverEvent } from '../../../../common/endpoint/types'; -import { isPanelViewAndParameters } from '../../models/location_search'; -import { eventID } from '../../../../common/endpoint/models/event'; +import { panelViewAndParameters as panelViewAndParametersFromLocationSearchAndResolverComponentInstanceID } from '../panel_view_and_parameters'; +import { parameterName } from '../parameter_name'; /** * id of the "current" tree node (fake-focused) @@ -42,21 +41,10 @@ export const panelViewAndParameters = createSelector( (state: ResolverUIState) => state.locationSearch, (state: ResolverUIState) => state.resolverComponentInstanceID, (locationSearch, resolverComponentInstanceID) => { - if (locationSearch === undefined || resolverComponentInstanceID === undefined) { - // Equivalent to `null` - return defaultParameters(); - } - const urlSearchParams = new URLSearchParams(locationSearch); - const value = urlSearchParams.get(parameterName(resolverComponentInstanceID)); - if (value === null) { - // Equivalent to `null` - return defaultParameters(); - } - const decodedValue: unknown = decode(value); - if (isPanelViewAndParameters(decodedValue)) { - return decodedValue; - } - return defaultParameters(); + return panelViewAndParametersFromLocationSearchAndResolverComponentInstanceID({ + locationSearch, + resolverComponentInstanceID, + }); } ); @@ -88,7 +76,7 @@ export const relativeHref: ( /** * Returns a map of ecs category name to urls for use in panel navigation. - * @deprecated + * @deprecated use `useLinkProps` */ export const relatedEventsRelativeHrefs: ( state: ResolverUIState @@ -101,10 +89,10 @@ export const relatedEventsRelativeHrefs: ( if (categories !== undefined) { Object.keys(categories).map((category) => { const categoryPanelParams: PanelViewAndParameters = { - panelView: 'nodeEventsOfType', + panelView: 'nodeEventsInCategory', panelParameters: { nodeID, - eventType: category, + eventCategory: category, }, }; hrefsByCategory.set(category, relativeHref(categoryPanelParams)); @@ -114,50 +102,3 @@ export const relatedEventsRelativeHrefs: ( return hrefsByCategory; }; }); - -/** - * Returns a map of event entity ids to urls for use in navigation. - * @deprecated - */ -export const relatedEventDetailHrefs: ( - state: ResolverUIState -) => ( - category: string, - nodeID: string, - events: SafeResolverEvent[] -) => Map = createSelector(relativeHref, (relativeHref) => { - return (category: string, nodeID: string, events: SafeResolverEvent[]) => { - const hrefsByEntityID = new Map(); - events.map((event) => { - const entityID = String(eventID(event)); - const eventDetailPanelParams: PanelViewAndParameters = { - panelView: 'eventDetail', - panelParameters: { - nodeID, - eventType: category, - eventID: entityID, - }, - }; - hrefsByEntityID.set(entityID, relativeHref(eventDetailPanelParams)); - return event; - }); - return hrefsByEntityID; - }; -}); - -/** - * The parameter name that we use to read/write state to the query string - */ -export function parameterName(resolverComponentInstanceID: string): string { - return `resolver-${resolverComponentInstanceID}`; -} -/** - * The default parameters to use when no (valid) location search is available. - */ -export function defaultParameters(): PanelViewAndParameters { - // Note, this really should be a selector. it needs to know about the state of the app so it can select - // the origin event. - return { - panelView: 'nodes', - }; -} diff --git a/x-pack/plugins/security_solution/public/resolver/types.ts b/x-pack/plugins/security_solution/public/resolver/types.ts index 64147dd8feb75..9f440d7094987 100644 --- a/x-pack/plugins/security_solution/public/resolver/types.ts +++ b/x-pack/plugins/security_solution/public/resolver/types.ts @@ -207,12 +207,53 @@ export interface TreeFetcherParameters { indices: string[]; } +/** + * Used by the `data` concern to keep track of related events when showing the 'nodeEventsInCategory' panel. + */ +export interface NodeEventsInCategoryState { + /** + * The nodeID that `events` are related to. + */ + nodeID: string; + /** + * The category that `events` have in common. + */ + eventCategory: string; + /** + * Events with `event.category` that include `eventCategory` and that are related to `nodeID`. + */ + events: SafeResolverEvent[]; + /** + * The cursor, if any, that can be used to retrieve more events. + */ + cursor: null | string; +} + /** * State for `data` reducer which handles receiving Resolver data from the back-end. */ export interface DataState { + /** + * @deprecated Use the API + */ readonly relatedEvents: Map; + /** + * Used when the panelView is `nodeEventsInCategory`. + * Store the `nodeEventsInCategory` data for the current panel view. If the panel view or parameters change, the reducer may delete this. + * If new data is returned for the panel view, this may be updated. + */ + readonly nodeEventsInCategory?: NodeEventsInCategoryState; + + /** + * Used when the panelView is `eventDetail`. + * + */ + readonly currentRelatedEvent: { + loading: boolean; + data: SafeResolverEvent | null; + }; + readonly tree?: { /** * The parameters passed from the resolver properties @@ -256,6 +297,11 @@ export interface DataState { * Used to prevent collisions in things like query parameters. */ readonly resolverComponentInstanceID?: string; + + /** + * The `search` part of the URL. + */ + readonly locationSearch?: string; } /** @@ -674,23 +720,23 @@ export type PanelViewAndParameters = } | { /** - * The panel will show an index view of the events related to a specific node. Only events with a specific type will be shown. + * The panel will show an index view of the events related to a specific node. Only events in a specific category will be shown. */ - panelView: 'nodeEventsOfType'; + panelView: 'nodeEventsInCategory'; panelParameters: { /** * The nodeID (e.g. `process.entity_id`) for the node whose events will be shown. */ nodeID: string; /** - * A parameter used to filter the events. For example, events that don't contain `eventType` in their `event.category` field may be hidden. + * A parameter used to filter the events. For example, events that don't contain `eventCategory` in their `event.category` field may be hidden. */ - eventType: string; + eventCategory: string; }; } | { /** - * The panel will show details about a particular event. This is meant as a subview of 'nodeEventsOfType'. + * The panel will show details about a particular event. This is meant as a subview of 'nodeEventsInCategory'. */ panelView: 'eventDetail'; panelParameters: { @@ -699,13 +745,13 @@ export type PanelViewAndParameters = */ nodeID: string; /** - * A value used for the `nodeEventsOfType` view. Used to associate this view with a parent `nodeEventsOfType` view. - * e.g. The user views the `nodeEventsOfType` and follows a link to the `eventDetail` view. The `eventDetail` view can - * use `eventType` to populate breadcrumbs and allow the user to return to the previous filter. + * Used to associate this view (via breadcrumbs) with a parent `nodeEventsInCategory` view. + * e.g. The user views the `nodeEventsInCategory` panel and follows a link to the `eventDetail` view. The `eventDetail` view can + * use `eventCategory` to populate breadcrumbs and allow the user to return to the previous view. * - * This cannot be inferred from the event itself, as an event may have any number of 'eventType's. + * This cannot be inferred from the event itself, as an event may have any number of eventCategories. */ - eventType: string; + eventCategory: string; /** * `event.id` that uniquely identifies the event to show. diff --git a/x-pack/plugins/security_solution/public/resolver/view/limit_warnings.tsx b/x-pack/plugins/security_solution/public/resolver/view/limit_warnings.tsx index bc57c4e28b9cd..1686fc9de2d7a 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/limit_warnings.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/limit_warnings.tsx @@ -63,11 +63,11 @@ const RelatedLimitTitleMessage = React.memo(function ({ * Limit warning for hitting the /events API limit */ export const RelatedEventLimitWarning = React.memo(function ({ - eventType, + eventCategory, numberActuallyDisplayed, numberMissing, }: { - eventType: string; + eventCategory: string; numberActuallyDisplayed: number; numberMissing: number; }) { @@ -79,13 +79,13 @@ export const RelatedEventLimitWarning = React.memo(function ({ size="s" title={ } >

- +

); diff --git a/x-pack/plugins/security_solution/public/resolver/view/panel.test.tsx b/x-pack/plugins/security_solution/public/resolver/view/panel.test.tsx index 63a70716b2d41..d5c0242535010 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/panel.test.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/panel.test.tsx @@ -221,6 +221,25 @@ describe(`Resolver: when analyzing a tree with no ancestors and two children and typeText: 'Count2', }); }); + describe('and when the user clicks the registry events link', () => { + beforeEach(async () => { + const link = await simulator().resolve('resolver:panel:node-events:event-type-link'); + const first = link?.first(); + expect(first).toBeTruthy(); + + if (first) { + first.simulate('click', { button: 0 }); + } + }); + it('should show links to two events', async () => { + await expect( + simulator().map( + () => + simulator().testSubject('resolver:panel:node-events-in-category:event-link').length + ) + ).toYieldEqualTo(2); + }); + }); }); describe('and when the node list link has been clicked', () => { beforeEach(async () => { diff --git a/x-pack/plugins/security_solution/public/resolver/view/panels/breadcrumbs.tsx b/x-pack/plugins/security_solution/public/resolver/view/panels/breadcrumbs.tsx index ed39198009364..bcb750893eaa6 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/panels/breadcrumbs.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/panels/breadcrumbs.tsx @@ -8,7 +8,7 @@ import { i18n } from '@kbn/i18n'; import { EuiBreadcrumb, EuiBetaBadge } from '@elastic/eui'; -import React, { memo } from 'react'; +import React, { memo, useMemo } from 'react'; import { BetaHeader, ThemedBreadcrumbs } from './styles'; import { useColors } from '../use_colors'; @@ -16,6 +16,15 @@ import { useColors } from '../use_colors'; * Breadcrumb menu */ export const Breadcrumbs = memo(function ({ breadcrumbs }: { breadcrumbs: EuiBreadcrumb[] }) { + // Just tagging the last crumb with `data-test-subj` for testing + const crumbsWithLastSubject: EuiBreadcrumb[] = useMemo(() => { + const lastcrumb = breadcrumbs.slice(-1).map((crumb) => { + crumb['data-test-subj'] = 'resolver:breadcrumbs:last'; + return crumb; + }); + return [...breadcrumbs.slice(0, -1), ...lastcrumb]; + }, [breadcrumbs]); + const { resolverBreadcrumbBackground, resolverEdgeText } = useColors(); return ( <> @@ -32,7 +41,7 @@ export const Breadcrumbs = memo(function ({ breadcrumbs }: { breadcrumbs: EuiBre diff --git a/x-pack/plugins/security_solution/public/resolver/view/panels/event_detail.tsx b/x-pack/plugins/security_solution/public/resolver/view/panels/event_detail.tsx index 168752c507d5a..27ab343a882a6 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/panels/event_detail.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/panels/event_detail.tsx @@ -25,6 +25,7 @@ import { Breadcrumbs } from './breadcrumbs'; import * as eventModel from '../../../../common/endpoint/models/event'; import * as selectors from '../../store/selectors'; import { PanelLoading } from './panel_loading'; +import { PanelContentError } from './panel_content_error'; import { ResolverState } from '../../types'; import { DescriptiveName } from './descriptive_name'; import { useLinkProps } from '../use_link_props'; @@ -32,38 +33,48 @@ import { SafeResolverEvent } from '../../../../common/endpoint/types'; import { deepObjectEntries } from './deep_object_entries'; import { useFormattedDate } from './use_formatted_date'; +const eventDetailRequestError = i18n.translate( + 'xpack.securitySolution.resolver.panel.eventDetail.requestError', + { + defaultMessage: 'Event details were unable to be retrieved', + } +); + export const EventDetail = memo(function EventDetail({ nodeID, eventID, - eventType, + eventCategory: eventType, }: { nodeID: string; eventID: string; /** The event type to show in the breadcrumbs */ - eventType: string; + eventCategory: string; }) { - const event = useSelector((state: ResolverState) => - selectors.eventByID(state)({ nodeID, eventID }) - ); + const isEventLoading = useSelector(selectors.isCurrentRelatedEventLoading); + const isProcessTreeLoading = useSelector(selectors.isTreeLoading); + + const isLoading = isEventLoading || isProcessTreeLoading; + + const event = useSelector(selectors.currentRelatedEventData); const processEvent = useSelector((state: ResolverState) => selectors.processEventForID(state)(nodeID) ); - if (event && processEvent) { - return ( - - ); - } else { - return ( - - - - ); - } + return isLoading ? ( + + + + ) : event ? ( + + ) : ( + + + + ); }); /** @@ -82,16 +93,17 @@ const EventDetailContents = memo(function ({ * Event type to use in the breadcrumbs */ eventType: string; - processEvent: SafeResolverEvent; + processEvent: SafeResolverEvent | null; }) { const timestamp = eventModel.timestampSafeVersion(event); const formattedDate = useFormattedDate(timestamp) || noTimestampRetrievedText; + const nodeName = processEvent ? eventModel.processNameSafeVersion(processEvent) : null; return ( @@ -188,12 +200,12 @@ function EventDetailBreadcrumbs({ breadcrumbEventCategory, }: { nodeID: string; - nodeName?: string; + nodeName: string | null | undefined; event: SafeResolverEvent; breadcrumbEventCategory: string; }) { const countByCategory = useSelector((state: ResolverState) => - selectors.relatedEventCountByType(state)(nodeID, breadcrumbEventCategory) + selectors.relatedEventCountByCategory(state)(nodeID, breadcrumbEventCategory) ); const relatedEventCount: number | undefined = useSelector((state: ResolverState) => selectors.relatedEventTotalCount(state)(nodeID) @@ -212,12 +224,12 @@ function EventDetailBreadcrumbs({ panelParameters: { nodeID }, }); - const nodeEventsOfTypeLinkNavProps = useLinkProps({ - panelView: 'nodeEventsOfType', - panelParameters: { nodeID, eventType: breadcrumbEventCategory }, + const nodeEventsInCategoryLinkNavProps = useLinkProps({ + panelView: 'nodeEventsInCategory', + panelParameters: { nodeID, eventCategory: breadcrumbEventCategory }, }); const breadcrumbs = useMemo(() => { - return [ + const crumbs = [ { text: i18n.translate( 'xpack.securitySolution.endpoint.resolver.panel.relatedEventDetail.events', @@ -227,10 +239,6 @@ function EventDetailBreadcrumbs({ ), ...nodesLinkNavProps, }, - { - text: nodeName, - ...nodeDetailLinkNavProps, - }, { text: ( ), - ...nodeEventsOfTypeLinkNavProps, + ...nodeEventsInCategoryLinkNavProps, }, { text: , }, ]; + + if (nodeName) { + crumbs.splice(1, 0, { + text: nodeName, + ...nodeDetailLinkNavProps, + }); + } + + return crumbs; }, [ breadcrumbEventCategory, countByCategory, @@ -264,7 +281,7 @@ function EventDetailBreadcrumbs({ nodeName, relatedEventCount, nodesLinkNavProps, - nodeEventsOfTypeLinkNavProps, + nodeEventsInCategoryLinkNavProps, ]); return ; } diff --git a/x-pack/plugins/security_solution/public/resolver/view/panels/index.tsx b/x-pack/plugins/security_solution/public/resolver/view/panels/index.tsx index df9cbe9ced541..396050420f54e 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/panels/index.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/panels/index.tsx @@ -9,7 +9,7 @@ import React, { memo } from 'react'; import { useSelector } from 'react-redux'; import * as selectors from '../../store/selectors'; -import { NodeEventsOfType } from './node_events_of_type'; +import { NodeEventsInCategory } from './node_events_of_type'; import { NodeEvents } from './node_events'; import { NodeDetail } from './node_detail'; import { NodeList } from './node_list'; @@ -25,11 +25,11 @@ export const PanelRouter = memo(function () { return ; } else if (params.panelView === 'nodeEvents') { return ; - } else if (params.panelView === 'nodeEventsOfType') { + } else if (params.panelView === 'nodeEventsInCategory') { return ( - ); } else if (params.panelView === 'eventDetail') { @@ -37,7 +37,7 @@ export const PanelRouter = memo(function () { ); } else { diff --git a/x-pack/plugins/security_solution/public/resolver/view/panels/node_events.tsx b/x-pack/plugins/security_solution/public/resolver/view/panels/node_events.tsx index 8c2c6474ac821..34728d793bf90 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/panels/node_events.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/panels/node_events.tsx @@ -173,10 +173,10 @@ const NodeEventsLink = memo( children: React.ReactNode; }) => { const props = useLinkProps({ - panelView: 'nodeEventsOfType', + panelView: 'nodeEventsInCategory', panelParameters: { nodeID, - eventType, + eventCategory: eventType, }, }); return ( diff --git a/x-pack/plugins/security_solution/public/resolver/view/panels/node_events_of_type.tsx b/x-pack/plugins/security_solution/public/resolver/view/panels/node_events_of_type.tsx index 771a143a9c0cd..0265770fbb4a5 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/panels/node_events_of_type.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/panels/node_events_of_type.tsx @@ -4,7 +4,9 @@ * you may not use this file except in compliance with the Elastic License. */ -import React, { memo, useCallback, Fragment } from 'react'; +/* eslint-disable react/display-name */ + +import React, { memo, Fragment } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiSpacer, EuiText, EuiButtonEmpty, EuiHorizontalRule } from '@elastic/eui'; import { useSelector } from 'react-redux'; @@ -24,31 +26,23 @@ import { useFormattedDate } from './use_formatted_date'; /** * Render a list of events that are related to `nodeID` and that have a category of `eventType`. */ -export const NodeEventsOfType = memo(function NodeEventsOfType({ +export const NodeEventsInCategory = memo(function ({ nodeID, - eventType, + eventCategory, }: { nodeID: string; - eventType: string; + eventCategory: string; }) { const processEvent = useSelector((state: ResolverState) => selectors.processEventForID(state)(nodeID) ); - const eventCount = useSelector( - (state: ResolverState) => selectors.relatedEventsStats(state)(nodeID)?.events.total - ); - const eventsInCategoryCount = useSelector( - (state: ResolverState) => - selectors.relatedEventsStats(state)(nodeID)?.events.byCategory[eventType] + const eventCount = useSelector((state: ResolverState) => + selectors.totalRelatedEventCountForNode(state)(nodeID) ); - const events = useSelector( - useCallback( - (state: ResolverState) => { - return selectors.relatedEventsByCategory(state)(nodeID, eventType); - }, - [eventType, nodeID] - ) + const eventsInCategoryCount = useSelector((state: ResolverState) => + selectors.relatedEventCountOfTypeForNode(state)(nodeID, eventCategory) ); + const events = useSelector((state: ResolverState) => selectors.nodeEventsInCategory(state)); return ( @@ -56,15 +50,15 @@ export const NodeEventsOfType = memo(function NodeEventsOfType({ ) : ( <> - - + )} @@ -77,11 +71,11 @@ export const NodeEventsOfType = memo(function NodeEventsOfType({ const NodeEventsListItem = memo(function ({ event, nodeID, - eventType, + eventCategory, }: { event: SafeResolverEvent; nodeID: string; - eventType: string; + eventCategory: string; }) { const timestamp = eventModel.eventTimestamp(event); const date = useFormattedDate(timestamp) || noTimestampRetrievedText; @@ -89,7 +83,7 @@ const NodeEventsListItem = memo(function ({ panelView: 'eventDetail', panelParameters: { nodeID, - eventType, + eventCategory, eventID: String(eventModel.eventID(event)), }, }); @@ -115,7 +109,10 @@ const NodeEventsListItem = memo(function ({ - + @@ -126,11 +123,11 @@ const NodeEventsListItem = memo(function ({ * Renders a list of events with a separator in between. */ const NodeEventList = memo(function NodeEventList({ - eventType, + eventCategory, events, nodeID, }: { - eventType: string; + eventCategory: string; /** * The events to list. */ @@ -141,7 +138,7 @@ const NodeEventList = memo(function NodeEventList({ <> {events.map((event, index) => ( - + {index === events.length - 1 ? null : } ))} @@ -152,9 +149,9 @@ const NodeEventList = memo(function NodeEventList({ /** * Renders `Breadcrumbs`. */ -const NodeEventsOfTypeBreadcrumbs = memo(function ({ +const NodeEventsInCategoryBreadcrumbs = memo(function ({ nodeName, - eventType, + eventCategory, eventCount, nodeID, /** @@ -163,7 +160,7 @@ const NodeEventsOfTypeBreadcrumbs = memo(function ({ eventsInCategoryCount, }: { nodeName: React.ReactNode; - eventType: string; + eventCategory: string; /** * The events to list. */ @@ -218,7 +215,7 @@ const NodeEventsOfTypeBreadcrumbs = memo(function ({ text: ( ), diff --git a/x-pack/plugins/security_solution/public/resolver/view/panels/panel_content_error.tsx b/x-pack/plugins/security_solution/public/resolver/view/panels/panel_content_error.tsx index 199758145f117..c7cc420fcc0d4 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/panels/panel_content_error.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/panels/panel_content_error.tsx @@ -48,7 +48,7 @@ export const PanelContentError = memo(function ({ {i18n.translate('xpack.securitySolution.endpoint.resolver.panel.error.goBack', { - defaultMessage: 'Click this link to return to the list of all processes.', + defaultMessage: 'Click here to return to the list of all processes.', })} diff --git a/x-pack/plugins/security_solution/public/resolver/view/panels/use_formatted_date.test.tsx b/x-pack/plugins/security_solution/public/resolver/view/panels/use_formatted_date.test.tsx index 9e9ae26900efa..c08c3b370558b 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/panels/use_formatted_date.test.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/panels/use_formatted_date.test.tsx @@ -45,7 +45,7 @@ describe('useFormattedDate', () => { const { findByTestId } = reactRenderResult(undefined); element = await findByTestId(testID); - expect(element).toBeEmpty(); + expect(element).toBeEmptyDOMElement(); }); }); @@ -54,7 +54,7 @@ describe('useFormattedDate', () => { const { findByTestId } = reactRenderResult(''); element = await findByTestId(testID); - expect(element).toBeEmpty(); + expect(element).toBeEmptyDOMElement(); }); }); diff --git a/x-pack/plugins/security_solution/public/resolver/view/process_event_dot.tsx b/x-pack/plugins/security_solution/public/resolver/view/process_event_dot.tsx index 4d647760edb9c..f40f423359f56 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/process_event_dot.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/process_event_dot.tsx @@ -9,7 +9,7 @@ import styled from 'styled-components'; import { htmlIdGenerator, EuiButton, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { useSelector } from 'react-redux'; import { FormattedMessage } from '@kbn/i18n/react'; -import { NodeSubMenu } from './submenu'; +import { NodeSubMenu } from './styles'; import { applyMatrix3 } from '../models/vector2'; import { Vector2, Matrix3, ResolverState } from '../types'; import { SafeResolverEvent } from '../../../common/endpoint/types'; diff --git a/x-pack/plugins/security_solution/public/resolver/view/styles.tsx b/x-pack/plugins/security_solution/public/resolver/view/styles.tsx index 7def5d3362d4f..2577436f63096 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/styles.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/styles.tsx @@ -5,8 +5,62 @@ */ import { EuiPanel, EuiCallOut } from '@elastic/eui'; - import styled from 'styled-components'; +import { NodeSubMenuComponents } from './submenu'; + +/** + * See `NodeSubMenuComponents` + */ +export const NodeSubMenu = styled(NodeSubMenuComponents)` + margin: 2px 0 0 0; + padding: 0; + border: none; + display: flex; + flex-flow: column; + + &.options { + font-size: 0.8rem; + display: flex; + flex-flow: row wrap; + background: transparent; + position: absolute; + top: 4.5em; + contain: content; + width: 12em; + z-index: 2; + backdrop-filter: blur(5px); + } + + &.options .item { + margin: 0.25ch 0.35ch 0.35ch 0; + padding: 0.35em 0.5em; + height: fit-content; + width: fit-content; + border-radius: 2px; + line-height: 0.8; + } + + &.options .item button { + appearance: none; + height: fit-content; + width: fit-content; + line-height: 0.8; + outline-style: none; + border-color: transparent; + box-shadow: none; + } + + &.options .item button:focus { + outline-style: none; + border-color: transparent; + box-shadow: none; + text-decoration: underline; + } + + &.options .item button:active { + transform: scale(0.95); + } +`; /** * The top level DOM element for Resolver diff --git a/x-pack/plugins/security_solution/public/resolver/view/submenu.tsx b/x-pack/plugins/security_solution/public/resolver/view/submenu.tsx index d40aa0b26a94b..a613588aa4aa9 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/submenu.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/submenu.tsx @@ -7,7 +7,6 @@ import { i18n } from '@kbn/i18n'; import React, { useMemo } from 'react'; import { EuiI18nNumber } from '@elastic/eui'; -import styled from 'styled-components'; import { ResolverNodeStats } from '../../../common/endpoint/types'; import { useRelatedEventByCategoryNavigation } from './use_related_event_by_category_navigation'; import { useColors } from './use_colors'; @@ -43,11 +42,10 @@ interface ResolverSubmenuOption { export type ResolverSubmenuOptionList = ResolverSubmenuOption[] | string; /** - * A Submenu to be displayed in one of two forms: - * 1) Provided a collection of `optionsWithActions`: it will call `menuAction` then - if and when menuData becomes available - display each item with an optional prefix and call the supplied action for the options when that option is clicked. - * 2) Provided `optionsWithActions` is undefined, it will call the supplied `menuAction` when its host button is clicked. + * A Submenu that displays a collection of "pills" for each related event + * category it has events for. */ -const NodeSubMenuComponents = React.memo( +export const NodeSubMenuComponents = React.memo( ({ className, nodeID, @@ -117,53 +115,3 @@ const NodeSubMenuComponents = React.memo( ); } ); - -export const NodeSubMenu = styled(NodeSubMenuComponents)` - margin: 2px 0 0 0; - padding: 0; - border: none; - display: flex; - flex-flow: column; - - &.options { - font-size: 0.8rem; - display: flex; - flex-flow: row wrap; - background: transparent; - position: absolute; - top: 4.5em; - contain: content; - width: 12em; - z-index: 2; - } - - &.options .item { - margin: 0.25ch 0.35ch 0.35ch 0; - padding: 0.35em 0.5em; - height: fit-content; - width: fit-content; - border-radius: 2px; - line-height: 0.8; - } - - &.options .item button { - appearance: none; - height: fit-content; - width: fit-content; - line-height: 0.8; - outline-style: none; - border-color: transparent; - box-shadow: none; - } - - &.options .item button:focus { - outline-style: none; - border-color: transparent; - box-shadow: none; - text-decoration: underline; - } - - &.options .item button:active { - transform: scale(0.95); - } -`; diff --git a/x-pack/plugins/security_solution/public/resolver/view/use_resolver_query_params_cleaner.ts b/x-pack/plugins/security_solution/public/resolver/view/use_resolver_query_params_cleaner.ts index 9cf6c182befe1..53618d5b713ec 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/use_resolver_query_params_cleaner.ts +++ b/x-pack/plugins/security_solution/public/resolver/view/use_resolver_query_params_cleaner.ts @@ -8,7 +8,7 @@ import { useRef, useEffect } from 'react'; import { useLocation, useHistory } from 'react-router-dom'; import { useSelector } from 'react-redux'; import * as selectors from '../store/selectors'; -import { parameterName } from '../store/ui/selectors'; +import { parameterName } from '../store/parameter_name'; /** * Cleanup any query string keys that were added by this Resolver instance. * This works by having a React effect that just has behavior in the 'cleanup' function. diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/events/event_column_view.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/events/event_column_view.tsx index f602ea1452e14..3b6585013c8d3 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/events/event_column_view.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/events/event_column_view.tsx @@ -154,7 +154,6 @@ export const EventColumnView = React.memo( = 3 + ? matches[1] + matches[3].replace('/', '') + : kibanaUrl.replace('/', ''); + } + /** + * The fleet api to enroll and agent requires an api key when you mke the request, however KbnClient currently does not support sending an api key with the request. This function allows you to send an api key with a request. + */ + requestWithApiKey(path: string, init?: RequestInit | undefined): Promise { + return (fetch( + `${this.kibanaUrlNoAuth}${path}`, + init as FetchRequestInit + ) as unknown) as Promise; + } +} diff --git a/x-pack/plugins/security_solution/scripts/endpoint/resolver_generator_script.ts b/x-pack/plugins/security_solution/scripts/endpoint/resolver_generator_script.ts index cfe1c741ef3f1..1c2c4a857451b 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/resolver_generator_script.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/resolver_generator_script.ts @@ -4,14 +4,19 @@ * you may not use this file except in compliance with the Elastic License. */ /* eslint-disable no-console */ -import * as path from 'path'; import yargs from 'yargs'; -import * as url from 'url'; -import fetch from 'node-fetch'; import { Client, ClientOptions } from '@elastic/elasticsearch'; import { ResponseError } from '@elastic/elasticsearch/lib/errors'; +import { KbnClient, ToolingLog } from '@kbn/dev-utils'; +import { AxiosResponse } from 'axios'; import { indexHostsAndAlerts } from '../../common/endpoint/index_data'; import { ANCESTRY_LIMIT } from '../../common/endpoint/generate_data'; +import { FLEET_SETUP_API_ROUTES, SETUP_API_ROUTE } from '../../../ingest_manager/common/constants'; +import { + CreateFleetSetupResponse, + PostIngestSetupResponse, +} from '../../../ingest_manager/common/types/rest_spec'; +import { KbnClientWithApiKeySupport } from './kbn_client_with_api_key_support'; main(); @@ -35,42 +40,37 @@ async function deleteIndices(indices: string[], client: Client) { } } -async function doIngestSetup(kibanaURL: string) { +async function doIngestSetup(kbnClient: KbnClient) { + // Setup Ingest try { - const kbURL = new url.URL(kibanaURL); - // this includes the base path that is randomly generated by Kibana - const pathname = path.posix.join(path.posix.sep, kbURL.pathname, 'api/ingest_manager/setup'); - const connectURL = new url.URL(pathname, kbURL); - console.log('Calling ingest manager setup at ', connectURL.toString()); - const response = await fetch( - // wrap base url in URL class because the kibana basepath will get removed otherwise - connectURL.toString(), - { - method: 'POST', - headers: { - 'kbn-xsrf': 'blah', - }, - } - ); - if (response.status !== 200) { - console.log('POST response ', response); - console.log( - 'Request failed please check that you have the correct base path and credentials for the kibana URL' - ); - // eslint-disable-next-line no-process-exit - process.exit(1); + const setupResponse = (await kbnClient.request({ + path: SETUP_API_ROUTE, + method: 'POST', + })) as AxiosResponse; + + if (!setupResponse.data.isInitialized) { + console.error(setupResponse.data); + throw new Error('Initializing the ingest manager failed, existing'); } - const setupResponse = await response.json(); - console.log('Ingest setup response ', setupResponse); - if (!setupResponse?.isInitialized) { - console.log('Initializing the ingest manager failed, existing'); - // eslint-disable-next-line no-process-exit - process.exit(1); + } catch (error) { + console.error(error); + throw error; + } + + // Setup Fleet + try { + const setupResponse = (await kbnClient.request({ + path: FLEET_SETUP_API_ROUTES.CREATE_PATTERN, + method: 'POST', + })) as AxiosResponse; + + if (!setupResponse.data.isInitialized) { + console.error(setupResponse.data); + throw new Error('Initializing Fleet failed, existing'); } } catch (error) { - console.log(JSON.stringify(error, null, 2)); - // eslint-disable-next-line no-process-exit - process.exit(1); + console.error(error); + throw error; } } @@ -196,14 +196,25 @@ async function main() { type: 'boolean', default: false, }, + fleet: { + alias: 'f', + describe: 'enroll fleet agents for hosts', + type: 'boolean', + default: false, + }, }).argv; - await doIngestSetup(argv.kibana); + const kbnClient = new KbnClientWithApiKeySupport(new ToolingLog(), { url: argv.kibana }); - const clientOptions: ClientOptions = { - node: argv.node, - }; + try { + await doIngestSetup(kbnClient); + } catch (error) { + // eslint-disable-next-line no-process-exit + process.exit(1); + } + const clientOptions: ClientOptions = { node: argv.node }; const client = new Client(clientOptions); + if (argv.delete) { await deleteIndices( [argv.eventIndex, argv.metadataIndex, argv.policyIndex, argv.alertIndex], @@ -219,6 +230,7 @@ async function main() { const startTime = new Date().getTime(); await indexHostsAndAlerts( client, + kbnClient, seed, argv.numHosts, argv.numDocs, @@ -227,6 +239,7 @@ async function main() { argv.eventIndex, argv.alertIndex, argv.alertsPerHost, + argv.fleet, { ancestors: argv.ancestors, generations: argv.generations, diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/metadata/metadata.test.ts b/x-pack/plugins/security_solution/server/endpoint/routes/metadata/metadata.test.ts index 299939eb92444..227a3e6fd9657 100644 --- a/x-pack/plugins/security_solution/server/endpoint/routes/metadata/metadata.test.ts +++ b/x-pack/plugins/security_solution/server/endpoint/routes/metadata/metadata.test.ts @@ -42,6 +42,7 @@ import { } from '../../../../../ingest_manager/common/types/models'; import { createV1SearchResponse, createV2SearchResponse } from './support/test_support'; import { PackageService } from '../../../../../ingest_manager/server/services'; +import { metadataTransformPrefix } from '../../../../common/endpoint/constants'; describe('test endpoint route', () => { let routerMock: jest.Mocked; @@ -175,7 +176,7 @@ describe('test endpoint route', () => { type: ElasticsearchAssetType.indexTemplate, }, { - id: 'metrics-endpoint.metadata-current-default-0.16.0-dev.0', + id: `${metadataTransformPrefix}-0.16.0-dev.0`, type: ElasticsearchAssetType.transform, }, ]) diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/rules/queries/query_eql.json b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/rules/queries/query_eql.json index 598f2182002c1..a63444012addd 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/rules/queries/query_eql.json +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/rules/queries/query_eql.json @@ -25,6 +25,7 @@ "from": "now-300m", "severity": "high", "type": "eql", + "language": "eql", "threat": [ { "framework": "MITRE ATT&CK", diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/__mocks__/es_results.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/__mocks__/es_results.ts index b37bc7d0fab69..501cd1fa6ecfb 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/__mocks__/es_results.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/__mocks__/es_results.ts @@ -22,6 +22,7 @@ import { RuleTypeParams } from '../../types'; import { IRuleStatusAttributes } from '../../rules/types'; import { ruleStatusSavedObjectType } from '../../rules/saved_object_mappings'; import { getListArrayMock } from '../../../../../common/detection_engine/schemas/types/lists.mock'; +import { RulesSchema } from '../../../../../common/detection_engine/schemas/response'; export const sampleRuleAlertParams = ( maxSignals?: number | undefined, @@ -92,6 +93,46 @@ export const sampleRuleSO = (): SavedObject => { }; }; +export const expectedRule = (): RulesSchema => { + return { + actions: [], + author: ['Elastic'], + building_block_type: 'default', + id: '04128c15-0d1b-4716-a4c5-46997ac7f3bd', + rule_id: 'rule-1', + false_positives: [], + max_signals: 10000, + risk_score: 50, + risk_score_mapping: [], + output_index: '.siem-signals', + description: 'Detecting root and admin users', + from: 'now-6m', + immutable: false, + index: ['auditbeat-*', 'filebeat-*', 'packetbeat-*', 'winlogbeat-*'], + interval: '5m', + language: 'kuery', + license: 'Elastic License', + name: 'rule-name', + query: 'user.name: root or user.name: admin', + references: ['http://google.com'], + severity: 'high', + severity_mapping: [], + tags: ['some fake tag 1', 'some fake tag 2'], + threat: [], + type: 'query', + to: 'now', + note: '', + enabled: true, + created_by: 'sample user', + updated_by: 'sample user', + version: 1, + updated_at: '2020-03-27T22:55:59.577Z', + created_at: '2020-03-27T22:55:59.577Z', + throttle: 'no_actions', + exceptions_list: getListArrayMock(), + }; +}; + export const sampleDocNoSortIdNoVersion = (someUuid: string = sampleIdGuid): SignalSourceHit => ({ _index: 'myFakeSignalIndex', _type: 'doc', diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/build_bulk_body.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/build_bulk_body.test.ts index f45a408cd32b8..2f7dd22c0c78e 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/build_bulk_body.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/build_bulk_body.test.ts @@ -546,7 +546,7 @@ describe('buildSignalFromEvent', () => { const ancestor = sampleDocWithAncestors().hits.hits[0]; delete ancestor._source.source; const ruleSO = sampleRuleSO(); - const signal = buildSignalFromEvent(ancestor, ruleSO); + const signal = buildSignalFromEvent(ancestor, ruleSO, true); // Timestamp will potentially always be different so remove it for the test // @ts-expect-error delete signal['@timestamp']; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/build_bulk_body.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/build_bulk_body.ts index 01a6b0e7aefad..f8632a85c77e9 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/build_bulk_body.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/build_bulk_body.ts @@ -13,7 +13,7 @@ import { BaseSignalHit, SignalSource, } from './types'; -import { buildRule, buildRuleWithoutOverrides } from './build_rule'; +import { buildRule, buildRuleWithoutOverrides, buildRuleWithOverrides } from './build_rule'; import { additionalSignalFields, buildSignal } from './build_signal'; import { buildEventTypeSignal } from './build_event_type_signal'; import { RuleAlertAction } from '../../../../common/detection_engine/types'; @@ -97,7 +97,7 @@ export const buildSignalGroupFromSequence = ( ): BaseSignalHit[] => { const wrappedBuildingBlocks = wrapBuildingBlocks( sequence.events.map((event) => { - const signal = buildSignalFromEvent(event, ruleSO); + const signal = buildSignalFromEvent(event, ruleSO, false); signal.signal.rule.building_block_type = 'default'; return signal; }), @@ -147,9 +147,12 @@ export const buildSignalFromSequence = ( export const buildSignalFromEvent = ( event: BaseSignalHit, - ruleSO: SavedObject + ruleSO: SavedObject, + applyOverrides: boolean ): SignalHit => { - const rule = buildRuleWithoutOverrides(ruleSO); + const rule = applyOverrides + ? buildRuleWithOverrides(ruleSO, event._source) + : buildRuleWithoutOverrides(ruleSO); const signal = { ...buildSignal([event], rule), ...additionalSignalFields(event), diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/build_rule.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/build_rule.test.ts index 62e5854037d9e..6bc9489f65870 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/build_rule.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/build_rule.test.ts @@ -4,12 +4,19 @@ * you may not use this file except in compliance with the Elastic License. */ -import { buildRule, removeInternalTagsFromRule, buildRuleWithoutOverrides } from './build_rule'; +import { + buildRule, + removeInternalTagsFromRule, + buildRuleWithOverrides, + buildRuleWithoutOverrides, +} from './build_rule'; import { sampleDocNoSortId, sampleRuleAlertParams, sampleRuleGuid, sampleRuleSO, + expectedRule, + sampleDocSeverity, } from './__mocks__/es_results'; import { RulesSchema } from '../../../../common/detection_engine/schemas/response/rules_schema'; import { getListArrayMock } from '../../../../common/detection_engine/schemas/types/lists.mock'; @@ -312,43 +319,7 @@ describe('buildRuleWithoutOverrides', () => { test('builds a rule using rule SO', () => { const ruleSO = sampleRuleSO(); const rule = buildRuleWithoutOverrides(ruleSO); - expect(rule).toEqual({ - actions: [], - author: ['Elastic'], - building_block_type: 'default', - id: '04128c15-0d1b-4716-a4c5-46997ac7f3bd', - rule_id: 'rule-1', - false_positives: [], - max_signals: 10000, - risk_score: 50, - risk_score_mapping: [], - output_index: '.siem-signals', - description: 'Detecting root and admin users', - from: 'now-6m', - immutable: false, - index: ['auditbeat-*', 'filebeat-*', 'packetbeat-*', 'winlogbeat-*'], - interval: '5m', - language: 'kuery', - license: 'Elastic License', - name: 'rule-name', - query: 'user.name: root or user.name: admin', - references: ['http://google.com'], - severity: 'high', - severity_mapping: [], - tags: ['some fake tag 1', 'some fake tag 2'], - threat: [], - type: 'query', - to: 'now', - note: '', - enabled: true, - created_by: 'sample user', - updated_by: 'sample user', - version: 1, - updated_at: ruleSO.updated_at ?? '', - created_at: ruleSO.attributes.createdAt, - throttle: 'no_actions', - exceptions_list: getListArrayMock(), - }); + expect(rule).toEqual(expectedRule()); }); test('builds a rule using rule SO and removes internal tags', () => { @@ -360,42 +331,110 @@ describe('buildRuleWithoutOverrides', () => { `${INTERNAL_IMMUTABLE_KEY}:true`, ]; const rule = buildRuleWithoutOverrides(ruleSO); - expect(rule).toEqual({ - actions: [], - author: ['Elastic'], - building_block_type: 'default', - id: '04128c15-0d1b-4716-a4c5-46997ac7f3bd', - rule_id: 'rule-1', - false_positives: [], - max_signals: 10000, - risk_score: 50, - risk_score_mapping: [], - output_index: '.siem-signals', - description: 'Detecting root and admin users', - from: 'now-6m', - immutable: false, - index: ['auditbeat-*', 'filebeat-*', 'packetbeat-*', 'winlogbeat-*'], - interval: '5m', - language: 'kuery', - license: 'Elastic License', - name: 'rule-name', - query: 'user.name: root or user.name: admin', - references: ['http://google.com'], - severity: 'high', - severity_mapping: [], - tags: ['some fake tag 1', 'some fake tag 2'], - threat: [], - type: 'query', - to: 'now', - note: '', - enabled: true, - created_by: 'sample user', - updated_by: 'sample user', - version: 1, - updated_at: ruleSO.updated_at ?? '', - created_at: ruleSO.attributes.createdAt, - throttle: 'no_actions', - exceptions_list: getListArrayMock(), - }); + expect(rule).toEqual(expectedRule()); + }); +}); + +describe('buildRuleWithOverrides', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + test('it builds a rule as expected with filters present', () => { + const ruleSO = sampleRuleSO(); + ruleSO.attributes.params.filters = [ + { + query: 'host.name: Rebecca', + }, + { + query: 'host.name: Evan', + }, + { + query: 'host.name: Braden', + }, + ]; + const rule = buildRuleWithOverrides(ruleSO, sampleDocNoSortId()._source); + const expected: RulesSchema = { + ...expectedRule(), + filters: ruleSO.attributes.params.filters, + }; + expect(rule).toEqual(expected); + }); + + test('it builds a rule and removes internal tags', () => { + const ruleSO = sampleRuleSO(); + ruleSO.attributes.tags = [ + 'some fake tag 1', + 'some fake tag 2', + `${INTERNAL_RULE_ID_KEY}:rule-1`, + `${INTERNAL_IMMUTABLE_KEY}:true`, + ]; + const rule = buildRuleWithOverrides(ruleSO, sampleDocNoSortId()._source); + expect(rule).toEqual(expectedRule()); + }); + + test('it applies rule name override in buildRule', () => { + const ruleSO = sampleRuleSO(); + ruleSO.attributes.params.ruleNameOverride = 'someKey'; + const rule = buildRuleWithOverrides(ruleSO, sampleDocNoSortId()._source); + const expected = { + ...expectedRule(), + name: 'someValue', + rule_name_override: 'someKey', + meta: { + ruleNameOverridden: true, + }, + }; + expect(rule).toEqual(expected); + }); + + test('it applies risk score override in buildRule', () => { + const newRiskScore = 79; + const ruleSO = sampleRuleSO(); + ruleSO.attributes.params.riskScoreMapping = [ + { + field: 'new_risk_score', + // value and risk_score aren't used for anything but are required in the schema + value: '', + operator: 'equals', + risk_score: undefined, + }, + ]; + const doc = sampleDocNoSortId(); + doc._source.new_risk_score = newRiskScore; + const rule = buildRuleWithOverrides(ruleSO, doc._source); + const expected = { + ...expectedRule(), + risk_score: newRiskScore, + risk_score_mapping: ruleSO.attributes.params.riskScoreMapping, + meta: { + riskScoreOverridden: true, + }, + }; + expect(rule).toEqual(expected); + }); + + test('it applies severity override in buildRule', () => { + const eventSeverity = '42'; + const ruleSO = sampleRuleSO(); + ruleSO.attributes.params.severityMapping = [ + { + field: 'event.severity', + value: eventSeverity, + operator: 'equals', + severity: 'critical', + }, + ]; + const doc = sampleDocSeverity(Number(eventSeverity)); + const rule = buildRuleWithOverrides(ruleSO, doc._source); + const expected = { + ...expectedRule(), + severity: 'critical', + severity_mapping: ruleSO.attributes.params.severityMapping, + meta: { + severityOverrideField: 'event.severity', + }, + }; + expect(rule).toEqual(expected); }); }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/build_rule.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/build_rule.ts index e5370735333bc..344f705c4af24 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/build_rule.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/build_rule.ts @@ -9,7 +9,7 @@ import { RulesSchema } from '../../../../common/detection_engine/schemas/respons import { RuleAlertAction } from '../../../../common/detection_engine/types'; import { RuleTypeParams } from '../types'; import { buildRiskScoreFromMapping } from './mappings/build_risk_score_from_mapping'; -import { SignalSourceHit, RuleAlertAttributes } from './types'; +import { SignalSourceHit, RuleAlertAttributes, SignalSource } from './types'; import { buildSeverityFromMapping } from './mappings/build_severity_from_mapping'; import { buildRuleNameFromMapping } from './mappings/build_rule_name_from_mapping'; import { INTERNAL_IDENTIFIER } from '../../../../common/constants'; @@ -46,19 +46,19 @@ export const buildRule = ({ throttle, }: BuildRuleParams): RulesSchema => { const { riskScore, riskScoreMeta } = buildRiskScoreFromMapping({ - doc, + eventSource: doc._source, riskScore: ruleParams.riskScore, riskScoreMapping: ruleParams.riskScoreMapping, }); const { severity, severityMeta } = buildSeverityFromMapping({ - doc, + eventSource: doc._source, severity: ruleParams.severity, severityMapping: ruleParams.severityMapping, }); const { ruleName, ruleNameMeta } = buildRuleNameFromMapping({ - doc, + eventSource: doc._source, ruleName: name, ruleNameMapping: ruleParams.ruleNameOverride, }); @@ -132,7 +132,7 @@ export const buildRuleWithoutOverrides = ( meta: ruleParams.meta, max_signals: ruleParams.maxSignals, risk_score: ruleParams.riskScore, - risk_score_mapping: ruleParams.riskScoreMapping ?? [], + risk_score_mapping: [], output_index: ruleParams.outputIndex, description: ruleParams.description, note: ruleParams.note, @@ -145,9 +145,8 @@ export const buildRuleWithoutOverrides = ( name: ruleSO.attributes.name, query: ruleParams.query, references: ruleParams.references, - rule_name_override: ruleParams.ruleNameOverride, severity: ruleParams.severity, - severity_mapping: ruleParams.severityMapping ?? [], + severity_mapping: [], tags: ruleSO.attributes.tags, type: ruleParams.type, to: ruleParams.to, @@ -184,3 +183,47 @@ export const removeInternalTagsFromRule = (rule: RulesSchema): RulesSchema => { return ruleWithoutInternalTags; } }; + +export const buildRuleWithOverrides = ( + ruleSO: SavedObject, + eventSource: SignalSource +): RulesSchema => { + const ruleWithoutOverrides = buildRuleWithoutOverrides(ruleSO); + return applyRuleOverrides(ruleWithoutOverrides, eventSource, ruleSO.attributes.params); +}; + +export const applyRuleOverrides = ( + rule: RulesSchema, + eventSource: SignalSource, + ruleParams: RuleTypeParams +): RulesSchema => { + const { riskScore, riskScoreMeta } = buildRiskScoreFromMapping({ + eventSource, + riskScore: ruleParams.riskScore, + riskScoreMapping: ruleParams.riskScoreMapping, + }); + + const { severity, severityMeta } = buildSeverityFromMapping({ + eventSource, + severity: ruleParams.severity, + severityMapping: ruleParams.severityMapping, + }); + + const { ruleName, ruleNameMeta } = buildRuleNameFromMapping({ + eventSource, + ruleName: rule.name, + ruleNameMapping: ruleParams.ruleNameOverride, + }); + + const meta = { ...ruleParams.meta, ...riskScoreMeta, ...severityMeta, ...ruleNameMeta }; + return { + ...rule, + risk_score: riskScore, + risk_score_mapping: ruleParams.riskScoreMapping ?? [], + severity, + severity_mapping: ruleParams.severityMapping ?? [], + name: ruleName, + rule_name_override: ruleParams.ruleNameOverride, + meta: Object.keys(meta).length > 0 ? meta : undefined, + }; +}; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_risk_score_from_mapping.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_risk_score_from_mapping.test.ts index e1d9c7f7c8a5c..ff50c2634dfd1 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_risk_score_from_mapping.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_risk_score_from_mapping.test.ts @@ -14,7 +14,7 @@ describe('buildRiskScoreFromMapping', () => { test('risk score defaults to provided if mapping is incomplete', () => { const riskScore = buildRiskScoreFromMapping({ - doc: sampleDocNoSortId(), + eventSource: sampleDocNoSortId()._source, riskScore: 57, riskScoreMapping: undefined, }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_risk_score_from_mapping.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_risk_score_from_mapping.ts index 888642f77af60..c358339e66cd9 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_risk_score_from_mapping.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_risk_score_from_mapping.ts @@ -9,10 +9,10 @@ import { RiskScore, RiskScoreMappingOrUndefined, } from '../../../../../common/detection_engine/schemas/common/schemas'; -import { SignalSourceHit } from '../types'; +import { SignalSource } from '../types'; interface BuildRiskScoreFromMappingProps { - doc: SignalSourceHit; + eventSource: SignalSource; riskScore: RiskScore; riskScoreMapping: RiskScoreMappingOrUndefined; } @@ -23,7 +23,7 @@ interface BuildRiskScoreFromMappingReturn { } export const buildRiskScoreFromMapping = ({ - doc, + eventSource, riskScore, riskScoreMapping, }: BuildRiskScoreFromMappingProps): BuildRiskScoreFromMappingReturn => { @@ -31,7 +31,7 @@ export const buildRiskScoreFromMapping = ({ if (riskScoreMapping != null && riskScoreMapping.length > 0) { const mappedField = riskScoreMapping[0].field; // TODO: Expand by verifying fieldType from index via doc._index - const mappedValue = get(mappedField, doc._source); + const mappedValue = get(mappedField, eventSource); if ( typeof mappedValue === 'number' && Number.isSafeInteger(mappedValue) && diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_rule_name_from_mapping.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_rule_name_from_mapping.test.ts index b509020646d1b..b88a628b9735c 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_rule_name_from_mapping.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_rule_name_from_mapping.test.ts @@ -14,7 +14,7 @@ describe('buildRuleNameFromMapping', () => { test('rule name defaults to provided if mapping is incomplete', () => { const ruleName = buildRuleNameFromMapping({ - doc: sampleDocNoSortId(), + eventSource: sampleDocNoSortId()._source, ruleName: 'rule-name', ruleNameMapping: 'message', }); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_rule_name_from_mapping.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_rule_name_from_mapping.ts index af540ed1454ad..c12baa556a7ff 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_rule_name_from_mapping.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_rule_name_from_mapping.ts @@ -10,10 +10,10 @@ import { Name, RuleNameOverrideOrUndefined, } from '../../../../../common/detection_engine/schemas/common/schemas'; -import { SignalSourceHit } from '../types'; +import { SignalSource } from '../types'; interface BuildRuleNameFromMappingProps { - doc: SignalSourceHit; + eventSource: SignalSource; ruleName: Name; ruleNameMapping: RuleNameOverrideOrUndefined; } @@ -24,13 +24,13 @@ interface BuildRuleNameFromMappingReturn { } export const buildRuleNameFromMapping = ({ - doc, + eventSource, ruleName, ruleNameMapping, }: BuildRuleNameFromMappingProps): BuildRuleNameFromMappingReturn => { if (ruleNameMapping != null) { // TODO: Expand by verifying fieldType from index via doc._index - const mappedValue = get(ruleNameMapping, doc._source); + const mappedValue = get(ruleNameMapping, eventSource); if (t.string.is(mappedValue)) { return { ruleName: mappedValue, ruleNameMeta: { ruleNameOverridden: true } }; } diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_severity_from_mapping.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_severity_from_mapping.test.ts index fb1d51364ab39..430564cd985c2 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_severity_from_mapping.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_severity_from_mapping.test.ts @@ -14,7 +14,7 @@ describe('buildSeverityFromMapping', () => { test('severity defaults to provided if mapping is undefined', () => { const severity = buildSeverityFromMapping({ - doc: sampleDocNoSortId(), + eventSource: sampleDocNoSortId()._source, severity: 'low', severityMapping: undefined, }); @@ -24,7 +24,7 @@ describe('buildSeverityFromMapping', () => { test('severity is overridden to highest matched mapping', () => { const severity = buildSeverityFromMapping({ - doc: sampleDocSeverity(23), + eventSource: sampleDocSeverity(23)._source, severity: 'low', severityMapping: [ { field: 'event.severity', operator: 'equals', value: '23', severity: 'critical' }, @@ -44,7 +44,7 @@ describe('buildSeverityFromMapping', () => { test('severity is overridden when field is event.severity and source value is number', () => { const severity = buildSeverityFromMapping({ - doc: sampleDocSeverity(23), + eventSource: sampleDocSeverity(23)._source, severity: 'low', severityMapping: [ { field: 'event.severity', operator: 'equals', value: '13', severity: 'low' }, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_severity_from_mapping.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_severity_from_mapping.ts index c0a62a2cc887d..52ebd67f257af 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_severity_from_mapping.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/mappings/build_severity_from_mapping.ts @@ -11,10 +11,10 @@ import { severity as SeverityIOTS, SeverityMappingOrUndefined, } from '../../../../../common/detection_engine/schemas/common/schemas'; -import { SignalSourceHit } from '../types'; +import { SignalSource } from '../types'; interface BuildSeverityFromMappingProps { - doc: SignalSourceHit; + eventSource: SignalSource; severity: Severity; severityMapping: SeverityMappingOrUndefined; } @@ -32,7 +32,7 @@ const severitySortMapping = { }; export const buildSeverityFromMapping = ({ - doc, + eventSource, severity, severityMapping, }: BuildSeverityFromMappingProps): BuildSeverityFromMappingReturn => { @@ -45,7 +45,7 @@ export const buildSeverityFromMapping = ({ ); severityMappingSorted.forEach((mapping) => { - const docValue = get(mapping.field, doc._source); + const docValue = get(mapping.field, eventSource); // TODO: Expand by verifying fieldType from index via doc._index // Till then, explicit parsing of event.severity (long) to number. If not ECS, this could be // another datatype, but until we can lookup datatype we must assume number for the Elastic diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/search_after_bulk_create.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/search_after_bulk_create.test.ts index 68c6a51b4e6f6..c82c1fe969ee3 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/search_after_bulk_create.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/search_after_bulk_create.test.ts @@ -130,6 +130,7 @@ describe('searchAfterAndBulkCreate', () => { exceptionsList: [exceptionItem], services: mockService, logger: mockLogger, + eventsTelemetry: undefined, id: sampleRuleGuid, inputIndexPattern, signalsIndex: DEFAULT_SIGNALS_INDEX, @@ -255,6 +256,7 @@ describe('searchAfterAndBulkCreate', () => { exceptionsList: [exceptionItem], services: mockService, logger: mockLogger, + eventsTelemetry: undefined, id: sampleRuleGuid, inputIndexPattern, signalsIndex: DEFAULT_SIGNALS_INDEX, @@ -334,6 +336,7 @@ describe('searchAfterAndBulkCreate', () => { exceptionsList: [exceptionItem], services: mockService, logger: mockLogger, + eventsTelemetry: undefined, id: sampleRuleGuid, inputIndexPattern, signalsIndex: DEFAULT_SIGNALS_INDEX, @@ -394,6 +397,7 @@ describe('searchAfterAndBulkCreate', () => { exceptionsList: [exceptionItem], services: mockService, logger: mockLogger, + eventsTelemetry: undefined, id: sampleRuleGuid, inputIndexPattern, signalsIndex: DEFAULT_SIGNALS_INDEX, @@ -452,6 +456,7 @@ describe('searchAfterAndBulkCreate', () => { exceptionsList: [exceptionItem], services: mockService, logger: mockLogger, + eventsTelemetry: undefined, id: sampleRuleGuid, inputIndexPattern, signalsIndex: DEFAULT_SIGNALS_INDEX, @@ -535,6 +540,7 @@ describe('searchAfterAndBulkCreate', () => { exceptionsList: [exceptionItem], services: mockService, logger: mockLogger, + eventsTelemetry: undefined, id: sampleRuleGuid, inputIndexPattern, signalsIndex: DEFAULT_SIGNALS_INDEX, @@ -615,6 +621,7 @@ describe('searchAfterAndBulkCreate', () => { exceptionsList: [], services: mockService, logger: mockLogger, + eventsTelemetry: undefined, id: sampleRuleGuid, inputIndexPattern, signalsIndex: DEFAULT_SIGNALS_INDEX, @@ -664,6 +671,7 @@ describe('searchAfterAndBulkCreate', () => { ruleParams: sampleParams, services: mockService, logger: mockLogger, + eventsTelemetry: undefined, id: sampleRuleGuid, inputIndexPattern, signalsIndex: DEFAULT_SIGNALS_INDEX, @@ -719,6 +727,7 @@ describe('searchAfterAndBulkCreate', () => { ruleParams: sampleParams, services: mockService, logger: mockLogger, + eventsTelemetry: undefined, id: sampleRuleGuid, inputIndexPattern, signalsIndex: DEFAULT_SIGNALS_INDEX, @@ -790,6 +799,7 @@ describe('searchAfterAndBulkCreate', () => { ruleParams: sampleParams, services: mockService, logger: mockLogger, + eventsTelemetry: undefined, id: sampleRuleGuid, inputIndexPattern, signalsIndex: DEFAULT_SIGNALS_INDEX, @@ -898,6 +908,7 @@ describe('searchAfterAndBulkCreate', () => { exceptionsList: [], services: mockService, logger: mockLogger, + eventsTelemetry: undefined, id: sampleRuleGuid, inputIndexPattern, signalsIndex: DEFAULT_SIGNALS_INDEX, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/search_after_bulk_create.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/search_after_bulk_create.ts index 2df180582a0ac..8fe55d97b569c 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/search_after_bulk_create.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/search_after_bulk_create.ts @@ -7,6 +7,7 @@ import { singleSearchAfter } from './single_search_after'; import { singleBulkCreate } from './single_bulk_create'; import { filterEventsAgainstList } from './filter_events_with_list'; +import { sendAlertTelemetryEvents } from './send_telemetry_events'; import { createSearchAfterReturnType, createSearchAfterReturnTypeFromResponse, @@ -25,6 +26,7 @@ export const searchAfterAndBulkCreate = async ({ services, listClient, logger, + eventsTelemetry, id, inputIndexPattern, signalsIndex, @@ -188,6 +190,14 @@ export const searchAfterAndBulkCreate = async ({ logger.debug( buildRuleMessage(`filteredEvents.hits.hits: ${filteredEvents.hits.hits.length}`) ); + + sendAlertTelemetryEvents( + logger, + eventsTelemetry, + filteredEvents, + ruleParams, + buildRuleMessage + ); } // we are guaranteed to have searchResult hits at this point diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/send_telemetry_events.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/send_telemetry_events.test.ts new file mode 100644 index 0000000000000..2a531998ff8a6 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/send_telemetry_events.test.ts @@ -0,0 +1,78 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { selectEvents } from './send_telemetry_events'; + +describe('sendAlertTelemetry', () => { + it('selectEvents', () => { + const filteredEvents = { + took: 0, + timed_out: false, + _shards: { + total: 1, + successful: 1, + failed: 0, + skipped: 0, + }, + hits: { + total: 2, + max_score: 0, + hits: [ + { + _index: 'x', + _type: 'x', + _id: 'x', + _score: 0, + _source: { + '@timestamp': 'x', + key1: 'hello', + data_stream: { + dataset: 'endpoint.events', + }, + }, + }, + { + _index: 'x', + _type: 'x', + _id: 'x', + _score: 0, + _source: { + '@timestamp': 'x', + key2: 'hello', + data_stream: { + dataset: 'endpoint.alerts', + other: 'x', + }, + }, + }, + { + _index: 'x', + _type: 'x', + _id: 'x', + _score: 0, + _source: { + '@timestamp': 'x', + key3: 'hello', + data_stream: {}, + }, + }, + ], + }, + }; + + const sources = selectEvents(filteredEvents); + expect(sources).toStrictEqual([ + { + '@timestamp': 'x', + key2: 'hello', + data_stream: { + dataset: 'endpoint.alerts', + other: 'x', + }, + }, + ]); + }); +}); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/send_telemetry_events.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/send_telemetry_events.ts new file mode 100644 index 0000000000000..5963d31bda8a6 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/send_telemetry_events.ts @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { TelemetryEventsSender, TelemetryEvent } from '../../telemetry/sender'; +import { RuleTypeParams } from '../types'; +import { BuildRuleMessage } from './rule_messages'; +import { SignalSearchResponse, SignalSource } from './types'; +import { Logger } from '../../../../../../../src/core/server'; + +export interface SearchResultWithSource { + _source: SignalSource; +} + +export function selectEvents(filteredEvents: SignalSearchResponse): TelemetryEvent[] { + const sources = filteredEvents.hits.hits.map(function ( + obj: SearchResultWithSource + ): TelemetryEvent { + return obj._source; + }); + + // Filter out non-endpoint alerts + return sources.filter((obj: TelemetryEvent) => obj.data_stream?.dataset === 'endpoint.alerts'); +} + +export function sendAlertTelemetryEvents( + logger: Logger, + eventsTelemetry: TelemetryEventsSender | undefined, + filteredEvents: SignalSearchResponse, + ruleParams: RuleTypeParams, + buildRuleMessage: BuildRuleMessage +) { + if (eventsTelemetry === undefined) { + return; + } + + const sources = selectEvents(filteredEvents); + + try { + eventsTelemetry.queueTelemetryEvents(sources); + } catch (exc) { + logger.error(buildRuleMessage(`[-] queing telemetry events failed ${exc}`)); + } +} diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/signal_rule_alert_type.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/signal_rule_alert_type.test.ts index 382acf2f38245..415abc9d995fb 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/signal_rule_alert_type.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/signal_rule_alert_type.test.ts @@ -138,6 +138,7 @@ describe('rules_notification_alert_type', () => { alert = signalRulesAlertType({ logger, + eventsTelemetry: undefined, version, ml: mlMock, lists: listMock.createSetup(), @@ -344,6 +345,7 @@ describe('rules_notification_alert_type', () => { payload = getPayload(ruleAlert, alertServices) as jest.Mocked; alert = signalRulesAlertType({ logger, + eventsTelemetry: undefined, version, ml: undefined, lists: undefined, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/signal_rule_alert_type.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/signal_rule_alert_type.ts index a3b37270e50b1..95348808bb58f 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/signal_rule_alert_type.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/signal_rule_alert_type.ts @@ -56,6 +56,7 @@ import { ruleStatusServiceFactory } from './rule_status_service'; import { buildRuleMessageFactory } from './rule_messages'; import { ruleStatusSavedObjectsClientFactory } from './rule_status_saved_objects_client'; import { getNotificationResultsLink } from '../notifications/utils'; +import { TelemetryEventsSender } from '../../telemetry/sender'; import { buildEqlSearchRequest } from '../../../../common/detection_engine/get_query_filter'; import { bulkInsertSignals } from './single_bulk_create'; import { buildSignalFromEvent, buildSignalGroupFromSequence } from './build_bulk_body'; @@ -63,11 +64,13 @@ import { createThreatSignals } from './threat_mapping/create_threat_signals'; export const signalRulesAlertType = ({ logger, + eventsTelemetry, version, ml, lists, }: { logger: Logger; + eventsTelemetry: TelemetryEventsSender | undefined; version: string; ml: SetupPlugins['ml']; lists: SetupPlugins['lists'] | undefined; @@ -369,6 +372,7 @@ export const signalRulesAlertType = ({ previousStartedAt, listClient, logger, + eventsTelemetry, alertId, outputIndex, params, @@ -409,6 +413,7 @@ export const signalRulesAlertType = ({ ruleParams: params, services, logger, + eventsTelemetry, id: alertId, inputIndexPattern: inputIndex, signalsIndex: outputIndex, @@ -455,7 +460,7 @@ export const signalRulesAlertType = ({ ); } else if (response.hits.events !== undefined) { newSignals = response.hits.events.map((event) => - wrapSignal(buildSignalFromEvent(event, savedObject), outputIndex) + wrapSignal(buildSignalFromEvent(event, savedObject, true), outputIndex) ); } else { throw new Error( diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/threat_mapping/create_threat_signal.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/threat_mapping/create_threat_signal.ts index a6d4a2ba58ddd..560e7ad7fe2cb 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/threat_mapping/create_threat_signal.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/threat_mapping/create_threat_signal.ts @@ -28,6 +28,7 @@ export const createThreatSignal = async ({ previousStartedAt, listClient, logger, + eventsTelemetry, alertId, outputIndex, params, @@ -77,6 +78,7 @@ export const createThreatSignal = async ({ ruleParams: params, services, logger, + eventsTelemetry, id: alertId, inputIndexPattern: inputIndex, signalsIndex: outputIndex, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/threat_mapping/create_threat_signals.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/threat_mapping/create_threat_signals.ts index f416ae6703b66..f44c7a9684457 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/threat_mapping/create_threat_signals.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/threat_mapping/create_threat_signals.ts @@ -24,6 +24,7 @@ export const createThreatSignals = async ({ previousStartedAt, listClient, logger, + eventsTelemetry, alertId, outputIndex, params, @@ -79,6 +80,7 @@ export const createThreatSignals = async ({ previousStartedAt, listClient, logger, + eventsTelemetry, alertId, outputIndex, params, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/threat_mapping/types.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/threat_mapping/types.ts index d63f2d2b3b6aa..7cd6e5196ea68 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/threat_mapping/types.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/threat_mapping/types.ts @@ -21,6 +21,7 @@ import { AlertServices } from '../../../../../../alerts/server'; import { ExceptionListItemSchema } from '../../../../../../lists/common/schemas'; import { ILegacyScopedClusterClient, Logger } from '../../../../../../../../src/core/server'; import { RuleAlertAction } from '../../../../../common/detection_engine/types'; +import { TelemetryEventsSender } from '../../../telemetry/sender'; import { BuildRuleMessage } from '../rule_messages'; import { SearchAfterAndBulkCreateReturnType } from '../types'; @@ -38,6 +39,7 @@ export interface CreateThreatSignalsOptions { previousStartedAt: Date | null; listClient: ListClient; logger: Logger; + eventsTelemetry: TelemetryEventsSender | undefined; alertId: string; outputIndex: string; params: RuleTypeParams; @@ -73,6 +75,7 @@ export interface CreateThreatSignalOptions { previousStartedAt: Date | null; listClient: ListClient; logger: Logger; + eventsTelemetry: TelemetryEventsSender | undefined; alertId: string; outputIndex: string; params: RuleTypeParams; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/types.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/types.ts index 2f6ed0c1e3a8e..d9ca3dce54af3 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/signals/types.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/signals/types.ts @@ -21,6 +21,7 @@ import { ListClient } from '../../../../../lists/server'; import { Logger } from '../../../../../../../src/core/server'; import { ExceptionListItemSchema } from '../../../../../lists/common/schemas'; import { BuildRuleMessage } from './rule_messages'; +import { TelemetryEventsSender } from '../../telemetry/sender'; // used for gap detection code // eslint-disable-next-line @typescript-eslint/naming-convention @@ -211,6 +212,7 @@ export interface SearchAfterAndBulkCreateParams { listClient: ListClient; exceptionsList: ExceptionListItemSchema[]; logger: Logger; + eventsTelemetry: TelemetryEventsSender | undefined; id: string; inputIndexPattern: string[]; signalsIndex: string; diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/sender.test.ts b/x-pack/plugins/security_solution/server/lib/telemetry/sender.test.ts new file mode 100644 index 0000000000000..1ebdcb6b9d3f4 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/telemetry/sender.test.ts @@ -0,0 +1,241 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +/* eslint-disable dot-notation */ +import { TelemetryEventsSender, copyAllowlistedFields, getV3UrlFromV2 } from './sender'; +import { loggingSystemMock } from 'src/core/server/mocks'; +import { URL } from 'url'; + +describe('TelemetryEventsSender', () => { + let logger: ReturnType; + + beforeEach(() => { + logger = loggingSystemMock.createLogger(); + }); + + describe('processEvents', () => { + it('returns empty array when empty array is passed', () => { + const sender = new TelemetryEventsSender(logger); + const result = sender.processEvents([]); + expect(result).toStrictEqual([]); + }); + + it('applies the allowlist', () => { + const sender = new TelemetryEventsSender(logger); + const input = [ + { + event: { + kind: 'alert', + }, + agent: { + name: 'test', + }, + file: { + size: 3, + path: 'X', + test: 'me', + another: 'nope', + Ext: { + code_signature: { + key1: 'X', + key2: 'Y', + }, + malware_classification: { + key1: 'X', + }, + something_else: 'nope', + }, + }, + host: { + os: { + name: 'windows', + }, + something_else: 'nope', + }, + }, + ]; + + const result = sender.processEvents(input); + expect(result).toStrictEqual([ + { + event: { + kind: 'alert', + }, + agent: { + name: 'test', + }, + file: { + size: 3, + path: 'X', + Ext: { + code_signature: { + key1: 'X', + key2: 'Y', + }, + malware_classification: { + key1: 'X', + }, + }, + }, + host: { + os: { + name: 'windows', + }, + }, + }, + ]); + }); + }); + + describe('queueTelemetryEvents', () => { + it('queues two events', () => { + const sender = new TelemetryEventsSender(logger); + sender.queueTelemetryEvents([{ 'event.kind': '1' }, { 'event.kind': '2' }]); + expect(sender['queue'].length).toBe(2); + }); + + it('queues more than maxQueueSize events', () => { + const sender = new TelemetryEventsSender(logger); + sender['maxQueueSize'] = 5; + sender.queueTelemetryEvents([{ 'event.kind': '1' }, { 'event.kind': '2' }]); + sender.queueTelemetryEvents([{ 'event.kind': '3' }, { 'event.kind': '4' }]); + sender.queueTelemetryEvents([{ 'event.kind': '5' }, { 'event.kind': '6' }]); + sender.queueTelemetryEvents([{ 'event.kind': '7' }, { 'event.kind': '8' }]); + expect(sender['queue'].length).toBe(5); + }); + + it('empties the queue when sending', async () => { + const sender = new TelemetryEventsSender(logger); + sender['sendEvents'] = jest.fn(); + sender['telemetryStart'] = { + getIsOptedIn: jest.fn(async () => true), + }; + sender['telemetrySetup'] = { + getTelemetryUrl: jest.fn(async () => new URL('https://telemetry.elastic.co')), + }; + sender['fetchClusterInfo'] = jest.fn(async () => { + return { + cluster_name: 'test', + cluster_uuid: 'test-uuid', + }; + }); + + sender.queueTelemetryEvents([{ 'event.kind': '1' }, { 'event.kind': '2' }]); + expect(sender['queue'].length).toBe(2); + await sender['sendIfDue'](); + expect(sender['queue'].length).toBe(0); + expect(sender['sendEvents']).toBeCalledTimes(1); + sender.queueTelemetryEvents([{ 'event.kind': '3' }, { 'event.kind': '4' }]); + sender.queueTelemetryEvents([{ 'event.kind': '5' }, { 'event.kind': '6' }]); + expect(sender['queue'].length).toBe(4); + await sender['sendIfDue'](); + expect(sender['queue'].length).toBe(0); + expect(sender['sendEvents']).toBeCalledTimes(2); + }); + + it("shouldn't send when telemetry is disabled", async () => { + const sender = new TelemetryEventsSender(logger); + sender['sendEvents'] = jest.fn(); + const telemetryStart = { + getIsOptedIn: jest.fn(async () => false), + }; + sender['telemetryStart'] = telemetryStart; + + sender.queueTelemetryEvents([{ 'event.kind': '1' }, { 'event.kind': '2' }]); + expect(sender['queue'].length).toBe(2); + await sender['sendIfDue'](); + + expect(sender['queue'].length).toBe(0); + expect(sender['sendEvents']).toBeCalledTimes(0); + }); + }); +}); + +describe('allowlistEventFields', () => { + const allowlist = { + a: true, + b: true, + c: { + d: true, + }, + }; + + it('filters top level', () => { + const event = { + a: 'a', + a1: 'a1', + b: 'b', + b1: 'b1', + }; + expect(copyAllowlistedFields(allowlist, event)).toStrictEqual({ + a: 'a', + b: 'b', + }); + }); + + it('filters nested', () => { + const event = { + a: { + a1: 'a1', + }, + a1: 'a1', + b: { + b1: 'b1', + }, + b1: 'b1', + c: { + d: 'd', + e: 'e', + f: 'f', + }, + }; + expect(copyAllowlistedFields(allowlist, event)).toStrictEqual({ + a: { + a1: 'a1', + }, + b: { + b1: 'b1', + }, + c: { + d: 'd', + }, + }); + }); + + it("doesn't create empty objects", () => { + const event = { + a: 'a', + b: 'b', + c: { + e: 'e', + }, + }; + expect(copyAllowlistedFields(allowlist, event)).toStrictEqual({ + a: 'a', + b: 'b', + }); + }); +}); + +describe('getV3UrlFromV2', () => { + it('should return prod url', () => { + expect(getV3UrlFromV2('https://telemetry.elastic.co/xpack/v2/send', 'alerts-endpoint')).toBe( + 'https://telemetry.elastic.co/v3/send/alerts-endpoint' + ); + }); + + it('should return staging url', () => { + expect( + getV3UrlFromV2('https://telemetry-staging.elastic.co/xpack/v2/send', 'alerts-endpoint') + ).toBe('https://telemetry-staging.elastic.co/v3-dev/send/alerts-endpoint'); + }); + + it('should support ports and auth', () => { + expect( + getV3UrlFromV2('http://user:pass@myproxy.local:1337/xpack/v2/send', 'alerts-endpoint') + ).toBe('http://user:pass@myproxy.local:1337/v3/send/alerts-endpoint'); + }); +}); diff --git a/x-pack/plugins/security_solution/server/lib/telemetry/sender.ts b/x-pack/plugins/security_solution/server/lib/telemetry/sender.ts new file mode 100644 index 0000000000000..acee75abddcd9 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/telemetry/sender.ts @@ -0,0 +1,368 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { cloneDeep } from 'lodash'; +import axios from 'axios'; +import { LegacyAPICaller } from 'kibana/server'; +import { URL } from 'url'; +import { Logger, CoreStart } from '../../../../../../src/core/server'; +import { transformDataToNdjson } from '../../utils/read_stream/create_stream_from_ndjson'; +import { + TelemetryPluginStart, + TelemetryPluginSetup, +} from '../../../../../../src/plugins/telemetry/server'; + +export type SearchTypes = + | string + | string[] + | number + | number[] + | boolean + | boolean[] + | object + | object[] + | undefined; + +export interface TelemetryEvent { + [key: string]: SearchTypes; + '@timestamp'?: string; + data_stream?: { + [key: string]: SearchTypes; + dataset?: string; + }; + cluster_name?: string; + cluster_uuid?: string; + file?: { + [key: string]: SearchTypes; + Ext?: { + [key: string]: SearchTypes; + }; + }; + license?: ESLicense; +} + +export class TelemetryEventsSender { + private readonly initialCheckDelayMs = 10 * 1000; + private readonly checkIntervalMs = 60 * 1000; + private readonly logger: Logger; + private core?: CoreStart; + private maxQueueSize = 100; + private telemetryStart?: TelemetryPluginStart; + private telemetrySetup?: TelemetryPluginSetup; + private intervalId?: NodeJS.Timeout; + private isSending = false; + private queue: TelemetryEvent[] = []; + private isOptedIn?: boolean = true; // Assume true until the first check + + constructor(logger: Logger) { + this.logger = logger.get('telemetry_events'); + } + + public setup(telemetrySetup?: TelemetryPluginSetup) { + this.telemetrySetup = telemetrySetup; + } + + public start(core?: CoreStart, telemetryStart?: TelemetryPluginStart) { + this.telemetryStart = telemetryStart; + this.core = core; + + this.logger.debug(`Starting task`); + setTimeout(() => { + this.sendIfDue(); + this.intervalId = setInterval(() => this.sendIfDue(), this.checkIntervalMs); + }, this.initialCheckDelayMs); + } + + public stop() { + if (this.intervalId) { + clearInterval(this.intervalId); + } + } + + public queueTelemetryEvents(events: TelemetryEvent[]) { + const qlength = this.queue.length; + + if (events.length === 0) { + return; + } + + this.logger.debug(`Queue events`); + + if (qlength >= this.maxQueueSize) { + // we're full already + return; + } + + if (events.length > this.maxQueueSize - qlength) { + this.queue.push(...this.processEvents(events.slice(0, this.maxQueueSize - qlength))); + } else { + this.queue.push(...this.processEvents(events)); + } + } + + public processEvents(events: TelemetryEvent[]): TelemetryEvent[] { + return events.map(function (obj: TelemetryEvent): TelemetryEvent { + return copyAllowlistedFields(allowlistEventFields, obj); + }); + } + + private async sendIfDue() { + if (this.isSending) { + return; + } + + if (this.queue.length === 0) { + return; + } + + try { + this.isSending = true; + + // Checking opt-in status is relatively expensive (calls a saved-object), so + // we only check it when we have things to send. + this.isOptedIn = await this.telemetryStart?.getIsOptedIn(); + if (!this.isOptedIn) { + this.logger.debug(`Telemetry is not opted-in.`); + this.queue = []; + this.isSending = false; + return; + } + + const [telemetryUrl, clusterInfo, licenseInfo] = await Promise.all([ + this.fetchTelemetryUrl(), + this.fetchClusterInfo(), + this.fetchLicenseInfo(), + ]); + + this.logger.debug(`Telemetry URL: ${telemetryUrl}`); + this.logger.debug( + `cluster_uuid: ${clusterInfo?.cluster_uuid} cluster_name: ${clusterInfo?.cluster_name}` + ); + + const toSend: TelemetryEvent[] = cloneDeep(this.queue).map((event) => ({ + ...event, + ...(licenseInfo ? { license: this.copyLicenseFields(licenseInfo) } : {}), + cluster_uuid: clusterInfo.cluster_uuid, + cluster_name: clusterInfo.cluster_name, + })); + this.queue = []; + + await this.sendEvents(toSend, telemetryUrl, clusterInfo.cluster_uuid, licenseInfo?.uid); + } catch (err) { + this.logger.warn(`Error sending telemetry events data: ${err}`); + this.queue = []; + } + this.isSending = false; + } + + private async fetchClusterInfo(): Promise { + if (!this.core) { + throw Error("Couldn't fetch cluster info because core is not available"); + } + const callCluster = this.core.elasticsearch.legacy.client.callAsInternalUser; + return getClusterInfo(callCluster); + } + + private async fetchTelemetryUrl(): Promise { + const telemetryUrl = await this.telemetrySetup?.getTelemetryUrl(); + if (!telemetryUrl) { + throw Error("Couldn't get telemetry URL"); + } + return getV3UrlFromV2(telemetryUrl.toString(), 'alerts-endpoint'); + } + + private async fetchLicenseInfo(): Promise { + if (!this.core) { + return undefined; + } + try { + const callCluster = this.core.elasticsearch.legacy.client.callAsInternalUser; + const ret = await getLicense(callCluster, true); + return ret.license; + } catch (err) { + this.logger.warn(`Error retrieving license: ${err}`); + return undefined; + } + } + + private copyLicenseFields(lic: ESLicense) { + return { + uid: lic.uid, + status: lic.status, + type: lic.type, + ...(lic.issued_to ? { issued_to: lic.issued_to } : {}), + ...(lic.issuer ? { issuer: lic.issuer } : {}), + }; + } + + private async sendEvents( + events: unknown[], + telemetryUrl: string, + clusterUuid: string, + licenseId: string | undefined + ) { + // this.logger.debug(`Sending events: ${JSON.stringify(events, null, 2)}`); + const ndjson = transformDataToNdjson(events); + // this.logger.debug(`NDJSON: ${ndjson}`); + + try { + const resp = await axios.post(telemetryUrl, ndjson, { + headers: { + 'Content-Type': 'application/x-ndjson', + 'X-Elastic-Cluster-ID': clusterUuid, + ...(licenseId ? { 'X-Elastic-License-ID': licenseId } : {}), + 'X-Elastic-Telemetry': '1', // TODO: no longer needed? + }, + }); + this.logger.debug(`Events sent!. Response: ${resp.status} ${JSON.stringify(resp.data)}`); + } catch (err) { + this.logger.warn( + `Error sending events: ${err.response.status} ${JSON.stringify(err.response.data)}` + ); + } + } +} + +// For the Allowlist definition. +interface AllowlistFields { + [key: string]: boolean | AllowlistFields; +} + +// Allow list for the data we include in the events. True means that it is deep-cloned +// blindly. Object contents means that we only copy the fields that appear explicitly in +// the sub-object. +const allowlistEventFields: AllowlistFields = { + '@timestamp': true, + agent: true, + Endpoint: true, + ecs: true, + elastic: true, + event: true, + file: { + name: true, + path: true, + size: true, + created: true, + accessed: true, + mtime: true, + directory: true, + hash: true, + Ext: { + code_signature: true, + malware_classification: true, + }, + }, + host: { + os: true, + }, + process: { + name: true, + executable: true, + command_line: true, + hash: true, + Ext: { + code_signature: true, + }, + parent: { + name: true, + executable: true, + command_line: true, + hash: true, + Ext: { + code_signature: true, + }, + }, + }, +}; + +export function copyAllowlistedFields( + allowlist: AllowlistFields, + event: TelemetryEvent +): TelemetryEvent { + return Object.entries(allowlist).reduce((newEvent, [allowKey, allowValue]) => { + const eventValue = event[allowKey]; + if (eventValue) { + if (allowValue === true) { + return { ...newEvent, [allowKey]: eventValue }; + } else if (typeof allowValue === 'object' && typeof eventValue === 'object') { + const values = copyAllowlistedFields(allowValue, eventValue as TelemetryEvent); + return { + ...newEvent, + ...(Object.keys(values).length > 0 ? { [allowKey]: values } : {}), + }; + } + } + return newEvent; + }, {}); +} + +// Forms URLs like: +// https://telemetry.elastic.co/v3/send/my-channel-name or +// https://telemetry-staging.elastic.co/v3-dev/send/my-channel-name +export function getV3UrlFromV2(v2url: string, channel: string): string { + const url = new URL(v2url); + if (!url.hostname.includes('staging')) { + url.pathname = `/v3/send/${channel}`; + } else { + url.pathname = `/v3-dev/send/${channel}`; + } + return url.toString(); +} + +// For getting cluster info. Copied from telemetry_collection/get_cluster_info.ts +export interface ESClusterInfo { + cluster_uuid: string; + cluster_name: string; + version?: { + number: string; + build_flavor: string; + build_type: string; + build_hash: string; + build_date: string; + build_snapshot?: boolean; + lucene_version: string; + minimum_wire_compatibility_version: string; + minimum_index_compatibility_version: string; + }; +} + +/** + * Get the cluster info from the connected cluster. + * + * This is the equivalent to GET / + * + * @param {function} callCluster The callWithInternalUser handler (exposed for testing) + */ +function getClusterInfo(callCluster: LegacyAPICaller) { + return callCluster('info'); +} + +// From https://www.elastic.co/guide/en/elasticsearch/reference/current/get-license.html +export interface ESLicense { + status: string; + uid: string; + type: string; + issue_date?: string; + issue_date_in_millis?: number; + expiry_date?: string; + expirty_date_in_millis?: number; + max_nodes?: number; + issued_to?: string; + issuer?: string; + start_date_in_millis?: number; +} + +function getLicense(callCluster: LegacyAPICaller, local: boolean) { + return callCluster<{ license: ESLicense }>('transport.request', { + method: 'GET', + path: '/_license', + query: { + local, + // For versions >= 7.6 and < 8.0, this flag is needed otherwise 'platinum' is returned for 'enterprise' license. + accept_enterprise: 'true', + }, + }); +} diff --git a/x-pack/plugins/security_solution/server/plugin.ts b/x-pack/plugins/security_solution/server/plugin.ts index 22dbd623930c5..177978c888ebe 100644 --- a/x-pack/plugins/security_solution/server/plugin.ts +++ b/x-pack/plugins/security_solution/server/plugin.ts @@ -64,6 +64,11 @@ import { registerTrustedAppsRoutes } from './endpoint/routes/trusted_apps'; import { securitySolutionSearchStrategyProvider } from './search_strategy/security_solution'; import { securitySolutionIndexFieldsProvider } from './search_strategy/index_fields'; import { securitySolutionTimelineSearchStrategyProvider } from './search_strategy/timeline'; +import { TelemetryEventsSender } from './lib/telemetry/sender'; +import { + TelemetryPluginStart, + TelemetryPluginSetup, +} from '../../../../src/plugins/telemetry/server'; export interface SetupPlugins { alerts: AlertingSetup; @@ -77,12 +82,14 @@ export interface SetupPlugins { spaces?: SpacesSetup; taskManager?: TaskManagerSetupContract; usageCollection?: UsageCollectionSetup; + telemetry?: TelemetryPluginSetup; } export interface StartPlugins { data: DataPluginStart; ingestManager?: IngestManagerStartContract; taskManager?: TaskManagerStartContract; + telemetry?: TelemetryPluginStart; } // eslint-disable-next-line @typescript-eslint/no-empty-interface @@ -107,6 +114,7 @@ export class Plugin implements IPlugin({ max: 3, maxAge: 1000 * 60 * 5 }); + this.telemetryEventsSender = new TelemetryEventsSender(this.logger); this.logger.debug('plugin initialized'); } @@ -241,6 +250,7 @@ export class Plugin implements IPlugin { describe('formatIndexFields', () => { @@ -16,6 +17,7 @@ describe('Index Fields', () => { sortBy( 'name', await formatIndexFields( + beatFields, [mockAuditbeatIndexField, mockFilebeatIndexField, mockPacketbeatIndexField], ['auditbeat', 'filebeat', 'packetbeat'] ) @@ -167,6 +169,7 @@ describe('Index Fields', () => { describe('formatFirstFields', () => { test('Basic functionality', async () => { const fields = await formatFirstFields( + beatFields, [mockAuditbeatIndexField, mockFilebeatIndexField, mockPacketbeatIndexField], ['auditbeat', 'filebeat', 'packetbeat'] ); @@ -749,6 +752,7 @@ describe('Index Fields', () => { describe('createFieldItem', () => { test('Basic functionality', () => { const item = createFieldItem( + beatFields, ['auditbeat'], { name: '_id', diff --git a/x-pack/plugins/security_solution/server/search_strategy/index_fields/index.ts b/x-pack/plugins/security_solution/server/search_strategy/index_fields/index.ts index 71b641237d6b0..da29cae0eebeb 100644 --- a/x-pack/plugins/security_solution/server/search_strategy/index_fields/index.ts +++ b/x-pack/plugins/security_solution/server/search_strategy/index_fields/index.ts @@ -12,14 +12,18 @@ import { IndexFieldsStrategyResponse, IndexField, IndexFieldsStrategyRequest, + BeatFields, } from '../../../common/search_strategy/index_fields'; -import { fieldsBeat } from '../../utils/beat_schema/fields'; - export const securitySolutionIndexFieldsProvider = (): ISearchStrategy< IndexFieldsStrategyRequest, IndexFieldsStrategyResponse > => { + // require the fields once we actually need them, rather than ahead of time, and pass + // them to createFieldItem to reduce the amount of work done as much as possible + // eslint-disable-next-line @typescript-eslint/no-var-requires + const beatFields: BeatFields = require('../../utils/beat_schema/fields').fieldsBeat; + return { search: async (context, request) => { const { elasticsearch } = context.core; @@ -41,6 +45,7 @@ export const securitySolutionIndexFieldsProvider = (): ISearchStrategy< if (!request.onlyCheckIfIndicesExist) { indexFields = await formatIndexFields( + beatFields, responsesIndexFields.filter((rif) => rif !== false) as FieldDescriptor[][], dedupeIndices ); @@ -116,6 +121,7 @@ const missingFields: FieldDescriptor[] = [ * @param indexesAliasIdx The index within the alias */ export const createFieldItem = ( + beatFields: BeatFields, indexesAlias: string[], index: FieldDescriptor, indexesAliasIdx: number @@ -126,7 +132,7 @@ export const createFieldItem = ( splitIndexName[splitIndexName.length - 1] === 'text' ? splitIndexName.slice(0, splitIndexName.length - 1).join('.') : index.name; - const beatIndex = fieldsBeat[indexName] ?? {}; + const beatIndex = beatFields[indexName] ?? {}; if (isEmpty(beatIndex.category)) { beatIndex.category = splitIndexName[0]; } @@ -151,6 +157,7 @@ export const createFieldItem = ( * @param indexesAlias The index aliases such as filebeat-* */ export const formatFirstFields = async ( + beatFields: BeatFields, responsesIndexFields: FieldDescriptor[][], indexesAlias: string[] ): Promise => { @@ -160,11 +167,11 @@ export const formatFirstFields = async ( responsesIndexFields.reduce( (accumulator: IndexField[], indexFields: FieldDescriptor[], indexesAliasIdx: number) => { missingFields.forEach((index) => { - const item = createFieldItem(indexesAlias, index, indexesAliasIdx); + const item = createFieldItem(beatFields, indexesAlias, index, indexesAliasIdx); accumulator.push(item); }); indexFields.forEach((index) => { - const item = createFieldItem(indexesAlias, index, indexesAliasIdx); + const item = createFieldItem(beatFields, indexesAlias, index, indexesAliasIdx); accumulator.push(item); }); return accumulator; @@ -224,10 +231,11 @@ export const formatSecondFields = async (fields: IndexField[]): Promise => { - const fields = await formatFirstFields(responsesIndexFields, indexesAlias); + const fields = await formatFirstFields(beatFields, responsesIndexFields, indexesAlias); const secondFields = await formatSecondFields(fields); return secondFields; }; diff --git a/x-pack/plugins/security_solution/server/search_strategy/timeline/factory/events/all/constants.ts b/x-pack/plugins/security_solution/server/search_strategy/timeline/factory/events/all/constants.ts index 924426e56361f..3f4af1fbcb362 100644 --- a/x-pack/plugins/security_solution/server/search_strategy/timeline/factory/events/all/constants.ts +++ b/x-pack/plugins/security_solution/server/search_strategy/timeline/factory/events/all/constants.ts @@ -19,15 +19,10 @@ export const TIMELINE_EVENTS_FIELDS = [ 'signal.rule.type', 'signal.original_event.kind', 'signal.original_event.module', - 'file.path', - 'file.Ext.code_signature.subject_name', - 'file.Ext.code_signature.trusted', - 'file.hash.sha256', - 'host.os.family', - 'event.code', 'signal.rule.version', 'signal.rule.severity', 'signal.rule.risk_score', + 'event.code', 'event.module', 'event.action', 'event.category', @@ -87,6 +82,15 @@ export const TIMELINE_EVENTS_FIELDS = [ 'file.size', 'file.mtime', 'file.ctime', + 'file.path', + // NOTE: 7.10+ file.Ext.code_signature populated + // as array of objects, prior to that populated as + // single object + 'file.Ext.code_signature', + 'file.Ext.code_signature.subject_name', + 'file.Ext.code_signature.trusted', + 'file.hash.sha256', + 'host.os.family', 'host.id', 'host.ip', 'rule.reference', diff --git a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json index bc89d9e0c812d..9acffa1f6c78e 100644 --- a/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json +++ b/x-pack/plugins/telemetry_collection_xpack/schema/xpack_plugins.json @@ -1,5 +1,128 @@ { "properties": { + "canvas": { + "properties": { + "workpads": { + "properties": { + "total": { + "type": "long" + } + } + }, + "pages": { + "properties": { + "total": { + "type": "long" + }, + "per_workpad": { + "properties": { + "avg": { + "type": "float" + }, + "min": { + "type": "long" + }, + "max": { + "type": "long" + } + } + } + } + }, + "elements": { + "properties": { + "total": { + "type": "long" + }, + "per_page": { + "properties": { + "avg": { + "type": "float" + }, + "min": { + "type": "long" + }, + "max": { + "type": "long" + } + } + } + } + }, + "functions": { + "properties": { + "total": { + "type": "long" + }, + "in_use": { + "type": "array", + "items": { + "type": "keyword" + } + }, + "per_element": { + "properties": { + "avg": { + "type": "float" + }, + "min": { + "type": "long" + }, + "max": { + "type": "long" + } + } + } + } + }, + "variables": { + "properties": { + "total": { + "type": "long" + }, + "per_workpad": { + "properties": { + "avg": { + "type": "float" + }, + "min": { + "type": "long" + }, + "max": { + "type": "long" + } + } + } + } + }, + "custom_elements": { + "properties": { + "count": { + "type": "long" + }, + "elements": { + "properties": { + "min": { + "type": "long" + }, + "max": { + "type": "long" + }, + "avg": { + "type": "float" + } + } + }, + "functions_in_use": { + "type": "array", + "items": { + "type": "keyword" + } + } + } + } + } + }, "cloud": { "properties": { "isCloudEnabled": { @@ -631,6 +754,703 @@ } } }, + "reporting": { + "properties": { + "csv": { + "properties": { + "available": { + "type": "boolean" + }, + "total": { + "type": "long" + } + } + }, + "PNG": { + "properties": { + "available": { + "type": "boolean" + }, + "total": { + "type": "long" + } + } + }, + "printable_pdf": { + "properties": { + "available": { + "type": "boolean" + }, + "total": { + "type": "long" + }, + "app": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "layout": { + "properties": { + "print": { + "type": "long" + }, + "preserve_layout": { + "type": "long" + } + } + } + } + }, + "_all": { + "type": "long" + }, + "status": { + "properties": { + "cancelled": { + "type": "long" + }, + "completed": { + "type": "long" + }, + "completed_with_warnings": { + "type": "long" + }, + "failed": { + "type": "long" + }, + "pending": { + "type": "long" + }, + "processing": { + "type": "long" + } + } + }, + "statuses": { + "properties": { + "cancelled": { + "properties": { + "csv": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "PNG": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "printable_pdf": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + } + } + }, + "completed": { + "properties": { + "csv": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "PNG": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "printable_pdf": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + } + } + }, + "completed_with_warnings": { + "properties": { + "csv": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "PNG": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "printable_pdf": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + } + } + }, + "failed": { + "properties": { + "csv": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "PNG": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "printable_pdf": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + } + } + }, + "pending": { + "properties": { + "csv": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "PNG": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "printable_pdf": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + } + } + }, + "processing": { + "properties": { + "csv": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "PNG": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "printable_pdf": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + } + } + } + } + }, + "available": { + "type": "boolean" + }, + "browser_type": { + "type": "keyword" + }, + "enabled": { + "type": "boolean" + }, + "last7Days": { + "properties": { + "csv": { + "properties": { + "available": { + "type": "boolean" + }, + "total": { + "type": "long" + } + } + }, + "PNG": { + "properties": { + "available": { + "type": "boolean" + }, + "total": { + "type": "long" + } + } + }, + "printable_pdf": { + "properties": { + "available": { + "type": "boolean" + }, + "total": { + "type": "long" + }, + "app": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "layout": { + "properties": { + "print": { + "type": "long" + }, + "preserve_layout": { + "type": "long" + } + } + } + } + }, + "_all": { + "type": "long" + }, + "status": { + "properties": { + "cancelled": { + "type": "long" + }, + "completed": { + "type": "long" + }, + "completed_with_warnings": { + "type": "long" + }, + "failed": { + "type": "long" + }, + "pending": { + "type": "long" + }, + "processing": { + "type": "long" + } + } + }, + "statuses": { + "properties": { + "cancelled": { + "properties": { + "csv": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "PNG": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "printable_pdf": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + } + } + }, + "completed": { + "properties": { + "csv": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "PNG": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "printable_pdf": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + } + } + }, + "completed_with_warnings": { + "properties": { + "csv": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "PNG": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "printable_pdf": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + } + } + }, + "failed": { + "properties": { + "csv": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "PNG": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "printable_pdf": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + } + } + }, + "pending": { + "properties": { + "csv": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "PNG": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "printable_pdf": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + } + } + }, + "processing": { + "properties": { + "csv": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "PNG": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + }, + "printable_pdf": { + "properties": { + "canvas workpad": { + "type": "long" + }, + "dashboard": { + "type": "long" + }, + "visualization": { + "type": "long" + } + } + } + } + } + } + } + } + } + } + }, "rollups": { "properties": { "index_patterns": { diff --git a/x-pack/plugins/transform/common/shared_imports.ts b/x-pack/plugins/transform/common/shared_imports.ts index 8681204755c36..889d23c5e213d 100644 --- a/x-pack/plugins/transform/common/shared_imports.ts +++ b/x-pack/plugins/transform/common/shared_imports.ts @@ -5,3 +5,4 @@ */ export type { SearchResponse7 } from '../../ml/common'; +export { composeValidators, patternValidator } from '../../ml/common'; diff --git a/x-pack/plugins/transform/kibana.json b/x-pack/plugins/transform/kibana.json index 2efe0bb25bc68..4ec12a27e1b15 100644 --- a/x-pack/plugins/transform/kibana.json +++ b/x-pack/plugins/transform/kibana.json @@ -16,11 +16,11 @@ ], "configPath": ["xpack", "transform"], "requiredBundles": [ - "ml", "esUiShared", "discover", "kibanaUtils", "kibanaReact", - "savedObjects" + "savedObjects", + "ml" ] } diff --git a/x-pack/plugins/transform/public/__mocks__/shared_imports.ts b/x-pack/plugins/transform/public/__mocks__/shared_imports.ts index 470c42d5de7fa..8b2fcdc716080 100644 --- a/x-pack/plugins/transform/public/__mocks__/shared_imports.ts +++ b/x-pack/plugins/transform/public/__mocks__/shared_imports.ts @@ -14,16 +14,4 @@ export const useRequest = jest.fn(() => ({ })); // just passing through the reimports -export { - getDataGridSchemaFromKibanaFieldType, - getFieldsFromKibanaIndexPattern, - multiColumnSortFactory, - useDataGrid, - useRenderCellValue, - DataGrid, - EsSorting, - RenderCellValue, - UseDataGridReturnType, - UseIndexDataReturnType, - INDEX_STATUS, -} from '../../../ml/public'; +export { getMlSharedImports } from '../../../ml/public'; diff --git a/x-pack/plugins/transform/public/app/__mocks__/app_dependencies.tsx b/x-pack/plugins/transform/public/app/__mocks__/app_dependencies.tsx index 75fefc99b5458..b4de5ff145a59 100644 --- a/x-pack/plugins/transform/public/app/__mocks__/app_dependencies.tsx +++ b/x-pack/plugins/transform/public/app/__mocks__/app_dependencies.tsx @@ -4,10 +4,14 @@ * you may not use this file except in compliance with the Elastic License. */ +import { useContext } from 'react'; + import { coreMock } from '../../../../../../src/core/public/mocks'; import { dataPluginMock } from '../../../../../../src/plugins/data/public/mocks'; import { Storage } from '../../../../../../src/plugins/kibana_utils/public'; +import { MlSharedContext } from './shared_context'; + const coreSetup = coreMock.createSetup(); const coreStart = coreMock.createStart(); const dataStart = dataPluginMock.createStartContract(); @@ -26,7 +30,8 @@ const appDependencies = { }; export const useAppDependencies = () => { - return appDependencies; + const ml = useContext(MlSharedContext); + return { ...appDependencies, ml }; }; export const useToastNotifications = () => { diff --git a/x-pack/plugins/transform/public/app/__mocks__/shared_context.ts b/x-pack/plugins/transform/public/app/__mocks__/shared_context.ts new file mode 100644 index 0000000000000..5afe0b26f3502 --- /dev/null +++ b/x-pack/plugins/transform/public/app/__mocks__/shared_context.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { createContext } from 'react'; + +import { GetMlSharedImportsReturnType } from '../../shared_imports'; + +// This code is a workaround to provide dependencies that are +// loaded dynamically during runtime. +export const MlSharedContext = createContext({} as GetMlSharedImportsReturnType); diff --git a/x-pack/plugins/transform/public/app/app_dependencies.tsx b/x-pack/plugins/transform/public/app/app_dependencies.tsx index 704875330fdd2..a23465495aceb 100644 --- a/x-pack/plugins/transform/public/app/app_dependencies.tsx +++ b/x-pack/plugins/transform/public/app/app_dependencies.tsx @@ -11,6 +11,8 @@ import { ScopedHistory } from 'kibana/public'; import { useKibana } from '../../../../../src/plugins/kibana_react/public'; import { Storage } from '../../../../../src/plugins/kibana_utils/public'; +import type { GetMlSharedImportsReturnType } from '../shared_imports'; + export interface AppDependencies { chrome: CoreStart['chrome']; data: DataPublicPluginStart; @@ -23,6 +25,7 @@ export interface AppDependencies { storage: Storage; overlays: CoreStart['overlays']; history: ScopedHistory; + ml: GetMlSharedImportsReturnType; } export const useAppDependencies = () => { diff --git a/x-pack/plugins/transform/public/app/common/aggregations.ts b/x-pack/plugins/transform/public/app/common/aggregations.ts index 507579d374353..b154e1a562114 100644 --- a/x-pack/plugins/transform/public/app/common/aggregations.ts +++ b/x-pack/plugins/transform/public/app/common/aggregations.ts @@ -4,7 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -import { composeValidators, patternValidator } from '../../../../ml/public'; +import { composeValidators, patternValidator } from '../../../common/shared_imports'; import { AggName } from '../../../common/types/aggregations'; diff --git a/x-pack/plugins/transform/public/app/hooks/use_delete_transform.tsx b/x-pack/plugins/transform/public/app/hooks/use_delete_transform.tsx index 1a97ba7806fef..3b70521427c67 100644 --- a/x-pack/plugins/transform/public/app/hooks/use_delete_transform.tsx +++ b/x-pack/plugins/transform/public/app/hooks/use_delete_transform.tsx @@ -12,7 +12,6 @@ import type { DeleteTransformsRequestSchema, } from '../../../common/api_schemas/delete_transforms'; import { isDeleteTransformsResponseSchema } from '../../../common/api_schemas/type_guards'; -import { extractErrorMessage } from '../../shared_imports'; import { getErrorMessage } from '../../../common/utils/errors'; import { useAppDependencies, useToastNotifications } from '../app_dependencies'; import { REFRESH_TRANSFORM_LIST_STATE, refreshTransformList$, TransformListRow } from '../common'; @@ -21,7 +20,11 @@ import { useApi } from './use_api'; import { indexService } from '../services/es_index_service'; export const useDeleteIndexAndTargetIndex = (items: TransformListRow[]) => { - const { http, savedObjects } = useAppDependencies(); + const { + http, + savedObjects, + ml: { extractErrorMessage }, + } = useAppDependencies(); const toastNotifications = useToastNotifications(); const [deleteDestIndex, setDeleteDestIndex] = useState(true); @@ -56,7 +59,7 @@ export const useDeleteIndexAndTargetIndex = (items: TransformListRow[]) => { ); } }, - [savedObjects.client, toastNotifications] + [savedObjects.client, toastNotifications, extractErrorMessage] ); const checkUserIndexPermission = useCallback(async () => { @@ -105,7 +108,10 @@ export const useDeleteIndexAndTargetIndex = (items: TransformListRow[]) => { type SuccessCountField = keyof Omit; export const useDeleteTransforms = () => { - const { overlays } = useAppDependencies(); + const { + overlays, + ml: { extractErrorMessage }, + } = useAppDependencies(); const toastNotifications = useToastNotifications(); const api = useApi(); diff --git a/x-pack/plugins/transform/public/app/hooks/use_index_data.test.tsx b/x-pack/plugins/transform/public/app/hooks/use_index_data.test.tsx index db9ac1e93633f..4d752ee65fbfd 100644 --- a/x-pack/plugins/transform/public/app/hooks/use_index_data.test.tsx +++ b/x-pack/plugins/transform/public/app/hooks/use_index_data.test.tsx @@ -4,14 +4,14 @@ * you may not use this file except in compliance with the Elastic License. */ -import React from 'react'; +import React, { FC } from 'react'; import { render, wait } from '@testing-library/react'; import { renderHook } from '@testing-library/react-hooks'; import { CoreSetup } from 'src/core/public'; -import { DataGrid, UseIndexDataReturnType, INDEX_STATUS } from '../../shared_imports'; +import { getMlSharedImports, UseIndexDataReturnType } from '../../shared_imports'; import { SimpleQuery } from '../common'; @@ -22,6 +22,9 @@ jest.mock('../../shared_imports'); jest.mock('../app_dependencies'); jest.mock('./use_api'); +import { useAppDependencies } from '../__mocks__/app_dependencies'; +import { MlSharedContext } from '../__mocks__/shared_context'; + const query: SimpleQuery = { query_string: { query: '*', @@ -31,22 +34,29 @@ const query: SimpleQuery = { describe('Transform: useIndexData()', () => { test('indexPattern set triggers loading', async (done) => { - const { result, waitForNextUpdate } = renderHook(() => - useIndexData( - ({ - id: 'the-id', - title: 'the-title', - fields: [], - } as unknown) as SearchItems['indexPattern'], - query - ) + const mlShared = await getMlSharedImports(); + const wrapper: FC = ({ children }) => ( + {children} + ); + + const { result, waitForNextUpdate } = renderHook( + () => + useIndexData( + ({ + id: 'the-id', + title: 'the-title', + fields: [], + } as unknown) as SearchItems['indexPattern'], + query + ), + { wrapper } ); const IndexObj: UseIndexDataReturnType = result.current; await waitForNextUpdate(); expect(IndexObj.errorMessage).toBe(''); - expect(IndexObj.status).toBe(INDEX_STATUS.LOADING); + expect(IndexObj.status).toBe(1); expect(IndexObj.tableItems).toEqual([]); done(); }); @@ -61,7 +71,12 @@ describe('Transform: with useIndexData()', () => { fields: [] as any[], } as SearchItems['indexPattern']; + const mlSharedImports = await getMlSharedImports(); + const Wrapper = () => { + const { + ml: { DataGrid }, + } = useAppDependencies(); const props = { ...useIndexData(indexPattern, { match_all: {} }), copyToClipboard: 'the-copy-to-clipboard-code', @@ -73,7 +88,11 @@ describe('Transform: with useIndexData()', () => { return ; }; - const { getByText } = render(); + const { getByText } = render( + + + + ); // Act // Assert diff --git a/x-pack/plugins/transform/public/app/hooks/use_index_data.ts b/x-pack/plugins/transform/public/app/hooks/use_index_data.ts index ce233d0cf7caa..6f24017b2274f 100644 --- a/x-pack/plugins/transform/public/app/hooks/use_index_data.ts +++ b/x-pack/plugins/transform/public/app/hooks/use_index_data.ts @@ -13,25 +13,16 @@ import { isFieldHistogramsResponseSchema, } from '../../../common/api_schemas/type_guards'; -import { - getFieldType, - getDataGridSchemaFromKibanaFieldType, - getFieldsFromKibanaIndexPattern, - showDataGridColumnChartErrorMessageToast, - useDataGrid, - useRenderCellValue, - EsSorting, - UseIndexDataReturnType, - INDEX_STATUS, -} from '../../shared_imports'; import { getErrorMessage } from '../../../common/utils/errors'; +import type { EsSorting, UseIndexDataReturnType } from '../../shared_imports'; + import { isDefaultQuery, matchAllQuery, PivotQuery } from '../common'; import { SearchItems } from './use_search_items'; import { useApi } from './use_api'; -import { useToastNotifications } from '../app_dependencies'; +import { useAppDependencies, useToastNotifications } from '../app_dependencies'; export const useIndexData = ( indexPattern: SearchItems['indexPattern'], @@ -39,6 +30,17 @@ export const useIndexData = ( ): UseIndexDataReturnType => { const api = useApi(); const toastNotifications = useToastNotifications(); + const { + ml: { + getFieldType, + getDataGridSchemaFromKibanaFieldType, + getFieldsFromKibanaIndexPattern, + showDataGridColumnChartErrorMessageToast, + useDataGrid, + useRenderCellValue, + INDEX_STATUS, + }, + } = useAppDependencies(); const indexPatternFields = getFieldsFromKibanaIndexPattern(indexPattern); diff --git a/x-pack/plugins/transform/public/app/hooks/use_pivot_data.ts b/x-pack/plugins/transform/public/app/hooks/use_pivot_data.ts index c51bf7d7e6741..536c1d886e758 100644 --- a/x-pack/plugins/transform/public/app/hooks/use_pivot_data.ts +++ b/x-pack/plugins/transform/public/app/hooks/use_pivot_data.ts @@ -18,16 +18,10 @@ import { isPostTransformsPreviewResponseSchema } from '../../../common/api_schem import { dictionaryToArray } from '../../../common/types/common'; import { getNestedProperty } from '../../../common/utils/object_utils'; -import { - formatHumanReadableDateTimeSeconds, - multiColumnSortFactory, - useDataGrid, - RenderCellValue, - UseIndexDataReturnType, - INDEX_STATUS, -} from '../../shared_imports'; +import { RenderCellValue, UseIndexDataReturnType } from '../../shared_imports'; import { getErrorMessage } from '../../../common/utils/errors'; +import { useAppDependencies } from '../app_dependencies'; import { getPreviewTransformRequestBody, PivotAggsConfigDict, @@ -36,10 +30,10 @@ import { PivotQuery, PivotAggsConfig, } from '../common'; +import { isPivotAggsWithExtendedForm } from '../common/pivot_aggs'; import { SearchItems } from './use_search_items'; import { useApi } from './use_api'; -import { isPivotAggsWithExtendedForm } from '../common/pivot_aggs'; /** * Checks if the aggregations collection is invalid. @@ -79,6 +73,9 @@ export const usePivotData = ( PreviewMappingsProperties >({}); const api = useApi(); + const { + ml: { formatHumanReadableDateTimeSeconds, multiColumnSortFactory, useDataGrid, INDEX_STATUS }, + } = useAppDependencies(); const aggsArr = useMemo(() => dictionaryToArray(aggs), [aggs]); const groupByArr = useMemo(() => dictionaryToArray(groupBy), [groupBy]); @@ -258,7 +255,13 @@ export const usePivotData = ( return cellValue; }; - }, [pageData, pagination.pageIndex, pagination.pageSize, previewMappingsProperties]); + }, [ + pageData, + pagination.pageIndex, + pagination.pageSize, + previewMappingsProperties, + formatHumanReadableDateTimeSeconds, + ]); return { ...dataGrid, diff --git a/x-pack/plugins/transform/public/app/mount_management_section.ts b/x-pack/plugins/transform/public/app/mount_management_section.ts index 0392ecbafa832..17db745652dbf 100644 --- a/x-pack/plugins/transform/public/app/mount_management_section.ts +++ b/x-pack/plugins/transform/public/app/mount_management_section.ts @@ -8,6 +8,7 @@ import { ManagementAppMountParams } from '../../../../../src/plugins/management/ import { Storage } from '../../../../../src/plugins/kibana_utils/public'; import { PluginsDependencies } from '../plugin'; +import { getMlSharedImports } from '../shared_imports'; import { AppDependencies } from './app_dependencies'; import { breadcrumbService } from './services/navigation'; @@ -47,6 +48,7 @@ export async function mountManagementSection( storage: localStorage, uiSettings, history, + ml: await getMlSharedImports(), }; const unmountAppCallback = renderApp(element, appDependencies); diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/advanced_pivot_editor/advanced_pivot_editor.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/advanced_pivot_editor/advanced_pivot_editor.tsx index afb0f49a8c816..983d36a20e87f 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/advanced_pivot_editor/advanced_pivot_editor.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/advanced_pivot_editor/advanced_pivot_editor.tsx @@ -4,9 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import isEqual from 'lodash/isEqual'; +import { isEqual } from 'lodash'; import React, { memo, FC } from 'react'; import { EuiCodeEditor, EuiFormRow } from '@elastic/eui'; diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/aggregation_list/popover_form.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/aggregation_list/popover_form.tsx index 3cfab74f42111..30e8c2b594db7 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/aggregation_list/popover_form.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/aggregation_list/popover_form.tsx @@ -18,9 +18,7 @@ import { EuiSelectOption, } from '@elastic/eui'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import cloneDeep from 'lodash/cloneDeep'; +import { cloneDeep } from 'lodash'; import { useUpdateEffect } from 'react-use'; import { AggName } from '../../../../../../common/types/aggregations'; import { dictionaryToArray } from '../../../../../../common/types/common'; diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/apply_transform_config_to_define_state.ts b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/apply_transform_config_to_define_state.ts index 0235cdcf8b5e4..1523a0d9a89f9 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/apply_transform_config_to_define_state.ts +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/apply_transform_config_to_define_state.ts @@ -4,9 +4,7 @@ * you may not use this file except in compliance with the Elastic License. */ -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import isEqual from 'lodash/isEqual'; +import { isEqual } from 'lodash'; import { Dictionary } from '../../../../../../../common/types/common'; import { PivotSupportedAggs } from '../../../../../../../common/types/pivot_aggs'; diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/filter_agg/components/filter_term_form.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/filter_agg/components/filter_term_form.tsx index 416d34481451e..d59f99192621c 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/filter_agg/components/filter_term_form.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/filter_agg/components/filter_term_form.tsx @@ -7,9 +7,7 @@ import React, { useCallback, useContext, useEffect, useState } from 'react'; import { EuiComboBox, EuiFormRow } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n/react'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import debounce from 'lodash/debounce'; +import { debounce } from 'lodash'; import { useUpdateEffect } from 'react-use'; import { i18n } from '@kbn/i18n'; import { isEsSearchResponse } from '../../../../../../../../../common/api_schemas/type_guards'; diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.test.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.test.tsx index d6526fd1db05e..cf1bfda6128ef 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.test.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.test.tsx @@ -30,6 +30,9 @@ import { StepDefineForm } from './step_define_form'; jest.mock('../../../../../shared_imports'); jest.mock('../../../../../app/app_dependencies'); +import { MlSharedContext } from '../../../../../app/__mocks__/shared_context'; +import { getMlSharedImports } from '../../../../../shared_imports'; + const createMockWebStorage = () => ({ clear: jest.fn(), getItem: jest.fn(), @@ -51,6 +54,8 @@ describe('Transform: ', () => { // Using the async/await wait()/done() pattern to avoid act() errors. test('Minimal initialization', async (done) => { // Arrange + const mlSharedImports = await getMlSharedImports(); + const searchItems = { indexPattern: { title: 'the-index-pattern-title', @@ -69,7 +74,9 @@ describe('Transform: ', () => { const { getByText } = render( - + + + ); diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.tsx index 10f473074b4d7..8f19db6fc827d 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_form.tsx @@ -25,8 +25,6 @@ import { import { PivotAggDict } from '../../../../../../common/types/pivot_aggs'; import { PivotGroupByDict } from '../../../../../../common/types/pivot_group_by'; -import { DataGrid } from '../../../../../shared_imports'; - import { getIndexDevConsoleStatement, getPivotPreviewDevConsoleStatement, @@ -42,7 +40,7 @@ import { import { useDocumentationLinks } from '../../../../hooks/use_documentation_links'; import { useIndexData } from '../../../../hooks/use_index_data'; import { usePivotData } from '../../../../hooks/use_pivot_data'; -import { useToastNotifications } from '../../../../app_dependencies'; +import { useAppDependencies, useToastNotifications } from '../../../../app_dependencies'; import { SearchItems } from '../../../../hooks/use_search_items'; import { AdvancedPivotEditor } from '../advanced_pivot_editor'; @@ -66,6 +64,9 @@ export const StepDefineForm: FC = React.memo((props) => { const { searchItems } = props; const { indexPattern } = searchItems; + const { + ml: { DataGrid }, + } = useAppDependencies(); const toastNotifications = useToastNotifications(); const stepDefineForm = useStepDefineForm(props); diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_summary.test.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_summary.test.tsx index f8a060e0007b8..7aed0568e6efc 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_summary.test.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_summary.test.tsx @@ -22,10 +22,15 @@ import { StepDefineSummary } from './step_define_summary'; jest.mock('../../../../../shared_imports'); jest.mock('../../../../../app/app_dependencies'); +import { MlSharedContext } from '../../../../../app/__mocks__/shared_context'; +import { getMlSharedImports } from '../../../../../shared_imports'; + describe('Transform: ', () => { // Using the async/await wait()/done() pattern to avoid act() errors. test('Minimal initialization', async (done) => { // Arrange + const mlSharedImports = await getMlSharedImports(); + const searchItems = { indexPattern: { title: 'the-index-pattern-title', @@ -57,7 +62,9 @@ describe('Transform: ', () => { }; const { getByText } = render( - + + + ); // Act diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_summary.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_summary.tsx index c4adb9f1f49de..24718ffaa937c 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_summary.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_summary.tsx @@ -12,9 +12,7 @@ import { EuiCodeBlock, EuiForm, EuiFormRow, EuiSpacer } from '@elastic/eui'; import { dictionaryToArray } from '../../../../../../common/types/common'; -import { DataGrid } from '../../../../../shared_imports'; - -import { useToastNotifications } from '../../../../app_dependencies'; +import { useAppDependencies, useToastNotifications } from '../../../../app_dependencies'; import { getPivotQuery, getPivotPreviewDevConsoleStatement, @@ -39,6 +37,9 @@ export const StepDefineSummary: FC = ({ formState: { searchString, searchQuery, groupByList, aggList }, searchItems, }) => { + const { + ml: { DataGrid }, + } = useAppDependencies(); const toastNotifications = useToastNotifications(); const pivotAggsArr = dictionaryToArray(aggList); const pivotGroupByArr = dictionaryToArray(groupByList); diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/edit_transform_flyout/use_edit_transform_flyout.ts b/x-pack/plugins/transform/public/app/sections/transform_management/components/edit_transform_flyout/use_edit_transform_flyout.ts index b0e1770c50d53..0b1df3d81aa85 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/edit_transform_flyout/use_edit_transform_flyout.ts +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/edit_transform_flyout/use_edit_transform_flyout.ts @@ -4,12 +4,8 @@ * you may not use this file except in compliance with the Elastic License. */ -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import isEqual from 'lodash/isEqual'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import merge from 'lodash/merge'; +import { isEqual } from 'lodash'; +import { merge } from 'lodash'; import { useReducer } from 'react'; diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row.test.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row.test.tsx index 846d8a8ccd200..6d04c08f8b238 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row.test.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row.test.tsx @@ -13,9 +13,12 @@ import { ExpandedRow } from './expanded_row'; import transformListRow from '../../../../common/__mocks__/transform_list_row.json'; import { within } from '@testing-library/dom'; -jest.mock('../../../../../shared_imports', () => ({ - formatHumanReadableDateTimeSeconds: jest.fn(), -})); +jest.mock('../../../../../shared_imports'); +jest.mock('../../../../../app/app_dependencies'); + +import { MlSharedContext } from '../../../../../app/__mocks__/shared_context'; +import { getMlSharedImports } from '../../../../../shared_imports'; + describe('Transform: Transform List ', () => { // Set timezone to US/Eastern for consistent test results. beforeEach(() => { @@ -27,9 +30,14 @@ describe('Transform: Transform List ', () => { }); test('Minimal initialization', async () => { + const mlShared = await getMlSharedImports(); const item: TransformListRow = transformListRow; - const { getByText, getByTestId } = render(); + const { getByText, getByTestId } = render( + + + + ); expect(getByText('Details')).toBeInTheDocument(); expect(getByText('Stats')).toBeInTheDocument(); diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row.tsx index 15efa46dfb891..4478edab0dba5 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row.tsx @@ -11,8 +11,8 @@ import { Optional } from '@kbn/utility-types'; import { i18n } from '@kbn/i18n'; import moment from 'moment-timezone'; -import { formatHumanReadableDateTimeSeconds } from '../../../../../shared_imports'; import { TransformListRow } from '../../../../common'; +import { useAppDependencies } from '../../../../app_dependencies'; import { ExpandedRowDetailsPane, SectionConfig } from './expanded_row_details_pane'; import { ExpandedRowJsonPane } from './expanded_row_json_pane'; import { ExpandedRowMessagesPane } from './expanded_row_messages_pane'; @@ -38,6 +38,9 @@ interface Props { type StateValues = Optional; export const ExpandedRow: FC = ({ item }) => { + const { + ml: { formatHumanReadableDateTimeSeconds }, + } = useAppDependencies(); const stateValues: StateValues = { ...item.stats }; delete stateValues.stats; delete stateValues.checkpointing; diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row_preview_pane.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row_preview_pane.tsx index 87d9a25dababd..84ac646dddc11 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row_preview_pane.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/expanded_row_preview_pane.tsx @@ -7,9 +7,8 @@ import React, { useMemo, FC } from 'react'; import { TransformPivotConfig } from '../../../../../../common/types/transform'; -import { DataGrid } from '../../../../../shared_imports'; -import { useToastNotifications } from '../../../../app_dependencies'; +import { useAppDependencies, useToastNotifications } from '../../../../app_dependencies'; import { getPivotQuery } from '../../../../common'; import { usePivotData } from '../../../../hooks/use_pivot_data'; import { SearchItems } from '../../../../hooks/use_search_items'; @@ -24,6 +23,9 @@ interface ExpandedRowPreviewPaneProps { } export const ExpandedRowPreviewPane: FC = ({ transformConfig }) => { + const { + ml: { DataGrid }, + } = useAppDependencies(); const toastNotifications = useToastNotifications(); const { aggList, groupByList, searchQuery } = useMemo( diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_table_settings.ts b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_table_settings.ts index b3aafbd187c91..9739fb6be6afb 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_table_settings.ts +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_table_settings.ts @@ -6,12 +6,8 @@ import { useState } from 'react'; import { Direction, EuiBasicTableProps, EuiTableSortingType } from '@elastic/eui'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import sortBy from 'lodash/sortBy'; -// Prefer importing entire lodash library, e.g. import { get } from "lodash" -// eslint-disable-next-line no-restricted-imports -import get from 'lodash/get'; +import { sortBy } from 'lodash'; +import { get } from 'lodash'; const PAGE_SIZE = 10; const PAGE_SIZE_OPTIONS = [10, 25, 50]; diff --git a/x-pack/plugins/transform/public/shared_imports.ts b/x-pack/plugins/transform/public/shared_imports.ts index b977c657b4a5a..4f29ab3708fc8 100644 --- a/x-pack/plugins/transform/public/shared_imports.ts +++ b/x-pack/plugins/transform/public/shared_imports.ts @@ -9,22 +9,11 @@ export { XJsonMode } from '@kbn/ace'; export { UseRequestConfig, useRequest } from '../../../../src/plugins/es_ui_shared/public'; export { - getFieldType, - extractErrorMessage, - formatHumanReadableDateTimeSeconds, - getDataGridSchemaFromKibanaFieldType, - getFieldsFromKibanaIndexPattern, - multiColumnSortFactory, - showDataGridColumnChartErrorMessageToast, - useDataGrid, - useRenderCellValue, - ChartData, - DataGrid, + getMlSharedImports, + GetMlSharedImportsReturnType, + UseIndexDataReturnType, EsSorting, RenderCellValue, - UseDataGridReturnType, - UseIndexDataReturnType, - INDEX_STATUS, } from '../../ml/public'; import { XJson } from '../../../../src/plugins/es_ui_shared/public'; diff --git a/x-pack/plugins/transform/server/routes/api/transforms_audit_messages.ts b/x-pack/plugins/transform/server/routes/api/transforms_audit_messages.ts index 20cb6ffb4978b..8c95ab5c786ed 100644 --- a/x-pack/plugins/transform/server/routes/api/transforms_audit_messages.ts +++ b/x-pack/plugins/transform/server/routes/api/transforms_audit_messages.ts @@ -80,7 +80,6 @@ export function registerTransformsAuditMessagesRoutes({ router, license }: Route const resp = await ctx.transform!.dataClient.callAsCurrentUser('search', { index: ML_DF_NOTIFICATION_INDEX_PATTERN, ignore_unavailable: true, - rest_total_hits_as_int: true, size: SIZE, body: { sort: [{ timestamp: { order: 'desc' } }, { transform_id: { order: 'asc' } }], @@ -89,7 +88,7 @@ export function registerTransformsAuditMessagesRoutes({ router, license }: Route }); let messages: TransformMessage[] = []; - if (resp.hits.total !== 0) { + if (resp.hits.total.value > 0) { messages = resp.hits.hits.map((hit: AuditMessage) => hit._source); messages.reverse(); } diff --git a/x-pack/plugins/transform/tsconfig.json b/x-pack/plugins/transform/tsconfig.json deleted file mode 100644 index 6f83eb665f830..0000000000000 --- a/x-pack/plugins/transform/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../../tsconfig.json", -} diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 7dd6d478f82b0..34ff32244035a 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -1200,7 +1200,6 @@ "data.search.aggs.metrics.uniqueCountTitle": "ユニークカウント", "data.search.aggs.otherBucket.labelForMissingValuesLabel": "欠測値のラベル", "data.search.aggs.otherBucket.labelForOtherBucketLabel": "他のバケットのラベル", - "data.search.aggs.paramTypes.field.invalidSavedFieldParameterErrorMessage": "保存した {fieldParameter} パラメーターが無効になりました。新しいフィールドを選択してください。", "data.search.aggs.paramTypes.field.requiredFieldParameterErrorMessage": "{fieldParameter} は必須パラメーターです", "data.search.aggs.percentageOfLabel": "{label} の割合", "data.search.aggs.string.customLabel": "カスタムラベル", @@ -8319,13 +8318,9 @@ "xpack.infra.logs.alertFlyout.alertName": "ログしきい値", "xpack.infra.logs.alertFlyout.criterionComparatorValueTitle": "比較:値", "xpack.infra.logs.alertFlyout.criterionFieldTitle": "フィールド", - "xpack.infra.logs.alertFlyout.documentCountPrefix": "タイミング", - "xpack.infra.logs.alertFlyout.documentCountSuffix": "{value, plural, one {件発生} other {件発生}}", - "xpack.infra.logs.alertFlyout.documentCountValue": "{value, plural, one {ログエントリ} other {ログエントリ}}", "xpack.infra.logs.alertFlyout.error.criterionComparatorRequired": "コンパレーターが必要です。", "xpack.infra.logs.alertFlyout.error.criterionFieldRequired": "フィールドが必要です。", "xpack.infra.logs.alertFlyout.error.criterionValueRequired": "値が必要です。", - "xpack.infra.logs.alertFlyout.error.documentCountRequired": "ドキュメントカウントが必要です。", "xpack.infra.logs.alertFlyout.error.timeSizeRequired": "ページサイズが必要です。", "xpack.infra.logs.alertFlyout.firstCriterionFieldPrefix": "With", "xpack.infra.logs.alertFlyout.removeCondition": "条件を削除", @@ -8986,7 +8981,6 @@ "xpack.ingestManager.agentEnrollment.downloadLink": "elastic.co/downloadsに移動", "xpack.ingestManager.agentEnrollment.enrollFleetTabLabel": "フリートに登録", "xpack.ingestManager.agentEnrollment.enrollStandaloneTabLabel": "スタンドアロンモード", - "xpack.ingestManager.agentEnrollment.fleetNotInitializedText": "エージェントを登録する前に、フリートを設定する必要があります。{link}", "xpack.ingestManager.agentEnrollment.flyoutTitle": "エージェントの追加", "xpack.ingestManager.agentEnrollment.managedDescription": "必要なエージェントの数に関係なく、Fleetでは、簡単に一元的に更新を管理し、エージェントにデプロイすることができます。次の手順に従い、Elasticエージェントをダウンロードし、Fleetに登録してください。", "xpack.ingestManager.agentEnrollment.standaloneDescription": "スタンドアロンモードで実行中のエージェントは、構成を変更したい場合には、手動で更新する必要があります。次の手順に従い、スタンドアロンモードでElasticエージェントをダウンロードし、セットアップしてください。", @@ -9068,7 +9062,6 @@ "xpack.ingestManager.alphaMessging.closeFlyoutLabel": "閉じる", "xpack.ingestManager.appNavigation.dataStreamsLinkText": "データセット", "xpack.ingestManager.appNavigation.epmLinkText": "統合", - "xpack.ingestManager.appNavigation.fleetLinkText": "フリート", "xpack.ingestManager.appNavigation.overviewLinkText": "概要", "xpack.ingestManager.appNavigation.sendFeedbackButton": "フィードバックを送信", "xpack.ingestManager.appNavigation.settingsButton": "設定", @@ -9078,9 +9071,6 @@ "xpack.ingestManager.breadcrumbs.allIntegrationsPageTitle": "すべて", "xpack.ingestManager.breadcrumbs.appTitle": "Ingest Manager", "xpack.ingestManager.breadcrumbs.datastreamsPageTitle": "データセット", - "xpack.ingestManager.breadcrumbs.fleetAgentsPageTitle": "エージェント", - "xpack.ingestManager.breadcrumbs.fleetEnrollmentTokensPageTitle": "登録トークン", - "xpack.ingestManager.breadcrumbs.fleetPageTitle": "フリート", "xpack.ingestManager.breadcrumbs.installedIntegrationsPageTitle": "インストール済み", "xpack.ingestManager.breadcrumbs.integrationsPageTitle": "統合", "xpack.ingestManager.breadcrumbs.overviewPageTitle": "概要", @@ -9149,8 +9139,6 @@ "xpack.ingestManager.epmList.noPackagesFoundPlaceholder": "パッケージが見つかりません", "xpack.ingestManager.epmList.searchPackagesPlaceholder": "統合を検索", "xpack.ingestManager.epmList.updatesAvailableFilterLinkText": "更新が可能です", - "xpack.ingestManager.fleet.pageSubtitle": "構成の更新を管理し、任意のサイズのエージェントのグループにデプロイします。", - "xpack.ingestManager.fleet.pageTitle": "フリート", "xpack.ingestManager.genericActionsMenuText": "開く", "xpack.ingestManager.homeIntegration.tutorialDirectory.dismissNoticeButtonText": "メッセージを消去", "xpack.ingestManager.homeIntegration.tutorialDirectory.ingestManagerAppButtonText": "Ingest Managerベータを試す", @@ -9229,7 +9217,6 @@ "xpack.ingestManager.overviewPageDataStreamsPanelTooltip": "エージェントが収集するデータはさまざまなデータセットに整理されます。", "xpack.ingestManager.overviewPageEnrollAgentButton": "エージェントの追加", "xpack.ingestManager.overviewPageFleetPanelAction": "エージェントを表示", - "xpack.ingestManager.overviewPageFleetPanelTitle": "フリート", "xpack.ingestManager.overviewPageFleetPanelTooltip": "Fleetを使用して、中央の場所からエージェントを登録し、構成を管理します。", "xpack.ingestManager.overviewPageIntegrationsPanelAction": "統合を表示", "xpack.ingestManager.overviewPageIntegrationsPanelTitle": "統合", @@ -10691,7 +10678,6 @@ "xpack.ml.dataframe.analytics.create.jobIdInvalidMaxLengthErrorMessage": "ジョブ ID は {maxLength, plural, one {# 文字} other {# 文字}} 以内でなければなりません。", "xpack.ml.dataframe.analytics.create.jobIdLabel": "ジョブID", "xpack.ml.dataframe.analytics.create.jobIdPlaceholder": "ジョブID", - "xpack.ml.dataframe.analytics.create.jobTypeLabel": "ジョブタイプ", "xpack.ml.dataframe.analytics.create.lambdaHelpText": "学習データセットの過剰適合を防止するための正則化パラメーター。非負の値でなければなりません。", "xpack.ml.dataframe.analytics.create.lambdaInputAriaLabel": "学習データセットの過剰適合を防止するための正則化パラメーター。", "xpack.ml.dataframe.analytics.create.lambdaLabel": "ラムダ", @@ -10724,7 +10710,6 @@ "xpack.ml.dataframe.analytics.create.outlierFractionHelpText": "異常値検出の前に異常であると想定されるデータセットの比率を設定します。", "xpack.ml.dataframe.analytics.create.outlierFractionInputAriaLabel": "異常値検出の前に異常であると想定されるデータセットの比率を設定します。", "xpack.ml.dataframe.analytics.create.outlierFractionLabel": "異常値割合", - "xpack.ml.dataframe.analytics.create.outlierRegressionHelpText": "回帰はデータセットにおける数値を予測します。", "xpack.ml.dataframe.analytics.create.predictionFieldNameHelpText": "結果で予測フィールドの名前を定義します。デフォルトは_predictionです。", "xpack.ml.dataframe.analytics.create.predictionFieldNameLabel": "予測フィールド名", "xpack.ml.dataframe.analytics.create.randomizeSeedInputAriaLabel": "学習で使用されるドキュメントを選択するために使用される乱数生成器のシード", @@ -12250,40 +12235,24 @@ "xpack.monitoring.alerts.callout.warningLabel": "警告アラート", "xpack.monitoring.alerts.clusterHealth.action.danger": "見つからないプライマリおよびレプリカシャードを割り当てます。", "xpack.monitoring.alerts.clusterHealth.action.warning": "見つからないレプリカシャードを割り当てます。", - "xpack.monitoring.alerts.clusterHealth.actionVariables.action": "このアラートに対する推奨されるアクション。", - "xpack.monitoring.alerts.clusterHealth.actionVariables.actionPlain": "このアラートに推奨されるアクション(Markdownなし)。", "xpack.monitoring.alerts.clusterHealth.actionVariables.clusterHealth": "クラスターの正常性。", - "xpack.monitoring.alerts.clusterHealth.actionVariables.clusterName": "ノードが属しているクラスター。", - "xpack.monitoring.alerts.clusterHealth.actionVariables.internalFullMessage": "詳細な内部メッセージはElasticで生成されました。", - "xpack.monitoring.alerts.clusterHealth.actionVariables.internalShortMessage": "内部メッセージ(省略あり)はElasticで生成されました。", - "xpack.monitoring.alerts.clusterHealth.actionVariables.state": "現在のアラートの状態。", - "xpack.monitoring.alerts.clusterHealth.firing": "実行中", "xpack.monitoring.alerts.clusterHealth.firing.internalFullMessage": "クラスター正常性アラートが{clusterName}に対して作動しています。現在の正常性は{health}です。{action}", "xpack.monitoring.alerts.clusterHealth.firing.internalShortMessage": "クラスター正常性アラートが{clusterName}に対して作動しています。現在の正常性は{health}です。{actionText}", "xpack.monitoring.alerts.clusterHealth.label": "クラスターの正常性", "xpack.monitoring.alerts.clusterHealth.redMessage": "見つからないプライマリおよびレプリカシャードを割り当て", - "xpack.monitoring.alerts.clusterHealth.resolved": "解決済み", "xpack.monitoring.alerts.clusterHealth.resolved.internalFullMessage": "クラスター正常性アラートが{clusterName}に対して作動しています。", "xpack.monitoring.alerts.clusterHealth.resolved.internalShortMessage": "クラスター正常性アラートが{clusterName}に対して作動しています。", "xpack.monitoring.alerts.clusterHealth.ui.firingMessage": "Elasticsearchクラスターの正常性は{health}です。", "xpack.monitoring.alerts.clusterHealth.ui.nextSteps.message1": "{message}. #start_linkView now#end_link", "xpack.monitoring.alerts.clusterHealth.yellowMessage": "見つからないレプリカシャードを割り当て", - "xpack.monitoring.alerts.cpuUsage.actionVariables.action": "このアラートに対する推奨されるアクション。", - "xpack.monitoring.alerts.cpuUsage.actionVariables.actionPlain": "このアラートに推奨されるアクション(Markdownなし)。", - "xpack.monitoring.alerts.cpuUsage.actionVariables.clusterName": "ノードが属しているクラスター。", "xpack.monitoring.alerts.cpuUsage.actionVariables.count": "高CPU使用率を報告しているノード数。", - "xpack.monitoring.alerts.cpuUsage.actionVariables.internalFullMessage": "詳細な内部メッセージはElasticで生成されました。", - "xpack.monitoring.alerts.cpuUsage.actionVariables.internalShortMessage": "内部メッセージ(省略あり)はElasticで生成されました。", "xpack.monitoring.alerts.cpuUsage.actionVariables.nodes": "高CPU使用率を報告しているノードのリスト。", - "xpack.monitoring.alerts.cpuUsage.actionVariables.state": "現在のアラートの状態。", - "xpack.monitoring.alerts.cpuUsage.firing": "実行中", "xpack.monitoring.alerts.cpuUsage.firing.internalFullMessage": "CPU使用状況アラートはCPU使用状況アラートは、クラスター{clusterName}の{count}個のノードで実行されています。{action}", "xpack.monitoring.alerts.cpuUsage.firing.internalShortMessage": "CPU使用状況アラートは、クラスター{clusterName}の{count}個のノードで実行されています。{shortActionText}", "xpack.monitoring.alerts.cpuUsage.fullAction": "ノードの表示", "xpack.monitoring.alerts.cpuUsage.label": "CPU使用状況", "xpack.monitoring.alerts.cpuUsage.paramDetails.duration.label": "平均を確認", "xpack.monitoring.alerts.cpuUsage.paramDetails.threshold.label": "CPUが終了したときに通知", - "xpack.monitoring.alerts.cpuUsage.resolved": "解決済み", "xpack.monitoring.alerts.cpuUsage.resolved.internalFullMessage": "CPU使用状況アラートは、クラスター{clusterName}の{count}個のノードで解決されました。", "xpack.monitoring.alerts.cpuUsage.resolved.internalShortMessage": "CPU使用状況アラートは、クラスター{clusterName}の{count}個のノードで解決されました。", "xpack.monitoring.alerts.cpuUsage.shortAction": "影響を受けるノード全体のCPUレベルを検証します。", @@ -12291,21 +12260,13 @@ "xpack.monitoring.alerts.cpuUsage.ui.nextSteps.hotThreads": "#start_linkCheck hot threads#end_link", "xpack.monitoring.alerts.cpuUsage.ui.nextSteps.runningTasks": "#start_linkCheck long running tasks#end_link", "xpack.monitoring.alerts.cpuUsage.ui.resolvedMessage": "ノード{nodeName}でのCPU使用状況は現在しきい値を下回っています。現在、#resolved時点で、{cpuUsage}%と報告されています。", - "xpack.monitoring.alerts.cpuUsage.validation.duration": "有効な期間が必要です。", - "xpack.monitoring.alerts.cpuUsage.validation.threshold": "有効な数字が必要です。", - "xpack.monitoring.alerts.elasticsearchVersionMismatch.actionVariables.action": "このアラートに対する推奨されるアクション。", - "xpack.monitoring.alerts.elasticsearchVersionMismatch.actionVariables.actionPlain": "このアラートに推奨されるアクション(Markdownなし)。", + "xpack.monitoring.alerts.validation.duration": "有効な期間が必要です。", + "xpack.monitoring.alerts.validation.threshold": "有効な数字が必要です。", "xpack.monitoring.alerts.elasticsearchVersionMismatch.actionVariables.clusterHealth": "このクラスターを実行しているElasticsearchのバージョン。", - "xpack.monitoring.alerts.elasticsearchVersionMismatch.actionVariables.clusterName": "ノードが属しているクラスター。", - "xpack.monitoring.alerts.elasticsearchVersionMismatch.actionVariables.internalFullMessage": "詳細な内部メッセージはElasticで生成されました。", - "xpack.monitoring.alerts.elasticsearchVersionMismatch.actionVariables.internalShortMessage": "内部メッセージ(省略あり)はElasticで生成されました。", - "xpack.monitoring.alerts.elasticsearchVersionMismatch.actionVariables.state": "現在のアラートの状態。", - "xpack.monitoring.alerts.elasticsearchVersionMismatch.firing": "実行中", "xpack.monitoring.alerts.elasticsearchVersionMismatch.firing.internalFullMessage": "{clusterName}に対してElasticsearchバージョン不一致アラートが実行されています。Elasticsearchは{versions}を実行しています。{action}", "xpack.monitoring.alerts.elasticsearchVersionMismatch.firing.internalShortMessage": "{clusterName}に対してElasticsearchバージョン不一致アラートが実行されています。{shortActionText}", "xpack.monitoring.alerts.elasticsearchVersionMismatch.fullAction": "ノードの表示", "xpack.monitoring.alerts.elasticsearchVersionMismatch.label": "Elasticsearchバージョン不一致", - "xpack.monitoring.alerts.elasticsearchVersionMismatch.resolved": "解決済み", "xpack.monitoring.alerts.elasticsearchVersionMismatch.resolved.internalFullMessage": "{clusterName}のElasticsearchバージョン不一致アラートが解決されました。", "xpack.monitoring.alerts.elasticsearchVersionMismatch.resolved.internalShortMessage": "{clusterName}のElasticsearchバージョン不一致アラートが解決されました。", "xpack.monitoring.alerts.elasticsearchVersionMismatch.shortAction": "すべてのノードのバージョンが同じことを確認してください。", @@ -12315,19 +12276,12 @@ "xpack.monitoring.alerts.flyoutExpressions.timeUnits.hourLabel": "{timeValue, plural, one {時間} other {時間}}", "xpack.monitoring.alerts.flyoutExpressions.timeUnits.minuteLabel": "{timeValue, plural, one {分} other {分}}", "xpack.monitoring.alerts.flyoutExpressions.timeUnits.secondLabel": "{timeValue, plural, one {秒} other {秒}}", - "xpack.monitoring.alerts.kibanaVersionMismatch.actionVariables.action": "このアラートに対する推奨されるアクション。", - "xpack.monitoring.alerts.kibanaVersionMismatch.actionVariables.actionPlain": "このアラートに推奨されるアクション(Markdownなし)。", "xpack.monitoring.alerts.kibanaVersionMismatch.actionVariables.clusterHealth": "このクラスターを実行しているKibanaのバージョン。", "xpack.monitoring.alerts.kibanaVersionMismatch.actionVariables.clusterName": "インスタンスが属しているクラスター。", - "xpack.monitoring.alerts.kibanaVersionMismatch.actionVariables.internalFullMessage": "詳細な内部メッセージはElasticで生成されました。", - "xpack.monitoring.alerts.kibanaVersionMismatch.actionVariables.internalShortMessage": "内部メッセージ(省略あり)はElasticで生成されました。", - "xpack.monitoring.alerts.kibanaVersionMismatch.actionVariables.state": "現在のアラートの状態。", - "xpack.monitoring.alerts.kibanaVersionMismatch.firing": "実行中", "xpack.monitoring.alerts.kibanaVersionMismatch.firing.internalFullMessage": "{clusterName}に対してKibanaバージョン不一致アラートが実行されています。Kibanaは{versions}を実行しています。{action}", "xpack.monitoring.alerts.kibanaVersionMismatch.firing.internalShortMessage": "{clusterName}に対してKibanaバージョン不一致アラートが実行されています。{shortActionText}", "xpack.monitoring.alerts.kibanaVersionMismatch.fullAction": "インスタンスを表示", "xpack.monitoring.alerts.kibanaVersionMismatch.label": "Kibanaバージョン不一致", - "xpack.monitoring.alerts.kibanaVersionMismatch.resolved": "解決済み", "xpack.monitoring.alerts.kibanaVersionMismatch.resolved.internalFullMessage": "{clusterName}のKibanaバージョン不一致アラートが解決されました。", "xpack.monitoring.alerts.kibanaVersionMismatch.resolved.internalShortMessage": "{clusterName}のKibanaバージョン不一致アラートが解決されました。", "xpack.monitoring.alerts.kibanaVersionMismatch.shortAction": "すべてのインスタンスのバージョンが同じことを確認してください。", @@ -12335,56 +12289,33 @@ "xpack.monitoring.alerts.kibanaVersionMismatch.ui.resolvedMessage": "このクラスターではすべてのKibanaのバージョンが同じです。", "xpack.monitoring.alerts.legacyAlert.expressionText": "構成するものがありません。", "xpack.monitoring.alerts.licenseExpiration.action": "ライセンスを更新してください。", - "xpack.monitoring.alerts.licenseExpiration.actionVariables.action": "このアラートに対する推奨されるアクション。", - "xpack.monitoring.alerts.licenseExpiration.actionVariables.actionPlain": "このアラートに推奨されるアクション(Markdownなし)。", "xpack.monitoring.alerts.licenseExpiration.actionVariables.clusterName": "ライセンスが属しているクラスター。", "xpack.monitoring.alerts.licenseExpiration.actionVariables.expiredDate": "ライセンスの有効期限。", - "xpack.monitoring.alerts.licenseExpiration.actionVariables.internalFullMessage": "詳細な内部メッセージはElasticで生成されました。", - "xpack.monitoring.alerts.licenseExpiration.actionVariables.internalShortMessage": "内部メッセージ(省略あり)はElasticで生成されました。", - "xpack.monitoring.alerts.licenseExpiration.actionVariables.state": "現在のアラートの状態。", - "xpack.monitoring.alerts.licenseExpiration.firing": "実行中", "xpack.monitoring.alerts.licenseExpiration.firing.internalFullMessage": "ライセンス有効期限アラートが{clusterName}に対して実行されています。ライセンスは{expiredDate}に期限切れになります。{action}", "xpack.monitoring.alerts.licenseExpiration.firing.internalShortMessage": "{clusterName}に対してライセンス有効期限アラートが実行されています。ライセンスは{expiredDate}に期限切れになります。{actionText}", "xpack.monitoring.alerts.licenseExpiration.label": "ライセンス期限", - "xpack.monitoring.alerts.licenseExpiration.resolved": "解決済み", "xpack.monitoring.alerts.licenseExpiration.resolved.internalFullMessage": "{clusterName}のライセンス有効期限アラートが解決されました。", "xpack.monitoring.alerts.licenseExpiration.resolved.internalShortMessage": "{clusterName}のライセンス有効期限アラートが解決されました。", "xpack.monitoring.alerts.licenseExpiration.ui.firingMessage": "このクラスターのライセンスは#absoluteの#relativeに期限切れになります。#start_linkライセンスを更新してください。#end_link", "xpack.monitoring.alerts.licenseExpiration.ui.resolvedMessage": "このクラスターのライセンスは有効です。", - "xpack.monitoring.alerts.logstashVersionMismatch.actionVariables.action": "このアラートに対する推奨されるアクション。", - "xpack.monitoring.alerts.logstashVersionMismatch.actionVariables.actionPlain": "このアラートに推奨されるアクション(Markdownなし)。", "xpack.monitoring.alerts.logstashVersionMismatch.actionVariables.clusterHealth": "このクラスターを実行しているLogstashのバージョン。", - "xpack.monitoring.alerts.logstashVersionMismatch.actionVariables.clusterName": "ノードが属しているクラスター。", - "xpack.monitoring.alerts.logstashVersionMismatch.actionVariables.internalFullMessage": "詳細な内部メッセージはElasticで生成されました。", - "xpack.monitoring.alerts.logstashVersionMismatch.actionVariables.internalShortMessage": "内部メッセージ(省略あり)はElasticで生成されました。", - "xpack.monitoring.alerts.logstashVersionMismatch.actionVariables.state": "現在のアラートの状態。", - "xpack.monitoring.alerts.logstashVersionMismatch.firing": "実行中", "xpack.monitoring.alerts.logstashVersionMismatch.firing.internalFullMessage": "{clusterName}に対してLogstashバージョン不一致アラートが実行されています。Logstashは{versions}を実行しています。{action}", "xpack.monitoring.alerts.logstashVersionMismatch.firing.internalShortMessage": "{clusterName}に対してLogstashバージョン不一致アラートが実行されています。{shortActionText}", "xpack.monitoring.alerts.logstashVersionMismatch.fullAction": "ノードの表示", "xpack.monitoring.alerts.logstashVersionMismatch.label": "Logstashバージョン不一致", - "xpack.monitoring.alerts.logstashVersionMismatch.resolved": "解決済み", "xpack.monitoring.alerts.logstashVersionMismatch.resolved.internalFullMessage": "{clusterName}のLogstashバージョン不一致アラートが解決されました。", "xpack.monitoring.alerts.logstashVersionMismatch.resolved.internalShortMessage": "{clusterName}のLogstashバージョン不一致アラートが解決されました。", "xpack.monitoring.alerts.logstashVersionMismatch.shortAction": "すべてのノードのバージョンが同じことを確認してください。", "xpack.monitoring.alerts.logstashVersionMismatch.ui.firingMessage": "このクラスターでは、複数のバージョンのLogstash({versions})が実行されています。", "xpack.monitoring.alerts.logstashVersionMismatch.ui.resolvedMessage": "このクラスターではすべてのLogstashのバージョンが同じです。", "xpack.monitoring.alerts.migrate.manageAction.requiredFieldError": "{field} は必須フィールドです。", - "xpack.monitoring.alerts.nodesChanged.actionVariables.action": "このアラートに対する推奨されるアクション。", - "xpack.monitoring.alerts.nodesChanged.actionVariables.actionPlain": "このアラートに推奨されるアクション(Markdownなし)。", "xpack.monitoring.alerts.nodesChanged.actionVariables.added": "ノードのリストがクラスターに追加されました。", - "xpack.monitoring.alerts.nodesChanged.actionVariables.clusterName": "ノードが属しているクラスター。", - "xpack.monitoring.alerts.nodesChanged.actionVariables.internalFullMessage": "詳細な内部メッセージはElasticで生成されました。", - "xpack.monitoring.alerts.nodesChanged.actionVariables.internalShortMessage": "内部メッセージ(省略あり)はElasticで生成されました。", "xpack.monitoring.alerts.nodesChanged.actionVariables.removed": "ノードのリストがクラスターから削除されました。", "xpack.monitoring.alerts.nodesChanged.actionVariables.restarted": "ノードのリストがクラスターで再起動しました。", - "xpack.monitoring.alerts.nodesChanged.actionVariables.state": "現在のアラートの状態。", - "xpack.monitoring.alerts.nodesChanged.firing": "実行中", "xpack.monitoring.alerts.nodesChanged.firing.internalFullMessage": "{clusterName}に対してノード変更アラートが実行されています。次のElasticsearchノードが追加されました:{added}、削除:{removed}、再起動:{restarted}。{action}", "xpack.monitoring.alerts.nodesChanged.firing.internalShortMessage": "{clusterName}に対してノード変更アラートが実行されています。{shortActionText}", "xpack.monitoring.alerts.nodesChanged.fullAction": "ノードの表示", "xpack.monitoring.alerts.nodesChanged.label": "ノードが変更されました", - "xpack.monitoring.alerts.nodesChanged.resolved": "解決済み", "xpack.monitoring.alerts.nodesChanged.resolved.internalFullMessage": "{clusterName}のElasticsearchノード変更アラートが解決されました。", "xpack.monitoring.alerts.nodesChanged.resolved.internalShortMessage": "{clusterName}のElasticsearchノード変更アラートが解決されました。", "xpack.monitoring.alerts.nodesChanged.shortAction": "ノードを追加、削除、または再起動したことを確認してください。", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 9ba587e718a08..db59493002987 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -1201,7 +1201,6 @@ "data.search.aggs.metrics.uniqueCountTitle": "唯一计数", "data.search.aggs.otherBucket.labelForMissingValuesLabel": "缺失值的标签", "data.search.aggs.otherBucket.labelForOtherBucketLabel": "其他存储桶的标签", - "data.search.aggs.paramTypes.field.invalidSavedFieldParameterErrorMessage": "保存的 {fieldParameter} 参数现在无效。请选择新字段。", "data.search.aggs.paramTypes.field.requiredFieldParameterErrorMessage": "{fieldParameter} 是必需字段", "data.search.aggs.percentageOfLabel": "{label} 的百分比", "data.search.aggs.string.customLabel": "定制标签", @@ -8323,13 +8322,9 @@ "xpack.infra.logs.alertFlyout.alertName": "日志阈值", "xpack.infra.logs.alertFlyout.criterionComparatorValueTitle": "对比:值", "xpack.infra.logs.alertFlyout.criterionFieldTitle": "字段", - "xpack.infra.logs.alertFlyout.documentCountPrefix": "当", - "xpack.infra.logs.alertFlyout.documentCountSuffix": "{value, plural, one {发生} other {发生}}", - "xpack.infra.logs.alertFlyout.documentCountValue": "{value, plural, one {日志条目} other {log 日志条目}}", "xpack.infra.logs.alertFlyout.error.criterionComparatorRequired": "比较运算符必填。", "xpack.infra.logs.alertFlyout.error.criterionFieldRequired": "“字段”必填。", "xpack.infra.logs.alertFlyout.error.criterionValueRequired": "“值”必填。", - "xpack.infra.logs.alertFlyout.error.documentCountRequired": "“文档计数”必填。", "xpack.infra.logs.alertFlyout.error.timeSizeRequired": "“时间大小”必填。", "xpack.infra.logs.alertFlyout.firstCriterionFieldPrefix": "具有", "xpack.infra.logs.alertFlyout.removeCondition": "删除条件", @@ -8992,7 +8987,6 @@ "xpack.ingestManager.agentEnrollment.downloadLink": "前往 elastic.co/downloads", "xpack.ingestManager.agentEnrollment.enrollFleetTabLabel": "注册到 Fleet", "xpack.ingestManager.agentEnrollment.enrollStandaloneTabLabel": "独立模式", - "xpack.ingestManager.agentEnrollment.fleetNotInitializedText": "注册代理前需要设置 Fleet。{link}", "xpack.ingestManager.agentEnrollment.flyoutTitle": "添加代理", "xpack.ingestManager.agentEnrollment.managedDescription": "无论是需要一个代理还是需要数以千计的代理,Fleet 允许您轻松地集中管理并部署代理的更新。按照下面的说明下载 Elastic 代理并将代理注册到 Fleet。", "xpack.ingestManager.agentEnrollment.standaloneDescription": "如果希望对以独立模式运行的代理进行配置更改,则需要手动更新。按照下面的说明下载并设置独立模式的 Elastic 代理。", @@ -9074,7 +9068,6 @@ "xpack.ingestManager.alphaMessging.closeFlyoutLabel": "关闭", "xpack.ingestManager.appNavigation.dataStreamsLinkText": "数据集", "xpack.ingestManager.appNavigation.epmLinkText": "集成", - "xpack.ingestManager.appNavigation.fleetLinkText": "Fleet", "xpack.ingestManager.appNavigation.overviewLinkText": "概览", "xpack.ingestManager.appNavigation.sendFeedbackButton": "发送反馈", "xpack.ingestManager.appNavigation.settingsButton": "设置", @@ -9084,9 +9077,6 @@ "xpack.ingestManager.breadcrumbs.allIntegrationsPageTitle": "全部", "xpack.ingestManager.breadcrumbs.appTitle": "采集管理器", "xpack.ingestManager.breadcrumbs.datastreamsPageTitle": "数据集", - "xpack.ingestManager.breadcrumbs.fleetAgentsPageTitle": "代理", - "xpack.ingestManager.breadcrumbs.fleetEnrollmentTokensPageTitle": "注册令牌", - "xpack.ingestManager.breadcrumbs.fleetPageTitle": "Fleet", "xpack.ingestManager.breadcrumbs.installedIntegrationsPageTitle": "已安装", "xpack.ingestManager.breadcrumbs.integrationsPageTitle": "集成", "xpack.ingestManager.breadcrumbs.overviewPageTitle": "概览", @@ -9155,8 +9145,6 @@ "xpack.ingestManager.epmList.noPackagesFoundPlaceholder": "未找到任何软件包", "xpack.ingestManager.epmList.searchPackagesPlaceholder": "搜索集成", "xpack.ingestManager.epmList.updatesAvailableFilterLinkText": "有可用更新", - "xpack.ingestManager.fleet.pageSubtitle": "管理配置更新并将其部署到一组任意大小的代理。", - "xpack.ingestManager.fleet.pageTitle": "Fleet", "xpack.ingestManager.genericActionsMenuText": "打开", "xpack.ingestManager.homeIntegration.tutorialDirectory.dismissNoticeButtonText": "关闭消息", "xpack.ingestManager.homeIntegration.tutorialDirectory.ingestManagerAppButtonText": "试用采集管理器公测版", @@ -9235,7 +9223,6 @@ "xpack.ingestManager.overviewPageDataStreamsPanelTooltip": "您的代理收集的数据组织到各种数据集中。", "xpack.ingestManager.overviewPageEnrollAgentButton": "添加代理", "xpack.ingestManager.overviewPageFleetPanelAction": "查看代理", - "xpack.ingestManager.overviewPageFleetPanelTitle": "Fleet", "xpack.ingestManager.overviewPageFleetPanelTooltip": "使用 Fleet 注册代理并从集中位置管理其配置。", "xpack.ingestManager.overviewPageIntegrationsPanelAction": "查看集成", "xpack.ingestManager.overviewPageIntegrationsPanelTitle": "集成", @@ -10697,7 +10684,6 @@ "xpack.ml.dataframe.analytics.create.jobIdInvalidMaxLengthErrorMessage": "作业 ID 的长度不得超过 {maxLength, plural, one {# 个字符} other {# 个字符}}。", "xpack.ml.dataframe.analytics.create.jobIdLabel": "作业 ID", "xpack.ml.dataframe.analytics.create.jobIdPlaceholder": "作业 ID", - "xpack.ml.dataframe.analytics.create.jobTypeLabel": "作业类型", "xpack.ml.dataframe.analytics.create.lambdaHelpText": "在训练数据集上防止过度拟合的正则化参数。必须为非负值。", "xpack.ml.dataframe.analytics.create.lambdaInputAriaLabel": "在训练数据集上防止过度拟合的正则化参数。", "xpack.ml.dataframe.analytics.create.lambdaLabel": "Lambda", @@ -10730,7 +10716,6 @@ "xpack.ml.dataframe.analytics.create.outlierFractionHelpText": "设置在离群值检测之前被假设为离群的数据集比例。", "xpack.ml.dataframe.analytics.create.outlierFractionInputAriaLabel": "设置在离群值检测之前被假设为离群的数据集比例。", "xpack.ml.dataframe.analytics.create.outlierFractionLabel": "离群值比例", - "xpack.ml.dataframe.analytics.create.outlierRegressionHelpText": "回归用于预测数据集中的数值。", "xpack.ml.dataframe.analytics.create.predictionFieldNameHelpText": "定义结果中预测字段的名称。默认为 _prediction。", "xpack.ml.dataframe.analytics.create.predictionFieldNameLabel": "预测字段名称", "xpack.ml.dataframe.analytics.create.randomizeSeedInputAriaLabel": "用于选取哪个文档用于训练的随机生成器种子", @@ -12258,41 +12243,25 @@ "xpack.monitoring.alerts.callout.warningLabel": "警告告警", "xpack.monitoring.alerts.clusterHealth.action.danger": "分配缺失的主分片和副本分片。", "xpack.monitoring.alerts.clusterHealth.action.warning": "分配缺失的副本分片。", - "xpack.monitoring.alerts.clusterHealth.actionVariables.action": "此告警的建议操作。", - "xpack.monitoring.alerts.clusterHealth.actionVariables.actionPlain": "此告警的建议操作,无任何 Markdown。", "xpack.monitoring.alerts.clusterHealth.actionVariables.clusterHealth": "集群的运行状况。", - "xpack.monitoring.alerts.clusterHealth.actionVariables.clusterName": "节点所属的集群。", - "xpack.monitoring.alerts.clusterHealth.actionVariables.internalFullMessage": "Elastic 生成的完整内部消息。", - "xpack.monitoring.alerts.clusterHealth.actionVariables.internalShortMessage": "Elastic 生成的简短内部消息。", - "xpack.monitoring.alerts.clusterHealth.actionVariables.state": "告警的当前状态。", - "xpack.monitoring.alerts.clusterHealth.firing": "触发", "xpack.monitoring.alerts.clusterHealth.firing.internalFullMessage": "为 {clusterName} 触发了集群运行状况告警。当前运行状况为 {health}。{action}", "xpack.monitoring.alerts.clusterHealth.firing.internalShortMessage": "为 {clusterName} 触发了集群运行状况告警。当前运行状况为 {health}。{actionText}", "xpack.monitoring.alerts.clusterHealth.label": "集群运行状况", "xpack.monitoring.alerts.clusterHealth.redMessage": "分配缺失的主分片和副本分片", - "xpack.monitoring.alerts.clusterHealth.resolved": "已解决", "xpack.monitoring.alerts.clusterHealth.resolved.internalFullMessage": "已为 {clusterName} 解决集群运行状况告警。", "xpack.monitoring.alerts.clusterHealth.resolved.internalShortMessage": "已为 {clusterName} 解决集群运行状况告警。", "xpack.monitoring.alerts.clusterHealth.ui.firingMessage": "Elasticsearch 集群运行状况为 {health}。", "xpack.monitoring.alerts.clusterHealth.ui.nextSteps.message1": "{message}。#start_linkView now#end_link", "xpack.monitoring.alerts.clusterHealth.ui.resolvedMessage": "Elasticsearch 集群运行状况为绿色。", "xpack.monitoring.alerts.clusterHealth.yellowMessage": "分配缺失的副本分片", - "xpack.monitoring.alerts.cpuUsage.actionVariables.action": "此告警的建议操作。", - "xpack.monitoring.alerts.cpuUsage.actionVariables.actionPlain": "此告警的建议操作,无任何 Markdown。", - "xpack.monitoring.alerts.cpuUsage.actionVariables.clusterName": "节点所属的集群。", "xpack.monitoring.alerts.cpuUsage.actionVariables.count": "报告高 CPU 使用率的节点数目。", - "xpack.monitoring.alerts.cpuUsage.actionVariables.internalFullMessage": "Elastic 生成的完整内部消息。", - "xpack.monitoring.alerts.cpuUsage.actionVariables.internalShortMessage": "Elastic 生成的简短内部消息。", "xpack.monitoring.alerts.cpuUsage.actionVariables.nodes": "报告高 CPU 使用率的节点列表。", - "xpack.monitoring.alerts.cpuUsage.actionVariables.state": "告警的当前状态。", - "xpack.monitoring.alerts.cpuUsage.firing": "触发", "xpack.monitoring.alerts.cpuUsage.firing.internalFullMessage": "为集群 {clusterName} 中 {count} 个节点触发了 CPU 使用率告警。{action}", "xpack.monitoring.alerts.cpuUsage.firing.internalShortMessage": "为集群 {clusterName} 中 {count} 个节点触发了 CPU 使用率告警。{shortActionText}", "xpack.monitoring.alerts.cpuUsage.fullAction": "查看节点", "xpack.monitoring.alerts.cpuUsage.label": "CPU 使用率", "xpack.monitoring.alerts.cpuUsage.paramDetails.duration.label": "查看以下范围的平均值:", "xpack.monitoring.alerts.cpuUsage.paramDetails.threshold.label": "CPU 超过以下值时通知:", - "xpack.monitoring.alerts.cpuUsage.resolved": "已解决", "xpack.monitoring.alerts.cpuUsage.resolved.internalFullMessage": "已为集群 {clusterName} 中的 {count} 个节点解决 CPU 使用率告警。", "xpack.monitoring.alerts.cpuUsage.resolved.internalShortMessage": "已为集群 {clusterName} 中的 {count} 个节点解决 CPU 使用率告警。", "xpack.monitoring.alerts.cpuUsage.shortAction": "跨受影响节点验证 CPU 级别。", @@ -12300,21 +12269,13 @@ "xpack.monitoring.alerts.cpuUsage.ui.nextSteps.hotThreads": "#start_link检查热线程#end_link", "xpack.monitoring.alerts.cpuUsage.ui.nextSteps.runningTasks": "#start_link检查长时间运行的任务#end_link", "xpack.monitoring.alerts.cpuUsage.ui.resolvedMessage": "节点 {nodeName} 上的 cpu 使用率现在低于阈值,当前报告截止到 #resolved 为 {cpuUsage}%", - "xpack.monitoring.alerts.cpuUsage.validation.duration": "必须指定有效的持续时间。", - "xpack.monitoring.alerts.cpuUsage.validation.threshold": "必须指定有效数字。", - "xpack.monitoring.alerts.elasticsearchVersionMismatch.actionVariables.action": "此告警的建议操作。", - "xpack.monitoring.alerts.elasticsearchVersionMismatch.actionVariables.actionPlain": "此告警的建议操作,无任何 Markdown。", + "xpack.monitoring.alerts.validation.duration": "必须指定有效的持续时间。", + "xpack.monitoring.alerts.validation.threshold": "必须指定有效数字。", "xpack.monitoring.alerts.elasticsearchVersionMismatch.actionVariables.clusterHealth": "在此集群中运行的 Elasticsearch 版本。", - "xpack.monitoring.alerts.elasticsearchVersionMismatch.actionVariables.clusterName": "节点所属的集群。", - "xpack.monitoring.alerts.elasticsearchVersionMismatch.actionVariables.internalFullMessage": "Elastic 生成的完整内部消息。", - "xpack.monitoring.alerts.elasticsearchVersionMismatch.actionVariables.internalShortMessage": "Elastic 生成的简短内部消息。", - "xpack.monitoring.alerts.elasticsearchVersionMismatch.actionVariables.state": "告警的当前状态。", - "xpack.monitoring.alerts.elasticsearchVersionMismatch.firing": "触发", "xpack.monitoring.alerts.elasticsearchVersionMismatch.firing.internalFullMessage": "为 {clusterName} 触发了 Elasticsearch 版本不匹配告警。Elasticsearch 正在运行 {versions}。{action}", "xpack.monitoring.alerts.elasticsearchVersionMismatch.firing.internalShortMessage": "为 {clusterName} 触发了 Elasticsearch 版本不匹配告警。{shortActionText}", "xpack.monitoring.alerts.elasticsearchVersionMismatch.fullAction": "查看节点", "xpack.monitoring.alerts.elasticsearchVersionMismatch.label": "Elasticsearch 版本不匹配", - "xpack.monitoring.alerts.elasticsearchVersionMismatch.resolved": "已解决", "xpack.monitoring.alerts.elasticsearchVersionMismatch.resolved.internalFullMessage": "为 {clusterName} 解决了 Elasticsearch 版本不匹配告警。", "xpack.monitoring.alerts.elasticsearchVersionMismatch.resolved.internalShortMessage": "为 {clusterName} 解决了 Elasticsearch 版本不匹配告警。", "xpack.monitoring.alerts.elasticsearchVersionMismatch.shortAction": "确认所有节点具有相同的版本。", @@ -12324,19 +12285,12 @@ "xpack.monitoring.alerts.flyoutExpressions.timeUnits.hourLabel": "{timeValue, plural, one {小时} other {小时}}", "xpack.monitoring.alerts.flyoutExpressions.timeUnits.minuteLabel": "{timeValue, plural, one {分钟} other {分钟}}", "xpack.monitoring.alerts.flyoutExpressions.timeUnits.secondLabel": "{timeValue, plural, one {秒} other {秒}}", - "xpack.monitoring.alerts.kibanaVersionMismatch.actionVariables.action": "此告警的建议操作。", - "xpack.monitoring.alerts.kibanaVersionMismatch.actionVariables.actionPlain": "此告警的建议操作,无任何 Markdown。", "xpack.monitoring.alerts.kibanaVersionMismatch.actionVariables.clusterHealth": "此集群中运行的 Kibana 版本。", "xpack.monitoring.alerts.kibanaVersionMismatch.actionVariables.clusterName": "实例所属的集群。", - "xpack.monitoring.alerts.kibanaVersionMismatch.actionVariables.internalFullMessage": "Elastic 生成的完整内部消息。", - "xpack.monitoring.alerts.kibanaVersionMismatch.actionVariables.internalShortMessage": "Elastic 生成的简短内部消息。", - "xpack.monitoring.alerts.kibanaVersionMismatch.actionVariables.state": "告警的当前状态。", - "xpack.monitoring.alerts.kibanaVersionMismatch.firing": "触发", "xpack.monitoring.alerts.kibanaVersionMismatch.firing.internalFullMessage": "为 {clusterName} 触发了 Kibana 版本不匹配告警。Kibana 正在运行 {versions}。{action}", "xpack.monitoring.alerts.kibanaVersionMismatch.firing.internalShortMessage": "为 {clusterName} 触发了 Kibana 版本不匹配告警。{shortActionText}", "xpack.monitoring.alerts.kibanaVersionMismatch.fullAction": "查看实例", "xpack.monitoring.alerts.kibanaVersionMismatch.label": "Kibana 版本不匹配", - "xpack.monitoring.alerts.kibanaVersionMismatch.resolved": "已解决", "xpack.monitoring.alerts.kibanaVersionMismatch.resolved.internalFullMessage": "为 {clusterName} 解决了 Kibana 版本不匹配告警。", "xpack.monitoring.alerts.kibanaVersionMismatch.resolved.internalShortMessage": "为 {clusterName} 解决了 Kibana 版本不匹配告警。", "xpack.monitoring.alerts.kibanaVersionMismatch.shortAction": "确认所有实例具有相同的版本。", @@ -12344,56 +12298,33 @@ "xpack.monitoring.alerts.kibanaVersionMismatch.ui.resolvedMessage": "在此集群中所有 Kibana 版本都相同。", "xpack.monitoring.alerts.legacyAlert.expressionText": "没有可配置的内容。", "xpack.monitoring.alerts.licenseExpiration.action": "请更新您的许可证。", - "xpack.monitoring.alerts.licenseExpiration.actionVariables.action": "此告警的建议操作。", - "xpack.monitoring.alerts.licenseExpiration.actionVariables.actionPlain": "此告警的建议操作,无任何 Markdown。", "xpack.monitoring.alerts.licenseExpiration.actionVariables.clusterName": "许可证所属的集群。", "xpack.monitoring.alerts.licenseExpiration.actionVariables.expiredDate": "许可证过期日期。", - "xpack.monitoring.alerts.licenseExpiration.actionVariables.internalFullMessage": "Elastic 生成的完整内部消息。", - "xpack.monitoring.alerts.licenseExpiration.actionVariables.internalShortMessage": "Elastic 生成的简短内部消息。", - "xpack.monitoring.alerts.licenseExpiration.actionVariables.state": "告警的当前状态。", - "xpack.monitoring.alerts.licenseExpiration.firing": "触发", "xpack.monitoring.alerts.licenseExpiration.firing.internalFullMessage": "为 {clusterName} 触发了许可证到期告警。您的许可证将于 {expiredDate}到期。{action}", "xpack.monitoring.alerts.licenseExpiration.firing.internalShortMessage": "为 {clusterName} 触发了许可证到期告警。您的许可证将于 {expiredDate}到期。{actionText}", "xpack.monitoring.alerts.licenseExpiration.label": "许可证到期", - "xpack.monitoring.alerts.licenseExpiration.resolved": "已解决", "xpack.monitoring.alerts.licenseExpiration.resolved.internalFullMessage": "为 {clusterName} 解决了许可证到期告警。", "xpack.monitoring.alerts.licenseExpiration.resolved.internalShortMessage": "为 {clusterName} 解决了许可证到期告警。", "xpack.monitoring.alerts.licenseExpiration.ui.firingMessage": "此集群的许可证将于 #relative后,即 #absolute到期。 #start_link请更新您的许可证。#end_link", "xpack.monitoring.alerts.licenseExpiration.ui.resolvedMessage": "此集群的许可证处于活动状态。", - "xpack.monitoring.alerts.logstashVersionMismatch.actionVariables.action": "此告警的建议操作。", - "xpack.monitoring.alerts.logstashVersionMismatch.actionVariables.actionPlain": "此告警的建议操作,无任何 Markdown。", "xpack.monitoring.alerts.logstashVersionMismatch.actionVariables.clusterHealth": "此集群中运行的 Logstash 版本。", - "xpack.monitoring.alerts.logstashVersionMismatch.actionVariables.clusterName": "节点所属的集群。", - "xpack.monitoring.alerts.logstashVersionMismatch.actionVariables.internalFullMessage": "Elastic 生成的完整内部消息。", - "xpack.monitoring.alerts.logstashVersionMismatch.actionVariables.internalShortMessage": "Elastic 生成的简短内部消息。", - "xpack.monitoring.alerts.logstashVersionMismatch.actionVariables.state": "告警的当前状态。", - "xpack.monitoring.alerts.logstashVersionMismatch.firing": "触发", "xpack.monitoring.alerts.logstashVersionMismatch.firing.internalFullMessage": "为 {clusterName} 触发了 Logstash 版本不匹配告警。Logstash 正在运行 {versions}。{action}", "xpack.monitoring.alerts.logstashVersionMismatch.firing.internalShortMessage": "为 {clusterName} 触发了 Logstash 版本不匹配告警。{shortActionText}", "xpack.monitoring.alerts.logstashVersionMismatch.fullAction": "查看节点", "xpack.monitoring.alerts.logstashVersionMismatch.label": "Logstash 版本不匹配", - "xpack.monitoring.alerts.logstashVersionMismatch.resolved": "已解决", "xpack.monitoring.alerts.logstashVersionMismatch.resolved.internalFullMessage": "为 {clusterName} 解决了 Logstash 版本不匹配告警。", "xpack.monitoring.alerts.logstashVersionMismatch.resolved.internalShortMessage": "为 {clusterName} 解决了 Logstash 版本不匹配告警。", "xpack.monitoring.alerts.logstashVersionMismatch.shortAction": "确认所有节点具有相同的版本。", "xpack.monitoring.alerts.logstashVersionMismatch.ui.firingMessage": "在此集群中运行着多个 Logstash ({versions}) 版本。", "xpack.monitoring.alerts.logstashVersionMismatch.ui.resolvedMessage": "在此集群中所有 Logstash 版本都相同。", "xpack.monitoring.alerts.migrate.manageAction.requiredFieldError": "{field} 是必填字段。", - "xpack.monitoring.alerts.nodesChanged.actionVariables.action": "此告警的建议操作。", - "xpack.monitoring.alerts.nodesChanged.actionVariables.actionPlain": "此告警的建议操作,无任何 Markdown。", "xpack.monitoring.alerts.nodesChanged.actionVariables.added": "添加到集群的节点列表。", - "xpack.monitoring.alerts.nodesChanged.actionVariables.clusterName": "节点所属的集群。", - "xpack.monitoring.alerts.nodesChanged.actionVariables.internalFullMessage": "Elastic 生成的完整内部消息。", - "xpack.monitoring.alerts.nodesChanged.actionVariables.internalShortMessage": "Elastic 生成的简短内部消息。", "xpack.monitoring.alerts.nodesChanged.actionVariables.removed": "从集群中移除的节点列表。", "xpack.monitoring.alerts.nodesChanged.actionVariables.restarted": "在集群中重新启动的节点列表。", - "xpack.monitoring.alerts.nodesChanged.actionVariables.state": "告警的当前状态。", - "xpack.monitoring.alerts.nodesChanged.firing": "触发", "xpack.monitoring.alerts.nodesChanged.firing.internalFullMessage": "为 {clusterName} 触发了节点已更改告警。以下 Elasticsearch 节点已添加:{added},以下已移除:{removed},以下已重新启动:{restarted}。{action}", "xpack.monitoring.alerts.nodesChanged.firing.internalShortMessage": "为 {clusterName} 触发了节点已更改告警。{shortActionText}", "xpack.monitoring.alerts.nodesChanged.fullAction": "查看节点", "xpack.monitoring.alerts.nodesChanged.label": "已更改节点", - "xpack.monitoring.alerts.nodesChanged.resolved": "已解决", "xpack.monitoring.alerts.nodesChanged.resolved.internalFullMessage": "已为 {clusterName} 解决 Elasticsearch 节点已更改告警。", "xpack.monitoring.alerts.nodesChanged.resolved.internalShortMessage": "已为 {clusterName} 解决 Elasticsearch 节点已更改告警。", "xpack.monitoring.alerts.nodesChanged.shortAction": "确认您已添加、移除或重新启动节点。", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/email/email_params.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/email/email_params.test.tsx index 8c37dc940a238..ed7b9a19d9541 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/email/email_params.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/email/email_params.test.tsx @@ -6,10 +6,12 @@ import React from 'react'; import { mountWithIntl } from 'test_utils/enzyme_helpers'; import { DocLinksStart } from 'kibana/public'; +import { coreMock } from 'src/core/public/mocks'; import EmailParamsFields from './email_params'; describe('EmailParamsFields renders', () => { test('all params fields is rendered', () => { + const mocks = coreMock.createSetup(); const actionParams = { cc: [], bcc: [], @@ -25,6 +27,8 @@ describe('EmailParamsFields renders', () => { editAction={() => {}} index={0} docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + toastNotifications={mocks.notifications.toasts} + http={mocks.http} /> ); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/es_index/es_index_params.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/es_index/es_index_params.test.tsx index a882e3bc43f34..0e4215e503275 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/es_index/es_index_params.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/es_index/es_index_params.test.tsx @@ -7,9 +7,11 @@ import React from 'react'; import { mountWithIntl } from 'test_utils/enzyme_helpers'; import ParamsFields from './es_index_params'; import { DocLinksStart } from 'kibana/public'; +import { coreMock } from 'src/core/public/mocks'; describe('IndexParamsFields renders', () => { test('all params fields is rendered', () => { + const mocks = coreMock.createSetup(); const actionParams = { documents: [{ test: 123 }], }; @@ -21,6 +23,8 @@ describe('IndexParamsFields renders', () => { editAction={() => {}} index={0} docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + toastNotifications={mocks.notifications.toasts} + http={mocks.http} /> ); expect(wrapper.find('[data-test-subj="documentsJsonEditor"]').first().prop('value')).toBe(`{ diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_params.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_params.test.tsx index 26d358310741c..d96657f8ca407 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_params.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_params.test.tsx @@ -7,20 +7,16 @@ import React from 'react'; import { mountWithIntl } from 'test_utils/enzyme_helpers'; import JiraParamsFields from './jira_params'; import { DocLinksStart } from 'kibana/public'; +import { coreMock } from 'src/core/public/mocks'; import { useGetIssueTypes } from './use_get_issue_types'; import { useGetFieldsByIssueType } from './use_get_fields_by_issue_type'; -jest.mock('../../../app_context', () => { - const post = jest.fn(); - return { - useAppDependencies: jest.fn(() => ({ http: { post } })), - }; -}); - jest.mock('./use_get_issue_types'); jest.mock('./use_get_fields_by_issue_type'); +const mocks = coreMock.createSetup(); + const useGetIssueTypesMock = useGetIssueTypes as jest.Mock; const useGetFieldsByIssueTypeMock = useGetFieldsByIssueType as jest.Mock; @@ -93,6 +89,8 @@ describe('JiraParamsFields renders', () => { index={0} messageVariables={[]} docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + toastNotifications={mocks.notifications.toasts} + http={mocks.http} actionConnector={connector} /> ); @@ -118,6 +116,8 @@ describe('JiraParamsFields renders', () => { index={0} messageVariables={[]} docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + toastNotifications={mocks.notifications.toasts} + http={mocks.http} actionConnector={connector} /> ); @@ -141,6 +141,8 @@ describe('JiraParamsFields renders', () => { index={0} messageVariables={[]} docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + toastNotifications={mocks.notifications.toasts} + http={mocks.http} actionConnector={connector} /> ); @@ -164,6 +166,8 @@ describe('JiraParamsFields renders', () => { index={0} messageVariables={[]} docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + toastNotifications={mocks.notifications.toasts} + http={mocks.http} actionConnector={connector} /> ); @@ -191,6 +195,8 @@ describe('JiraParamsFields renders', () => { index={0} messageVariables={[]} docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + toastNotifications={mocks.notifications.toasts} + http={mocks.http} actionConnector={connector} /> ); @@ -218,6 +224,8 @@ describe('JiraParamsFields renders', () => { index={0} messageVariables={[]} docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + toastNotifications={mocks.notifications.toasts} + http={mocks.http} actionConnector={connector} /> ); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_params.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_params.tsx index bde3d67ffd65f..b457dcc60a43f 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_params.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/jira/jira_params.tsx @@ -13,7 +13,6 @@ import { EuiFlexGroup } from '@elastic/eui'; import { EuiFlexItem } from '@elastic/eui'; import { EuiSpacer } from '@elastic/eui'; -import { useAppDependencies } from '../../../app_context'; import { ActionParamsProps } from '../../../../types'; import { TextAreaWithMessageVariables } from '../../text_area_with_message_variables'; import { TextFieldWithMessageVariables } from '../../text_field_with_message_variables'; @@ -28,6 +27,8 @@ const JiraParamsFields: React.FunctionComponent { const { title, description, comments, issueType, priority, labels, savedObjectId } = actionParams.subActionParams || {}; @@ -35,7 +36,6 @@ const JiraParamsFields: React.FunctionComponent([]); const [firstLoad, setFirstLoad] = useState(false); const [prioritiesSelectOptions, setPrioritiesSelectOptions] = useState([]); - const { http, toastNotifications } = useAppDependencies(); useEffect(() => { setFirstLoad(true); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/pagerduty/pagerduty_params.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/pagerduty/pagerduty_params.test.tsx index fe83054edbe07..ea947a159b893 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/pagerduty/pagerduty_params.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/pagerduty/pagerduty_params.test.tsx @@ -8,9 +8,11 @@ import { mountWithIntl } from 'test_utils/enzyme_helpers'; import { EventActionOptions, SeverityActionOptions } from '.././types'; import PagerDutyParamsFields from './pagerduty_params'; import { DocLinksStart } from 'kibana/public'; +import { coreMock } from 'src/core/public/mocks'; describe('PagerDutyParamsFields renders', () => { test('all params fields is rendered', () => { + const mocks = coreMock.createSetup(); const actionParams = { eventAction: EventActionOptions.TRIGGER, dedupKey: 'test', @@ -30,6 +32,8 @@ describe('PagerDutyParamsFields renders', () => { editAction={() => {}} index={0} docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + toastNotifications={mocks.notifications.toasts} + http={mocks.http} /> ); expect(wrapper.find('[data-test-subj="severitySelect"]').length > 0).toBeTruthy(); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/resilient/resilient_params.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/resilient/resilient_params.test.tsx index 17020805757f9..5f03a548bf16e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/resilient/resilient_params.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/resilient/resilient_params.test.tsx @@ -10,13 +10,9 @@ import { DocLinksStart } from 'kibana/public'; import { useGetIncidentTypes } from './use_get_incident_types'; import { useGetSeverity } from './use_get_severity'; +import { coreMock } from 'src/core/public/mocks'; -jest.mock('../../../app_context', () => { - const post = jest.fn(); - return { - useAppDependencies: jest.fn(() => ({ http: { post } })), - }; -}); +const mocks = coreMock.createSetup(); jest.mock('./use_get_incident_types'); jest.mock('./use_get_severity'); @@ -92,6 +88,8 @@ describe('ResilientParamsFields renders', () => { index={0} messageVariables={[]} docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + toastNotifications={mocks.notifications.toasts} + http={mocks.http} actionConnector={connector} /> ); @@ -114,6 +112,8 @@ describe('ResilientParamsFields renders', () => { index={0} messageVariables={[]} docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + toastNotifications={mocks.notifications.toasts} + http={mocks.http} actionConnector={connector} /> ); @@ -137,6 +137,8 @@ describe('ResilientParamsFields renders', () => { index={0} messageVariables={[]} docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + toastNotifications={mocks.notifications.toasts} + http={mocks.http} actionConnector={connector} /> ); @@ -157,6 +159,8 @@ describe('ResilientParamsFields renders', () => { index={0} messageVariables={[]} docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + toastNotifications={mocks.notifications.toasts} + http={mocks.http} actionConnector={connector} /> ); @@ -180,6 +184,8 @@ describe('ResilientParamsFields renders', () => { index={0} messageVariables={[]} docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + toastNotifications={mocks.notifications.toasts} + http={mocks.http} actionConnector={connector} /> ); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/resilient/resilient_params.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/resilient/resilient_params.tsx index 4b157c6999985..b150c97506b69 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/resilient/resilient_params.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/resilient/resilient_params.tsx @@ -17,7 +17,6 @@ import { import { i18n } from '@kbn/i18n'; import { ActionParamsProps } from '../../../../types'; -import { useAppDependencies } from '../../../app_context'; import { ResilientActionParams } from './types'; import { TextAreaWithMessageVariables } from '../../text_area_with_message_variables'; import { TextFieldWithMessageVariables } from '../../text_field_with_message_variables'; @@ -32,9 +31,10 @@ const ResilientParamsFields: React.FunctionComponent { const [firstLoad, setFirstLoad] = useState(false); - const { http, toastNotifications } = useAppDependencies(); const { title, description, comments, incidentTypes, severityCode, savedObjectId } = actionParams.subActionParams || {}; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/server_log/server_log_params.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/server_log/server_log_params.test.tsx index 3a015cddcd335..407cd70d4ad4c 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/server_log/server_log_params.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/server_log/server_log_params.test.tsx @@ -8,8 +8,11 @@ import { mountWithIntl } from 'test_utils/enzyme_helpers'; import { ServerLogLevelOptions } from '.././types'; import ServerLogParamsFields from './server_log_params'; import { DocLinksStart } from 'kibana/public'; +import { coreMock } from 'src/core/public/mocks'; describe('ServerLogParamsFields renders', () => { + const mocks = coreMock.createSetup(); + test('all params fields is rendered', () => { const actionParams = { level: ServerLogLevelOptions.TRACE, @@ -23,6 +26,8 @@ describe('ServerLogParamsFields renders', () => { index={0} defaultMessage={'test default message'} docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + toastNotifications={mocks.notifications.toasts} + http={mocks.http} /> ); expect(wrapper.find('[data-test-subj="loggingLevelSelect"]').length > 0).toBeTruthy(); @@ -44,6 +49,8 @@ describe('ServerLogParamsFields renders', () => { editAction={() => {}} index={0} docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + toastNotifications={mocks.notifications.toasts} + http={mocks.http} /> ); expect(wrapper.find('[data-test-subj="loggingLevelSelect"]').length > 0).toBeTruthy(); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_params.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_params.test.tsx index f4d831d7234e7..cc8041b38c360 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_params.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/servicenow/servicenow_params.test.tsx @@ -7,9 +7,11 @@ import React from 'react'; import { mountWithIntl } from 'test_utils/enzyme_helpers'; import ServiceNowParamsFields from './servicenow_params'; import { DocLinksStart } from 'kibana/public'; +import { coreMock } from 'src/core/public/mocks'; describe('ServiceNowParamsFields renders', () => { test('all params fields is rendered', () => { + const mocks = coreMock.createSetup(); const actionParams = { subAction: 'pushToService', subActionParams: { @@ -32,6 +34,8 @@ describe('ServiceNowParamsFields renders', () => { index={0} messageVariables={[]} docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + toastNotifications={mocks.notifications.toasts} + http={mocks.http} /> ); expect(wrapper.find('[data-test-subj="urgencySelect"]').length > 0).toBeTruthy(); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/slack/slack_params.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/slack/slack_params.test.tsx index 45c1929ae1e22..c580424c05b95 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/slack/slack_params.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/slack/slack_params.test.tsx @@ -7,9 +7,11 @@ import React from 'react'; import { mountWithIntl } from 'test_utils/enzyme_helpers'; import SlackParamsFields from './slack_params'; import { DocLinksStart } from 'kibana/public'; +import { coreMock } from 'src/core/public/mocks'; describe('SlackParamsFields renders', () => { test('all params fields is rendered', () => { + const mocks = coreMock.createSetup(); const actionParams = { message: 'test message', }; @@ -21,6 +23,8 @@ describe('SlackParamsFields renders', () => { editAction={() => {}} index={0} docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + toastNotifications={mocks.notifications.toasts} + http={mocks.http} /> ); expect(wrapper.find('[data-test-subj="messageTextArea"]').length > 0).toBeTruthy(); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/webhook/webhook_params.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/webhook/webhook_params.test.tsx index 6a1c5cb2bfb53..a4cb36cab76b6 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/webhook/webhook_params.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/components/builtin_action_types/webhook/webhook_params.test.tsx @@ -7,9 +7,11 @@ import React from 'react'; import { mountWithIntl } from 'test_utils/enzyme_helpers'; import WebhookParamsFields from './webhook_params'; import { DocLinksStart } from 'kibana/public'; +import { coreMock } from 'src/core/public/mocks'; describe('WebhookParamsFields renders', () => { test('all params fields is rendered', () => { + const mocks = coreMock.createSetup(); const actionParams = { body: 'test message', }; @@ -21,6 +23,8 @@ describe('WebhookParamsFields renders', () => { editAction={() => {}} index={0} docLinks={{ ELASTIC_WEBSITE_URL: '', DOC_LINK_VERSION: '' } as DocLinksStart} + toastNotifications={mocks.notifications.toasts} + http={mocks.http} /> ); expect(wrapper.find('[data-test-subj="bodyJsonEditor"]').length > 0).toBeTruthy(); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/context/actions_connectors_context.tsx b/x-pack/plugins/triggers_actions_ui/public/application/context/actions_connectors_context.tsx index d78930344a673..786fc12380f90 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/context/actions_connectors_context.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/context/actions_connectors_context.tsx @@ -5,19 +5,16 @@ */ import React, { createContext, useContext } from 'react'; -import { HttpSetup, ToastsApi, ApplicationStart, DocLinksStart } from 'kibana/public'; -import { ActionTypeModel } from '../../types'; +import { HttpSetup, ApplicationStart, DocLinksStart, ToastsSetup } from 'kibana/public'; +import { ActionTypeModel, ActionConnector } from '../../types'; import { TypeRegistry } from '../type_registry'; export interface ActionsConnectorsContextValue { http: HttpSetup; actionTypeRegistry: TypeRegistry; - toastNotifications: Pick< - ToastsApi, - 'get$' | 'add' | 'remove' | 'addSuccess' | 'addWarning' | 'addDanger' | 'addError' - >; + toastNotifications: ToastsSetup; capabilities: ApplicationStart['capabilities']; - reloadConnectors?: () => Promise; + reloadConnectors?: () => Promise; docLinks: DocLinksStart; consumer?: string; } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx index ac5b2a2187c2f..1b176e0f63dbd 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/action_form.tsx @@ -29,7 +29,7 @@ import { EuiText, EuiLoadingSpinner, } from '@elastic/eui'; -import { HttpSetup, ToastsApi, ApplicationStart, DocLinksStart } from 'kibana/public'; +import { HttpSetup, ToastsSetup, ApplicationStart, DocLinksStart } from 'kibana/public'; import { loadActionTypes, loadAllActions as loadConnectors } from '../../lib/action_connector_api'; import { IErrorObject, @@ -56,10 +56,7 @@ interface ActionAccordionFormProps { setActionParamsProperty: (key: string, value: any, index: number) => void; http: HttpSetup; actionTypeRegistry: TypeRegistry; - toastNotifications: Pick< - ToastsApi, - 'get$' | 'add' | 'remove' | 'addSuccess' | 'addWarning' | 'addDanger' | 'addError' - >; + toastNotifications: ToastsSetup; docLinks: DocLinksStart; actionTypes?: ActionType[]; messageVariables?: ActionVariable[]; @@ -311,6 +308,8 @@ export const ActionForm = ({ messageVariables={messageVariables} defaultMessage={defaultActionMessage ?? undefined} docLinks={docLinks} + http={http} + toastNotifications={toastNotifications} actionConnector={actionConnector} /> diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_add_flyout.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_add_flyout.tsx index 19ce653e465f1..9bb9d07307e13 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_add_flyout.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_add_flyout.tsx @@ -37,12 +37,14 @@ export interface ConnectorAddFlyoutProps { addFlyoutVisible: boolean; setAddFlyoutVisibility: React.Dispatch>; actionTypes?: ActionType[]; + onTestConnector?: (connector: ActionConnector) => void; } export const ConnectorAddFlyout = ({ addFlyoutVisible, setAddFlyoutVisibility, actionTypes, + onTestConnector, }: ConnectorAddFlyoutProps) => { let hasErrors = false; const { @@ -153,6 +155,19 @@ export const ConnectorAddFlyout = ({ return undefined; }); + const onSaveClicked = async () => { + setIsSaving(true); + const savedAction = await onActionConnectorSave(); + setIsSaving(false); + if (savedAction) { + closeFlyout(); + if (reloadConnectors) { + await reloadConnectors(); + } + } + return savedAction; + }; + return ( @@ -245,35 +260,52 @@ export const ConnectorAddFlyout = ({ )}
- {canSave && actionTypeModel && actionType ? ( - - { - setIsSaving(true); - const savedAction = await onActionConnectorSave(); - setIsSaving(false); - if (savedAction) { - closeFlyout(); - if (reloadConnectors) { - reloadConnectors(); - } - } - }} - > - - - - ) : null} + + + {canSave && actionTypeModel && actionType ? ( + + {onTestConnector && ( + + { + const savedConnector = await onSaveClicked(); + if (savedConnector) { + onTestConnector(savedConnector); + } + }} + > + + + + )} + + + + + + + ) : null} + +
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_edit_flyout.scss b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_edit_flyout.scss index 873a3ceb762cd..5d2997d101255 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_edit_flyout.scss +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_edit_flyout.scss @@ -1,3 +1,3 @@ .connectorEditFlyoutTabs { - margin-bottom: '-25px'; + margin-bottom: -$euiSizeL; } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_edit_flyout.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_edit_flyout.tsx index fc902a4fabcd8..7b985ab85cd4e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_edit_flyout.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/action_connector_form/connector_edit_flyout.tsx @@ -26,7 +26,7 @@ import { i18n } from '@kbn/i18n'; import { Option, none, some } from 'fp-ts/lib/Option'; import { ActionConnectorForm, validateBaseProperties } from './action_connector_form'; import { TestConnectorForm } from './test_connector_form'; -import { ActionConnectorTableItem, ActionConnector, IErrorObject } from '../../../types'; +import { ActionConnector, IErrorObject } from '../../../types'; import { connectorReducer } from './connector_reducer'; import { updateActionConnector, executeAction } from '../../lib/action_connector_api'; import { hasSaveActionsCapability } from '../../lib/capabilities'; @@ -36,15 +36,22 @@ import { ActionTypeExecutorResult } from '../../../../../actions/common'; import './connector_edit_flyout.scss'; export interface ConnectorEditProps { - initialConnector: ActionConnectorTableItem; + initialConnector: ActionConnector; editFlyoutVisible: boolean; setEditFlyoutVisibility: React.Dispatch>; + tab?: EditConectorTabs; +} + +export enum EditConectorTabs { + Configuration = 'configuration', + Test = 'test', } export const ConnectorEditFlyout = ({ initialConnector, editFlyoutVisible, setEditFlyoutVisibility, + tab = EditConectorTabs.Configuration, }: ConnectorEditProps) => { const { http, @@ -61,7 +68,7 @@ export const ConnectorEditFlyout = ({ connector: { ...initialConnector, secrets: {} }, }); const [isSaving, setIsSaving] = useState(false); - const [selectedTab, setTab] = useState<'config' | 'test'>('config'); + const [selectedTab, setTab] = useState(tab); const [hasChanges, setHasChanges] = useState(false); const setConnector = (key: string, value: any) => { @@ -232,18 +239,18 @@ export const ConnectorEditFlyout = ({ setTab('config')} + onClick={() => setTab(EditConectorTabs.Configuration)} data-test-subj="configureConnectorTab" - isSelected={'config' === selectedTab} + isSelected={EditConectorTabs.Configuration === selectedTab} > {i18n.translate('xpack.triggersActionsUI.sections.editConnectorForm.tabText', { defaultMessage: 'Configuration', })} setTab('test')} + onClick={() => setTab(EditConectorTabs.Test)} data-test-subj="testConnectorTab" - isSelected={'test' === selectedTab} + isSelected={EditConectorTabs.Test === selectedTab} > {i18n.translate('xpack.triggersActionsUI.sections.testConnectorForm.tabText', { defaultMessage: 'Test', @@ -252,7 +259,7 @@ export const ConnectorEditFlyout = ({ - {selectedTab === 'config' ? ( + {selectedTab === EditConectorTabs.Configuration ? ( !connector.isPreconfigured ? ( { - const { actionTypeRegistry, docLinks } = useActionsConnectorsContext(); + const { actionTypeRegistry, docLinks, http, toastNotifications } = useActionsConnectorsContext(); const actionTypeModel = actionTypeRegistry.get(connector.actionTypeId); const ParamsFieldsComponent = actionTypeModel.actionParamsFields; @@ -74,6 +74,8 @@ export const TestConnectorForm = ({ } messageVariables={[]} docLinks={docLinks} + http={http} + toastNotifications={toastNotifications} actionConnector={connector} /> diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx index 6bc9fd8e7e5a8..da833c3495b4a 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx @@ -24,9 +24,14 @@ import { FormattedMessage } from '@kbn/i18n/react'; import { useAppDependencies } from '../../../app_context'; import { loadAllActions, loadActionTypes, deleteActions } from '../../../lib/action_connector_api'; import ConnectorAddFlyout from '../../action_connector_form/connector_add_flyout'; -import ConnectorEditFlyout from '../../action_connector_form/connector_edit_flyout'; - -import { hasDeleteActionsCapability, hasSaveActionsCapability } from '../../../lib/capabilities'; +import ConnectorEditFlyout, { + EditConectorTabs, +} from '../../action_connector_form/connector_edit_flyout'; +import { + hasDeleteActionsCapability, + hasSaveActionsCapability, + hasExecuteActionsCapability, +} from '../../../lib/capabilities'; import { DeleteModalConfirmation } from '../../../components/delete_modal_confirmation'; import { ActionsConnectorsContextProvider } from '../../../context/actions_connectors_context'; import { checkActionTypeEnabled } from '../../../lib/check_action_type_enabled'; @@ -43,22 +48,20 @@ export const ActionsConnectorsList: React.FunctionComponent = () => { docLinks, } = useAppDependencies(); const canDelete = hasDeleteActionsCapability(capabilities); + const canExecute = hasExecuteActionsCapability(capabilities); const canSave = hasSaveActionsCapability(capabilities); const [actionTypesIndex, setActionTypesIndex] = useState(undefined); const [actions, setActions] = useState([]); - const [data, setData] = useState([]); const [selectedItems, setSelectedItems] = useState([]); const [isLoadingActionTypes, setIsLoadingActionTypes] = useState(false); const [isLoadingActions, setIsLoadingActions] = useState(false); const [editFlyoutVisible, setEditFlyoutVisibility] = useState(false); const [addFlyoutVisible, setAddFlyoutVisibility] = useState(false); - const [actionTypesList, setActionTypesList] = useState>( - [] - ); - const [editedConnectorItem, setEditedConnectorItem] = useState< - ActionConnectorTableItem | undefined - >(undefined); + const [editConnectorProps, setEditConnectorProps] = useState<{ + initialConnector?: ActionConnector; + tab?: EditConectorTabs; + }>({}); const [connectorsToDelete, setConnectorsToDelete] = useState([]); useEffect(() => { @@ -90,30 +93,25 @@ export const ActionsConnectorsList: React.FunctionComponent = () => { // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - useEffect(() => { - // Avoid flickering before action types load - if (typeof actionTypesIndex === 'undefined') { - return; - } - // Update the data for the table - const updatedData = actions.map((action) => { - return { - ...action, - actionType: actionTypesIndex[action.actionTypeId] - ? actionTypesIndex[action.actionTypeId].name - : action.actionTypeId, - }; - }); - setData(updatedData); - // Update the action types list for the filter - const actionTypes = Object.values(actionTypesIndex) - .map((actionType) => ({ - value: actionType.id, - name: `${actionType.name} (${getActionsCountByActionType(actions, actionType.id)})`, - })) - .sort((a, b) => a.name.localeCompare(b.name)); - setActionTypesList(actionTypes); - }, [actions, actionTypesIndex]); + const actionConnectorTableItems: ActionConnectorTableItem[] = actionTypesIndex + ? actions.map((action) => { + return { + ...action, + actionType: actionTypesIndex[action.actionTypeId] + ? actionTypesIndex[action.actionTypeId].name + : action.actionTypeId, + }; + }) + : []; + + const actionTypesList: Array<{ value: string; name: string }> = actionTypesIndex + ? Object.values(actionTypesIndex) + .map((actionType) => ({ + value: actionType.id, + name: `${actionType.name} (${getActionsCountByActionType(actions, actionType.id)})`, + })) + .sort((a, b) => a.name.localeCompare(b.name)) + : []; async function loadActions() { setIsLoadingActions(true); @@ -134,8 +132,8 @@ export const ActionsConnectorsList: React.FunctionComponent = () => { } } - async function editItem(connectorTableItem: ActionConnectorTableItem) { - setEditedConnectorItem(connectorTableItem); + async function editItem(actionConnector: ActionConnector, tab: EditConectorTabs) { + setEditConnectorProps({ initialConnector: actionConnector, tab }); setEditFlyoutVisibility(true); } @@ -159,7 +157,7 @@ export const ActionsConnectorsList: React.FunctionComponent = () => { const link = ( editItem(item)} + onClick={() => editItem(item, EditConectorTabs.Configuration)} key={item.id} disabled={actionTypesIndex ? !actionTypesIndex[item.actionTypeId].enabled : true} > @@ -203,6 +201,11 @@ export const ActionsConnectorsList: React.FunctionComponent = () => { item={item} onDelete={() => setConnectorsToDelete([item.id])} /> + editItem(item, EditConectorTabs.Test)} + /> ); }, @@ -212,7 +215,7 @@ export const ActionsConnectorsList: React.FunctionComponent = () => { const table = ( {
)} - {data.length !== 0 && table} - {data.length === 0 && canSave && !isLoadingActions && !isLoadingActionTypes && ( - setAddFlyoutVisibility(true)} /> - )} - {data.length === 0 && !canSave && } + {actionConnectorTableItems.length !== 0 && table} + {actionConnectorTableItems.length === 0 && + canSave && + !isLoadingActions && + !isLoadingActionTypes && ( + setAddFlyoutVisibility(true)} /> + )} + {actionConnectorTableItems.length === 0 && !canSave && } { editItem(connector, EditConectorTabs.Test)} /> - {editedConnectorItem ? ( + {editConnectorProps.initialConnector ? ( @@ -433,6 +443,41 @@ const DeleteOperation: React.FunctionComponent<{ ); }; +const RunOperation: React.FunctionComponent<{ + item: ActionConnectorTableItem; + canExecute: boolean; + onRun: () => void; +}> = ({ item, canExecute, onRun }) => { + return ( + + + + + + ); +}; + const NoPermissionPrompt: React.FunctionComponent<{}> = () => ( { useEffect(() => { loadAlertsData(); // eslint-disable-next-line react-hooks/exhaustive-deps - }, [alertTypesState, page, searchText, typesFilter, actionTypesFilter]); + }, [alertTypesState, page, searchText]); + + useEffect(() => { + loadAlertsData(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [JSON.stringify(typesFilter), JSON.stringify(actionTypesFilter)]); useEffect(() => { (async () => { diff --git a/x-pack/plugins/triggers_actions_ui/public/types.ts b/x-pack/plugins/triggers_actions_ui/public/types.ts index 56405baa5c65d..e147f035fbb86 100644 --- a/x-pack/plugins/triggers_actions_ui/public/types.ts +++ b/x-pack/plugins/triggers_actions_ui/public/types.ts @@ -3,7 +3,7 @@ * or more contributor license agreements. Licensed under the Elastic License; * you may not use this file except in compliance with the Elastic License. */ -import { HttpSetup, DocLinksStart } from 'kibana/public'; +import { HttpSetup, DocLinksStart, ToastsSetup } from 'kibana/public'; import { ComponentType } from 'react'; import { ActionGroup } from '../../alerts/common'; import { ActionType } from '../../actions/common'; @@ -54,6 +54,8 @@ export interface ActionParamsProps { messageVariables?: ActionVariable[]; defaultMessage?: string; docLinks: DocLinksStart; + http: HttpSetup; + toastNotifications: ToastsSetup; actionConnector?: ActionConnector; } diff --git a/x-pack/plugins/ui_actions_enhanced/.storybook/main.js b/x-pack/plugins/ui_actions_enhanced/.storybook/main.js new file mode 100644 index 0000000000000..1818aa44a9399 --- /dev/null +++ b/x-pack/plugins/ui_actions_enhanced/.storybook/main.js @@ -0,0 +1,7 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +module.exports = require('@kbn/storybook').defaultConfig; diff --git a/x-pack/plugins/ui_actions_enhanced/public/components/action_wizard/action_wizard.story.tsx b/x-pack/plugins/ui_actions_enhanced/public/components/action_wizard/action_wizard.stories.tsx similarity index 100% rename from x-pack/plugins/ui_actions_enhanced/public/components/action_wizard/action_wizard.story.tsx rename to x-pack/plugins/ui_actions_enhanced/public/components/action_wizard/action_wizard.stories.tsx diff --git a/x-pack/plugins/ui_actions_enhanced/public/components/action_wizard/action_wizard.tsx b/x-pack/plugins/ui_actions_enhanced/public/components/action_wizard/action_wizard.tsx index ca7f6af4f7a37..e935798179402 100644 --- a/x-pack/plugins/ui_actions_enhanced/public/components/action_wizard/action_wizard.tsx +++ b/x-pack/plugins/ui_actions_enhanced/public/components/action_wizard/action_wizard.tsx @@ -250,7 +250,7 @@ const SelectedActionFactory: React.FC = ({ data-test-subj={`${TEST_SUBJ_SELECTED_ACTION_FACTORY}-${actionFactory.id}`} >
- + {actionFactory.getIconType(context) && ( @@ -342,7 +342,7 @@ const ActionFactorySelector: React.FC = ({ }; return ( - + {ensureOrder(actionFactories).map((actionFactory) => ( = ({ }) => { return ( - + -
- -
+
diff --git a/x-pack/plugins/ui_actions_enhanced/public/drilldowns/components/flyout_drilldown_wizard/flyout_drilldown_wizard.story.tsx b/x-pack/plugins/ui_actions_enhanced/public/drilldowns/components/flyout_drilldown_wizard/flyout_drilldown_wizard.stories.tsx similarity index 100% rename from x-pack/plugins/ui_actions_enhanced/public/drilldowns/components/flyout_drilldown_wizard/flyout_drilldown_wizard.story.tsx rename to x-pack/plugins/ui_actions_enhanced/public/drilldowns/components/flyout_drilldown_wizard/flyout_drilldown_wizard.stories.tsx diff --git a/x-pack/plugins/ui_actions_enhanced/public/drilldowns/components/flyout_frame/flyout_frame.story.tsx b/x-pack/plugins/ui_actions_enhanced/public/drilldowns/components/flyout_frame/flyout_frame.stories.tsx similarity index 100% rename from x-pack/plugins/ui_actions_enhanced/public/drilldowns/components/flyout_frame/flyout_frame.story.tsx rename to x-pack/plugins/ui_actions_enhanced/public/drilldowns/components/flyout_frame/flyout_frame.stories.tsx diff --git a/x-pack/plugins/ui_actions_enhanced/public/drilldowns/components/flyout_frame/flyout_frame.tsx b/x-pack/plugins/ui_actions_enhanced/public/drilldowns/components/flyout_frame/flyout_frame.tsx index b55cbd88d0dc0..e518209746b60 100644 --- a/x-pack/plugins/ui_actions_enhanced/public/drilldowns/components/flyout_frame/flyout_frame.tsx +++ b/x-pack/plugins/ui_actions_enhanced/public/drilldowns/components/flyout_frame/flyout_frame.tsx @@ -64,7 +64,7 @@ export const FlyoutFrame: React.FC = ({ const footerFragment = (onClose || footer) && ( - + {onClose && ( >; +} + +export const UptimeEditAlertFlyoutComponent = ({ + alertFlyoutVisible, + initialAlert, + setAlertFlyoutVisibility, +}: Props) => { + const onClose = () => { + setAlertFlyoutVisibility(false); + }; + return alertFlyoutVisible ? : null; +}; diff --git a/x-pack/plugins/uptime/public/components/monitor/ml/manage_ml_job.tsx b/x-pack/plugins/uptime/public/components/monitor/ml/manage_ml_job.tsx index 7971c4eb58350..c8260721ff84a 100644 --- a/x-pack/plugins/uptime/public/components/monitor/ml/manage_ml_job.tsx +++ b/x-pack/plugins/uptime/public/components/monitor/ml/manage_ml_job.tsx @@ -22,7 +22,12 @@ import { useMonitorId } from '../../../hooks'; import { setAlertFlyoutType, setAlertFlyoutVisible } from '../../../state/actions'; import { useAnomalyAlert } from './use_anomaly_alert'; import { ConfirmAlertDeletion } from './confirm_alert_delete'; -import { deleteAnomalyAlertAction } from '../../../state/alerts/alerts'; +import { + deleteAnomalyAlertAction, + getAnomalyAlertAction, + isAnomalyAlertDeleting, +} from '../../../state/alerts/alerts'; +import { UptimeEditAlertFlyoutComponent } from '../../common/alerts/uptime_edit_alert_flyout'; interface Props { hasMLJob: boolean; @@ -33,11 +38,14 @@ interface Props { export const ManageMLJobComponent = ({ hasMLJob, onEnableJob, onJobDelete }: Props) => { const [isPopOverOpen, setIsPopOverOpen] = useState(false); + const [isFlyoutOpen, setIsFlyoutOpen] = useState(false); + const { basePath } = useContext(UptimeSettingsContext); const canDeleteMLJob = useSelector(canDeleteMLJobSelector); const isMLJobCreating = useSelector(isMLJobCreatingSelector); + const isAlertDeleting = useSelector(isAnomalyAlertDeleting); const { loading: isMLJobLoading } = useSelector(hasMLJobSelector); @@ -54,7 +62,7 @@ export const ManageMLJobComponent = ({ hasMLJob, onEnableJob, onJobDelete }: Pro const deleteAnomalyAlert = () => dispatch(deleteAnomalyAlertAction.get({ alertId: anomalyAlert?.id as string })); - const showLoading = isMLJobCreating || isMLJobLoading; + const showLoading = isMLJobCreating || isMLJobLoading || isAlertDeleting; const btnText = hasMLJob ? labels.ANOMALY_DETECTION : labels.ENABLE_ANOMALY_DETECTION; @@ -63,7 +71,7 @@ export const ManageMLJobComponent = ({ hasMLJob, onEnableJob, onJobDelete }: Pro data-test-subj={hasMLJob ? 'uptimeManageMLJobBtn' : 'uptimeEnableAnomalyBtn'} onClick={hasMLJob ? () => setIsPopOverOpen(true) : onEnableJob} disabled={hasMLJob && !canDeleteMLJob} - isLoading={isMLJobCreating || isMLJobLoading} + isLoading={showLoading} size="s" aria-label={labels.ENABLE_MANAGE_JOB} > @@ -85,21 +93,27 @@ export const ManageMLJobComponent = ({ hasMLJob, onEnableJob, onJobDelete }: Pro dateRange: { from: dateRangeStart, to: dateRangeEnd }, }), }, - { - name: anomalyAlert ? labels.DISABLE_ANOMALY_ALERT : labels.ENABLE_ANOMALY_ALERT, - 'data-test-subj': anomalyAlert - ? 'uptimeDisableAnomalyAlertBtn' - : 'uptimeEnableAnomalyAlertBtn', - icon: , - onClick: () => { - if (anomalyAlert) { - setIsConfirmAlertDeleteOpen(true); - } else { - dispatch(setAlertFlyoutType(CLIENT_ALERT_TYPES.DURATION_ANOMALY)); - dispatch(setAlertFlyoutVisible(true)); - } - }, - }, + ...(anomalyAlert + ? [ + { + name: 'Anomaly alert', + icon: 'bell', + 'data-test-subj': 'uptimeManageAnomalyAlertBtn', + panel: 1, + }, + ] + : [ + { + name: labels.ENABLE_ANOMALY_ALERT, + 'data-test-subj': 'uptimeEnableAnomalyAlertBtn', + icon: 'bell', + onClick: () => { + dispatch(setAlertFlyoutType(CLIENT_ALERT_TYPES.DURATION_ANOMALY)); + dispatch(setAlertFlyoutVisible(true)); + setIsPopOverOpen(false); + }, + }, + ]), { name: labels.DISABLE_ANOMALY_DETECTION, 'data-test-subj': 'uptimeDeleteMLJobBtn', @@ -111,6 +125,27 @@ export const ManageMLJobComponent = ({ hasMLJob, onEnableJob, onJobDelete }: Pro }, ], }, + { + id: 1, + title: 'Anomaly alert', + items: [ + { + name: 'Edit', + 'data-test-subj': 'uptimeEditAnomalyAlertBtn', + onClick: () => { + setIsFlyoutOpen(true); + setIsPopOverOpen(false); + }, + }, + { + name: 'Disable', + 'data-test-subj': 'uptimeDisableAnomalyAlertBtn', + onClick: () => { + setIsConfirmAlertDeleteOpen(true); + }, + }, + ], + }, ]; return ( @@ -138,6 +173,14 @@ export const ManageMLJobComponent = ({ hasMLJob, onEnableJob, onJobDelete }: Pro }} /> )} + { + setIsFlyoutOpen(false); + dispatch(getAnomalyAlertAction.get({ monitorId })); + }} + /> ); }; diff --git a/x-pack/plugins/uptime/public/components/overview/alerts/anomaly_alert/anomaly_alert.tsx b/x-pack/plugins/uptime/public/components/overview/alerts/anomaly_alert/anomaly_alert.tsx index 1428a7f526fc2..dd732f0b7e24b 100644 --- a/x-pack/plugins/uptime/public/components/overview/alerts/anomaly_alert/anomaly_alert.tsx +++ b/x-pack/plugins/uptime/public/components/overview/alerts/anomaly_alert/anomaly_alert.tsx @@ -16,7 +16,7 @@ import { useSelector } from 'react-redux'; import React, { useEffect, useState } from 'react'; import { AnomalyTranslations } from './translations'; import { AlertExpressionPopover } from '../alert_expression_popover'; -import { DEFAULT_SEVERITY, SelectSeverity } from './select_severity'; +import { DEFAULT_SEVERITY, SelectSeverity, SEVERITY_OPTIONS } from './select_severity'; import { monitorIdSelector } from '../../../../state/selectors'; import { getSeverityColor, getSeverityType } from '../../../../../../ml/public'; @@ -40,6 +40,14 @@ export function AnomalyAlertComponent({ setAlertParams, alertParams }: Props) { setAlertParams('severity', severity.val); }, [severity, setAlertParams]); + useEffect(() => { + if (alertParams.severity !== undefined) { + setSeverity(SEVERITY_OPTIONS.find(({ val }) => val === alertParams.severity)!); + } + + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + return ( <> diff --git a/x-pack/plugins/uptime/public/lib/alert_types/duration_anomaly.tsx b/x-pack/plugins/uptime/public/lib/alert_types/duration_anomaly.tsx index c1f802c2d0c91..c277e87c1ed74 100644 --- a/x-pack/plugins/uptime/public/lib/alert_types/duration_anomaly.tsx +++ b/x-pack/plugins/uptime/public/lib/alert_types/duration_anomaly.tsx @@ -25,5 +25,5 @@ export const initDurationAnomalyAlertType: AlertTypeInitializer = ({ name, validate: () => ({ errors: {} }), defaultActionMessage, - requiresAppContext: false, + requiresAppContext: true, }); diff --git a/x-pack/plugins/uptime/public/state/alerts/alerts.ts b/x-pack/plugins/uptime/public/state/alerts/alerts.ts index 5273a33102565..aeb81bb413aa7 100644 --- a/x-pack/plugins/uptime/public/state/alerts/alerts.ts +++ b/x-pack/plugins/uptime/public/state/alerts/alerts.ts @@ -163,3 +163,4 @@ export const alertsSelector = ({ alerts }: AppState) => alerts.alerts; export const isAlertDeletedSelector = ({ alerts }: AppState) => alerts.alertDeletion; export const anomalyAlertSelector = ({ alerts }: AppState) => alerts.anomalyAlert; +export const isAnomalyAlertDeleting = ({ alerts }: AppState) => alerts.anomalyAlertDeletion.loading; diff --git a/x-pack/plugins/watcher/public/application/sections/watch_edit/components/threshold_watch_edit/threshold_watch_action_dropdown.tsx b/x-pack/plugins/watcher/public/application/sections/watch_edit/components/threshold_watch_edit/threshold_watch_action_dropdown.tsx index 7a760ee58acbc..0e20762349a40 100644 --- a/x-pack/plugins/watcher/public/application/sections/watch_edit/components/threshold_watch_edit/threshold_watch_action_dropdown.tsx +++ b/x-pack/plugins/watcher/public/application/sections/watch_edit/components/threshold_watch_edit/threshold_watch_action_dropdown.tsx @@ -103,7 +103,7 @@ export const WatchActionsDropdown: React.FunctionComponent = ({ settings, setIsPopOverOpen(false); }} > - + diff --git a/x-pack/test/accessibility/apps/advanced_settings.ts b/x-pack/test/accessibility/apps/advanced_settings.ts new file mode 100644 index 0000000000000..804a2657ce6e3 --- /dev/null +++ b/x-pack/test/accessibility/apps/advanced_settings.ts @@ -0,0 +1,54 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { FtrProviderContext } from '../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const PageObjects = getPageObjects(['common', 'settings', 'header']); + const a11y = getService('a11y'); + const testSubjects = getService('testSubjects'); + + describe('Stack Management -Advanced Settings', () => { + // click on Management > Advanced settings + it('click on advanced settings ', async () => { + await PageObjects.common.navigateToUrl('management', 'kibana/settings', { + shouldUseHashForSubUrl: false, + }); + await testSubjects.click('settings'); + await a11y.testAppSnapshot(); + }); + + // clicking on the top search bar + it('adv settings - search ', async () => { + await testSubjects.click('settingsSearchBar'); + await a11y.testAppSnapshot(); + }); + + // clicking on the category dropdown + it('adv settings - category -dropdown ', async () => { + await testSubjects.click('settingsSearchBar'); + await a11y.testAppSnapshot(); + }); + + // clicking on the toggle button + it('adv settings - toggle ', async () => { + await testSubjects.click('advancedSetting-editField-csv:quoteValues'); + await a11y.testAppSnapshot(); + }); + + // clicking on editor panel + it('adv settings - edit ', async () => { + await testSubjects.click('advancedSetting-editField-csv:separator'); + await a11y.testAppSnapshot(); + }); + + // clicking on save button + it('adv settings - save', async () => { + await testSubjects.click('advancedSetting-saveButton'); + await a11y.testAppSnapshot(); + }); + }); +} diff --git a/x-pack/test/accessibility/apps/home.ts b/x-pack/test/accessibility/apps/home.ts index a03050bd76a71..110201674b39a 100644 --- a/x-pack/test/accessibility/apps/home.ts +++ b/x-pack/test/accessibility/apps/home.ts @@ -11,6 +11,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const a11y = getService('a11y'); const retry = getService('retry'); const globalNav = getService('globalNav'); + const testSubjects = getService('testSubjects'); describe('Kibana Home', () => { before(async () => { @@ -46,15 +47,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await a11y.testAppSnapshot(); }); - // issue: https://github.com/elastic/kibana/issues/38980 - it.skip('navigating back to home page from console meets a11y requirements', async () => { + it('navigating back to home page from console meets a11y requirements', async () => { await PageObjects.home.clickOnLogo(); await a11y.testAppSnapshot(); }); - // Extra clickon logo step here will be removed after preceding test is fixed. it('click on Add logs panel to open all log examples page meets a11y requirements ', async () => { - await PageObjects.home.clickOnLogo(); await PageObjects.home.clickOnAddData(); await a11y.testAppSnapshot(); }); @@ -85,9 +83,16 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await a11y.testAppSnapshot(); }); - it('unDock the side nav', async () => { + // TODO https://github.com/elastic/kibana/issues/77828 + it.skip('undock the side nav', async () => { await PageObjects.home.dockTheSideNav(); await a11y.testAppSnapshot(); }); + + it('passes with searchbox open', async () => { + await PageObjects.common.navigateToApp('home'); + await testSubjects.click('header-search'); + await a11y.testAppSnapshot(); + }); }); } diff --git a/x-pack/test/accessibility/config.ts b/x-pack/test/accessibility/config.ts index 1163b74b24628..915872d8b3fb0 100644 --- a/x-pack/test/accessibility/config.ts +++ b/x-pack/test/accessibility/config.ts @@ -21,6 +21,7 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { require.resolve('./apps/search_profiler'), require.resolve('./apps/uptime'), require.resolve('./apps/spaces'), + require.resolve('./apps/advanced_settings'), require.resolve('./apps/dashboard_edit_panel'), ], diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/index.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/index.ts index 75544b7fd4169..03775b88cfdec 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/index.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/index.ts @@ -5,10 +5,14 @@ */ import { FtrProviderContext } from '../../../common/ftr_provider_context'; +import { buildUp, tearDown } from '..'; // eslint-disable-next-line import/no-default-export -export default function actionsTests({ loadTestFile }: FtrProviderContext) { +export default function actionsTests({ loadTestFile, getService }: FtrProviderContext) { describe('Actions', () => { + before(async () => buildUp(getService)); + after(async () => tearDown(getService)); + loadTestFile(require.resolve('./create')); loadTestFile(require.resolve('./delete')); loadTestFile(require.resolve('./get_all')); @@ -19,5 +23,8 @@ export default function actionsTests({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./builtin_action_types/es_index')); loadTestFile(require.resolve('./builtin_action_types/webhook')); loadTestFile(require.resolve('./type_not_enabled')); + + // note that this test will destroy existing spaces + loadTestFile(require.resolve('./migrations')); }); } diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/actions/migrations.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/migrations.ts new file mode 100644 index 0000000000000..1dd88832e38b7 --- /dev/null +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/actions/migrations.ts @@ -0,0 +1,54 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import expect from '@kbn/expect'; +import { getUrlPrefix } from '../../../common/lib'; +import { FtrProviderContext } from '../../../common/ftr_provider_context'; + +// eslint-disable-next-line import/no-default-export +export default function createGetTests({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + const esArchiver = getService('esArchiver'); + + describe('migrations', () => { + before(async () => { + await esArchiver.load('actions'); + }); + + after(async () => { + await esArchiver.unload('actions'); + }); + + it('7.10.0 migrates the `casesConfiguration` to be the `incidentConfiguration` in `config`', async () => { + const response = await supertest.get( + `${getUrlPrefix(``)}/api/actions/action/791a2ab1-784a-46ea-aa68-04c837e5da2d` + ); + + expect(response.status).to.eql(200); + expect(response.body.config).key('incidentConfiguration'); + expect(response.body.config).not.key('casesConfiguration'); + expect(response.body.config.incidentConfiguration).to.eql({ + mapping: [ + { + actionType: 'overwrite', + source: 'title', + target: 'summary', + }, + { + actionType: 'overwrite', + source: 'description', + target: 'description', + }, + { + actionType: 'append', + source: 'comments', + target: 'comments', + }, + ], + }); + }); + }); +} diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/index.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/index.ts index 3a3fed22f0206..1907eed728053 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/index.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/index.ts @@ -5,10 +5,14 @@ */ import { FtrProviderContext } from '../../../common/ftr_provider_context'; +import { buildUp, tearDown } from '..'; // eslint-disable-next-line import/no-default-export -export default function alertingTests({ loadTestFile }: FtrProviderContext) { +export default function alertingTests({ loadTestFile, getService }: FtrProviderContext) { describe('Alerting', () => { + before(async () => buildUp(getService)); + after(async () => tearDown(getService)); + loadTestFile(require.resolve('./create')); loadTestFile(require.resolve('./delete')); loadTestFile(require.resolve('./disable')); diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/index.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/index.ts index 281096f8a3592..49227c2d5cdf8 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/index.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/index.ts @@ -8,28 +8,26 @@ import { FtrProviderContext } from '../../common/ftr_provider_context'; import { Spaces } from '../scenarios'; // eslint-disable-next-line import/no-default-export -export default function alertingApiIntegrationTests({ - loadTestFile, - getService, -}: FtrProviderContext) { - const spacesService = getService('spaces'); - const esArchiver = getService('esArchiver'); - +export default function alertingApiIntegrationTests({ loadTestFile }: FtrProviderContext) { describe('alerting api integration spaces only', function () { this.tags('ciGroup9'); - before(async () => { - for (const space of Object.values(Spaces)) { - if (space.id === 'default') continue; - - const { id, name, disabledFeatures } = space; - await spacesService.create({ id, name, disabledFeatures }); - } - }); - - after(async () => await esArchiver.unload('empty_kibana')); - loadTestFile(require.resolve('./actions')); loadTestFile(require.resolve('./alerting')); }); } + +export async function buildUp(getService: FtrProviderContext['getService']) { + const spacesService = getService('spaces'); + for (const space of Object.values(Spaces)) { + if (space.id === 'default') continue; + + const { id, name, disabledFeatures } = space; + await spacesService.create({ id, name, disabledFeatures }); + } +} + +export async function tearDown(getService: FtrProviderContext['getService']) { + const esArchiver = getService('esArchiver'); + await esArchiver.unload('empty_kibana'); +} diff --git a/x-pack/test/api_integration/apis/metrics_ui/metrics_explorer.ts b/x-pack/test/api_integration/apis/metrics_ui/metrics_explorer.ts index 16809fba8c8df..bd10a854d006f 100644 --- a/x-pack/test/api_integration/apis/metrics_ui/metrics_explorer.ts +++ b/x-pack/test/api_integration/apis/metrics_ui/metrics_explorer.ts @@ -239,13 +239,7 @@ export default function ({ getService }: FtrProviderContext) { .send(postBody) .expect(200); const body = decodeOrThrow(metricsExplorerResponseRT)(response.body); - expect(body.series).length(1); - expect(body.series[0]!).to.have.property('rows'); - expect(body.series[0]!.rows).length(0); - expect(body.pageInfo).to.eql({ - afterKey: null, - total: 0, - }); + expect(body.series).length(0); }); it('should work when there is no data with groupBy', async () => { const postBody = { diff --git a/x-pack/test/apm_api_integration/basic/tests/index.ts b/x-pack/test/apm_api_integration/basic/tests/index.ts index 9e1cb1f5872f1..19dd82d617bd9 100644 --- a/x-pack/test/apm_api_integration/basic/tests/index.ts +++ b/x-pack/test/apm_api_integration/basic/tests/index.ts @@ -45,6 +45,7 @@ export default function apmApiIntegrationTests({ loadTestFile }: FtrProviderCont loadTestFile(require.resolve('./transaction_groups/transaction_charts')); loadTestFile(require.resolve('./transaction_groups/error_rate')); loadTestFile(require.resolve('./transaction_groups/breakdown')); + loadTestFile(require.resolve('./transaction_groups/distribution')); }); describe('Observability overview', function () { diff --git a/x-pack/test/apm_api_integration/basic/tests/observability_overview/observability_overview.ts b/x-pack/test/apm_api_integration/basic/tests/observability_overview/observability_overview.ts index 41564af55562a..01fa09630e85a 100644 --- a/x-pack/test/apm_api_integration/basic/tests/observability_overview/observability_overview.ts +++ b/x-pack/test/apm_api_integration/basic/tests/observability_overview/observability_overview.ts @@ -45,9 +45,9 @@ export default function ApiTest({ getService }: FtrProviderContext) { expect(response.body.serviceCount).to.be.greaterThan(0); expect(response.body.transactionCoordinates.length).to.be.greaterThan(0); - expectSnapshot(response.body.serviceCount).toMatchInline(`7`); + expectSnapshot(response.body.serviceCount).toMatchInline(`8`); - expectSnapshot(response.body.transactionCoordinates.length).toMatchInline(`31`); + expectSnapshot(response.body.transactionCoordinates.length).toMatchInline(`30`); expectSnapshot( response.body.transactionCoordinates @@ -59,24 +59,24 @@ export default function ApiTest({ getService }: FtrProviderContext) { ).toMatchInline(` Array [ Object { - "x": "2020-09-15T08:53:00.000Z", - "y": 1, + "x": "2020-09-29T14:30:00.000Z", + "y": 2.26666666666667, }, Object { - "x": "2020-09-15T08:54:00.000Z", - "y": 1.86666666666667, + "x": "2020-09-29T14:31:00.000Z", + "y": 1.03333333333333, }, Object { - "x": "2020-09-15T08:55:00.000Z", - "y": 0.966666666666667, + "x": "2020-09-29T14:32:00.000Z", + "y": 1.9, }, Object { - "x": "2020-09-15T08:56:00.000Z", - "y": 1.93333333333333, + "x": "2020-09-29T14:33:00.000Z", + "y": 0.8, }, Object { - "x": "2020-09-15T08:57:00.000Z", - "y": 1.1, + "x": "2020-09-29T14:34:00.000Z", + "y": 1.9, }, ] `); diff --git a/x-pack/test/apm_api_integration/basic/tests/services/top_services.ts b/x-pack/test/apm_api_integration/basic/tests/services/top_services.ts index 0e0d5cb21b71a..b4bbec1e0f861 100644 --- a/x-pack/test/apm_api_integration/basic/tests/services/top_services.ts +++ b/x-pack/test/apm_api_integration/basic/tests/services/top_services.ts @@ -68,11 +68,12 @@ export default function ApiTest({ getService }: FtrProviderContext) { Array [ "opbeans-python", "opbeans-node", - "opbeans-go", "opbeans-ruby", + "opbeans-go", "opbeans-dotnet", "opbeans-java", "opbeans-rum", + "elastic-co-frontend", ] `); }); @@ -91,76 +92,84 @@ export default function ApiTest({ getService }: FtrProviderContext) { Array [ Object { "avgResponseTime": Object { - "value": 213583.765249538, + "value": 219090.56261343, }, "transactionErrorRate": Object { - "value": 0, + "value": 0.317604355716878, }, "transactionsPerMinute": Object { - "value": 18.0333333333333, + "value": 18.3666666666667, }, }, Object { "avgResponseTime": Object { - "value": 600255.707964602, + "value": 600888.274678112, }, "transactionErrorRate": Object { "value": 0, }, "transactionsPerMinute": Object { - "value": 7.53333333333333, + "value": 7.76666666666667, }, }, Object { "avgResponseTime": Object { - "value": 1818501.06081081, + "value": 120020.290123457, }, "transactionErrorRate": Object { - "value": 0.0202702702702703, + "value": 0.0185185185185185, }, "transactionsPerMinute": Object { - "value": 4.93333333333333, + "value": 5.4, }, }, Object { "avgResponseTime": Object { - "value": 290900.571428571, + "value": 489731.277777778, }, "transactionErrorRate": Object { - "value": 0.0136054421768707, + "value": 0.0238095238095238, }, "transactionsPerMinute": Object { - "value": 4.9, + "value": 4.2, }, }, Object { "avgResponseTime": Object { - "value": 1123903.7027027, + "value": 1250898.95081967, }, "transactionErrorRate": Object { - "value": 0.00900900900900901, + "value": 0.0163934426229508, }, "transactionsPerMinute": Object { - "value": 3.7, + "value": 4.06666666666667, }, }, Object { "avgResponseTime": Object { - "value": 80364.6296296296, + "value": 311287.565217391, }, "transactionErrorRate": Object { - "value": 0.185185185185185, + "value": 0.152173913043478, }, "transactionsPerMinute": Object { - "value": 3.6, + "value": 3.06666666666667, }, }, Object { "avgResponseTime": Object { - "value": 1365102.94117647, + "value": 1827564.51612903, }, "transactionsPerMinute": Object { - "value": 2.26666666666667, + "value": 2.06666666666667, + }, + }, + Object { + "avgResponseTime": Object { + "value": 7480000, + }, + "transactionsPerMinute": Object { + "value": 0.0333333333333333, }, }, ] @@ -178,10 +187,10 @@ export default function ApiTest({ getService }: FtrProviderContext) { "testing", ], Array [ - "testing", + "production", ], Array [ - "production", + "testing", ], Array [ "production", @@ -192,6 +201,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { Array [ "testing", ], + Array [], ] `); }); diff --git a/x-pack/test/apm_api_integration/basic/tests/settings/agent_configuration.ts b/x-pack/test/apm_api_integration/basic/tests/settings/agent_configuration.ts index 70ddf276ab35c..a327f492f45fe 100644 --- a/x-pack/test/apm_api_integration/basic/tests/settings/agent_configuration.ts +++ b/x-pack/test/apm_api_integration/basic/tests/settings/agent_configuration.ts @@ -136,6 +136,7 @@ export default function agentConfigurationTests({ getService }: FtrProviderConte expectSnapshot(body).toMatchInline(` Array [ "ALL_OPTION_VALUE", + "elastic-co-frontend", "opbeans-dotnet", "opbeans-go", "opbeans-java", diff --git a/x-pack/test/apm_api_integration/basic/tests/traces/__snapshots__/top_traces.snap b/x-pack/test/apm_api_integration/basic/tests/traces/__snapshots__/top_traces.snap index 157bbccd109be..9cecb0b3b1dd7 100644 --- a/x-pack/test/apm_api_integration/basic/tests/traces/__snapshots__/top_traces.snap +++ b/x-pack/test/apm_api_integration/basic/tests/traces/__snapshots__/top_traces.snap @@ -3,44 +3,44 @@ exports[`Top traces when data is loaded returns the correct buckets 1`] = ` Array [ Object { - "averageResponseTime": 1137, + "averageResponseTime": 1756, "impact": 0, "key": Object { - "service.name": "opbeans-node", - "transaction.name": "POST /api/orders", + "service.name": "opbeans-java", + "transaction.name": "DispatcherServlet#doPost", }, - "serviceName": "opbeans-node", - "transactionName": "POST /api/orders", + "serviceName": "opbeans-java", + "transactionName": "DispatcherServlet#doPost", "transactionType": "request", "transactionsPerMinute": 0.0333333333333333, }, Object { - "averageResponseTime": 3347, - "impact": 0.00355908118244852, + "averageResponseTime": 3251, + "impact": 0.00224063647384788, "key": Object { - "service.name": "opbeans-python", - "transaction.name": "GET opbeans.views.stats", + "service.name": "opbeans-node", + "transaction.name": "GET /api/types", }, - "serviceName": "opbeans-python", - "transactionName": "GET opbeans.views.stats", + "serviceName": "opbeans-node", + "transactionName": "GET /api/types", "transactionType": "request", "transactionsPerMinute": 0.0333333333333333, }, Object { - "averageResponseTime": 4479, - "impact": 0.00538210376096966, + "averageResponseTime": 3813, + "impact": 0.00308293593759538, "key": Object { - "service.name": "opbeans-node", - "transaction.name": "GET /api/customers/:id", + "service.name": "opbeans-java", + "transaction.name": "ResourceHttpRequestHandler", }, - "serviceName": "opbeans-node", - "transactionName": "GET /api/customers/:id", + "serviceName": "opbeans-java", + "transactionName": "ResourceHttpRequestHandler", "transactionType": "request", "transactionsPerMinute": 0.0333333333333333, }, Object { - "averageResponseTime": 7287, - "impact": 0.00990423043984542, + "averageResponseTime": 7741, + "impact": 0.0089700396628626, "key": Object { "service.name": "opbeans-node", "transaction.name": "GET /api/products/top", @@ -51,20 +51,20 @@ Array [ "transactionsPerMinute": 0.0333333333333333, }, Object { - "averageResponseTime": 8023, - "impact": 0.011089517204679, + "averageResponseTime": 7994, + "impact": 0.00934922429689839, "key": Object { - "service.name": "opbeans-ruby", - "transaction.name": "Api::OrdersController#show", + "service.name": "opbeans-go", + "transaction.name": "POST /api/orders", }, - "serviceName": "opbeans-ruby", - "transactionName": "Api::OrdersController#show", + "serviceName": "opbeans-go", + "transactionName": "POST /api/orders", "transactionType": "request", "transactionsPerMinute": 0.0333333333333333, }, Object { - "averageResponseTime": 8282, - "impact": 0.0115066221939342, + "averageResponseTime": 10317, + "impact": 0.0128308286639543, "key": Object { "service.name": "opbeans-node", "transaction.name": "GET /api/orders/:id", @@ -75,368 +75,392 @@ Array [ "transactionsPerMinute": 0.0333333333333333, }, Object { - "averageResponseTime": 12116, - "impact": 0.0176810643900915, + "averageResponseTime": 10837, + "impact": 0.0136101804809449, "key": Object { - "service.name": "opbeans-ruby", - "transaction.name": "Api::ProductsController#top", + "service.name": "opbeans-java", + "transaction.name": "APIRestController#topProducts", }, - "serviceName": "opbeans-ruby", - "transactionName": "Api::ProductsController#top", + "serviceName": "opbeans-java", + "transactionName": "APIRestController#topProducts", "transactionType": "request", "transactionsPerMinute": 0.0333333333333333, }, Object { - "averageResponseTime": 6451, - "impact": 0.018946873353623, + "averageResponseTime": 6495, + "impact": 0.0168369967539847, "key": Object { "service.name": "opbeans-node", - "transaction.name": "GET /api/products", + "transaction.name": "GET /api/products/:id", }, "serviceName": "opbeans-node", - "transactionName": "GET /api/products", + "transactionName": "GET /api/products/:id", "transactionType": "request", "transactionsPerMinute": 0.0666666666666667, }, Object { - "averageResponseTime": 13360, - "impact": 0.019684456693696, + "averageResponseTime": 13952, + "impact": 0.0182787976154172, "key": Object { "service.name": "opbeans-java", - "transaction.name": "APIRestController#customers", + "transaction.name": "APIRestController#stats", }, "serviceName": "opbeans-java", - "transactionName": "APIRestController#customers", + "transactionName": "APIRestController#stats", "transactionType": "request", "transactionsPerMinute": 0.0333333333333333, }, Object { - "averageResponseTime": 7903, - "impact": 0.0236236026539988, + "averageResponseTime": 7324.5, + "impact": 0.0193234288008834, "key": Object { "service.name": "opbeans-java", - "transaction.name": "APIRestController#product", + "transaction.name": "APIRestController#customerWhoBought", }, "serviceName": "opbeans-java", - "transactionName": "APIRestController#product", + "transactionName": "APIRestController#customerWhoBought", "transactionType": "request", "transactionsPerMinute": 0.0666666666666667, }, Object { - "averageResponseTime": 17913, - "impact": 0.0270168081071296, + "averageResponseTime": 7089.66666666667, + "impact": 0.0292451769325711, "key": Object { - "service.name": "opbeans-node", - "transaction.name": "GET /api/stats", + "service.name": "opbeans-go", + "transaction.name": "GET /api/customers/:id", }, - "serviceName": "opbeans-node", - "transactionName": "GET /api/stats", + "serviceName": "opbeans-go", + "transactionName": "GET /api/customers/:id", "transactionType": "request", - "transactionsPerMinute": 0.0333333333333333, + "transactionsPerMinute": 0.1, }, Object { - "averageResponseTime": 6065.66666666667, - "impact": 0.0274741741957338, + "averageResponseTime": 11759.5, + "impact": 0.0326173722945495, "key": Object { - "service.name": "opbeans-java", - "transaction.name": "APIRestController#topProducts", + "service.name": "opbeans-node", + "transaction.name": "GET /api/customers/:id", }, - "serviceName": "opbeans-java", - "transactionName": "APIRestController#topProducts", + "serviceName": "opbeans-node", + "transactionName": "GET /api/customers/:id", "transactionType": "request", - "transactionsPerMinute": 0.1, + "transactionsPerMinute": 0.0666666666666667, }, Object { - "averageResponseTime": 2340.875, - "impact": 0.0283277095019319, + "averageResponseTime": 8109.33333333333, + "impact": 0.0338298638713675, "key": Object { "service.name": "opbeans-java", - "transaction.name": "ResourceHttpRequestHandler", + "transaction.name": "APIRestController#customer", }, "serviceName": "opbeans-java", - "transactionName": "ResourceHttpRequestHandler", + "transactionName": "APIRestController#customer", "transactionType": "request", - "transactionsPerMinute": 0.266666666666667, + "transactionsPerMinute": 0.1, }, Object { - "averageResponseTime": 7340.66666666667, - "impact": 0.0336341223961255, + "averageResponseTime": 8677.33333333333, + "impact": 0.0363837398255058, "key": Object { "service.name": "opbeans-java", - "transaction.name": "APIRestController#customerWhoBought", + "transaction.name": "APIRestController#order", }, "serviceName": "opbeans-java", - "transactionName": "APIRestController#customerWhoBought", + "transactionName": "APIRestController#order", "transactionType": "request", "transactionsPerMinute": 0.1, }, Object { - "averageResponseTime": 7689, - "impact": 0.0353170363489122, + "averageResponseTime": 26624, + "impact": 0.0372710018940797, "key": Object { "service.name": "opbeans-node", - "transaction.name": "GET /api/types", + "transaction.name": "GET /api/customers", }, "serviceName": "opbeans-node", - "transactionName": "GET /api/types", + "transactionName": "GET /api/customers", "transactionType": "request", - "transactionsPerMinute": 0.1, + "transactionsPerMinute": 0.0333333333333333, }, Object { - "averageResponseTime": 11598, - "impact": 0.0355247836215529, + "averageResponseTime": 5687.8, + "impact": 0.0399912394860756, + "key": Object { + "service.name": "opbeans-go", + "transaction.name": "GET /api/products", + }, + "serviceName": "opbeans-go", + "transactionName": "GET /api/products", + "transactionType": "request", + "transactionsPerMinute": 0.166666666666667, + }, + Object { + "averageResponseTime": 9496.33333333333, + "impact": 0.0400661771607863, "key": Object { "service.name": "opbeans-node", - "transaction.name": "GET /api/products/:id/customers", + "transaction.name": "GET /api/products", }, "serviceName": "opbeans-node", - "transactionName": "GET /api/products/:id/customers", + "transactionName": "GET /api/products", "transactionType": "request", - "transactionsPerMinute": 0.0666666666666667, + "transactionsPerMinute": 0.1, }, Object { - "averageResponseTime": 12077.5, - "impact": 0.0370691993925792, + "averageResponseTime": 10717.3333333333, + "impact": 0.0455561112100871, "key": Object { "service.name": "opbeans-java", - "transaction.name": "APIRestController#order", + "transaction.name": "APIRestController#products", }, "serviceName": "opbeans-java", - "transactionName": "APIRestController#order", + "transactionName": "APIRestController#products", "transactionType": "request", - "transactionsPerMinute": 0.0666666666666667, + "transactionsPerMinute": 0.1, }, Object { - "averageResponseTime": 6296.5, - "impact": 0.0387295671297305, + "averageResponseTime": 8438.75, + "impact": 0.04795861306131, "key": Object { - "service.name": "opbeans-ruby", - "transaction.name": "Api::TypesController#index", + "service.name": "opbeans-node", + "transaction.name": "GET /api/orders", }, - "serviceName": "opbeans-ruby", - "transactionName": "Api::TypesController#index", + "serviceName": "opbeans-node", + "transactionName": "GET /api/orders", "transactionType": "request", "transactionsPerMinute": 0.133333333333333, }, Object { - "averageResponseTime": 28181, - "impact": 0.0435528468317365, + "averageResponseTime": 17322.5, + "impact": 0.0492925036711592, + "key": Object { + "service.name": "opbeans-java", + "transaction.name": "APIRestController#customers", + }, + "serviceName": "opbeans-java", + "transactionName": "APIRestController#customers", + "transactionType": "request", + "transactionsPerMinute": 0.0666666666666667, + }, + Object { + "averageResponseTime": 34696, + "impact": 0.0493689400993641, "key": Object { "service.name": "opbeans-python", - "transaction.name": "GET opbeans.views.customer", + "transaction.name": "GET opbeans.views.product", }, "serviceName": "opbeans-python", - "transactionName": "GET opbeans.views.customer", + "transactionName": "GET opbeans.views.product", "transactionType": "request", "transactionsPerMinute": 0.0333333333333333, }, Object { - "averageResponseTime": 7439, - "impact": 0.0460892960907213, + "averageResponseTime": 7321.4, + "impact": 0.0522330580268044, "key": Object { "service.name": "opbeans-go", - "transaction.name": "GET /api/customers/:id", + "transaction.name": "GET /api/types/:id", }, "serviceName": "opbeans-go", - "transactionName": "GET /api/customers/:id", + "transactionName": "GET /api/types/:id", "transactionType": "request", - "transactionsPerMinute": 0.133333333333333, + "transactionsPerMinute": 0.166666666666667, }, Object { - "averageResponseTime": 10471.3333333333, - "impact": 0.0487594121995447, + "averageResponseTime": 9663.5, + "impact": 0.0553010064294577, "key": Object { - "service.name": "opbeans-node", - "transaction.name": "GET /api/types/:id", + "service.name": "opbeans-ruby", + "transaction.name": "Api::OrdersController#show", }, - "serviceName": "opbeans-node", - "transactionName": "GET /api/types/:id", + "serviceName": "opbeans-ruby", + "transactionName": "Api::OrdersController#show", "transactionType": "request", - "transactionsPerMinute": 0.1, + "transactionsPerMinute": 0.133333333333333, }, Object { - "averageResponseTime": 20810.5, - "impact": 0.0651972138417402, + "averageResponseTime": 44819, + "impact": 0.0645408217212785, "key": Object { - "service.name": "opbeans-node", - "transaction.name": "GET /api/customers", + "service.name": "opbeans-python", + "transaction.name": "GET opbeans.views.products", }, - "serviceName": "opbeans-node", - "transactionName": "GET /api/customers", + "serviceName": "opbeans-python", + "transactionName": "GET opbeans.views.products", "transactionType": "request", - "transactionsPerMinute": 0.0666666666666667, + "transactionsPerMinute": 0.0333333333333333, }, Object { - "averageResponseTime": 11732.25, - "impact": 0.0737454504555125, + "averageResponseTime": 14944, + "impact": 0.0645603055167033, "key": Object { - "service.name": "opbeans-java", - "transaction.name": "APIRestController#customer", + "service.name": "opbeans-ruby", + "transaction.name": "Api::ProductsController#index", }, - "serviceName": "opbeans-java", - "transactionName": "APIRestController#customer", + "serviceName": "opbeans-ruby", + "transactionName": "Api::ProductsController#index", "transactionType": "request", - "transactionsPerMinute": 0.133333333333333, + "transactionsPerMinute": 0.1, }, Object { - "averageResponseTime": 47646, - "impact": 0.0749001387848408, + "averageResponseTime": 24056, + "impact": 0.0694762169777207, "key": Object { "service.name": "opbeans-python", - "transaction.name": "GET opbeans.views.customers", + "transaction.name": "GET opbeans.views.product_types", }, "serviceName": "opbeans-python", - "transactionName": "GET opbeans.views.customers", + "transactionName": "GET opbeans.views.product_types", "transactionType": "request", - "transactionsPerMinute": 0.0333333333333333, + "transactionsPerMinute": 0.0666666666666667, }, Object { - "averageResponseTime": 13160.75, - "impact": 0.0829475273227119, + "averageResponseTime": 8401.33333333333, + "impact": 0.0729173550004329, "key": Object { - "service.name": "opbeans-python", - "transaction.name": "GET opbeans.views.products", + "service.name": "opbeans-go", + "transaction.name": "GET /api/types", }, - "serviceName": "opbeans-python", - "transactionName": "GET opbeans.views.products", + "serviceName": "opbeans-go", + "transactionName": "GET /api/types", "transactionType": "request", - "transactionsPerMinute": 0.133333333333333, + "transactionsPerMinute": 0.2, }, Object { - "averageResponseTime": 4131.46153846154, - "impact": 0.0846642605989518, + "averageResponseTime": 13182, + "impact": 0.0763944631070062, "key": Object { - "service.name": "opbeans-go", - "transaction.name": "GET /api/types/:id", + "service.name": "opbeans-node", + "transaction.name": "GET /api/products/:id/customers", }, - "serviceName": "opbeans-go", - "transactionName": "GET /api/types/:id", + "serviceName": "opbeans-node", + "transactionName": "GET /api/products/:id/customers", "transactionType": "request", - "transactionsPerMinute": 0.433333333333333, + "transactionsPerMinute": 0.133333333333333, }, Object { - "averageResponseTime": 13869.25, - "impact": 0.0875115255449106, + "averageResponseTime": 7923, + "impact": 0.0804905564066893, "key": Object { "service.name": "opbeans-ruby", - "transaction.name": "Api::StatsController#index", + "transaction.name": "Api::TypesController#index", }, "serviceName": "opbeans-ruby", - "transactionName": "Api::StatsController#index", + "transactionName": "Api::TypesController#index", "transactionType": "request", - "transactionsPerMinute": 0.133333333333333, + "transactionsPerMinute": 0.233333333333333, }, Object { - "averageResponseTime": 20643.3333333333, - "impact": 0.0979037205088655, + "averageResponseTime": 19838.6666666667, + "impact": 0.0865680018257216, "key": Object { "service.name": "opbeans-ruby", - "transaction.name": "Api::ProductsController#show", + "transaction.name": "Api::CustomersController#index", }, "serviceName": "opbeans-ruby", - "transactionName": "Api::ProductsController#show", + "transactionName": "Api::CustomersController#index", "transactionType": "request", "transactionsPerMinute": 0.1, }, Object { - "averageResponseTime": 15596.5, - "impact": 0.0986380829609906, + "averageResponseTime": 7952.33333333333, + "impact": 0.104635475198455, "key": Object { - "service.name": "opbeans-ruby", - "transaction.name": "Api::TypesController#show", + "service.name": "opbeans-go", + "transaction.name": "GET /api/orders/:id", }, - "serviceName": "opbeans-ruby", - "transactionName": "Api::TypesController#show", + "serviceName": "opbeans-go", + "transactionName": "GET /api/orders/:id", "transactionType": "request", - "transactionsPerMinute": 0.133333333333333, + "transactionsPerMinute": 0.3, }, Object { - "averageResponseTime": 20989, - "impact": 0.0995737509098606, + "averageResponseTime": 19666, + "impact": 0.115266133732905, "key": Object { - "service.name": "opbeans-python", - "transaction.name": "GET opbeans.views.orders", + "service.name": "opbeans-node", + "transaction.name": "GET /api/stats", }, - "serviceName": "opbeans-python", - "transactionName": "GET opbeans.views.orders", + "serviceName": "opbeans-node", + "transactionName": "GET /api/stats", "transactionType": "request", - "transactionsPerMinute": 0.1, + "transactionsPerMinute": 0.133333333333333, }, Object { - "averageResponseTime": 74419, - "impact": 0.118016555299635, + "averageResponseTime": 40188.5, + "impact": 0.117833498468491, "key": Object { "service.name": "opbeans-python", - "transaction.name": "GET opbeans.views.product_type", + "transaction.name": "GET opbeans.views.customer", }, "serviceName": "opbeans-python", - "transactionName": "GET opbeans.views.product_type", + "transactionName": "GET opbeans.views.customer", "transactionType": "request", - "transactionsPerMinute": 0.0333333333333333, + "transactionsPerMinute": 0.0666666666666667, }, Object { - "averageResponseTime": 10678.4285714286, - "impact": 0.118548001811041, + "averageResponseTime": 26802.3333333333, + "impact": 0.117878461073318, "key": Object { - "service.name": "opbeans-go", - "transaction.name": "GET /api/orders/:id", + "service.name": "opbeans-ruby", + "transaction.name": "Api::ProductsController#show", }, - "serviceName": "opbeans-go", - "transactionName": "GET /api/orders/:id", + "serviceName": "opbeans-ruby", + "transactionName": "Api::ProductsController#show", "transactionType": "request", - "transactionsPerMinute": 0.233333333333333, + "transactionsPerMinute": 0.1, }, Object { - "averageResponseTime": 27078.6666666667, - "impact": 0.12899495187011, + "averageResponseTime": 14709.3333333333, + "impact": 0.129642177249393, "key": Object { "service.name": "opbeans-ruby", - "transaction.name": "Api::OrdersController#index", + "transaction.name": "Api::StatsController#index", }, "serviceName": "opbeans-ruby", - "transactionName": "Api::OrdersController#index", + "transactionName": "Api::StatsController#index", "transactionType": "request", - "transactionsPerMinute": 0.1, + "transactionsPerMinute": 0.2, }, Object { - "averageResponseTime": 11827.4285714286, - "impact": 0.13150080269359, + "averageResponseTime": 15432, + "impact": 0.136140772400299, "key": Object { - "service.name": "opbeans-go", - "transaction.name": "GET /api/customers", + "service.name": "opbeans-ruby", + "transaction.name": "Api::TypesController#show", }, - "serviceName": "opbeans-go", - "transactionName": "GET /api/customers", + "serviceName": "opbeans-ruby", + "transactionName": "Api::TypesController#show", "transactionType": "request", - "transactionsPerMinute": 0.233333333333333, + "transactionsPerMinute": 0.2, }, Object { - "averageResponseTime": 21770.75, - "impact": 0.138411217785846, + "averageResponseTime": 33266.3333333333, + "impact": 0.146942288833089, "key": Object { "service.name": "opbeans-python", - "transaction.name": "GET opbeans.views.product", + "transaction.name": "GET opbeans.views.orders", }, "serviceName": "opbeans-python", - "transactionName": "GET opbeans.views.product", + "transactionName": "GET opbeans.views.orders", "transactionType": "request", - "transactionsPerMinute": 0.133333333333333, + "transactionsPerMinute": 0.1, }, Object { - "averageResponseTime": 10252, - "impact": 0.146761369790822, + "averageResponseTime": 33445.3333333333, + "impact": 0.147747119459481, "key": Object { - "service.name": "opbeans-go", - "transaction.name": "GET /api/types", + "service.name": "opbeans-python", + "transaction.name": "GET opbeans.views.customers", }, - "serviceName": "opbeans-go", - "transactionName": "GET /api/types", + "serviceName": "opbeans-python", + "transactionName": "GET opbeans.views.customers", "transactionType": "request", - "transactionsPerMinute": 0.3, + "transactionsPerMinute": 0.1, }, Object { - "averageResponseTime": 100570, - "impact": 0.160131275662626, + "averageResponseTime": 107438, + "impact": 0.158391266775379, "key": Object { "service.name": "opbeans-python", "transaction.name": "GET opbeans.views.top_products", @@ -447,44 +471,56 @@ Array [ "transactionsPerMinute": 0.0333333333333333, }, Object { - "averageResponseTime": 15505, - "impact": 0.197928395731435, + "averageResponseTime": 27696.75, + "impact": 0.163410592227497, "key": Object { "service.name": "opbeans-ruby", - "transaction.name": "Api::CustomersController#index", + "transaction.name": "Api::ProductsController#top", }, "serviceName": "opbeans-ruby", - "transactionName": "Api::CustomersController#index", + "transactionName": "Api::ProductsController#top", "transactionType": "request", - "transactionsPerMinute": 0.266666666666667, + "transactionsPerMinute": 0.133333333333333, }, Object { - "averageResponseTime": 22856.5, - "impact": 0.219023601346318, + "averageResponseTime": 55832.5, + "impact": 0.164726497795416, "key": Object { - "service.name": "opbeans-go", - "transaction.name": "GET /api/products", + "service.name": "opbeans-python", + "transaction.name": "GET opbeans.views.stats", }, - "serviceName": "opbeans-go", - "transactionName": "GET /api/products", + "serviceName": "opbeans-python", + "transactionName": "GET opbeans.views.stats", "transactionType": "request", - "transactionsPerMinute": 0.2, + "transactionsPerMinute": 0.0666666666666667, }, Object { - "averageResponseTime": 17250.125, - "impact": 0.220411804051871, + "averageResponseTime": 10483.6363636364, + "impact": 0.170204441816763, "key": Object { - "service.name": "opbeans-ruby", - "transaction.name": "Api::ProductsController#index", + "service.name": "opbeans-python", + "transaction.name": "GET opbeans.views.order", }, - "serviceName": "opbeans-ruby", - "transactionName": "Api::ProductsController#index", + "serviceName": "opbeans-python", + "transactionName": "GET opbeans.views.order", "transactionType": "request", - "transactionsPerMinute": 0.266666666666667, + "transactionsPerMinute": 0.366666666666667, + }, + Object { + "averageResponseTime": 24524.5, + "impact": 0.217905269277069, + "key": Object { + "service.name": "opbeans-go", + "transaction.name": "GET /api/customers", + }, + "serviceName": "opbeans-go", + "transactionName": "GET /api/customers", + "transactionType": "request", + "transactionsPerMinute": 0.2, }, Object { - "averageResponseTime": 20089.5555555556, - "impact": 0.289346858357169, + "averageResponseTime": 14822.3, + "impact": 0.219517928036841, "key": Object { "service.name": "opbeans-ruby", "transaction.name": "Api::CustomersController#show", @@ -492,11 +528,11 @@ Array [ "serviceName": "opbeans-ruby", "transactionName": "Api::CustomersController#show", "transactionType": "request", - "transactionsPerMinute": 0.3, + "transactionsPerMinute": 0.333333333333333, }, Object { - "averageResponseTime": 26487.8571428571, - "impact": 0.296769394633144, + "averageResponseTime": 44771.75, + "impact": 0.26577545588222, "key": Object { "service.name": "opbeans-go", "transaction.name": "GET /api/stats", @@ -504,23 +540,35 @@ Array [ "serviceName": "opbeans-go", "transactionName": "GET /api/stats", "transactionType": "request", + "transactionsPerMinute": 0.133333333333333, + }, + Object { + "averageResponseTime": 39421.4285714286, + "impact": 0.410949215592138, + "key": Object { + "service.name": "opbeans-ruby", + "transaction.name": "Api::OrdersController#index", + }, + "serviceName": "opbeans-ruby", + "transactionName": "Api::OrdersController#index", + "transactionType": "request", "transactionsPerMinute": 0.233333333333333, }, Object { - "averageResponseTime": 14957.5384615385, - "impact": 0.311316535049912, + "averageResponseTime": 33513.3076923077, + "impact": 0.650334619948262, "key": Object { "service.name": "opbeans-go", - "transaction.name": "GET /api/products/:id/customers", + "transaction.name": "GET /api/products/:id", }, "serviceName": "opbeans-go", - "transactionName": "GET /api/products/:id/customers", + "transactionName": "GET /api/products/:id", "transactionType": "request", "transactionsPerMinute": 0.433333333333333, }, Object { - "averageResponseTime": 30178.5, - "impact": 0.678579893755146, + "averageResponseTime": 28933.2222222222, + "impact": 0.777916011143112, "key": Object { "service.name": "opbeans-node", "transaction.name": "GET /api", @@ -528,23 +576,23 @@ Array [ "serviceName": "opbeans-node", "transactionName": "GET /api", "transactionType": "request", - "transactionsPerMinute": 0.466666666666667, + "transactionsPerMinute": 0.6, }, Object { - "averageResponseTime": 32625.875, - "impact": 0.838843225823637, + "averageResponseTime": 101613, + "impact": 1.06341806051616, "key": Object { "service.name": "opbeans-go", - "transaction.name": "GET /api/products/:id", + "transaction.name": "GET /api/products/:id/customers", }, "serviceName": "opbeans-go", - "transactionName": "GET /api/products/:id", + "transactionName": "GET /api/products/:id/customers", "transactionType": "request", - "transactionsPerMinute": 0.533333333333333, + "transactionsPerMinute": 0.233333333333333, }, Object { - "averageResponseTime": 121200.833333333, - "impact": 1.16929183528418, + "averageResponseTime": 377325, + "impact": 1.12840251327172, "key": Object { "service.name": "opbeans-python", "transaction.name": "GET opbeans.views.product_customers", @@ -552,11 +600,11 @@ Array [ "serviceName": "opbeans-python", "transactionName": "GET opbeans.views.product_customers", "transactionType": "request", - "transactionsPerMinute": 0.2, + "transactionsPerMinute": 0.0666666666666667, }, Object { - "averageResponseTime": 38025.8666666667, - "impact": 3.67248059487481, + "averageResponseTime": 39452.8333333333, + "impact": 3.54517249775948, "key": Object { "service.name": "opbeans-python", "transaction.name": "opbeans.tasks.sync_orders", @@ -567,20 +615,8 @@ Array [ "transactionsPerMinute": 2, }, Object { - "averageResponseTime": 815238, - "impact": 11.8142250451802, - "key": Object { - "service.name": "opbeans-java", - "transaction.name": "DispatcherServlet#doGet", - }, - "serviceName": "opbeans-java", - "transactionName": "DispatcherServlet#doGet", - "transactionType": "request", - "transactionsPerMinute": 0.3, - }, - Object { - "averageResponseTime": 691636.363636364, - "impact": 12.2504266790787, + "averageResponseTime": 715444.444444444, + "impact": 9.64784193809929, "key": Object { "service.name": "opbeans-rum", "transaction.name": "/customers", @@ -588,11 +624,11 @@ Array [ "serviceName": "opbeans-rum", "transactionName": "/customers", "transactionType": "page-load", - "transactionsPerMinute": 0.366666666666667, + "transactionsPerMinute": 0.3, }, Object { - "averageResponseTime": 1590910.5, - "impact": 20.4947467478614, + "averageResponseTime": 833539.125, + "impact": 9.99152559811767, "key": Object { "service.name": "opbeans-go", "transaction.name": "GET /api/orders", @@ -603,8 +639,20 @@ Array [ "transactionsPerMinute": 0.266666666666667, }, Object { - "averageResponseTime": 303589.162790698, - "impact": 21.0214424495446, + "averageResponseTime": 7480000, + "impact": 11.2080443255746, + "key": Object { + "service.name": "elastic-co-frontend", + "transaction.name": "/community/security", + }, + "serviceName": "elastic-co-frontend", + "transactionName": "/community/security", + "transactionType": "page-load", + "transactionsPerMinute": 0.0333333333333333, + }, + Object { + "averageResponseTime": 171383.519230769, + "impact": 13.354173900338, "key": Object { "service.name": "opbeans-ruby", "transaction.name": "Rack", @@ -612,11 +660,23 @@ Array [ "serviceName": "opbeans-ruby", "transactionName": "Rack", "transactionType": "request", - "transactionsPerMinute": 1.43333333333333, + "transactionsPerMinute": 1.73333333333333, }, Object { - "averageResponseTime": 1180200, - "impact": 28.5078585961908, + "averageResponseTime": 1052468.6, + "impact": 15.7712781068549, + "key": Object { + "service.name": "opbeans-java", + "transaction.name": "DispatcherServlet#doGet", + }, + "serviceName": "opbeans-java", + "transactionName": "DispatcherServlet#doGet", + "transactionType": "request", + "transactionsPerMinute": 0.333333333333333, + }, + Object { + "averageResponseTime": 1413866.66666667, + "impact": 31.7829322941256, "key": Object { "service.name": "opbeans-rum", "transaction.name": "/products", @@ -627,8 +687,8 @@ Array [ "transactionsPerMinute": 0.5, }, Object { - "averageResponseTime": 1073178.57142857, - "impact": 48.3903998986838, + "averageResponseTime": 996583.333333333, + "impact": 35.8445542634419, "key": Object { "service.name": "opbeans-rum", "transaction.name": "/dashboard", @@ -636,23 +696,11 @@ Array [ "serviceName": "opbeans-rum", "transactionName": "/dashboard", "transactionType": "page-load", - "transactionsPerMinute": 0.933333333333333, - }, - Object { - "averageResponseTime": 2676214.28571429, - "impact": 60.3366732975087, - "key": Object { - "service.name": "opbeans-rum", - "transaction.name": "/orders", - }, - "serviceName": "opbeans-rum", - "transactionName": "/orders", - "transactionType": "page-load", - "transactionsPerMinute": 0.466666666666667, + "transactionsPerMinute": 0.8, }, Object { - "averageResponseTime": 928922.434782609, - "impact": 68.8131356442496, + "averageResponseTime": 1046912.60465116, + "impact": 67.4671169361798, "key": Object { "service.name": "opbeans-node", "transaction.name": "Process completed order", @@ -660,23 +708,23 @@ Array [ "serviceName": "opbeans-node", "transactionName": "Process completed order", "transactionType": "Worker", - "transactionsPerMinute": 1.53333333333333, + "transactionsPerMinute": 1.43333333333333, }, Object { - "averageResponseTime": 1012219.09302326, - "impact": 70.0934208886629, + "averageResponseTime": 1142941.8, + "impact": 68.5168888461311, "key": Object { "service.name": "opbeans-node", - "transaction.name": "Process payment", + "transaction.name": "Update shipping status", }, "serviceName": "opbeans-node", - "transactionName": "Process payment", + "transactionName": "Update shipping status", "transactionType": "Worker", - "transactionsPerMinute": 1.43333333333333, + "transactionsPerMinute": 1.33333333333333, }, Object { - "averageResponseTime": 126010.608333333, - "impact": 73.0540578695005, + "averageResponseTime": 128285.213888889, + "impact": 69.2138167147075, "key": Object { "service.name": "opbeans-python", "transaction.name": "opbeans.tasks.update_stats", @@ -687,19 +735,31 @@ Array [ "transactionsPerMinute": 12, }, Object { - "averageResponseTime": 1041680.24444444, - "impact": 75.4887141857793, + "averageResponseTime": 1032979.06666667, + "impact": 69.6655125415468, "key": Object { "service.name": "opbeans-node", - "transaction.name": "Update shipping status", + "transaction.name": "Process payment", }, "serviceName": "opbeans-node", - "transactionName": "Update shipping status", + "transactionName": "Process payment", "transactionType": "Worker", "transactionsPerMinute": 1.5, }, Object { - "averageResponseTime": 1724883.75, + "averageResponseTime": 4410285.71428571, + "impact": 92.5364039355288, + "key": Object { + "service.name": "opbeans-rum", + "transaction.name": "/orders", + }, + "serviceName": "opbeans-rum", + "transactionName": "/orders", + "transactionType": "page-load", + "transactionsPerMinute": 0.466666666666667, + }, + Object { + "averageResponseTime": 1803347.81081081, "impact": 100, "key": Object { "service.name": "opbeans-python", @@ -708,7 +768,7 @@ Array [ "serviceName": "opbeans-python", "transactionName": "opbeans.tasks.sync_customers", "transactionType": "celery", - "transactionsPerMinute": 1.2, + "transactionsPerMinute": 1.23333333333333, }, ] `; diff --git a/x-pack/test/apm_api_integration/basic/tests/traces/top_traces.ts b/x-pack/test/apm_api_integration/basic/tests/traces/top_traces.ts index b6fccf8f5b581..6a3a1ddd0f6ae 100644 --- a/x-pack/test/apm_api_integration/basic/tests/traces/top_traces.ts +++ b/x-pack/test/apm_api_integration/basic/tests/traces/top_traces.ts @@ -49,7 +49,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { }); it('returns the correct number of buckets', async () => { - expectSnapshot(response.body.items.length).toMatchInline(`59`); + expectSnapshot(response.body.items.length).toMatchInline(`64`); }); it('returns the correct buckets', async () => { @@ -64,14 +64,14 @@ export default function ApiTest({ getService }: FtrProviderContext) { expectSnapshot(firstItem).toMatchInline(` Object { - "averageResponseTime": 1137, + "averageResponseTime": 1756, "impact": 0, "key": Object { - "service.name": "opbeans-node", - "transaction.name": "POST /api/orders", + "service.name": "opbeans-java", + "transaction.name": "DispatcherServlet#doPost", }, - "serviceName": "opbeans-node", - "transactionName": "POST /api/orders", + "serviceName": "opbeans-java", + "transactionName": "DispatcherServlet#doPost", "transactionType": "request", "transactionsPerMinute": 0.0333333333333333, } @@ -79,7 +79,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { expectSnapshot(lastItem).toMatchInline(` Object { - "averageResponseTime": 1724883.75, + "averageResponseTime": 1803347.81081081, "impact": 100, "key": Object { "service.name": "opbeans-python", @@ -88,31 +88,31 @@ export default function ApiTest({ getService }: FtrProviderContext) { "serviceName": "opbeans-python", "transactionName": "opbeans.tasks.sync_customers", "transactionType": "celery", - "transactionsPerMinute": 1.2, + "transactionsPerMinute": 1.23333333333333, } `); expectSnapshot(groups).toMatchInline(` Array [ Object { - "service.name": "opbeans-node", - "transaction.name": "POST /api/orders", + "service.name": "opbeans-java", + "transaction.name": "DispatcherServlet#doPost", }, Object { - "service.name": "opbeans-python", - "transaction.name": "GET opbeans.views.stats", + "service.name": "opbeans-node", + "transaction.name": "GET /api/types", }, Object { - "service.name": "opbeans-node", - "transaction.name": "GET /api/customers/:id", + "service.name": "opbeans-java", + "transaction.name": "ResourceHttpRequestHandler", }, Object { "service.name": "opbeans-node", "transaction.name": "GET /api/products/top", }, Object { - "service.name": "opbeans-ruby", - "transaction.name": "Api::OrdersController#show", + "service.name": "opbeans-go", + "transaction.name": "POST /api/orders", }, ] `); diff --git a/x-pack/test/apm_api_integration/basic/tests/transaction_groups/__snapshots__/breakdown.snap b/x-pack/test/apm_api_integration/basic/tests/transaction_groups/__snapshots__/breakdown.snap index 87938f6f1f122..5f598ba72cd72 100644 --- a/x-pack/test/apm_api_integration/basic/tests/transaction_groups/__snapshots__/breakdown.snap +++ b/x-pack/test/apm_api_integration/basic/tests/transaction_groups/__snapshots__/breakdown.snap @@ -7,252 +7,252 @@ Object { "color": "#54b399", "data": Array [ Object { - "x": 1600159980000, - "y": null, + "x": 1601389800000, + "y": 0.0161290322580645, }, Object { - "x": 1600160010000, - "y": null, + "x": 1601389830000, + "y": 0.402597402597403, }, Object { - "x": 1600160040000, - "y": null, + "x": 1601389860000, + "y": 0.0303030303030303, }, Object { - "x": 1600160070000, - "y": 1, + "x": 1601389890000, + "y": null, }, Object { - "x": 1600160100000, - "y": 0.1875, + "x": 1601389920000, + "y": 0.518072289156627, }, Object { - "x": 1600160130000, - "y": 0.2625, + "x": 1601389950000, + "y": 0.120603015075377, }, Object { - "x": 1600160160000, - "y": null, + "x": 1601389980000, + "y": 0.823529411764706, }, Object { - "x": 1600160190000, - "y": 0.482758620689655, + "x": 1601390010000, + "y": null, }, Object { - "x": 1600160220000, - "y": 0.44, + "x": 1601390040000, + "y": 0.273381294964029, }, Object { - "x": 1600160250000, - "y": 1, + "x": 1601390070000, + "y": 0.39047619047619, }, Object { - "x": 1600160280000, + "x": 1601390100000, "y": null, }, Object { - "x": 1600160310000, - "y": 0.171428571428571, + "x": 1601390130000, + "y": 0.733333333333333, }, Object { - "x": 1600160340000, - "y": 0.55, + "x": 1601390160000, + "y": 0.144230769230769, }, Object { - "x": 1600160370000, - "y": 0.5, + "x": 1601390190000, + "y": 0.0688524590163934, }, Object { - "x": 1600160400000, + "x": 1601390220000, "y": null, }, Object { - "x": 1600160430000, - "y": 0.419642857142857, - }, - Object { - "x": 1600160460000, - "y": 0.722222222222222, + "x": 1601390250000, + "y": null, }, Object { - "x": 1600160490000, - "y": 0.833333333333333, + "x": 1601390280000, + "y": 0.0540540540540541, }, Object { - "x": 1600160520000, + "x": 1601390310000, "y": null, }, Object { - "x": 1600160550000, + "x": 1601390340000, "y": null, }, Object { - "x": 1600160580000, - "y": 0.11044776119403, + "x": 1601390370000, + "y": 1, }, Object { - "x": 1600160610000, + "x": 1601390400000, "y": null, }, Object { - "x": 1600160640000, - "y": null, + "x": 1601390430000, + "y": 0.75, + }, + Object { + "x": 1601390460000, + "y": 0.764705882352941, }, Object { - "x": 1600160670000, - "y": 0.15028901734104, + "x": 1601390490000, + "y": 0.117647058823529, }, Object { - "x": 1600160700000, - "y": 0.380952380952381, + "x": 1601390520000, + "y": 0.220588235294118, }, Object { - "x": 1600160730000, - "y": 0.0676156583629893, + "x": 1601390550000, + "y": 0.302325581395349, }, Object { - "x": 1600160760000, + "x": 1601390580000, "y": null, }, Object { - "x": 1600160790000, - "y": 0.263736263736264, + "x": 1601390610000, + "y": null, }, Object { - "x": 1600160820000, + "x": 1601390640000, "y": null, }, Object { - "x": 1600160850000, - "y": 0.529411764705882, + "x": 1601390670000, + "y": 0.215686274509804, }, Object { - "x": 1600160880000, + "x": 1601390700000, "y": null, }, Object { - "x": 1600160910000, - "y": 0.0120967741935484, + "x": 1601390730000, + "y": null, }, Object { - "x": 1600160940000, - "y": 0.261261261261261, + "x": 1601390760000, + "y": 0.217391304347826, }, Object { - "x": 1600160970000, - "y": null, + "x": 1601390790000, + "y": 0.253333333333333, }, Object { - "x": 1600161000000, + "x": 1601390820000, "y": null, }, Object { - "x": 1600161030000, - "y": 0.160714285714286, + "x": 1601390850000, + "y": 0.117647058823529, }, Object { - "x": 1600161060000, - "y": 0.0402684563758389, + "x": 1601390880000, + "y": 0.361111111111111, }, Object { - "x": 1600161090000, - "y": 1, + "x": 1601390910000, + "y": null, }, Object { - "x": 1600161120000, + "x": 1601390940000, "y": null, }, Object { - "x": 1600161150000, - "y": 0.0789473684210526, + "x": 1601390970000, + "y": 0.19047619047619, }, Object { - "x": 1600161180000, - "y": 0.407407407407407, + "x": 1601391000000, + "y": 0.354430379746835, }, Object { - "x": 1600161210000, + "x": 1601391030000, "y": null, }, Object { - "x": 1600161240000, + "x": 1601391060000, "y": null, }, Object { - "x": 1600161270000, - "y": 0.666666666666667, + "x": 1601391090000, + "y": null, }, Object { - "x": 1600161300000, - "y": 0.821428571428571, + "x": 1601391120000, + "y": 0.437956204379562, }, Object { - "x": 1600161330000, - "y": 1, + "x": 1601391150000, + "y": 0.0175438596491228, }, Object { - "x": 1600161360000, + "x": 1601391180000, "y": null, }, Object { - "x": 1600161390000, - "y": 0.173333333333333, + "x": 1601391210000, + "y": 0.277777777777778, }, Object { - "x": 1600161420000, - "y": 0.142857142857143, + "x": 1601391240000, + "y": 1, }, Object { - "x": 1600161450000, - "y": 0.85, + "x": 1601391270000, + "y": 0.885714285714286, }, Object { - "x": 1600161480000, + "x": 1601391300000, "y": null, }, Object { - "x": 1600161510000, - "y": 0.421052631578947, + "x": 1601391330000, + "y": null, }, Object { - "x": 1600161540000, - "y": null, + "x": 1601391360000, + "y": 0.111111111111111, }, Object { - "x": 1600161570000, + "x": 1601391390000, "y": null, }, Object { - "x": 1600161600000, - "y": null, + "x": 1601391420000, + "y": 0.764705882352941, }, Object { - "x": 1600161630000, + "x": 1601391450000, "y": null, }, Object { - "x": 1600161660000, - "y": 0.0185185185185185, + "x": 1601391480000, + "y": 0.0338983050847458, }, Object { - "x": 1600161690000, - "y": 0.0625, + "x": 1601391510000, + "y": 0.293233082706767, }, Object { - "x": 1600161720000, + "x": 1601391540000, "y": null, }, Object { - "x": 1600161750000, - "y": 0.367647058823529, + "x": 1601391570000, + "y": null, }, Object { - "x": 1600161780000, - "y": 0.105263157894737, + "x": 1601391600000, + "y": null, }, ], "hideLegend": false, - "legendValue": "23%", + "legendValue": "25%", "title": "app", "type": "areaStacked", }, @@ -260,252 +260,252 @@ Object { "color": "#6092c0", "data": Array [ Object { - "x": 1600159980000, - "y": null, + "x": 1601389800000, + "y": 0.983870967741935, }, Object { - "x": 1600160010000, - "y": null, + "x": 1601389830000, + "y": 0.545454545454545, }, Object { - "x": 1600160040000, - "y": null, + "x": 1601389860000, + "y": 0.96969696969697, }, Object { - "x": 1600160070000, - "y": 0, + "x": 1601389890000, + "y": null, }, Object { - "x": 1600160100000, - "y": 0.71875, + "x": 1601389920000, + "y": 0.156626506024096, }, Object { - "x": 1600160130000, - "y": 0.4875, + "x": 1601389950000, + "y": 0.85929648241206, }, Object { - "x": 1600160160000, - "y": null, + "x": 1601389980000, + "y": 0, }, Object { - "x": 1600160190000, - "y": 0.413793103448276, + "x": 1601390010000, + "y": null, }, Object { - "x": 1600160220000, - "y": 0, + "x": 1601390040000, + "y": 0.482014388489209, }, Object { - "x": 1600160250000, - "y": 0, + "x": 1601390070000, + "y": 0.361904761904762, }, Object { - "x": 1600160280000, + "x": 1601390100000, "y": null, }, Object { - "x": 1600160310000, - "y": 0.628571428571429, - }, - Object { - "x": 1600160340000, + "x": 1601390130000, "y": 0, }, Object { - "x": 1600160370000, - "y": 0.5, + "x": 1601390160000, + "y": 0.759615384615385, }, Object { - "x": 1600160400000, - "y": null, + "x": 1601390190000, + "y": 0.931147540983607, }, Object { - "x": 1600160430000, - "y": 0.4375, + "x": 1601390220000, + "y": null, }, Object { - "x": 1600160460000, - "y": 0, + "x": 1601390250000, + "y": null, }, Object { - "x": 1600160490000, - "y": 0, + "x": 1601390280000, + "y": 0.945945945945946, }, Object { - "x": 1600160520000, + "x": 1601390310000, "y": null, }, Object { - "x": 1600160550000, + "x": 1601390340000, "y": null, }, Object { - "x": 1600160580000, - "y": 0.88955223880597, + "x": 1601390370000, + "y": 0, }, Object { - "x": 1600160610000, + "x": 1601390400000, "y": null, }, Object { - "x": 1600160640000, - "y": null, + "x": 1601390430000, + "y": 0, + }, + Object { + "x": 1601390460000, + "y": 0, }, Object { - "x": 1600160670000, - "y": 0.705202312138728, + "x": 1601390490000, + "y": 0.784313725490196, }, Object { - "x": 1600160700000, - "y": 0, + "x": 1601390520000, + "y": 0.544117647058823, }, Object { - "x": 1600160730000, - "y": 0.871886120996441, + "x": 1601390550000, + "y": 0.558139534883721, }, Object { - "x": 1600160760000, + "x": 1601390580000, "y": null, }, Object { - "x": 1600160790000, - "y": 0.67032967032967, + "x": 1601390610000, + "y": null, }, Object { - "x": 1600160820000, + "x": 1601390640000, "y": null, }, Object { - "x": 1600160850000, - "y": 0, + "x": 1601390670000, + "y": 0.784313725490196, }, Object { - "x": 1600160880000, + "x": 1601390700000, "y": null, }, Object { - "x": 1600160910000, - "y": 0.987903225806452, + "x": 1601390730000, + "y": null, }, Object { - "x": 1600160940000, - "y": 0.738738738738739, + "x": 1601390760000, + "y": 0.536231884057971, }, Object { - "x": 1600160970000, - "y": null, + "x": 1601390790000, + "y": 0.746666666666667, }, Object { - "x": 1600161000000, + "x": 1601390820000, "y": null, }, Object { - "x": 1600161030000, - "y": 0.794642857142857, + "x": 1601390850000, + "y": 0.735294117647059, }, Object { - "x": 1600161060000, - "y": 0.959731543624161, + "x": 1601390880000, + "y": 0.416666666666667, }, Object { - "x": 1600161090000, - "y": 0, + "x": 1601390910000, + "y": null, }, Object { - "x": 1600161120000, + "x": 1601390940000, "y": null, }, Object { - "x": 1600161150000, - "y": 0.921052631578947, + "x": 1601390970000, + "y": 0.619047619047619, }, Object { - "x": 1600161180000, - "y": 0, + "x": 1601391000000, + "y": 0.518987341772152, }, Object { - "x": 1600161210000, + "x": 1601391030000, "y": null, }, Object { - "x": 1600161240000, + "x": 1601391060000, "y": null, }, Object { - "x": 1600161270000, - "y": 0, + "x": 1601391090000, + "y": null, }, Object { - "x": 1600161300000, - "y": 0, + "x": 1601391120000, + "y": 0.408759124087591, }, Object { - "x": 1600161330000, - "y": 0, + "x": 1601391150000, + "y": 0.982456140350877, }, Object { - "x": 1600161360000, + "x": 1601391180000, "y": null, }, Object { - "x": 1600161390000, - "y": 0.746666666666667, + "x": 1601391210000, + "y": 0.648148148148148, }, Object { - "x": 1600161420000, - "y": 0.857142857142857, + "x": 1601391240000, + "y": 0, }, Object { - "x": 1600161450000, + "x": 1601391270000, "y": 0, }, Object { - "x": 1600161480000, + "x": 1601391300000, "y": null, }, Object { - "x": 1600161510000, - "y": 0.578947368421053, + "x": 1601391330000, + "y": null, }, Object { - "x": 1600161540000, - "y": null, + "x": 1601391360000, + "y": 0.888888888888889, }, Object { - "x": 1600161570000, + "x": 1601391390000, "y": null, }, Object { - "x": 1600161600000, - "y": null, + "x": 1601391420000, + "y": 0, }, Object { - "x": 1600161630000, + "x": 1601391450000, "y": null, }, Object { - "x": 1600161660000, - "y": 0.981481481481482, + "x": 1601391480000, + "y": 0.966101694915254, }, Object { - "x": 1600161690000, - "y": 0.9375, + "x": 1601391510000, + "y": 0.676691729323308, }, Object { - "x": 1600161720000, + "x": 1601391540000, "y": null, }, Object { - "x": 1600161750000, - "y": 0.558823529411765, + "x": 1601391570000, + "y": null, }, Object { - "x": 1600161780000, - "y": 0.894736842105263, + "x": 1601391600000, + "y": null, }, ], "hideLegend": false, - "legendValue": "68%", + "legendValue": "65%", "title": "http", "type": "areaStacked", }, @@ -513,252 +513,252 @@ Object { "color": "#d36086", "data": Array [ Object { - "x": 1600159980000, - "y": null, + "x": 1601389800000, + "y": 0, }, Object { - "x": 1600160010000, - "y": null, + "x": 1601389830000, + "y": 0.051948051948052, }, Object { - "x": 1600160040000, - "y": null, + "x": 1601389860000, + "y": 0, }, Object { - "x": 1600160070000, - "y": 0, + "x": 1601389890000, + "y": null, }, Object { - "x": 1600160100000, - "y": 0.09375, + "x": 1601389920000, + "y": 0.325301204819277, }, Object { - "x": 1600160130000, - "y": 0.25, + "x": 1601389950000, + "y": 0.0201005025125628, }, Object { - "x": 1600160160000, - "y": null, + "x": 1601389980000, + "y": 0.176470588235294, }, Object { - "x": 1600160190000, - "y": 0.103448275862069, + "x": 1601390010000, + "y": null, }, Object { - "x": 1600160220000, - "y": 0.56, + "x": 1601390040000, + "y": 0.244604316546763, }, Object { - "x": 1600160250000, - "y": 0, + "x": 1601390070000, + "y": 0.247619047619048, }, Object { - "x": 1600160280000, + "x": 1601390100000, "y": null, }, Object { - "x": 1600160310000, - "y": 0.2, + "x": 1601390130000, + "y": 0.266666666666667, }, Object { - "x": 1600160340000, - "y": 0.45, + "x": 1601390160000, + "y": 0.0961538461538462, }, Object { - "x": 1600160370000, + "x": 1601390190000, "y": 0, }, Object { - "x": 1600160400000, + "x": 1601390220000, "y": null, }, Object { - "x": 1600160430000, - "y": 0.142857142857143, - }, - Object { - "x": 1600160460000, - "y": 0.277777777777778, + "x": 1601390250000, + "y": null, }, Object { - "x": 1600160490000, - "y": 0.166666666666667, + "x": 1601390280000, + "y": 0, }, Object { - "x": 1600160520000, + "x": 1601390310000, "y": null, }, Object { - "x": 1600160550000, + "x": 1601390340000, "y": null, }, Object { - "x": 1600160580000, + "x": 1601390370000, "y": 0, }, Object { - "x": 1600160610000, + "x": 1601390400000, "y": null, }, Object { - "x": 1600160640000, - "y": null, + "x": 1601390430000, + "y": 0.25, }, Object { - "x": 1600160670000, - "y": 0.144508670520231, + "x": 1601390460000, + "y": 0.235294117647059, }, Object { - "x": 1600160700000, - "y": 0.619047619047619, + "x": 1601390490000, + "y": 0.0980392156862745, + }, + Object { + "x": 1601390520000, + "y": 0.235294117647059, }, Object { - "x": 1600160730000, - "y": 0.0604982206405694, + "x": 1601390550000, + "y": 0.13953488372093, }, Object { - "x": 1600160760000, + "x": 1601390580000, "y": null, }, Object { - "x": 1600160790000, - "y": 0.0659340659340659, + "x": 1601390610000, + "y": null, }, Object { - "x": 1600160820000, + "x": 1601390640000, "y": null, }, Object { - "x": 1600160850000, - "y": 0.470588235294118, + "x": 1601390670000, + "y": 0, }, Object { - "x": 1600160880000, + "x": 1601390700000, "y": null, }, Object { - "x": 1600160910000, - "y": 0, + "x": 1601390730000, + "y": null, }, Object { - "x": 1600160940000, - "y": 0, + "x": 1601390760000, + "y": 0.246376811594203, }, Object { - "x": 1600160970000, - "y": null, + "x": 1601390790000, + "y": 0, }, Object { - "x": 1600161000000, + "x": 1601390820000, "y": null, }, Object { - "x": 1600161030000, - "y": 0.0446428571428571, + "x": 1601390850000, + "y": 0.147058823529412, }, Object { - "x": 1600161060000, - "y": 0, + "x": 1601390880000, + "y": 0.222222222222222, }, Object { - "x": 1600161090000, - "y": 0, + "x": 1601390910000, + "y": null, }, Object { - "x": 1600161120000, + "x": 1601390940000, "y": null, }, Object { - "x": 1600161150000, - "y": 0, + "x": 1601390970000, + "y": 0.19047619047619, }, Object { - "x": 1600161180000, - "y": 0.592592592592593, + "x": 1601391000000, + "y": 0.126582278481013, }, Object { - "x": 1600161210000, + "x": 1601391030000, "y": null, }, Object { - "x": 1600161240000, + "x": 1601391060000, "y": null, }, Object { - "x": 1600161270000, - "y": 0.333333333333333, + "x": 1601391090000, + "y": null, }, Object { - "x": 1600161300000, - "y": 0.178571428571429, + "x": 1601391120000, + "y": 0.153284671532847, }, Object { - "x": 1600161330000, + "x": 1601391150000, "y": 0, }, Object { - "x": 1600161360000, + "x": 1601391180000, "y": null, }, Object { - "x": 1600161390000, - "y": 0.08, + "x": 1601391210000, + "y": 0.0740740740740741, }, Object { - "x": 1600161420000, + "x": 1601391240000, "y": 0, }, Object { - "x": 1600161450000, - "y": 0.15, + "x": 1601391270000, + "y": 0.114285714285714, }, Object { - "x": 1600161480000, + "x": 1601391300000, "y": null, }, Object { - "x": 1600161510000, - "y": 0, + "x": 1601391330000, + "y": null, }, Object { - "x": 1600161540000, - "y": null, + "x": 1601391360000, + "y": 0, }, Object { - "x": 1600161570000, + "x": 1601391390000, "y": null, }, Object { - "x": 1600161600000, - "y": null, + "x": 1601391420000, + "y": 0.235294117647059, }, Object { - "x": 1600161630000, + "x": 1601391450000, "y": null, }, Object { - "x": 1600161660000, + "x": 1601391480000, "y": 0, }, Object { - "x": 1600161690000, - "y": 0, + "x": 1601391510000, + "y": 0.0300751879699248, }, Object { - "x": 1600161720000, + "x": 1601391540000, "y": null, }, Object { - "x": 1600161750000, - "y": 0.0735294117647059, + "x": 1601391570000, + "y": null, }, Object { - "x": 1600161780000, - "y": 0, + "x": 1601391600000, + "y": null, }, ], "hideLegend": false, - "legendValue": "9.3%", + "legendValue": "10%", "title": "postgresql", "type": "areaStacked", }, @@ -769,248 +769,248 @@ Object { exports[`Breakdown when data is loaded returns the transaction breakdown for a transaction group 9`] = ` Array [ Object { - "x": 1600159980000, - "y": null, + "x": 1601389800000, + "y": 1, }, Object { - "x": 1600160010000, - "y": null, + "x": 1601389830000, + "y": 1, }, Object { - "x": 1600160040000, - "y": null, + "x": 1601389860000, + "y": 1, }, Object { - "x": 1600160070000, + "x": 1601389890000, "y": null, }, Object { - "x": 1600160100000, + "x": 1601389920000, "y": 1, }, Object { - "x": 1600160130000, + "x": 1601389950000, "y": 1, }, Object { - "x": 1600160160000, + "x": 1601389980000, + "y": null, + }, + Object { + "x": 1601390010000, "y": null, }, Object { - "x": 1600160190000, + "x": 1601390040000, "y": 1, }, Object { - "x": 1600160220000, - "y": null, + "x": 1601390070000, + "y": 1, }, Object { - "x": 1600160250000, + "x": 1601390100000, "y": null, }, Object { - "x": 1600160280000, + "x": 1601390130000, "y": null, }, Object { - "x": 1600160310000, + "x": 1601390160000, "y": 1, }, Object { - "x": 1600160340000, - "y": null, + "x": 1601390190000, + "y": 1, }, Object { - "x": 1600160370000, - "y": 1, + "x": 1601390220000, + "y": null, }, Object { - "x": 1600160400000, + "x": 1601390250000, "y": null, }, Object { - "x": 1600160430000, + "x": 1601390280000, "y": 1, }, Object { - "x": 1600160460000, + "x": 1601390310000, "y": null, }, Object { - "x": 1600160490000, + "x": 1601390340000, "y": null, }, Object { - "x": 1600160520000, + "x": 1601390370000, "y": null, }, Object { - "x": 1600160550000, + "x": 1601390400000, "y": null, }, Object { - "x": 1600160580000, - "y": 1, - }, - Object { - "x": 1600160610000, + "x": 1601390430000, "y": null, }, Object { - "x": 1600160640000, + "x": 1601390460000, "y": null, }, Object { - "x": 1600160670000, + "x": 1601390490000, "y": 1, }, Object { - "x": 1600160700000, - "y": null, + "x": 1601390520000, + "y": 1, }, Object { - "x": 1600160730000, + "x": 1601390550000, "y": 1, }, Object { - "x": 1600160760000, + "x": 1601390580000, "y": null, }, Object { - "x": 1600160790000, - "y": 1, + "x": 1601390610000, + "y": null, }, Object { - "x": 1600160820000, + "x": 1601390640000, "y": null, }, Object { - "x": 1600160850000, - "y": null, + "x": 1601390670000, + "y": 1, }, Object { - "x": 1600160880000, + "x": 1601390700000, "y": null, }, Object { - "x": 1600160910000, - "y": 1, + "x": 1601390730000, + "y": null, }, Object { - "x": 1600160940000, + "x": 1601390760000, "y": 1, }, Object { - "x": 1600160970000, - "y": null, + "x": 1601390790000, + "y": 1, }, Object { - "x": 1600161000000, + "x": 1601390820000, "y": null, }, Object { - "x": 1600161030000, + "x": 1601390850000, "y": 1, }, Object { - "x": 1600161060000, + "x": 1601390880000, "y": 1, }, Object { - "x": 1600161090000, + "x": 1601390910000, "y": null, }, Object { - "x": 1600161120000, + "x": 1601390940000, "y": null, }, Object { - "x": 1600161150000, + "x": 1601390970000, "y": 1, }, Object { - "x": 1600161180000, - "y": null, + "x": 1601391000000, + "y": 1, }, Object { - "x": 1600161210000, + "x": 1601391030000, "y": null, }, Object { - "x": 1600161240000, + "x": 1601391060000, "y": null, }, Object { - "x": 1600161270000, + "x": 1601391090000, "y": null, }, Object { - "x": 1600161300000, - "y": null, + "x": 1601391120000, + "y": 1, }, Object { - "x": 1600161330000, - "y": null, + "x": 1601391150000, + "y": 1, }, Object { - "x": 1600161360000, + "x": 1601391180000, "y": null, }, Object { - "x": 1600161390000, + "x": 1601391210000, "y": 1, }, Object { - "x": 1600161420000, - "y": 1, + "x": 1601391240000, + "y": null, }, Object { - "x": 1600161450000, + "x": 1601391270000, "y": null, }, Object { - "x": 1600161480000, + "x": 1601391300000, "y": null, }, Object { - "x": 1600161510000, - "y": 1, + "x": 1601391330000, + "y": null, }, Object { - "x": 1600161540000, - "y": null, + "x": 1601391360000, + "y": 1, }, Object { - "x": 1600161570000, + "x": 1601391390000, "y": null, }, Object { - "x": 1600161600000, + "x": 1601391420000, "y": null, }, Object { - "x": 1600161630000, + "x": 1601391450000, "y": null, }, Object { - "x": 1600161660000, + "x": 1601391480000, "y": 1, }, Object { - "x": 1600161690000, + "x": 1601391510000, "y": 1, }, Object { - "x": 1600161720000, + "x": 1601391540000, "y": null, }, Object { - "x": 1600161750000, - "y": 1, + "x": 1601391570000, + "y": null, }, Object { - "x": 1600161780000, - "y": 1, + "x": 1601391600000, + "y": null, }, ] `; diff --git a/x-pack/test/apm_api_integration/basic/tests/transaction_groups/__snapshots__/error_rate.snap b/x-pack/test/apm_api_integration/basic/tests/transaction_groups/__snapshots__/error_rate.snap index ab228385aaf56..1161beb7f06c0 100644 --- a/x-pack/test/apm_api_integration/basic/tests/transaction_groups/__snapshots__/error_rate.snap +++ b/x-pack/test/apm_api_integration/basic/tests/transaction_groups/__snapshots__/error_rate.snap @@ -3,247 +3,247 @@ exports[`Error rate when data is loaded returns the transaction error rate has the correct error rate 1`] = ` Array [ Object { - "x": 1600159980000, + "x": 1601389800000, + "y": 0.166666666666667, + }, + Object { + "x": 1601389830000, "y": null, }, Object { - "x": 1600160010000, - "y": 0, + "x": 1601389860000, + "y": null, }, Object { - "x": 1600160040000, - "y": 0.142857142857143, + "x": 1601389890000, + "y": null, }, Object { - "x": 1600160070000, + "x": 1601389920000, "y": 0, }, Object { - "x": 1600160100000, + "x": 1601389950000, "y": 0, }, Object { - "x": 1600160130000, + "x": 1601389980000, "y": null, }, Object { - "x": 1600160160000, + "x": 1601390010000, + "y": null, + }, + Object { + "x": 1601390040000, "y": 0, }, Object { - "x": 1600160190000, + "x": 1601390070000, "y": 0.5, }, Object { - "x": 1600160220000, - "y": 0, + "x": 1601390100000, + "y": null, }, Object { - "x": 1600160250000, + "x": 1601390130000, "y": null, }, Object { - "x": 1600160280000, - "y": 0.166666666666667, + "x": 1601390160000, + "y": 0.285714285714286, }, Object { - "x": 1600160310000, - "y": 0.333333333333333, + "x": 1601390190000, + "y": 0, }, Object { - "x": 1600160340000, - "y": 1, + "x": 1601390220000, + "y": 0, }, Object { - "x": 1600160370000, + "x": 1601390250000, "y": null, }, Object { - "x": 1600160400000, + "x": 1601390280000, "y": null, }, Object { - "x": 1600160430000, + "x": 1601390310000, "y": 0, }, Object { - "x": 1600160460000, - "y": 0, + "x": 1601390340000, + "y": null, }, Object { - "x": 1600160490000, + "x": 1601390370000, "y": null, }, Object { - "x": 1600160520000, - "y": 0.166666666666667, + "x": 1601390400000, + "y": 0, }, Object { - "x": 1600160550000, - "y": 0, + "x": 1601390430000, + "y": null, }, Object { - "x": 1600160580000, - "y": 0, + "x": 1601390460000, + "y": null, }, Object { - "x": 1600160610000, + "x": 1601390490000, "y": null, }, Object { - "x": 1600160640000, + "x": 1601390520000, "y": 0, }, Object { - "x": 1600160670000, - "y": 0, + "x": 1601390550000, + "y": 1, }, Object { - "x": 1600160700000, + "x": 1601390580000, "y": 0, }, Object { - "x": 1600160730000, + "x": 1601390610000, "y": null, }, Object { - "x": 1600160760000, - "y": 0, + "x": 1601390640000, + "y": 1, }, Object { - "x": 1600160790000, - "y": 0.2, + "x": 1601390670000, + "y": 0.5, }, Object { - "x": 1600160820000, - "y": 0.5, + "x": 1601390700000, + "y": null, }, Object { - "x": 1600160850000, + "x": 1601390730000, "y": null, }, Object { - "x": 1600160880000, - "y": 0, + "x": 1601390760000, + "y": 0.25, }, Object { - "x": 1600160910000, + "x": 1601390790000, "y": 0, }, Object { - "x": 1600160940000, - "y": null, + "x": 1601390820000, + "y": 0, }, Object { - "x": 1600160970000, + "x": 1601390850000, "y": null, }, Object { - "x": 1600161000000, - "y": 0, + "x": 1601390880000, + "y": 0.166666666666667, }, Object { - "x": 1600161030000, - "y": 0, + "x": 1601390910000, + "y": null, }, Object { - "x": 1600161060000, - "y": 0.5, + "x": 1601390940000, + "y": 0.333333333333333, }, Object { - "x": 1600161090000, + "x": 1601390970000, "y": null, }, Object { - "x": 1600161120000, + "x": 1601391000000, "y": 0, }, Object { - "x": 1600161150000, - "y": 0, + "x": 1601391030000, + "y": null, }, Object { - "x": 1600161180000, - "y": null, + "x": 1601391060000, + "y": 1, }, Object { - "x": 1600161210000, + "x": 1601391090000, "y": null, }, Object { - "x": 1600161240000, + "x": 1601391120000, "y": 0, }, Object { - "x": 1600161270000, - "y": 0.4, + "x": 1601391150000, + "y": 0, }, Object { - "x": 1600161300000, - "y": 0.5, + "x": 1601391180000, + "y": 0, }, Object { - "x": 1600161330000, + "x": 1601391210000, "y": null, }, Object { - "x": 1600161360000, + "x": 1601391240000, "y": 0, }, Object { - "x": 1600161390000, - "y": 0, + "x": 1601391270000, + "y": null, }, Object { - "x": 1600161420000, + "x": 1601391300000, "y": 0, }, Object { - "x": 1600161450000, + "x": 1601391330000, "y": null, }, Object { - "x": 1600161480000, - "y": 0.1, + "x": 1601391360000, + "y": 0, }, Object { - "x": 1600161510000, - "y": 0.5, + "x": 1601391390000, + "y": null, }, Object { - "x": 1600161540000, + "x": 1601391420000, "y": null, }, Object { - "x": 1600161570000, + "x": 1601391450000, "y": null, }, Object { - "x": 1600161600000, + "x": 1601391480000, "y": 0, }, Object { - "x": 1600161630000, + "x": 1601391510000, "y": 0, }, Object { - "x": 1600161660000, - "y": null, + "x": 1601391540000, + "y": 1, }, Object { - "x": 1600161690000, + "x": 1601391570000, "y": null, }, Object { - "x": 1600161720000, - "y": 0.625, - }, - Object { - "x": 1600161750000, - "y": 0, - }, - Object { - "x": 1600161780000, + "x": 1601391600000, "y": null, }, ] diff --git a/x-pack/test/apm_api_integration/basic/tests/transaction_groups/__snapshots__/top_transaction_groups.snap b/x-pack/test/apm_api_integration/basic/tests/transaction_groups/__snapshots__/top_transaction_groups.snap index 93f22e67e1a02..9ff2294cdb08f 100644 --- a/x-pack/test/apm_api_integration/basic/tests/transaction_groups/__snapshots__/top_transaction_groups.snap +++ b/x-pack/test/apm_api_integration/basic/tests/transaction_groups/__snapshots__/top_transaction_groups.snap @@ -3,144 +3,124 @@ exports[`Top transaction groups when data is loaded returns the correct buckets (when ignoring samples) 1`] = ` Array [ Object { - "averageResponseTime": 1137, + "averageResponseTime": 2292, "impact": 0, - "key": "POST /api/orders", - "p95": 1136, - "serviceName": "opbeans-node", - "transactionName": "POST /api/orders", - "transactionType": "request", - "transactionsPerMinute": 0.0333333333333333, - }, - Object { - "averageResponseTime": 4479, - "impact": 0.182527896674573, - "key": "GET /api/customers/:id", - "p95": 4448, - "serviceName": "opbeans-node", - "transactionName": "GET /api/customers/:id", - "transactionType": "request", - "transactionsPerMinute": 0.0333333333333333, - }, - Object { - "averageResponseTime": 2754.5, - "impact": 0.238782754117664, "key": "GET /*", - "p95": 2832, + "p95": 2288, "serviceName": "opbeans-node", "transactionName": "GET /*", "transactionType": "request", - "transactionsPerMinute": 0.0666666666666667, + "transactionsPerMinute": 0.0333333333333333, }, Object { - "averageResponseTime": 10841, - "impact": 1.12209324870709, + "averageResponseTime": 10317, + "impact": 0.420340829629707, "key": "GET /api/orders/:id", - "p95": 13376, + "p95": 10304, "serviceName": "opbeans-node", "transactionName": "GET /api/orders/:id", "transactionType": "request", - "transactionsPerMinute": 0.0666666666666667, - }, - Object { - "averageResponseTime": 10551.3333333333, - "impact": 1.66672765494254, - "key": "GET /api/products/top", - "p95": 19552, - "serviceName": "opbeans-node", - "transactionName": "GET /api/products/top", - "transactionType": "request", - "transactionsPerMinute": 0.1, + "transactionsPerMinute": 0.0333333333333333, }, Object { - "averageResponseTime": 15988, - "impact": 1.68431412493931, + "averageResponseTime": 6495, + "impact": 0.560349681667116, "key": "GET /api/products/:id", - "p95": 16000, + "p95": 6720, "serviceName": "opbeans-node", "transactionName": "GET /api/products/:id", "transactionType": "request", "transactionsPerMinute": 0.0666666666666667, }, Object { - "averageResponseTime": 9499, - "impact": 2.01310465096592, + "averageResponseTime": 9825.5, + "impact": 0.909245664989668, "key": "GET /api/types", - "p95": 14944, + "p95": 16496, "serviceName": "opbeans-node", "transactionName": "GET /api/types", "transactionType": "request", - "transactionsPerMinute": 0.133333333333333, + "transactionsPerMinute": 0.0666666666666667, }, Object { - "averageResponseTime": 12228, - "impact": 2.60929690712978, - "key": "GET /api/products/:id/customers", - "p95": 17760, + "averageResponseTime": 9516.83333333333, + "impact": 2.87083620326164, + "key": "GET /api/products", + "p95": 17888, "serviceName": "opbeans-node", - "transactionName": "GET /api/products/:id/customers", + "transactionName": "GET /api/products", "transactionType": "request", - "transactionsPerMinute": 0.133333333333333, + "transactionsPerMinute": 0.2, }, Object { - "averageResponseTime": 22555.6666666667, - "impact": 3.63362685989209, - "key": "GET /api/customers", - "p95": 25984, + "averageResponseTime": 13962.2, + "impact": 3.53657227112376, + "key": "GET /api/products/:id/customers", + "p95": 23264, "serviceName": "opbeans-node", - "transactionName": "GET /api/customers", + "transactionName": "GET /api/products/:id/customers", "transactionType": "request", - "transactionsPerMinute": 0.1, + "transactionsPerMinute": 0.166666666666667, }, Object { - "averageResponseTime": 13852.6, - "impact": 3.72079458074566, - "key": "GET /api/types/:id", - "p95": 21984, + "averageResponseTime": 21129.5, + "impact": 4.3069090413872, + "key": "GET /api/customers/:id", + "p95": 32608, "serviceName": "opbeans-node", - "transactionName": "GET /api/types/:id", + "transactionName": "GET /api/customers/:id", "transactionType": "request", - "transactionsPerMinute": 0.166666666666667, + "transactionsPerMinute": 0.133333333333333, }, Object { - "averageResponseTime": 12228.5, - "impact": 3.94515861412062, + "averageResponseTime": 10137.1111111111, + "impact": 4.65868586528666, "key": "GET /api/orders", - "p95": 16736, + "p95": 21344, "serviceName": "opbeans-node", "transactionName": "GET /api/orders", "transactionType": "request", - "transactionsPerMinute": 0.2, + "transactionsPerMinute": 0.3, }, Object { - "averageResponseTime": 12491.4285714286, - "impact": 4.71355627370009, - "key": "GET /api/products", - "p95": 30448, + "averageResponseTime": 24206.25, + "impact": 4.95153640465858, + "key": "GET /api/customers", + "p95": 36032, "serviceName": "opbeans-node", - "transactionName": "GET /api/products", + "transactionName": "GET /api/customers", "transactionType": "request", - "transactionsPerMinute": 0.233333333333333, + "transactionsPerMinute": 0.133333333333333, }, Object { - "averageResponseTime": 23683.3333333333, - "impact": 11.5793797000797, + "averageResponseTime": 17267.0833333333, + "impact": 10.7331215479018, + "key": "GET /api/products/top", + "p95": 26208, + "serviceName": "opbeans-node", + "transactionName": "GET /api/products/top", + "transactionType": "request", + "transactionsPerMinute": 0.4, + }, + Object { + "averageResponseTime": 20417.7272727273, + "impact": 11.6439909593985, "key": "GET /api/stats", - "p95": 36288, + "p95": 24800, "serviceName": "opbeans-node", "transactionName": "GET /api/stats", "transactionType": "request", - "transactionsPerMinute": 0.3, + "transactionsPerMinute": 0.366666666666667, }, Object { - "averageResponseTime": 42606.7441860465, + "averageResponseTime": 39822.0208333333, "impact": 100, "key": "GET /api", - "p95": 131008, + "p95": 122816, "serviceName": "opbeans-node", "transactionName": "GET /api", "transactionType": "request", - "transactionsPerMinute": 1.43333333333333, + "transactionsPerMinute": 1.6, }, ] `; diff --git a/x-pack/test/apm_api_integration/basic/tests/transaction_groups/__snapshots__/transaction_charts.snap b/x-pack/test/apm_api_integration/basic/tests/transaction_groups/__snapshots__/transaction_charts.snap index 9ed103b445575..75dc775d887e4 100644 --- a/x-pack/test/apm_api_integration/basic/tests/transaction_groups/__snapshots__/transaction_charts.snap +++ b/x-pack/test/apm_api_integration/basic/tests/transaction_groups/__snapshots__/transaction_charts.snap @@ -3,1495 +3,1495 @@ exports[`Transaction charts when data is loaded returns the correct data 4`] = ` Object { "apmTimeseries": Object { - "overallAvgDuration": 600255.707964602, + "overallAvgDuration": 600888.274678112, "responseTimes": Object { "avg": Array [ Object { - "x": 1600159980000, - "y": 961397, + "x": 1601389800000, + "y": 651784.714285714, }, Object { - "x": 1600160010000, - "y": 605527.5, + "x": 1601389830000, + "y": 747797.4, }, Object { - "x": 1600160040000, - "y": 390910, + "x": 1601389860000, + "y": 567568.333333333, }, Object { - "x": 1600160070000, - "y": 556820.6, + "x": 1601389890000, + "y": 1289936, }, Object { - "x": 1600160100000, - "y": 496316.4, + "x": 1601389920000, + "y": 79698.6, }, Object { - "x": 1600160130000, - "y": null, + "x": 1601389950000, + "y": 646660.833333333, }, Object { - "x": 1600160160000, - "y": 467003.666666667, + "x": 1601389980000, + "y": 18095, }, Object { - "x": 1600160190000, - "y": 863809.666666667, + "x": 1601390010000, + "y": 543534, }, Object { - "x": 1600160220000, - "y": 812744, + "x": 1601390040000, + "y": 250234.466666667, }, Object { - "x": 1600160250000, - "y": 1536887, + "x": 1601390070000, + "y": 200435.2, }, Object { - "x": 1600160280000, - "y": 506194.8, + "x": 1601390100000, + "y": 1089389.66666667, }, Object { - "x": 1600160310000, - "y": 459425.5, + "x": 1601390130000, + "y": 1052697.33333333, }, Object { - "x": 1600160340000, - "y": 553661, + "x": 1601390160000, + "y": 27908.8333333333, }, Object { - "x": 1600160370000, - "y": 658207.5, + "x": 1601390190000, + "y": 1078058.25, }, Object { - "x": 1600160400000, - "y": 368087.909090909, + "x": 1601390220000, + "y": 755843.5, }, Object { - "x": 1600160430000, - "y": 115251.8, + "x": 1601390250000, + "y": 1371940.33333333, }, Object { - "x": 1600160460000, - "y": 635499.25, + "x": 1601390280000, + "y": 38056, }, Object { - "x": 1600160490000, - "y": 1224766, + "x": 1601390310000, + "y": 1133161.33333333, }, Object { - "x": 1600160520000, - "y": 826125.5, + "x": 1601390340000, + "y": 1236497, }, Object { - "x": 1600160550000, - "y": 389583.75, + "x": 1601390370000, + "y": 870027, }, Object { - "x": 1600160580000, - "y": 477951, + "x": 1601390400000, + "y": null, }, Object { - "x": 1600160610000, - "y": 882789.666666667, + "x": 1601390430000, + "y": 800475, }, Object { - "x": 1600160640000, - "y": 238075.909090909, + "x": 1601390460000, + "y": 374597.2, }, Object { - "x": 1600160670000, - "y": 608137, + "x": 1601390490000, + "y": 657002, }, Object { - "x": 1600160700000, - "y": 356875.5, + "x": 1601390520000, + "y": 305164.5, }, Object { - "x": 1600160730000, - "y": 1207555.5, + "x": 1601390550000, + "y": 274576.4, }, Object { - "x": 1600160760000, - "y": 282337.166666667, + "x": 1601390580000, + "y": 888533, }, Object { - "x": 1600160790000, - "y": 987012.333333333, + "x": 1601390610000, + "y": 1191308, }, Object { - "x": 1600160820000, - "y": 268791.5, + "x": 1601390640000, + "y": 1521297, }, Object { - "x": 1600160850000, - "y": 1268295.5, + "x": 1601390670000, + "y": 373994.4, }, Object { - "x": 1600160880000, - "y": 442801.5, + "x": 1601390700000, + "y": 1108442, }, Object { - "x": 1600160910000, - "y": 314103.5, + "x": 1601390730000, + "y": 1014666.66666667, }, Object { - "x": 1600160940000, - "y": 1313632.66666667, + "x": 1601390760000, + "y": 184717, }, Object { - "x": 1600160970000, - "y": 888299, + "x": 1601390790000, + "y": 369595.5, }, Object { - "x": 1600161000000, - "y": 611899.142857143, + "x": 1601390820000, + "y": 525805.5, }, Object { - "x": 1600161030000, - "y": 273321.857142857, + "x": 1601390850000, + "y": 583359, }, Object { - "x": 1600161060000, - "y": 407488.75, + "x": 1601390880000, + "y": 315244.25, }, Object { - "x": 1600161090000, - "y": 1446104.66666667, + "x": 1601390910000, + "y": 1133846, }, Object { - "x": 1600161120000, - "y": 650821, + "x": 1601390940000, + "y": 312801, }, Object { - "x": 1600161150000, - "y": 818027.6, + "x": 1601390970000, + "y": 1135768.33333333, }, Object { - "x": 1600161180000, - "y": 1606260.5, + "x": 1601391000000, + "y": 199876, }, Object { - "x": 1600161210000, - "y": 1054428.66666667, + "x": 1601391030000, + "y": 1508216.66666667, }, Object { - "x": 1600161240000, - "y": 816781.333333333, + "x": 1601391060000, + "y": 1481690.5, }, Object { - "x": 1600161270000, - "y": 319174, + "x": 1601391090000, + "y": 659469, }, Object { - "x": 1600161300000, - "y": 683605.5, + "x": 1601391120000, + "y": 225622.666666667, }, Object { - "x": 1600161330000, - "y": 884499.5, + "x": 1601391150000, + "y": 675812.666666667, }, Object { - "x": 1600161360000, - "y": 714202.333333333, + "x": 1601391180000, + "y": 279013.333333333, }, Object { - "x": 1600161390000, - "y": 439751.6, + "x": 1601391210000, + "y": 1327234, }, Object { - "x": 1600161420000, - "y": 576370.2, + "x": 1601391240000, + "y": 487259, }, Object { - "x": 1600161450000, - "y": 836182.333333333, + "x": 1601391270000, + "y": 686597.333333333, }, Object { - "x": 1600161480000, - "y": 19902, + "x": 1601391300000, + "y": 1236063.33333333, }, Object { - "x": 1600161510000, - "y": 615193.333333333, + "x": 1601391330000, + "y": 1322639, }, Object { - "x": 1600161540000, - "y": 946298.666666667, + "x": 1601391360000, + "y": 517955.333333333, }, Object { - "x": 1600161570000, - "y": 1146024, + "x": 1601391390000, + "y": 983213.333333333, }, Object { - "x": 1600161600000, - "y": 823085, + "x": 1601391420000, + "y": 920165.5, }, Object { - "x": 1600161630000, - "y": 460616, + "x": 1601391450000, + "y": 655826, }, Object { - "x": 1600161660000, - "y": 955115.5, + "x": 1601391480000, + "y": 335100.666666667, }, Object { - "x": 1600161690000, - "y": 1684473, + "x": 1601391510000, + "y": 496048.555555556, }, Object { - "x": 1600161720000, - "y": 450557.777777778, + "x": 1601391540000, + "y": 629243, }, Object { - "x": 1600161750000, - "y": 19350, + "x": 1601391570000, + "y": 796819.4, }, Object { - "x": 1600161780000, - "y": 960447, + "x": 1601391600000, + "y": null, }, ], "p95": Array [ Object { - "x": 1600159980000, - "y": 1711104, + "x": 1601389800000, + "y": 1531888, }, Object { - "x": 1600160010000, - "y": 784384, + "x": 1601389830000, + "y": 1695616, }, Object { - "x": 1600160040000, - "y": 389120, + "x": 1601389860000, + "y": 1482496, }, Object { - "x": 1600160070000, - "y": 1581024, + "x": 1601389890000, + "y": 1617920, }, Object { - "x": 1600160100000, - "y": 1277824, + "x": 1601389920000, + "y": 329696, }, Object { - "x": 1600160130000, - "y": null, + "x": 1601389950000, + "y": 1474432, }, Object { - "x": 1600160160000, - "y": 1753072, + "x": 1601389980000, + "y": 18048, }, Object { - "x": 1600160190000, - "y": 1916800, + "x": 1601390010000, + "y": 990720, }, Object { - "x": 1600160220000, - "y": 1228736, + "x": 1601390040000, + "y": 1163232, }, Object { - "x": 1600160250000, - "y": 1671168, + "x": 1601390070000, + "y": 958432, }, Object { - "x": 1600160280000, - "y": 1679328, + "x": 1601390100000, + "y": 1777600, }, Object { - "x": 1600160310000, - "y": 1028064, + "x": 1601390130000, + "y": 1873920, }, Object { - "x": 1600160340000, - "y": 1630144, + "x": 1601390160000, + "y": 55776, }, Object { - "x": 1600160370000, - "y": 972800, + "x": 1601390190000, + "y": 1752064, }, Object { - "x": 1600160400000, - "y": 1359856, + "x": 1601390220000, + "y": 1136640, }, Object { - "x": 1600160430000, - "y": 536568, + "x": 1601390250000, + "y": 1523712, }, Object { - "x": 1600160460000, - "y": 1130368, + "x": 1601390280000, + "y": 37888, }, Object { - "x": 1600160490000, - "y": 1245184, + "x": 1601390310000, + "y": 1196032, }, Object { - "x": 1600160520000, - "y": 1028096, + "x": 1601390340000, + "y": 1810304, }, Object { - "x": 1600160550000, - "y": 1228768, + "x": 1601390370000, + "y": 1007616, }, Object { - "x": 1600160580000, - "y": 790016, + "x": 1601390400000, + "y": null, }, Object { - "x": 1600160610000, - "y": 1416192, + "x": 1601390430000, + "y": 1523584, }, Object { - "x": 1600160640000, - "y": 905184, + "x": 1601390460000, + "y": 1712096, }, Object { - "x": 1600160670000, - "y": 1154816, + "x": 1601390490000, + "y": 679936, }, Object { - "x": 1600160700000, - "y": 1154944, + "x": 1601390520000, + "y": 1163200, }, Object { - "x": 1600160730000, - "y": 1544192, + "x": 1601390550000, + "y": 1171392, }, Object { - "x": 1600160760000, - "y": 888768, + "x": 1601390580000, + "y": 901120, }, Object { - "x": 1600160790000, - "y": 1783808, + "x": 1601390610000, + "y": 1355776, }, Object { - "x": 1600160820000, - "y": 737248, + "x": 1601390640000, + "y": 1515520, }, Object { - "x": 1600160850000, - "y": 1409024, + "x": 1601390670000, + "y": 1097600, }, Object { - "x": 1600160880000, - "y": 843520, + "x": 1601390700000, + "y": 1363968, }, Object { - "x": 1600160910000, - "y": 987072, + "x": 1601390730000, + "y": 1290240, }, Object { - "x": 1600160940000, - "y": 1646592, + "x": 1601390760000, + "y": 663488, }, Object { - "x": 1600160970000, - "y": 884736, + "x": 1601390790000, + "y": 827264, }, Object { - "x": 1600161000000, - "y": 1163200, + "x": 1601390820000, + "y": 1302400, }, Object { - "x": 1600161030000, - "y": 991168, + "x": 1601390850000, + "y": 978912, }, Object { - "x": 1600161060000, - "y": 806784, + "x": 1601390880000, + "y": 1482720, }, Object { - "x": 1600161090000, - "y": 1732608, + "x": 1601390910000, + "y": 1306624, }, Object { - "x": 1600161120000, - "y": 1916864, + "x": 1601390940000, + "y": 1179520, }, Object { - "x": 1600161150000, - "y": 1335168, + "x": 1601390970000, + "y": 1347584, }, Object { - "x": 1600161180000, - "y": 1703936, + "x": 1601391000000, + "y": 1122272, }, Object { - "x": 1600161210000, - "y": 1306624, + "x": 1601391030000, + "y": 1835008, }, Object { - "x": 1600161240000, - "y": 1343424, + "x": 1601391060000, + "y": 1572864, }, Object { - "x": 1600161270000, - "y": 794560, + "x": 1601391090000, + "y": 1343232, }, Object { - "x": 1600161300000, - "y": 1351552, + "x": 1601391120000, + "y": 810880, }, Object { - "x": 1600161330000, - "y": 1275904, + "x": 1601391150000, + "y": 1122048, }, Object { - "x": 1600161360000, - "y": 1515264, + "x": 1601391180000, + "y": 782208, }, Object { - "x": 1600161390000, - "y": 1359808, + "x": 1601391210000, + "y": 1466368, }, Object { - "x": 1600161420000, - "y": 1187808, + "x": 1601391240000, + "y": 1490928, }, Object { - "x": 1600161450000, - "y": 1069056, + "x": 1601391270000, + "y": 1433472, }, Object { - "x": 1600161480000, - "y": 24896, + "x": 1601391300000, + "y": 1677312, }, Object { - "x": 1600161510000, - "y": 804864, + "x": 1601391330000, + "y": 1830912, }, Object { - "x": 1600161540000, - "y": 1347584, + "x": 1601391360000, + "y": 950144, }, Object { - "x": 1600161570000, - "y": 1138688, + "x": 1601391390000, + "y": 1265664, }, Object { - "x": 1600161600000, - "y": 1588224, + "x": 1601391420000, + "y": 1408896, }, Object { - "x": 1600161630000, - "y": 1089280, + "x": 1601391450000, + "y": 1178624, }, Object { - "x": 1600161660000, - "y": 1793920, + "x": 1601391480000, + "y": 946048, }, Object { - "x": 1600161690000, - "y": 1679360, + "x": 1601391510000, + "y": 1761248, }, Object { - "x": 1600161720000, - "y": 1384416, + "x": 1601391540000, + "y": 626688, }, Object { - "x": 1600161750000, - "y": 19328, + "x": 1601391570000, + "y": 1564544, }, Object { - "x": 1600161780000, - "y": 1554432, + "x": 1601391600000, + "y": null, }, ], "p99": Array [ Object { - "x": 1600159980000, - "y": 1711104, + "x": 1601389800000, + "y": 1531888, }, Object { - "x": 1600160010000, - "y": 784384, + "x": 1601389830000, + "y": 1695616, }, Object { - "x": 1600160040000, - "y": 389120, + "x": 1601389860000, + "y": 1482496, }, Object { - "x": 1600160070000, - "y": 1581024, + "x": 1601389890000, + "y": 1617920, }, Object { - "x": 1600160100000, - "y": 1277824, + "x": 1601389920000, + "y": 329696, }, Object { - "x": 1600160130000, - "y": null, + "x": 1601389950000, + "y": 1474432, }, Object { - "x": 1600160160000, - "y": 1753072, + "x": 1601389980000, + "y": 18048, }, Object { - "x": 1600160190000, - "y": 1916800, + "x": 1601390010000, + "y": 990720, }, Object { - "x": 1600160220000, - "y": 1228736, + "x": 1601390040000, + "y": 1318880, }, Object { - "x": 1600160250000, - "y": 1671168, + "x": 1601390070000, + "y": 958432, }, Object { - "x": 1600160280000, - "y": 1679328, + "x": 1601390100000, + "y": 1777600, }, Object { - "x": 1600160310000, - "y": 1028064, + "x": 1601390130000, + "y": 1873920, }, Object { - "x": 1600160340000, - "y": 1630144, + "x": 1601390160000, + "y": 72160, }, Object { - "x": 1600160370000, - "y": 972800, + "x": 1601390190000, + "y": 1752064, }, Object { - "x": 1600160400000, - "y": 1400816, + "x": 1601390220000, + "y": 1136640, }, Object { - "x": 1600160430000, - "y": 536568, + "x": 1601390250000, + "y": 1523712, }, Object { - "x": 1600160460000, - "y": 1130368, + "x": 1601390280000, + "y": 37888, }, Object { - "x": 1600160490000, - "y": 1245184, + "x": 1601390310000, + "y": 1196032, }, Object { - "x": 1600160520000, - "y": 1028096, + "x": 1601390340000, + "y": 1810304, }, Object { - "x": 1600160550000, - "y": 1228768, + "x": 1601390370000, + "y": 1007616, }, Object { - "x": 1600160580000, - "y": 790016, + "x": 1601390400000, + "y": null, }, Object { - "x": 1600160610000, - "y": 1416192, + "x": 1601390430000, + "y": 1523584, }, Object { - "x": 1600160640000, - "y": 1556448, + "x": 1601390460000, + "y": 1712096, }, Object { - "x": 1600160670000, - "y": 1154816, + "x": 1601390490000, + "y": 679936, }, Object { - "x": 1600160700000, - "y": 1154944, + "x": 1601390520000, + "y": 1163200, }, Object { - "x": 1600160730000, - "y": 1544192, + "x": 1601390550000, + "y": 1171392, }, Object { - "x": 1600160760000, - "y": 888768, + "x": 1601390580000, + "y": 901120, }, Object { - "x": 1600160790000, - "y": 1783808, + "x": 1601390610000, + "y": 1355776, }, Object { - "x": 1600160820000, - "y": 737248, + "x": 1601390640000, + "y": 1515520, }, Object { - "x": 1600160850000, - "y": 1409024, + "x": 1601390670000, + "y": 1097600, }, Object { - "x": 1600160880000, - "y": 843520, + "x": 1601390700000, + "y": 1363968, }, Object { - "x": 1600160910000, - "y": 987072, + "x": 1601390730000, + "y": 1290240, }, Object { - "x": 1600160940000, - "y": 1646592, + "x": 1601390760000, + "y": 663488, }, Object { - "x": 1600160970000, - "y": 884736, + "x": 1601390790000, + "y": 827264, }, Object { - "x": 1600161000000, - "y": 1163200, + "x": 1601390820000, + "y": 1302400, }, Object { - "x": 1600161030000, - "y": 991168, + "x": 1601390850000, + "y": 978912, }, Object { - "x": 1600161060000, - "y": 806784, + "x": 1601390880000, + "y": 1482720, }, Object { - "x": 1600161090000, - "y": 1732608, + "x": 1601390910000, + "y": 1306624, }, Object { - "x": 1600161120000, - "y": 1916864, + "x": 1601390940000, + "y": 1179520, }, Object { - "x": 1600161150000, - "y": 1335168, + "x": 1601390970000, + "y": 1347584, }, Object { - "x": 1600161180000, - "y": 1703936, + "x": 1601391000000, + "y": 1122272, }, Object { - "x": 1600161210000, - "y": 1306624, + "x": 1601391030000, + "y": 1835008, }, Object { - "x": 1600161240000, - "y": 1343424, + "x": 1601391060000, + "y": 1572864, }, Object { - "x": 1600161270000, - "y": 794560, + "x": 1601391090000, + "y": 1343232, }, Object { - "x": 1600161300000, - "y": 1351552, + "x": 1601391120000, + "y": 810880, }, Object { - "x": 1600161330000, - "y": 1275904, + "x": 1601391150000, + "y": 1122048, }, Object { - "x": 1600161360000, - "y": 1515264, + "x": 1601391180000, + "y": 782208, }, Object { - "x": 1600161390000, - "y": 1359808, + "x": 1601391210000, + "y": 1466368, }, Object { - "x": 1600161420000, - "y": 1187808, + "x": 1601391240000, + "y": 1490928, }, Object { - "x": 1600161450000, - "y": 1069056, + "x": 1601391270000, + "y": 1433472, }, Object { - "x": 1600161480000, - "y": 24896, + "x": 1601391300000, + "y": 1677312, }, Object { - "x": 1600161510000, - "y": 804864, + "x": 1601391330000, + "y": 1830912, }, Object { - "x": 1600161540000, - "y": 1347584, + "x": 1601391360000, + "y": 950144, }, Object { - "x": 1600161570000, - "y": 1138688, + "x": 1601391390000, + "y": 1265664, }, Object { - "x": 1600161600000, - "y": 1588224, + "x": 1601391420000, + "y": 1408896, }, Object { - "x": 1600161630000, - "y": 1089280, + "x": 1601391450000, + "y": 1178624, }, Object { - "x": 1600161660000, - "y": 1793920, + "x": 1601391480000, + "y": 946048, }, Object { - "x": 1600161690000, - "y": 1679360, + "x": 1601391510000, + "y": 1761248, }, Object { - "x": 1600161720000, - "y": 1384416, + "x": 1601391540000, + "y": 626688, }, Object { - "x": 1600161750000, - "y": 19328, + "x": 1601391570000, + "y": 1564544, }, Object { - "x": 1600161780000, - "y": 1554432, + "x": 1601391600000, + "y": null, }, ], }, "tpmBuckets": Array [ Object { - "avg": 2.83333333333333, + "avg": 3.3, "dataPoints": Array [ Object { - "x": 1600159980000, - "y": 0, + "x": 1601389800000, + "y": 3, }, Object { - "x": 1600160010000, - "y": 0, + "x": 1601389830000, + "y": 2, + }, + Object { + "x": 1601389860000, + "y": 1, }, Object { - "x": 1600160040000, + "x": 1601389890000, "y": 0, }, Object { - "x": 1600160070000, - "y": 3, + "x": 1601389920000, + "y": 4, }, Object { - "x": 1600160100000, - "y": 2, + "x": 1601389950000, + "y": 1, + }, + Object { + "x": 1601389980000, + "y": 1, }, Object { - "x": 1600160130000, + "x": 1601390010000, "y": 0, }, Object { - "x": 1600160160000, - "y": 2, + "x": 1601390040000, + "y": 11, }, Object { - "x": 1600160190000, - "y": 1, + "x": 1601390070000, + "y": 4, }, Object { - "x": 1600160220000, + "x": 1601390100000, "y": 1, }, Object { - "x": 1600160250000, + "x": 1601390130000, "y": 0, }, Object { - "x": 1600160280000, - "y": 3, + "x": 1601390160000, + "y": 10, }, Object { - "x": 1600160310000, - "y": 3, + "x": 1601390190000, + "y": 1, }, Object { - "x": 1600160340000, - "y": 2, + "x": 1601390220000, + "y": 0, }, Object { - "x": 1600160370000, + "x": 1601390250000, "y": 0, }, Object { - "x": 1600160400000, - "y": 8, + "x": 1601390280000, + "y": 1, }, Object { - "x": 1600160430000, - "y": 1, + "x": 1601390310000, + "y": 0, }, Object { - "x": 1600160460000, + "x": 1601390340000, "y": 1, }, Object { - "x": 1600160490000, + "x": 1601390370000, "y": 0, }, Object { - "x": 1600160520000, + "x": 1601390400000, "y": 0, }, Object { - "x": 1600160550000, - "y": 3, + "x": 1601390430000, + "y": 1, }, Object { - "x": 1600160580000, - "y": 0, + "x": 1601390460000, + "y": 4, }, Object { - "x": 1600160610000, + "x": 1601390490000, "y": 0, }, Object { - "x": 1600160640000, - "y": 8, - }, - Object { - "x": 1600160670000, - "y": 1, + "x": 1601390520000, + "y": 3, }, Object { - "x": 1600160700000, + "x": 1601390550000, "y": 3, }, Object { - "x": 1600160730000, + "x": 1601390580000, "y": 0, }, Object { - "x": 1600160760000, - "y": 4, + "x": 1601390610000, + "y": 0, }, Object { - "x": 1600160790000, + "x": 1601390640000, "y": 0, }, Object { - "x": 1600160820000, + "x": 1601390670000, "y": 2, }, Object { - "x": 1600160850000, + "x": 1601390700000, "y": 0, }, Object { - "x": 1600160880000, + "x": 1601390730000, "y": 0, }, Object { - "x": 1600160910000, - "y": 5, - }, - Object { - "x": 1600160940000, - "y": 0, + "x": 1601390760000, + "y": 2, }, Object { - "x": 1600160970000, - "y": 0, + "x": 1601390790000, + "y": 2, }, Object { - "x": 1600161000000, + "x": 1601390820000, "y": 3, }, Object { - "x": 1600161030000, - "y": 5, + "x": 1601390850000, + "y": 1, }, Object { - "x": 1600161060000, - "y": 1, + "x": 1601390880000, + "y": 6, }, Object { - "x": 1600161090000, + "x": 1601390910000, "y": 0, }, Object { - "x": 1600161120000, - "y": 2, + "x": 1601390940000, + "y": 3, }, Object { - "x": 1600161150000, - "y": 1, + "x": 1601390970000, + "y": 0, }, Object { - "x": 1600161180000, + "x": 1601391000000, + "y": 5, + }, + Object { + "x": 1601391030000, "y": 0, }, Object { - "x": 1600161210000, + "x": 1601391060000, "y": 0, }, Object { - "x": 1600161240000, + "x": 1601391090000, "y": 1, }, Object { - "x": 1600161270000, - "y": 2, + "x": 1601391120000, + "y": 4, }, Object { - "x": 1600161300000, + "x": 1601391150000, "y": 1, }, Object { - "x": 1600161330000, - "y": 0, + "x": 1601391180000, + "y": 2, }, Object { - "x": 1600161360000, - "y": 1, + "x": 1601391210000, + "y": 0, }, Object { - "x": 1600161390000, + "x": 1601391240000, "y": 3, }, Object { - "x": 1600161420000, - "y": 2, + "x": 1601391270000, + "y": 1, }, Object { - "x": 1600161450000, + "x": 1601391300000, "y": 0, }, Object { - "x": 1600161480000, - "y": 2, + "x": 1601391330000, + "y": 0, }, Object { - "x": 1600161510000, - "y": 0, + "x": 1601391360000, + "y": 1, }, Object { - "x": 1600161540000, + "x": 1601391390000, "y": 0, }, Object { - "x": 1600161570000, - "y": 0, + "x": 1601391420000, + "y": 1, }, Object { - "x": 1600161600000, + "x": 1601391450000, "y": 0, }, Object { - "x": 1600161630000, - "y": 1, + "x": 1601391480000, + "y": 2, }, Object { - "x": 1600161660000, - "y": 1, + "x": 1601391510000, + "y": 6, }, Object { - "x": 1600161690000, + "x": 1601391540000, "y": 0, }, Object { - "x": 1600161720000, - "y": 5, - }, - Object { - "x": 1600161750000, + "x": 1601391570000, "y": 1, }, Object { - "x": 1600161780000, + "x": 1601391600000, "y": 0, }, ], "key": "HTTP 2xx", }, Object { - "avg": 0.233333333333333, + "avg": 0.2, "dataPoints": Array [ Object { - "x": 1600159980000, + "x": 1601389800000, "y": 0, }, Object { - "x": 1600160010000, + "x": 1601389830000, "y": 0, }, Object { - "x": 1600160040000, + "x": 1601389860000, "y": 0, }, Object { - "x": 1600160070000, + "x": 1601389890000, "y": 0, }, Object { - "x": 1600160100000, + "x": 1601389920000, "y": 0, }, Object { - "x": 1600160130000, - "y": 0, - }, - Object { - "x": 1600160160000, + "x": 1601389950000, "y": 1, }, Object { - "x": 1600160190000, + "x": 1601389980000, "y": 0, }, Object { - "x": 1600160220000, + "x": 1601390010000, "y": 0, }, Object { - "x": 1600160250000, - "y": 0, + "x": 1601390040000, + "y": 1, }, Object { - "x": 1600160280000, + "x": 1601390070000, "y": 0, }, Object { - "x": 1600160310000, + "x": 1601390100000, "y": 0, }, Object { - "x": 1600160340000, + "x": 1601390130000, "y": 0, }, Object { - "x": 1600160370000, - "y": 0, + "x": 1601390160000, + "y": 2, }, Object { - "x": 1600160400000, + "x": 1601390190000, "y": 0, }, Object { - "x": 1600160430000, - "y": 3, + "x": 1601390220000, + "y": 0, }, Object { - "x": 1600160460000, + "x": 1601390250000, "y": 0, }, Object { - "x": 1600160490000, + "x": 1601390280000, "y": 0, }, Object { - "x": 1600160520000, + "x": 1601390310000, "y": 0, }, Object { - "x": 1600160550000, + "x": 1601390340000, "y": 0, }, Object { - "x": 1600160580000, + "x": 1601390370000, "y": 0, }, Object { - "x": 1600160610000, + "x": 1601390400000, "y": 0, }, Object { - "x": 1600160640000, - "y": 1, + "x": 1601390430000, + "y": 0, }, Object { - "x": 1600160670000, + "x": 1601390460000, "y": 0, }, Object { - "x": 1600160700000, + "x": 1601390490000, "y": 0, }, Object { - "x": 1600160730000, + "x": 1601390520000, "y": 0, }, Object { - "x": 1600160760000, + "x": 1601390550000, "y": 0, }, Object { - "x": 1600160790000, + "x": 1601390580000, "y": 0, }, Object { - "x": 1600160820000, + "x": 1601390610000, "y": 0, }, Object { - "x": 1600160850000, + "x": 1601390640000, "y": 0, }, Object { - "x": 1600160880000, + "x": 1601390670000, "y": 1, }, Object { - "x": 1600160910000, + "x": 1601390700000, "y": 0, }, Object { - "x": 1600160940000, + "x": 1601390730000, "y": 0, }, Object { - "x": 1600160970000, + "x": 1601390760000, + "y": 1, + }, + Object { + "x": 1601390790000, "y": 0, }, Object { - "x": 1600161000000, + "x": 1601390820000, "y": 0, }, Object { - "x": 1600161030000, + "x": 1601390850000, "y": 0, }, Object { - "x": 1600161060000, + "x": 1601390880000, "y": 0, }, Object { - "x": 1600161090000, + "x": 1601390910000, "y": 0, }, Object { - "x": 1600161120000, + "x": 1601390940000, "y": 0, }, Object { - "x": 1600161150000, + "x": 1601390970000, "y": 0, }, Object { - "x": 1600161180000, + "x": 1601391000000, "y": 0, }, Object { - "x": 1600161210000, + "x": 1601391030000, "y": 0, }, Object { - "x": 1600161240000, + "x": 1601391060000, "y": 0, }, Object { - "x": 1600161270000, - "y": 1, + "x": 1601391090000, + "y": 0, }, Object { - "x": 1600161300000, + "x": 1601391120000, "y": 0, }, Object { - "x": 1600161330000, + "x": 1601391150000, "y": 0, }, Object { - "x": 1600161360000, + "x": 1601391180000, "y": 0, }, Object { - "x": 1600161390000, + "x": 1601391210000, "y": 0, }, Object { - "x": 1600161420000, + "x": 1601391240000, "y": 0, }, Object { - "x": 1600161450000, + "x": 1601391270000, "y": 0, }, Object { - "x": 1600161480000, + "x": 1601391300000, "y": 0, }, Object { - "x": 1600161510000, + "x": 1601391330000, "y": 0, }, Object { - "x": 1600161540000, + "x": 1601391360000, "y": 0, }, Object { - "x": 1600161570000, + "x": 1601391390000, "y": 0, }, Object { - "x": 1600161600000, + "x": 1601391420000, "y": 0, }, Object { - "x": 1600161630000, + "x": 1601391450000, "y": 0, }, Object { - "x": 1600161660000, + "x": 1601391480000, "y": 0, }, Object { - "x": 1600161690000, + "x": 1601391510000, "y": 0, }, Object { - "x": 1600161720000, + "x": 1601391540000, "y": 0, }, Object { - "x": 1600161750000, + "x": 1601391570000, "y": 0, }, Object { - "x": 1600161780000, + "x": 1601391600000, "y": 0, }, ], "key": "HTTP 4xx", }, Object { - "avg": 4.46666666666667, + "avg": 4.26666666666667, "dataPoints": Array [ Object { - "x": 1600159980000, - "y": 2, + "x": 1601389800000, + "y": 4, }, Object { - "x": 1600160010000, - "y": 2, + "x": 1601389830000, + "y": 3, }, Object { - "x": 1600160040000, - "y": 1, + "x": 1601389860000, + "y": 2, }, Object { - "x": 1600160070000, + "x": 1601389890000, "y": 2, }, Object { - "x": 1600160100000, - "y": 3, + "x": 1601389920000, + "y": 1, }, Object { - "x": 1600160130000, - "y": 0, + "x": 1601389950000, + "y": 4, }, Object { - "x": 1600160160000, - "y": 3, + "x": 1601389980000, + "y": 0, }, Object { - "x": 1600160190000, - "y": 2, + "x": 1601390010000, + "y": 3, }, Object { - "x": 1600160220000, + "x": 1601390040000, "y": 3, }, Object { - "x": 1600160250000, - "y": 2, + "x": 1601390070000, + "y": 1, }, Object { - "x": 1600160280000, + "x": 1601390100000, "y": 2, }, Object { - "x": 1600160310000, + "x": 1601390130000, "y": 3, }, Object { - "x": 1600160340000, - "y": 1, + "x": 1601390160000, + "y": 0, }, Object { - "x": 1600160370000, + "x": 1601390190000, + "y": 3, + }, + Object { + "x": 1601390220000, "y": 2, }, Object { - "x": 1600160400000, + "x": 1601390250000, "y": 3, }, Object { - "x": 1600160430000, - "y": 1, + "x": 1601390280000, + "y": 0, }, Object { - "x": 1600160460000, + "x": 1601390310000, "y": 3, }, Object { - "x": 1600160490000, + "x": 1601390340000, + "y": 3, + }, + Object { + "x": 1601390370000, "y": 2, }, Object { - "x": 1600160520000, - "y": 4, + "x": 1601390400000, + "y": 0, }, Object { - "x": 1600160550000, + "x": 1601390430000, + "y": 3, + }, + Object { + "x": 1601390460000, "y": 1, }, Object { - "x": 1600160580000, + "x": 1601390490000, "y": 3, }, Object { - "x": 1600160610000, - "y": 3, + "x": 1601390520000, + "y": 1, + }, + Object { + "x": 1601390550000, + "y": 2, }, Object { - "x": 1600160640000, + "x": 1601390580000, "y": 2, }, Object { - "x": 1600160670000, + "x": 1601390610000, "y": 2, }, Object { - "x": 1600160700000, + "x": 1601390640000, "y": 1, }, Object { - "x": 1600160730000, + "x": 1601390670000, "y": 2, }, Object { - "x": 1600160760000, + "x": 1601390700000, "y": 2, }, Object { - "x": 1600160790000, + "x": 1601390730000, "y": 3, }, Object { - "x": 1600160820000, - "y": 2, + "x": 1601390760000, + "y": 1, }, Object { - "x": 1600160850000, + "x": 1601390790000, "y": 2, }, Object { - "x": 1600160880000, - "y": 1, - }, - Object { - "x": 1600160910000, + "x": 1601390820000, "y": 3, }, Object { - "x": 1600160940000, - "y": 3, + "x": 1601390850000, + "y": 2, }, Object { - "x": 1600160970000, - "y": 1, + "x": 1601390880000, + "y": 2, }, Object { - "x": 1600161000000, + "x": 1601390910000, "y": 4, }, Object { - "x": 1600161030000, - "y": 2, - }, - Object { - "x": 1600161060000, - "y": 3, + "x": 1601390940000, + "y": 1, }, Object { - "x": 1600161090000, + "x": 1601390970000, "y": 3, }, Object { - "x": 1600161120000, + "x": 1601391000000, "y": 1, }, Object { - "x": 1600161150000, - "y": 4, + "x": 1601391030000, + "y": 3, }, Object { - "x": 1600161180000, + "x": 1601391060000, "y": 2, }, Object { - "x": 1600161210000, + "x": 1601391090000, "y": 3, }, Object { - "x": 1600161240000, + "x": 1601391120000, "y": 2, }, Object { - "x": 1600161270000, + "x": 1601391150000, "y": 2, }, Object { - "x": 1600161300000, + "x": 1601391180000, "y": 1, }, Object { - "x": 1600161330000, + "x": 1601391210000, "y": 2, }, Object { - "x": 1600161360000, + "x": 1601391240000, "y": 2, }, Object { - "x": 1600161390000, + "x": 1601391270000, "y": 2, }, Object { - "x": 1600161420000, + "x": 1601391300000, "y": 3, }, Object { - "x": 1600161450000, - "y": 3, + "x": 1601391330000, + "y": 2, }, Object { - "x": 1600161480000, - "y": 0, + "x": 1601391360000, + "y": 2, }, Object { - "x": 1600161510000, + "x": 1601391390000, "y": 3, }, Object { - "x": 1600161540000, + "x": 1601391420000, "y": 3, }, Object { - "x": 1600161570000, - "y": 1, - }, - Object { - "x": 1600161600000, - "y": 4, + "x": 1601391450000, + "y": 2, }, Object { - "x": 1600161630000, - "y": 2, + "x": 1601391480000, + "y": 1, }, Object { - "x": 1600161660000, + "x": 1601391510000, "y": 3, }, Object { - "x": 1600161690000, + "x": 1601391540000, "y": 1, }, Object { - "x": 1600161720000, + "x": 1601391570000, "y": 4, }, Object { - "x": 1600161750000, + "x": 1601391600000, "y": 0, }, - Object { - "x": 1600161780000, - "y": 2, - }, ], "key": "success", }, diff --git a/x-pack/test/apm_api_integration/basic/tests/transaction_groups/breakdown.ts b/x-pack/test/apm_api_integration/basic/tests/transaction_groups/breakdown.ts index 1c842ee457dae..f2e58718870bf 100644 --- a/x-pack/test/apm_api_integration/basic/tests/transaction_groups/breakdown.ts +++ b/x-pack/test/apm_api_integration/basic/tests/transaction_groups/breakdown.ts @@ -73,23 +73,23 @@ export default function ApiTest({ getService }: FtrProviderContext) { ).toMatchInline(` Array [ Object { - "x": "2020-09-15T08:53:00.000Z", - "y": null, + "x": "2020-09-29T14:30:00.000Z", + "y": 1, }, Object { - "x": "2020-09-15T08:53:30.000Z", - "y": null, + "x": "2020-09-29T14:30:30.000Z", + "y": 1, }, Object { - "x": "2020-09-15T08:54:00.000Z", - "y": null, + "x": "2020-09-29T14:31:00.000Z", + "y": 1, }, Object { - "x": "2020-09-15T08:54:30.000Z", + "x": "2020-09-29T14:31:30.000Z", "y": null, }, Object { - "x": "2020-09-15T08:55:00.000Z", + "x": "2020-09-29T14:32:00.000Z", "y": 1, }, ] diff --git a/x-pack/test/apm_api_integration/basic/tests/transaction_groups/distribution.ts b/x-pack/test/apm_api_integration/basic/tests/transaction_groups/distribution.ts new file mode 100644 index 0000000000000..bd669600afc14 --- /dev/null +++ b/x-pack/test/apm_api_integration/basic/tests/transaction_groups/distribution.ts @@ -0,0 +1,94 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ +import expect from '@kbn/expect'; +import qs from 'querystring'; +import { isEmpty } from 'lodash'; +import archives_metadata from '../../../common/archives_metadata'; +import { expectSnapshot } from '../../../common/match_snapshot'; +import { FtrProviderContext } from '../../../common/ftr_provider_context'; + +export default function ApiTest({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + const esArchiver = getService('esArchiver'); + + const archiveName = 'apm_8.0.0'; + const metadata = archives_metadata[archiveName]; + + const url = `/api/apm/services/opbeans-java/transaction_groups/distribution?${qs.stringify({ + start: metadata.start, + end: metadata.end, + uiFilters: {}, + transactionName: 'APIRestController#stats', + transactionType: 'request', + })}`; + + describe('Transaction groups distribution', () => { + describe('when data is not loaded ', () => { + it('handles empty state', async () => { + const response = await supertest.get(url); + + expect(response.status).to.be(200); + + expect(response.body.noHits).to.be(true); + expect(response.body.buckets.length).to.be(0); + }); + }); + + // SKIP FAILING TEST to unblock CI: https://github.com/elastic/kibana/issues/78942 + describe.skip('when data is loaded', () => { + let response: any; + before(async () => { + await esArchiver.load(archiveName); + response = await supertest.get(url); + }); + after(() => esArchiver.unload(archiveName)); + + it('returns the correct metadata', () => { + expect(response.status).to.be(200); + expect(response.body.noHits).to.be(false); + expect(response.body.buckets.length).to.be.greaterThan(0); + }); + + it('returns groups with some hits', () => { + expect(response.body.buckets.some((bucket: any) => bucket.count > 0)).to.be(true); + }); + + it('returns groups with some samples', () => { + expect(response.body.buckets.some((bucket: any) => !isEmpty(bucket.samples))).to.be(true); + }); + + it('returns the correct number of buckets', () => { + expectSnapshot(response.body.buckets.length).toMatchInline(`19`); + }); + + it('returns the correct bucket size', () => { + expectSnapshot(response.body.bucketSize).toMatchInline(`1000`); + }); + + it('returns the correct buckets', () => { + const bucketWithSamples = response.body.buckets.find( + (bucket: any) => !isEmpty(bucket.samples) + ); + + expectSnapshot(bucketWithSamples.count).toMatchInline(`2`); + + expectSnapshot(bucketWithSamples.samples.sort((sample: any) => sample.traceId)) + .toMatchInline(` + Array [ + Object { + "traceId": "a1333547d1257c636154290cddd38c3a", + "transactionId": "3e656b390989133d", + }, + Object { + "traceId": "c799c34f4ee2b0f9998745ea7354d599", + "transactionId": "69b6251b239abb46", + }, + ] + `); + }); + }); + }); +} diff --git a/x-pack/test/apm_api_integration/basic/tests/transaction_groups/error_rate.ts b/x-pack/test/apm_api_integration/basic/tests/transaction_groups/error_rate.ts index 17ada95ca4958..8ef42052ba951 100644 --- a/x-pack/test/apm_api_integration/basic/tests/transaction_groups/error_rate.ts +++ b/x-pack/test/apm_api_integration/basic/tests/transaction_groups/error_rate.ts @@ -66,13 +66,13 @@ export default function ApiTest({ getService }: FtrProviderContext) { it('has the correct start date', () => { expectSnapshot( new Date(first(errorRateResponse.erroneousTransactionsRate)?.x ?? NaN).toISOString() - ).toMatchInline(`"2020-09-15T08:53:00.000Z"`); + ).toMatchInline(`"2020-09-29T14:30:00.000Z"`); }); it('has the correct end date', () => { expectSnapshot( new Date(last(errorRateResponse.erroneousTransactionsRate)?.x ?? NaN).toISOString() - ).toMatchInline(`"2020-09-15T09:23:00.000Z"`); + ).toMatchInline(`"2020-09-29T15:00:00.000Z"`); }); it('has the correct number of buckets', () => { @@ -80,7 +80,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { }); it('has the correct calculation for average', () => { - expectSnapshot(errorRateResponse.average).toMatchInline(`0.140863095238095`); + expectSnapshot(errorRateResponse.average).toMatchInline(`0.200076804915515`); }); it('has the correct error rate', () => { diff --git a/x-pack/test/apm_api_integration/basic/tests/transaction_groups/top_transaction_groups.ts b/x-pack/test/apm_api_integration/basic/tests/transaction_groups/top_transaction_groups.ts index c3ac1ed518652..2e802957a95e3 100644 --- a/x-pack/test/apm_api_integration/basic/tests/transaction_groups/top_transaction_groups.ts +++ b/x-pack/test/apm_api_integration/basic/tests/transaction_groups/top_transaction_groups.ts @@ -57,7 +57,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { }); it('returns the correct number of buckets', () => { - expectSnapshot(response.body.items.length).toMatchInline(`14`); + expectSnapshot(response.body.items.length).toMatchInline(`12`); }); it('returns the correct buckets (when ignoring samples)', async () => { diff --git a/x-pack/test/apm_api_integration/basic/tests/transaction_groups/transaction_charts.ts b/x-pack/test/apm_api_integration/basic/tests/transaction_groups/transaction_charts.ts index ef874695e6046..c9581079b9952 100644 --- a/x-pack/test/apm_api_integration/basic/tests/transaction_groups/transaction_charts.ts +++ b/x-pack/test/apm_api_integration/basic/tests/transaction_groups/transaction_charts.ts @@ -62,7 +62,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { it('returns the correct data', () => { expectSnapshot(response.body.apmTimeseries.overallAvgDuration).toMatchInline( - `600255.707964602` + `600888.274678112` ); expectSnapshot(response.body.apmTimeseries.responseTimes.avg.length).toMatchInline(`61`); expectSnapshot(response.body.apmTimeseries.tpmBuckets.length).toMatchInline(`3`); diff --git a/x-pack/test/apm_api_integration/common/archives_metadata.ts b/x-pack/test/apm_api_integration/common/archives_metadata.ts index 84932310d22d2..48111ced9052e 100644 --- a/x-pack/test/apm_api_integration/common/archives_metadata.ts +++ b/x-pack/test/apm_api_integration/common/archives_metadata.ts @@ -6,7 +6,7 @@ export default { 'apm_8.0.0': { - start: '2020-09-15T08:53:10.777Z', - end: '2020-09-15T09:23:10.777Z', + start: '2020-09-29T14:30:00.000Z', + end: '2020-09-29T15:00:00.000Z', }, }; diff --git a/x-pack/test/apm_api_integration/common/fixtures/es_archiver/apm_8.0.0/data.json.gz b/x-pack/test/apm_api_integration/common/fixtures/es_archiver/apm_8.0.0/data.json.gz index 9b21a59367e80..159123b937857 100644 Binary files a/x-pack/test/apm_api_integration/common/fixtures/es_archiver/apm_8.0.0/data.json.gz and b/x-pack/test/apm_api_integration/common/fixtures/es_archiver/apm_8.0.0/data.json.gz differ diff --git a/x-pack/test/apm_api_integration/common/fixtures/es_archiver/apm_8.0.0/mappings.json b/x-pack/test/apm_api_integration/common/fixtures/es_archiver/apm_8.0.0/mappings.json index 5171ea03fb49f..58f956136d407 100644 --- a/x-pack/test/apm_api_integration/common/fixtures/es_archiver/apm_8.0.0/mappings.json +++ b/x-pack/test/apm_api_integration/common/fixtures/es_archiver/apm_8.0.0/mappings.json @@ -2,6 +2,9 @@ "type": "index", "value": { "aliases": { + ".ml-anomalies-.write-always_down_high_latency_by_geo": { + "is_hidden": true + }, ".ml-anomalies-.write-android_homepage_high_latency_by_geo": { "is_hidden": true }, @@ -14,18 +17,53 @@ ".ml-anomalies-.write-apm-testing-d457-high_mean_transaction_duration": { "is_hidden": true }, + ".ml-anomalies-.write-auto_http_0x29a96c5e9df3ff32_high_latency_by_geo": { + "is_hidden": true + }, ".ml-anomalies-.write-auto_http_0x73c4bc9426fb6908_high_latency_by_geo": { "is_hidden": true }, ".ml-anomalies-.write-auto_http_0xa1e2426c5b01459d_high_latency_by_geo": { "is_hidden": true }, + ".ml-anomalies-.write-cloudflare_blog_high_latency_by_geo": { + "is_hidden": true + }, ".ml-anomalies-.write-kibana-logs-ui-default-default-log-entry-categories-count": { "is_hidden": true }, ".ml-anomalies-.write-kibana-logs-ui-default-default-log-entry-rate": { "is_hidden": true }, + ".ml-anomalies-.write-kibana-metrics-ui-default-default-hosts_memory_usage": { + "is_hidden": true + }, + ".ml-anomalies-.write-kibana-metrics-ui-default-default-hosts_network_in": { + "is_hidden": true + }, + ".ml-anomalies-.write-kibana-metrics-ui-default-default-hosts_network_out": { + "is_hidden": true + }, + ".ml-anomalies-.write-kibana-metrics-ui-default-default-k8s_memory_usage": { + "is_hidden": true + }, + ".ml-anomalies-.write-kibana-metrics-ui-default-default-k8s_network_in": { + "is_hidden": true + }, + ".ml-anomalies-.write-kibana-metrics-ui-default-default-k8s_network_out": { + "is_hidden": true + }, + ".ml-anomalies-always_down_high_latency_by_geo": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "always_down_high_latency_by_geo" + } + } + }, + "is_hidden": true + }, ".ml-anomalies-android_homepage_high_latency_by_geo": { "filter": { "term": { @@ -70,6 +108,17 @@ }, "is_hidden": true }, + ".ml-anomalies-auto_http_0x29a96c5e9df3ff32_high_latency_by_geo": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "auto_http_0x29a96c5e9df3ff32_high_latency_by_geo" + } + } + }, + "is_hidden": true + }, ".ml-anomalies-auto_http_0x73c4bc9426fb6908_high_latency_by_geo": { "filter": { "term": { @@ -92,6 +141,17 @@ }, "is_hidden": true }, + ".ml-anomalies-cloudflare_blog_high_latency_by_geo": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "cloudflare_blog_high_latency_by_geo" + } + } + }, + "is_hidden": true + }, ".ml-anomalies-kibana-logs-ui-default-default-log-entry-categories-count": { "filter": { "term": { @@ -113,6 +173,72 @@ } }, "is_hidden": true + }, + ".ml-anomalies-kibana-metrics-ui-default-default-hosts_memory_usage": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "kibana-metrics-ui-default-default-hosts_memory_usage" + } + } + }, + "is_hidden": true + }, + ".ml-anomalies-kibana-metrics-ui-default-default-hosts_network_in": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "kibana-metrics-ui-default-default-hosts_network_in" + } + } + }, + "is_hidden": true + }, + ".ml-anomalies-kibana-metrics-ui-default-default-hosts_network_out": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "kibana-metrics-ui-default-default-hosts_network_out" + } + } + }, + "is_hidden": true + }, + ".ml-anomalies-kibana-metrics-ui-default-default-k8s_memory_usage": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "kibana-metrics-ui-default-default-k8s_memory_usage" + } + } + }, + "is_hidden": true + }, + ".ml-anomalies-kibana-metrics-ui-default-default-k8s_network_in": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "kibana-metrics-ui-default-default-k8s_network_in" + } + } + }, + "is_hidden": true + }, + ".ml-anomalies-kibana-metrics-ui-default-default-k8s_network_out": { + "filter": { + "term": { + "job_id": { + "boost": 1, + "value": "kibana-metrics-ui-default-default-k8s_network_out" + } + } + }, + "is_hidden": true } }, "index": ".ml-anomalies-shared", @@ -377,6 +503,13 @@ } } }, + "host": { + "properties": { + "name": { + "type": "keyword" + } + } + }, "influencer_field_name": { "type": "keyword" }, @@ -433,6 +566,27 @@ ], "type": "keyword" }, + "kubernetes": { + "properties": { + "namespace": { + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "uid": { + "type": "keyword" + } + } + } + } + }, "last_data_time": { "type": "date" }, @@ -12501,6 +12655,9 @@ }, "settings": { "index": { + "blocks": { + "write": "true" + }, "codec": "best_compression", "lifecycle": { "indexing_complete": "true", @@ -12514,7 +12671,7 @@ }, "number_of_replicas": "1", "number_of_shards": "1", - "priority": "100", + "priority": "50", "refresh_interval": "5s" } } @@ -12526,7 +12683,7 @@ "value": { "aliases": { "apm-8.0.0-error": { - "is_write_index": true + "is_write_index": false } }, "index": "apm-8.0.0-error-2020.07.31-000002", @@ -16306,6 +16463,7 @@ "index": { "codec": "best_compression", "lifecycle": { + "indexing_complete": "true", "name": "apm-rollover-30-days", "rollover_alias": "apm-8.0.0-error" }, @@ -16327,11 +16485,11 @@ "type": "index", "value": { "aliases": { - "apm-8.0.0-metric": { - "is_write_index": false + "apm-8.0.0-error": { + "is_write_index": true } }, - "index": "apm-8.0.0-metric-000001", + "index": "apm-8.0.0-error-2020.09.16-000001", "mappings": { "_meta": { "beat": "apm", @@ -16437,7 +16595,7 @@ } }, { - "labels": { + "labels_string": { "mapping": { "type": "keyword" }, @@ -16446,7 +16604,7 @@ } }, { - "labels": { + "labels_boolean": { "mapping": { "type": "boolean" }, @@ -16455,7 +16613,7 @@ } }, { - "labels": { + "labels_*": { "mapping": { "scaling_factor": 1000000, "type": "scaled_float" @@ -16503,8 +16661,8 @@ "type": "keyword" }, "hostname": { - "ignore_above": 1024, - "type": "keyword" + "path": "agent.name", + "type": "alias" }, "id": { "ignore_above": 1024, @@ -16545,6 +16703,15 @@ } } }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, "client": { "dynamic": "false", "properties": { @@ -16707,10 +16874,15 @@ "cloud": { "properties": { "account": { + "dynamic": "false", "properties": { "id": { "ignore_above": 1024, "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" } } }, @@ -16727,6 +16899,7 @@ } }, "instance": { + "dynamic": "false", "properties": { "id": { "ignore_above": 1024, @@ -16739,6 +16912,7 @@ } }, "machine": { + "dynamic": "false", "properties": { "type": { "ignore_above": 1024, @@ -16747,10 +16921,15 @@ } }, "project": { + "dynamic": "false", "properties": { "id": { "ignore_above": 1024, "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" } } }, @@ -17524,78 +17703,6 @@ } } }, - "golang": { - "properties": { - "goroutines": { - "type": "long" - }, - "heap": { - "properties": { - "allocations": { - "properties": { - "active": { - "type": "float" - }, - "allocated": { - "type": "float" - }, - "frees": { - "type": "float" - }, - "idle": { - "type": "float" - }, - "mallocs": { - "type": "float" - }, - "objects": { - "type": "long" - }, - "total": { - "type": "float" - } - } - }, - "gc": { - "properties": { - "cpu_fraction": { - "type": "float" - }, - "next_gc_limit": { - "type": "float" - }, - "total_count": { - "type": "long" - }, - "total_pause": { - "properties": { - "ns": { - "type": "float" - } - } - } - } - }, - "system": { - "properties": { - "obtained": { - "type": "float" - }, - "released": { - "type": "float" - }, - "stack": { - "type": "long" - }, - "total": { - "type": "float" - } - } - } - } - } - } - }, "group": { "properties": { "domain": { @@ -17908,60 +18015,6 @@ } } }, - "jvm": { - "properties": { - "gc": { - "properties": { - "alloc": { - "type": "float" - }, - "count": { - "type": "long" - }, - "time": { - "type": "long" - } - } - }, - "memory": { - "properties": { - "heap": { - "properties": { - "committed": { - "type": "float" - }, - "max": { - "type": "float" - }, - "used": { - "type": "float" - } - } - }, - "non_heap": { - "properties": { - "committed": { - "type": "float" - }, - "max": { - "type": "long" - }, - "used": { - "type": "float" - } - } - } - } - }, - "thread": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, "kubernetes": { "dynamic": "false", "properties": { @@ -18044,13 +18097,19 @@ "labels": { "dynamic": "true", "properties": { - "env": { + "company": { "type": "keyword" }, - "hostname": { + "customer_tier": { "type": "keyword" }, - "name": { + "request_id": { + "type": "keyword" + }, + "var01": { + "type": "keyword" + }, + "var02": { "type": "keyword" } } @@ -18123,6 +18182,13 @@ "norms": false, "type": "text" }, + "metricset": { + "properties": { + "period": { + "type": "long" + } + } + }, "network": { "properties": { "application": { @@ -18196,64 +18262,6 @@ } } }, - "nodejs": { - "properties": { - "eventloop": { - "properties": { - "delay": { - "properties": { - "avg": { - "properties": { - "ms": { - "type": "float" - } - } - }, - "ns": { - "type": "long" - } - } - } - } - }, - "handles": { - "properties": { - "active": { - "type": "long" - } - } - }, - "memory": { - "properties": { - "heap": { - "properties": { - "allocated": { - "properties": { - "bytes": { - "type": "float" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "float" - } - } - } - } - } - } - }, - "requests": { - "properties": { - "active": { - "type": "long" - } - } - } - } - }, "observer": { "dynamic": "false", "properties": { @@ -18921,6 +18929,10 @@ "duration": { "type": "long" }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, "inuse_objects": { "properties": { "count": { @@ -19035,76 +19047,276 @@ } } }, - "ruby": { + "rule": { "properties": { - "gc": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { "properties": { - "count": { + "number": { "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } } } }, - "heap": { + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { "properties": { - "allocations": { - "properties": { - "total": { - "type": "float" + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" } - } + }, + "ignore_above": 1024, + "type": "keyword" }, - "slots": { + "group": { "properties": { - "free": { - "type": "long" + "domain": { + "ignore_above": 1024, + "type": "keyword" }, - "live": { - "type": "long" + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" } } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" } } - }, - "threads": { - "type": "long" } } }, - "rule": { + "service": { + "dynamic": "false", "properties": { - "author": { + "environment": { "ignore_above": 1024, "type": "keyword" }, - "category": { + "ephemeral_id": { "ignore_above": 1024, "type": "keyword" }, - "description": { - "ignore_above": 1024, - "type": "keyword" + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } }, "id": { "ignore_above": 1024, "type": "keyword" }, - "license": { - "ignore_above": 1024, - "type": "keyword" + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } }, "name": { "ignore_above": 1024, "type": "keyword" }, - "reference": { - "ignore_above": 1024, - "type": "keyword" + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } }, - "ruleset": { + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { "ignore_above": 1024, "type": "keyword" }, - "uuid": { + "type": { "ignore_above": 1024, "type": "keyword" }, @@ -19114,243 +19326,8 @@ } } }, - "server": { - "properties": { - "address": { - "ignore_above": 1024, - "type": "keyword" - }, - "as": { - "properties": { - "number": { - "type": "long" - }, - "organization": { - "properties": { - "name": { - "fields": { - "text": { - "norms": false, - "type": "text" - } - }, - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "bytes": { - "type": "long" - }, - "domain": { - "ignore_above": 1024, - "type": "keyword" - }, - "geo": { - "properties": { - "city_name": { - "ignore_above": 1024, - "type": "keyword" - }, - "continent_name": { - "ignore_above": 1024, - "type": "keyword" - }, - "country_iso_code": { - "ignore_above": 1024, - "type": "keyword" - }, - "country_name": { - "ignore_above": 1024, - "type": "keyword" - }, - "location": { - "type": "geo_point" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "region_iso_code": { - "ignore_above": 1024, - "type": "keyword" - }, - "region_name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "ip": { - "type": "ip" - }, - "mac": { - "ignore_above": 1024, - "type": "keyword" - }, - "nat": { - "properties": { - "ip": { - "type": "ip" - }, - "port": { - "type": "long" - } - } - }, - "packets": { - "type": "long" - }, - "port": { - "type": "long" - }, - "registered_domain": { - "ignore_above": 1024, - "type": "keyword" - }, - "top_level_domain": { - "ignore_above": 1024, - "type": "keyword" - }, - "user": { - "properties": { - "domain": { - "ignore_above": 1024, - "type": "keyword" - }, - "email": { - "ignore_above": 1024, - "type": "keyword" - }, - "full_name": { - "fields": { - "text": { - "norms": false, - "type": "text" - } - }, - "ignore_above": 1024, - "type": "keyword" - }, - "group": { - "properties": { - "domain": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "hash": { - "ignore_above": 1024, - "type": "keyword" - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "name": { - "fields": { - "text": { - "norms": false, - "type": "text" - } - }, - "ignore_above": 1024, - "type": "keyword" - } - } - } - } - }, - "service": { - "dynamic": "false", - "properties": { - "environment": { - "ignore_above": 1024, - "type": "keyword" - }, - "ephemeral_id": { - "ignore_above": 1024, - "type": "keyword" - }, - "framework": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "id": { - "ignore_above": 1024, - "type": "keyword" - }, - "language": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "node": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "runtime": { - "properties": { - "name": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "state": { - "ignore_above": 1024, - "type": "keyword" - }, - "type": { - "ignore_above": 1024, - "type": "keyword" - }, - "version": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, - "source": { - "dynamic": "false", + "source": { + "dynamic": "false", "properties": { "address": { "ignore_above": 1024, @@ -19562,6 +19539,20 @@ "ignore_above": 1024, "type": "keyword" }, + "response_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, "type": { "ignore_above": 1024, "type": "keyword" @@ -19673,37 +19664,52 @@ }, "process": { "properties": { - "cpu": { + "cgroup": { "properties": { - "system": { + "memory": { "properties": { - "norm": { + "mem": { "properties": { - "pct": { - "type": "float" + "limit": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "usage": { + "properties": { + "bytes": { + "type": "long" + } + } } } - } - } - }, - "total": { - "properties": { - "norm": { + }, + "stats": { "properties": { - "pct": { - "scaling_factor": 1000, - "type": "scaled_float" + "inactive_file": { + "properties": { + "bytes": { + "type": "long" + } + } } } } } - }, - "user": { + } + } + }, + "cpu": { + "properties": { + "total": { "properties": { "norm": { "properties": { "pct": { - "type": "float" + "scaling_factor": 1000, + "type": "scaled_float" } } } @@ -19968,6 +19974,9 @@ "count": { "type": "long" }, + "histogram": { + "type": "histogram" + }, "sum": { "properties": { "us": { @@ -19980,6 +19989,22 @@ } } }, + "experience": { + "properties": { + "cls": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "fid": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "tbt": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + }, "id": { "ignore_above": 1024, "type": "keyword" @@ -20031,6 +20056,9 @@ "ignore_above": 1024, "type": "keyword" }, + "root": { + "type": "boolean" + }, "sampled": { "type": "boolean" }, @@ -20320,21 +20348,20 @@ }, "settings": { "index": { - "auto_expand_replicas": "false", "codec": "best_compression", "lifecycle": { - "indexing_complete": "true", "name": "apm-rollover-30-days", - "rollover_alias": "apm-8.0.0-metric" + "rollover_alias": "apm-8.0.0-error" }, "mapping": { "total_fields": { "limit": "2000" } }, - "number_of_replicas": "0", + "max_docvalue_fields_search": "200", + "number_of_replicas": "1", "number_of_shards": "1", - "priority": "50", + "priority": "100", "refresh_interval": "5s" } } @@ -20349,7 +20376,7 @@ "is_write_index": false } }, - "index": "apm-8.0.0-metric-000002", + "index": "apm-8.0.0-metric-000001", "mappings": { "_meta": { "beat": "apm", @@ -21558,13 +21585,16372 @@ "type": "float" }, "frees": { - "type": "long" + "type": "float" + }, + "idle": { + "type": "float" + }, + "mallocs": { + "type": "float" + }, + "objects": { + "type": "long" + }, + "total": { + "type": "float" + } + } + }, + "gc": { + "properties": { + "cpu_fraction": { + "type": "float" + }, + "next_gc_limit": { + "type": "float" + }, + "total_count": { + "type": "long" + }, + "total_pause": { + "properties": { + "ns": { + "type": "float" + } + } + } + } + }, + "system": { + "properties": { + "obtained": { + "type": "float" + }, + "released": { + "type": "float" + }, + "stack": { + "type": "long" + }, + "total": { + "type": "float" + } + } + } + } + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "jvm": { + "properties": { + "gc": { + "properties": { + "alloc": { + "type": "float" + }, + "count": { + "type": "long" + }, + "time": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "float" + }, + "used": { + "type": "float" + } + } + }, + "non_heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "long" + }, + "used": { + "type": "float" + } + } + } + } + }, + "thread": { + "properties": { + "count": { + "type": "long" + } + } + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "env": { + "type": "keyword" + }, + "hostname": { + "type": "keyword" + }, + "name": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "nodejs": { + "properties": { + "eventloop": { + "properties": { + "delay": { + "properties": { + "avg": { + "properties": { + "ms": { + "type": "float" + } + } + }, + "ns": { + "type": "long" + } + } + } + } + }, + "handles": { + "properties": { + "active": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "heap": { + "properties": { + "allocated": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "used": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + } + } + }, + "requests": { + "properties": { + "active": { + "type": "long" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ruby": { + "properties": { + "gc": { + "properties": { + "count": { + "type": "long" + } + } + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "total": { + "type": "float" + } + } + }, + "slots": { + "properties": { + "free": { + "type": "long" + }, + "live": { + "type": "long" + } + } + } + } + }, + "threads": { + "type": "long" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "system": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + }, + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + }, + "user": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "false", + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-metric" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "0", + "number_of_shards": "1", + "priority": "50", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-metric": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-metric-000002", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "golang": { + "properties": { + "goroutines": { + "type": "long" + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "active": { + "type": "float" + }, + "allocated": { + "type": "float" + }, + "frees": { + "type": "long" + }, + "idle": { + "type": "float" + }, + "mallocs": { + "type": "long" + }, + "objects": { + "type": "long" + }, + "total": { + "type": "float" + } + } + }, + "gc": { + "properties": { + "cpu_fraction": { + "type": "float" + }, + "next_gc_limit": { + "type": "float" + }, + "total_count": { + "type": "long" + }, + "total_pause": { + "properties": { + "ns": { + "type": "float" + } + } + } + } + }, + "system": { + "properties": { + "obtained": { + "type": "float" + }, + "released": { + "type": "float" + }, + "stack": { + "type": "long" + }, + "total": { + "type": "float" + } + } + } + } + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "jvm": { + "properties": { + "gc": { + "properties": { + "alloc": { + "type": "float" + }, + "count": { + "type": "long" + }, + "time": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "float" + }, + "used": { + "type": "float" + } + } + }, + "non_heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "long" + }, + "used": { + "type": "float" + } + } + } + } + }, + "thread": { + "properties": { + "count": { + "type": "long" + } + } + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "env": { + "type": "keyword" + }, + "hostname": { + "type": "keyword" + }, + "name": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "nodejs": { + "properties": { + "eventloop": { + "properties": { + "delay": { + "properties": { + "avg": { + "properties": { + "ms": { + "type": "float" + } + } + }, + "ns": { + "type": "long" + } + } + } + } + }, + "handles": { + "properties": { + "active": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "arrayBuffers": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "external": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "heap": { + "properties": { + "allocated": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "used": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + } + } + }, + "requests": { + "properties": { + "active": { + "type": "long" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ruby": { + "properties": { + "gc": { + "properties": { + "count": { + "type": "long" + } + } + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "total": { + "type": "float" + } + } + }, + "slots": { + "properties": { + "free": { + "type": "long" + }, + "live": { + "type": "long" + } + } + } + } + }, + "threads": { + "type": "long" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cpu": { + "properties": { + "system": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + }, + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + }, + "user": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "false", + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-metric" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "0", + "number_of_shards": "1", + "priority": "50", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-metric": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-metric-2020.07.31-000001", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "clr": { + "properties": { + "gc": { + "properties": { + "count": { + "type": "long" + }, + "gen0size": { + "type": "float" + }, + "gen1size": { + "type": "float" + }, + "gen2size": { + "type": "float" + }, + "gen3size": { + "type": "float" + } + } + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "golang": { + "properties": { + "goroutines": { + "type": "long" + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "active": { + "type": "float" + }, + "allocated": { + "type": "float" + }, + "frees": { + "type": "long" + }, + "idle": { + "type": "float" + }, + "mallocs": { + "type": "long" + }, + "objects": { + "type": "long" + }, + "total": { + "type": "float" + } + } + }, + "gc": { + "properties": { + "cpu_fraction": { + "type": "float" + }, + "next_gc_limit": { + "type": "float" + }, + "total_count": { + "type": "long" + }, + "total_pause": { + "properties": { + "ns": { + "type": "long" + } + } + } + } + }, + "system": { + "properties": { + "obtained": { + "type": "float" + }, + "released": { + "type": "float" + }, + "stack": { + "type": "long" + }, + "total": { + "type": "float" + } + } + } + } + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "jvm": { + "properties": { + "gc": { + "properties": { + "alloc": { + "type": "float" + }, + "count": { + "type": "long" + }, + "time": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "float" + }, + "pool": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "float" + }, + "used": { + "type": "long" + } + } + }, + "used": { + "type": "float" + } + } + }, + "non_heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "long" + }, + "used": { + "type": "float" + } + } + } + } + }, + "thread": { + "properties": { + "count": { + "type": "long" + } + } + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "env": { + "type": "keyword" + }, + "hostname": { + "type": "keyword" + }, + "name": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "nodejs": { + "properties": { + "eventloop": { + "properties": { + "delay": { + "properties": { + "avg": { + "properties": { + "ms": { + "type": "float" + } + } + }, + "ns": { + "type": "long" + } + } + } + } + }, + "handles": { + "properties": { + "active": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "arrayBuffers": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "external": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "heap": { + "properties": { + "allocated": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "used": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + } + } + }, + "requests": { + "properties": { + "active": { + "type": "long" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ruby": { + "properties": { + "gc": { + "properties": { + "count": { + "type": "long" + } + } + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "total": { + "type": "long" + } + } + }, + "slots": { + "properties": { + "free": { + "type": "long" + }, + "live": { + "type": "long" + } + } + } + } + }, + "threads": { + "type": "long" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cgroup": { + "properties": { + "memory": { + "properties": { + "mem": { + "properties": { + "limit": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "usage": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + }, + "stats": { + "properties": { + "inactive_file": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + } + } + } + } + }, + "cpu": { + "properties": { + "system": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + }, + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + }, + "user": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "histogram": { + "type": "histogram" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "root": { + "type": "boolean" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "blocks": { + "write": "true" + }, + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-metric" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1", + "priority": "50", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-metric": { + "is_write_index": false + } + }, + "index": "apm-8.0.0-metric-2020.07.31-000002", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "clr": { + "properties": { + "gc": { + "properties": { + "count": { + "type": "long" + }, + "gen0size": { + "type": "float" + }, + "gen1size": { + "type": "float" + }, + "gen2size": { + "type": "float" + }, + "gen3size": { + "type": "float" + } + } + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "golang": { + "properties": { + "goroutines": { + "type": "long" + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "active": { + "type": "float" + }, + "allocated": { + "type": "float" + }, + "frees": { + "type": "float" + }, + "idle": { + "type": "float" + }, + "mallocs": { + "type": "float" + }, + "objects": { + "type": "long" + }, + "total": { + "type": "float" + } + } + }, + "gc": { + "properties": { + "cpu_fraction": { + "type": "float" + }, + "next_gc_limit": { + "type": "float" + }, + "total_count": { + "type": "long" + }, + "total_pause": { + "properties": { + "ns": { + "type": "float" + } + } + } + } + }, + "system": { + "properties": { + "obtained": { + "type": "float" + }, + "released": { + "type": "float" + }, + "stack": { + "type": "long" + }, + "total": { + "type": "float" + } + } + } + } + } + } + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "host": { + "dynamic": "false", + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "containerized": { + "type": "boolean" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "build": { + "ignore_above": 1024, + "type": "keyword" + }, + "codename": { + "ignore_above": 1024, + "type": "keyword" + }, + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "http": { + "dynamic": "false", + "properties": { + "request": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "method": { + "ignore_above": 1024, + "type": "keyword" + }, + "referrer": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "response": { + "properties": { + "body": { + "properties": { + "bytes": { + "type": "long" + }, + "content": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "bytes": { + "type": "long" + }, + "finished": { + "type": "boolean" + }, + "headers": { + "enabled": false, + "type": "object" + }, + "status_code": { + "type": "long" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "jvm": { + "properties": { + "gc": { + "properties": { + "alloc": { + "type": "float" + }, + "count": { + "type": "long" + }, + "time": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "float" + }, + "pool": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "float" + }, + "used": { + "type": "float" + } + } + }, + "used": { + "type": "float" + } + } + }, + "non_heap": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "long" + }, + "used": { + "type": "float" + } + } + } + } + }, + "thread": { + "properties": { + "count": { + "type": "long" + } + } + } + } + }, + "kubernetes": { + "dynamic": "false", + "properties": { + "annotations": { + "properties": { + "*": { + "type": "object" + } + } + }, + "container": { + "properties": { + "image": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "deployment": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "properties": { + "*": { + "type": "object" + } + } + }, + "namespace": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pod": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "replicaset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "statefulset": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "labels": { + "dynamic": "true", + "properties": { + "env": { + "type": "keyword" + }, + "hostname": { + "type": "keyword" + }, + "name": { + "type": "keyword" + } + } + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger": { + "ignore_above": 1024, + "type": "keyword" + }, + "origin": { + "properties": { + "file": { + "properties": { + "line": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "syslog": { + "properties": { + "facility": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "priority": { + "type": "long" + }, + "severity": { + "properties": { + "code": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "network": { + "properties": { + "application": { + "ignore_above": 1024, + "type": "keyword" + }, + "bytes": { + "type": "long" + }, + "community_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "direction": { + "ignore_above": 1024, + "type": "keyword" + }, + "forwarded_ip": { + "type": "ip" + }, + "iana_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "inner": { + "properties": { + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "packets": { + "type": "long" + }, + "protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "transport": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "nodejs": { + "properties": { + "eventloop": { + "properties": { + "delay": { + "properties": { + "avg": { + "properties": { + "ms": { + "type": "float" + } + } + }, + "ns": { + "type": "long" + } + } + } + } + }, + "handles": { + "properties": { + "active": { + "type": "long" + } + } + }, + "memory": { + "properties": { + "arrayBuffers": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "external": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "heap": { + "properties": { + "allocated": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "used": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + } + } + }, + "requests": { + "properties": { + "active": { + "type": "long" + } + } + } + } + }, + "observer": { + "dynamic": "false", + "properties": { + "egress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hostname": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingress": { + "properties": { + "interface": { + "properties": { + "alias": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "zone": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "listening": { + "ignore_above": 1024, + "type": "keyword" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + }, + "serial_number": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "vendor": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_major": { + "type": "byte" + } + } + }, + "organization": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "package": { + "properties": { + "architecture": { + "ignore_above": 1024, + "type": "keyword" + }, + "build_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "checksum": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "install_scope": { + "ignore_above": 1024, + "type": "keyword" + }, + "installed": { + "type": "date" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "size": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "parent": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "process": { + "dynamic": "false", + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "parent": { + "properties": { + "args": { + "ignore_above": 1024, + "type": "keyword" + }, + "args_count": { + "type": "long" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "command_line": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "entity_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "executable": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "exit_code": { + "type": "long" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "pgid": { + "type": "long" + }, + "pid": { + "type": "long" + }, + "ppid": { + "type": "long" + }, + "start": { + "type": "date" + }, + "thread": { + "properties": { + "id": { + "type": "long" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "title": { + "ignore_above": 1024, + "type": "keyword" + }, + "uptime": { + "type": "long" + }, + "working_directory": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "processor": { + "properties": { + "event": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "profile": { + "dynamic": "false", + "properties": { + "alloc_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "alloc_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "cpu": { + "properties": { + "ns": { + "type": "long" + } + } + }, + "duration": { + "type": "long" + }, + "inuse_objects": { + "properties": { + "count": { + "type": "long" + } + } + }, + "inuse_space": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "samples": { + "properties": { + "count": { + "type": "long" + } + } + }, + "stack": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + }, + "top": { + "dynamic": "false", + "properties": { + "filename": { + "ignore_above": 1024, + "type": "keyword" + }, + "function": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "line": { + "type": "long" + } + } + } + } + }, + "registry": { + "properties": { + "data": { + "properties": { + "bytes": { + "ignore_above": 1024, + "type": "keyword" + }, + "strings": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hive": { + "ignore_above": 1024, + "type": "keyword" + }, + "key": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "value": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "related": { + "properties": { + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "ip": { + "type": "ip" + }, + "user": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ruby": { + "properties": { + "gc": { + "properties": { + "count": { + "type": "long" + } + } + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "total": { + "type": "float" + } + } + }, + "slots": { + "properties": { + "free": { + "type": "long" + }, + "live": { + "type": "long" + } + } + } + } + }, + "threads": { + "type": "long" + } + } + }, + "rule": { + "properties": { + "author": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "license": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "ruleset": { + "ignore_above": 1024, + "type": "keyword" + }, + "uuid": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "server": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "service": { + "dynamic": "false", + "properties": { + "environment": { + "ignore_above": 1024, + "type": "keyword" + }, + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "framework": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "language": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "node": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "runtime": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "state": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "source": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "sourcemap": { + "dynamic": "false", + "properties": { + "bundle_filepath": { + "ignore_above": 1024, + "type": "keyword" + }, + "service": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "span": { + "dynamic": "false", + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "db": { + "dynamic": "false", + "properties": { + "link": { + "ignore_above": 1024, + "type": "keyword" + }, + "rows_affected": { + "type": "long" + } + } + }, + "destination": { + "dynamic": "false", + "properties": { + "service": { + "dynamic": "false", + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "resource": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "duration": { + "properties": { + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "start": { + "properties": { + "us": { + "type": "long" + } + } + }, + "subtype": { + "ignore_above": 1024, + "type": "keyword" + }, + "sync": { + "type": "boolean" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "system": { + "properties": { + "cpu": { + "properties": { + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "actual": { + "properties": { + "free": { + "type": "long" + } + } + }, + "total": { + "type": "long" + } + } + }, + "process": { + "properties": { + "cgroup": { + "properties": { + "memory": { + "properties": { + "mem": { + "properties": { + "limit": { + "properties": { + "bytes": { + "type": "float" + } + } + }, + "usage": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + }, + "stats": { + "properties": { + "inactive_file": { + "properties": { + "bytes": { + "type": "float" + } + } + } + } + } + } + } + } + }, + "cpu": { + "properties": { + "system": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + }, + "total": { + "properties": { + "norm": { + "properties": { + "pct": { + "scaling_factor": 1000, + "type": "scaled_float" + } + } + } + } + }, + "user": { + "properties": { + "norm": { + "properties": { + "pct": { + "type": "float" + } + } + } + } + } + } + }, + "memory": { + "properties": { + "rss": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "size": { + "type": "long" + } + } + } + } + } + } + }, + "tags": { + "ignore_above": 1024, + "type": "keyword" + }, + "threat": { + "properties": { + "framework": { + "ignore_above": 1024, + "type": "keyword" + }, + "tactic": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "technique": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "timeseries": { + "properties": { + "instance": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "timestamp": { + "properties": { + "us": { + "type": "long" + } + } + }, + "tls": { + "properties": { + "cipher": { + "ignore_above": 1024, + "type": "keyword" + }, + "client": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "server_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + }, + "supported_ciphers": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "curve": { + "ignore_above": 1024, + "type": "keyword" + }, + "established": { + "type": "boolean" + }, + "next_protocol": { + "ignore_above": 1024, + "type": "keyword" + }, + "resumed": { + "type": "boolean" + }, + "server": { + "properties": { + "certificate": { + "ignore_above": 1024, + "type": "keyword" + }, + "certificate_chain": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "issuer": { + "ignore_above": 1024, + "type": "keyword" + }, + "ja3s": { + "ignore_above": 1024, + "type": "keyword" + }, + "not_after": { + "type": "date" + }, + "not_before": { + "type": "date" + }, + "subject": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + }, + "version_protocol": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "trace": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "tracing": { + "properties": { + "trace": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "transaction": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "transaction": { + "dynamic": "false", + "properties": { + "breakdown": { + "properties": { + "count": { + "type": "long" + } + } + }, + "duration": { + "properties": { + "count": { + "type": "long" + }, + "histogram": { + "type": "histogram" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + }, + "us": { + "type": "long" + } + } + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "marks": { + "dynamic": "true", + "properties": { + "*": { + "properties": { + "*": { + "dynamic": "true", + "type": "object" + } + } + } + } + }, + "message": { + "dynamic": "false", + "properties": { + "age": { + "properties": { + "ms": { + "type": "long" + } + } + }, + "queue": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "result": { + "ignore_above": 1024, + "type": "keyword" + }, + "root": { + "type": "boolean" + }, + "sampled": { + "type": "boolean" + }, + "self_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, + "span_count": { + "properties": { + "dropped": { + "type": "long" + } + } + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "url": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "fragment": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "password": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "port": { + "type": "long" + }, + "query": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "scheme": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "username": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user": { + "dynamic": "false", + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "user_agent": { + "dynamic": "false", + "properties": { + "device": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "os": { + "properties": { + "family": { + "ignore_above": 1024, + "type": "keyword" + }, + "full": { + "ignore_above": 1024, + "type": "keyword" + }, + "kernel": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "platform": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "view spans": { + "ignore_above": 1024, + "type": "keyword" + }, + "vlan": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "vulnerability": { + "properties": { + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "classification": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "enumeration": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "report_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "scanner": { + "properties": { + "vendor": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "score": { + "properties": { + "base": { + "type": "float" + }, + "environmental": { + "type": "float" + }, + "temporal": { + "type": "float" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "severity": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "settings": { + "index": { + "codec": "best_compression", + "lifecycle": { + "indexing_complete": "true", + "name": "apm-rollover-30-days", + "rollover_alias": "apm-8.0.0-metric" + }, + "mapping": { + "total_fields": { + "limit": "2000" + } + }, + "number_of_replicas": "1", + "number_of_shards": "1", + "priority": "100", + "refresh_interval": "5s" + } + } + } +} + +{ + "type": "index", + "value": { + "aliases": { + "apm-8.0.0-metric": { + "is_write_index": true + } + }, + "index": "apm-8.0.0-metric-2020.09.16-000001", + "mappings": { + "_meta": { + "beat": "apm", + "version": "8.0.0" + }, + "date_detection": false, + "dynamic_templates": [ + { + "labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "container.labels.*" + } + }, + { + "dns.answers": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "dns.answers.*" + } + }, + { + "log.syslog": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "log.syslog.*" + } + }, + { + "network.inner": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "network.inner.*" + } + }, + { + "observer.egress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.egress.*" + } + }, + { + "observer.ingress": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "observer.ingress.*" + } + }, + { + "fields": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "fields.*" + } + }, + { + "docker.container.labels": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "docker.container.labels.*" + } + }, + { + "kubernetes.labels.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.labels.*" + } + }, + { + "kubernetes.annotations.*": { + "mapping": { + "type": "keyword" + }, + "path_match": "kubernetes.annotations.*" + } + }, + { + "labels_string": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "labels.*" + } + }, + { + "labels_boolean": { + "mapping": { + "type": "boolean" + }, + "match_mapping_type": "boolean", + "path_match": "labels.*" + } + }, + { + "labels_*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "labels.*" + } + }, + { + "transaction.marks": { + "mapping": { + "type": "keyword" + }, + "match_mapping_type": "string", + "path_match": "transaction.marks.*" + } + }, + { + "transaction.marks.*.*": { + "mapping": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "path_match": "transaction.marks.*.*" + } + }, + { + "strings_as_keyword": { + "mapping": { + "ignore_above": 1024, + "type": "keyword" + }, + "match_mapping_type": "string" + } + } + ], + "properties": { + "@timestamp": { + "type": "date" + }, + "agent": { + "dynamic": "false", + "properties": { + "ephemeral_id": { + "ignore_above": 1024, + "type": "keyword" + }, + "hostname": { + "path": "agent.name", + "type": "alias" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "client": { + "dynamic": "false", + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "cloud": { + "properties": { + "account": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "availability_zone": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "instance": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "machine": { + "dynamic": "false", + "properties": { + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "project": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "region": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "clr": { + "properties": { + "gc": { + "properties": { + "count": { + "type": "long" + }, + "gen0size": { + "type": "float" + }, + "gen1size": { + "type": "float" + }, + "gen2size": { + "type": "float" + }, + "gen3size": { + "type": "float" + } + } + } + } + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "container": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "image": { + "properties": { + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "tag": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "labels": { + "type": "object" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "runtime": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "destination": { + "properties": { + "address": { + "ignore_above": 1024, + "type": "keyword" + }, + "as": { + "properties": { + "number": { + "type": "long" + }, + "organization": { + "properties": { + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "bytes": { + "type": "long" + }, + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "ip": { + "type": "ip" + }, + "mac": { + "ignore_above": 1024, + "type": "keyword" + }, + "nat": { + "properties": { + "ip": { + "type": "ip" + }, + "port": { + "type": "long" + } + } + }, + "packets": { + "type": "long" + }, + "port": { + "type": "long" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "user": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "email": { + "ignore_above": 1024, + "type": "keyword" + }, + "full_name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "properties": { + "domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dll": { + "properties": { + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + } + } + }, + "dns": { + "properties": { + "answers": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "data": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "ttl": { + "type": "long" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "header_flags": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "op_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "question": { + "properties": { + "class": { + "ignore_above": 1024, + "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "registered_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "subdomain": { + "ignore_above": 1024, + "type": "keyword" + }, + "top_level_domain": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "resolved_ip": { + "type": "ip" + }, + "response_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "docker": { + "properties": { + "container": { + "properties": { + "labels": { + "type": "object" + } + } + } + } + }, + "ecs": { + "properties": { + "version": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "error": { + "dynamic": "false", + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "culprit": { + "ignore_above": 1024, + "type": "keyword" + }, + "exception": { + "properties": { + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "handled": { + "type": "boolean" + }, + "message": { + "norms": false, + "type": "text" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "grouping_key": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "log": { + "properties": { + "level": { + "ignore_above": 1024, + "type": "keyword" + }, + "logger_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "message": { + "norms": false, + "type": "text" + }, + "param_message": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "message": { + "norms": false, + "type": "text" + }, + "stack_trace": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "event": { + "properties": { + "action": { + "ignore_above": 1024, + "type": "keyword" + }, + "category": { + "ignore_above": 1024, + "type": "keyword" + }, + "code": { + "ignore_above": 1024, + "type": "keyword" + }, + "created": { + "type": "date" + }, + "dataset": { + "ignore_above": 1024, + "type": "keyword" + }, + "duration": { + "type": "long" + }, + "end": { + "type": "date" + }, + "hash": { + "ignore_above": 1024, + "type": "keyword" + }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, + "ingested": { + "type": "date" + }, + "kind": { + "ignore_above": 1024, + "type": "keyword" + }, + "module": { + "ignore_above": 1024, + "type": "keyword" + }, + "original": { + "ignore_above": 1024, + "type": "keyword" + }, + "outcome": { + "ignore_above": 1024, + "type": "keyword" + }, + "provider": { + "ignore_above": 1024, + "type": "keyword" + }, + "reference": { + "ignore_above": 1024, + "type": "keyword" + }, + "risk_score": { + "type": "float" + }, + "risk_score_norm": { + "type": "float" + }, + "sequence": { + "type": "long" + }, + "severity": { + "type": "long" + }, + "start": { + "type": "date" + }, + "timezone": { + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "url": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "experimental": { + "dynamic": "true", + "type": "object" + }, + "fields": { + "type": "object" + }, + "file": { + "properties": { + "accessed": { + "type": "date" + }, + "attributes": { + "ignore_above": 1024, + "type": "keyword" + }, + "code_signature": { + "properties": { + "exists": { + "type": "boolean" + }, + "status": { + "ignore_above": 1024, + "type": "keyword" + }, + "subject_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "trusted": { + "type": "boolean" + }, + "valid": { + "type": "boolean" + } + } + }, + "created": { + "type": "date" + }, + "ctime": { + "type": "date" + }, + "device": { + "ignore_above": 1024, + "type": "keyword" + }, + "directory": { + "ignore_above": 1024, + "type": "keyword" + }, + "drive_letter": { + "ignore_above": 1, + "type": "keyword" + }, + "extension": { + "ignore_above": 1024, + "type": "keyword" + }, + "gid": { + "ignore_above": 1024, + "type": "keyword" + }, + "group": { + "ignore_above": 1024, + "type": "keyword" + }, + "hash": { + "properties": { + "md5": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha1": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha256": { + "ignore_above": 1024, + "type": "keyword" + }, + "sha512": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "inode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mime_type": { + "ignore_above": 1024, + "type": "keyword" + }, + "mode": { + "ignore_above": 1024, + "type": "keyword" + }, + "mtime": { + "type": "date" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "owner": { + "ignore_above": 1024, + "type": "keyword" + }, + "path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "pe": { + "properties": { + "company": { + "ignore_above": 1024, + "type": "keyword" + }, + "description": { + "ignore_above": 1024, + "type": "keyword" + }, + "file_version": { + "ignore_above": 1024, + "type": "keyword" + }, + "original_file_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "product": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "size": { + "type": "long" + }, + "target_path": { + "fields": { + "text": { + "norms": false, + "type": "text" + } + }, + "ignore_above": 1024, + "type": "keyword" + }, + "type": { + "ignore_above": 1024, + "type": "keyword" + }, + "uid": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "geo": { + "properties": { + "city_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "continent_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "country_name": { + "ignore_above": 1024, + "type": "keyword" + }, + "location": { + "type": "geo_point" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_iso_code": { + "ignore_above": 1024, + "type": "keyword" + }, + "region_name": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, + "golang": { + "properties": { + "goroutines": { + "type": "long" + }, + "heap": { + "properties": { + "allocations": { + "properties": { + "active": { + "type": "float" + }, + "allocated": { + "type": "float" + }, + "frees": { + "type": "float" }, "idle": { "type": "float" }, "mallocs": { - "type": "long" + "type": "float" }, "objects": { "type": "long" @@ -21951,6 +38337,19 @@ "max": { "type": "float" }, + "pool": { + "properties": { + "committed": { + "type": "float" + }, + "max": { + "type": "float" + }, + "used": { + "type": "float" + } + } + }, "used": { "type": "float" } @@ -22141,6 +38540,13 @@ "norms": false, "type": "text" }, + "metricset": { + "properties": { + "period": { + "type": "long" + } + } + }, "network": { "properties": { "application": { @@ -22246,7 +38652,7 @@ "arrayBuffers": { "properties": { "bytes": { - "type": "long" + "type": "float" } } }, @@ -22953,6 +39359,10 @@ "duration": { "type": "long" }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, "inuse_objects": { "properties": { "count": { @@ -23594,6 +40004,20 @@ "ignore_above": 1024, "type": "keyword" }, + "response_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, "type": { "ignore_above": 1024, "type": "keyword" @@ -23705,6 +40129,43 @@ }, "process": { "properties": { + "cgroup": { + "properties": { + "memory": { + "properties": { + "mem": { + "properties": { + "limit": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "usage": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + }, + "stats": { + "properties": { + "inactive_file": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + } + } + } + } + }, "cpu": { "properties": { "system": { @@ -24000,6 +40461,9 @@ "count": { "type": "long" }, + "histogram": { + "type": "histogram" + }, "sum": { "properties": { "us": { @@ -24012,6 +40476,22 @@ } } }, + "experience": { + "properties": { + "cls": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "fid": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "tbt": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + }, "id": { "ignore_above": 1024, "type": "keyword" @@ -24063,6 +40543,9 @@ "ignore_above": 1024, "type": "keyword" }, + "root": { + "type": "boolean" + }, "sampled": { "type": "boolean" }, @@ -24352,10 +40835,8 @@ }, "settings": { "index": { - "auto_expand_replicas": "false", "codec": "best_compression", "lifecycle": { - "indexing_complete": "true", "name": "apm-rollover-30-days", "rollover_alias": "apm-8.0.0-metric" }, @@ -24364,9 +40845,10 @@ "limit": "2000" } }, - "number_of_replicas": "0", + "max_docvalue_fields_search": "200", + "number_of_replicas": "1", "number_of_shards": "1", - "priority": "50", + "priority": "100", "refresh_interval": "5s" } } @@ -24377,11 +40859,11 @@ "type": "index", "value": { "aliases": { - "apm-8.0.0-metric": { + "apm-8.0.0-span": { "is_write_index": false } }, - "index": "apm-8.0.0-metric-2020.07.31-000001", + "index": "apm-8.0.0-span-000001", "mappings": { "_meta": { "beat": "apm", @@ -24487,7 +40969,7 @@ } }, { - "labels_string": { + "labels": { "mapping": { "type": "keyword" }, @@ -24496,7 +40978,7 @@ } }, { - "labels_boolean": { + "labels": { "mapping": { "type": "boolean" }, @@ -24505,7 +40987,7 @@ } }, { - "labels_*": { + "labels": { "mapping": { "scaling_factor": 1000000, "type": "scaled_float" @@ -24553,8 +41035,8 @@ "type": "keyword" }, "hostname": { - "path": "agent.name", - "type": "alias" + "ignore_above": 1024, + "type": "keyword" }, "id": { "ignore_above": 1024, @@ -24595,15 +41077,6 @@ } } }, - "child": { - "dynamic": "false", - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, "client": { "dynamic": "false", "properties": { @@ -24766,15 +41239,10 @@ "cloud": { "properties": { "account": { - "dynamic": "false", "properties": { "id": { "ignore_above": 1024, "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" } } }, @@ -24791,7 +41259,6 @@ } }, "instance": { - "dynamic": "false", "properties": { "id": { "ignore_above": 1024, @@ -24804,7 +41271,6 @@ } }, "machine": { - "dynamic": "false", "properties": { "type": { "ignore_above": 1024, @@ -24813,15 +41279,10 @@ } }, "project": { - "dynamic": "false", "properties": { "id": { "ignore_above": 1024, "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" } } }, @@ -24835,29 +41296,6 @@ } } }, - "clr": { - "properties": { - "gc": { - "properties": { - "count": { - "type": "long" - }, - "gen0size": { - "type": "float" - }, - "gen1size": { - "type": "float" - }, - "gen2size": { - "type": "float" - }, - "gen3size": { - "type": "float" - } - } - } - } - }, "code_signature": { "properties": { "exists": { @@ -25618,78 +42056,6 @@ } } }, - "golang": { - "properties": { - "goroutines": { - "type": "long" - }, - "heap": { - "properties": { - "allocations": { - "properties": { - "active": { - "type": "float" - }, - "allocated": { - "type": "float" - }, - "frees": { - "type": "long" - }, - "idle": { - "type": "float" - }, - "mallocs": { - "type": "long" - }, - "objects": { - "type": "long" - }, - "total": { - "type": "float" - } - } - }, - "gc": { - "properties": { - "cpu_fraction": { - "type": "float" - }, - "next_gc_limit": { - "type": "float" - }, - "total_count": { - "type": "long" - }, - "total_pause": { - "properties": { - "ns": { - "type": "long" - } - } - } - } - }, - "system": { - "properties": { - "obtained": { - "type": "float" - }, - "released": { - "type": "float" - }, - "stack": { - "type": "long" - }, - "total": { - "type": "float" - } - } - } - } - } - } - }, "group": { "properties": { "domain": { @@ -26002,73 +42368,6 @@ } } }, - "jvm": { - "properties": { - "gc": { - "properties": { - "alloc": { - "type": "float" - }, - "count": { - "type": "long" - }, - "time": { - "type": "long" - } - } - }, - "memory": { - "properties": { - "heap": { - "properties": { - "committed": { - "type": "float" - }, - "max": { - "type": "float" - }, - "pool": { - "properties": { - "committed": { - "type": "float" - }, - "max": { - "type": "float" - }, - "used": { - "type": "long" - } - } - }, - "used": { - "type": "float" - } - } - }, - "non_heap": { - "properties": { - "committed": { - "type": "float" - }, - "max": { - "type": "long" - }, - "used": { - "type": "float" - } - } - } - } - }, - "thread": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, "kubernetes": { "dynamic": "false", "properties": { @@ -26151,13 +42450,10 @@ "labels": { "dynamic": "true", "properties": { - "env": { - "type": "keyword" - }, - "hostname": { + "foo": { "type": "keyword" }, - "name": { + "productId": { "type": "keyword" } } @@ -26303,78 +42599,6 @@ } } }, - "nodejs": { - "properties": { - "eventloop": { - "properties": { - "delay": { - "properties": { - "avg": { - "properties": { - "ms": { - "type": "float" - } - } - }, - "ns": { - "type": "long" - } - } - } - } - }, - "handles": { - "properties": { - "active": { - "type": "long" - } - } - }, - "memory": { - "properties": { - "arrayBuffers": { - "properties": { - "bytes": { - "type": "long" - } - } - }, - "external": { - "properties": { - "bytes": { - "type": "float" - } - } - }, - "heap": { - "properties": { - "allocated": { - "properties": { - "bytes": { - "type": "float" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "float" - } - } - } - } - } - } - }, - "requests": { - "properties": { - "active": { - "type": "long" - } - } - } - } - }, "observer": { "dynamic": "false", "properties": { @@ -27156,41 +43380,6 @@ } } }, - "ruby": { - "properties": { - "gc": { - "properties": { - "count": { - "type": "long" - } - } - }, - "heap": { - "properties": { - "allocations": { - "properties": { - "total": { - "type": "long" - } - } - }, - "slots": { - "properties": { - "free": { - "type": "long" - }, - "live": { - "type": "long" - } - } - } - } - }, - "threads": { - "type": "long" - } - } - }, "rule": { "properties": { "author": { @@ -27794,56 +43983,8 @@ }, "process": { "properties": { - "cgroup": { - "properties": { - "memory": { - "properties": { - "mem": { - "properties": { - "limit": { - "properties": { - "bytes": { - "type": "float" - } - } - }, - "usage": { - "properties": { - "bytes": { - "type": "float" - } - } - } - } - }, - "stats": { - "properties": { - "inactive_file": { - "properties": { - "bytes": { - "type": "float" - } - } - } - } - } - } - } - } - }, "cpu": { "properties": { - "system": { - "properties": { - "norm": { - "properties": { - "pct": { - "type": "float" - } - } - } - } - }, "total": { "properties": { "norm": { @@ -27855,17 +43996,6 @@ } } } - }, - "user": { - "properties": { - "norm": { - "properties": { - "pct": { - "type": "float" - } - } - } - } } } }, @@ -28126,9 +44256,6 @@ "count": { "type": "long" }, - "histogram": { - "type": "histogram" - }, "sum": { "properties": { "us": { @@ -28192,9 +44319,6 @@ "ignore_above": 1024, "type": "keyword" }, - "root": { - "type": "boolean" - }, "sampled": { "type": "boolean" }, @@ -28484,20 +44608,21 @@ }, "settings": { "index": { + "auto_expand_replicas": "false", "codec": "best_compression", "lifecycle": { "indexing_complete": "true", "name": "apm-rollover-30-days", - "rollover_alias": "apm-8.0.0-metric" + "rollover_alias": "apm-8.0.0-span" }, "mapping": { "total_fields": { "limit": "2000" } }, - "number_of_replicas": "1", + "number_of_replicas": "0", "number_of_shards": "1", - "priority": "100", + "priority": "50", "refresh_interval": "5s" } } @@ -28508,11 +44633,11 @@ "type": "index", "value": { "aliases": { - "apm-8.0.0-metric": { - "is_write_index": true + "apm-8.0.0-span": { + "is_write_index": false } }, - "index": "apm-8.0.0-metric-2020.07.31-000002", + "index": "apm-8.0.0-span-000002", "mappings": { "_meta": { "beat": "apm", @@ -28618,7 +44743,7 @@ } }, { - "labels_string": { + "labels": { "mapping": { "type": "keyword" }, @@ -28627,7 +44752,7 @@ } }, { - "labels_boolean": { + "labels": { "mapping": { "type": "boolean" }, @@ -28636,7 +44761,7 @@ } }, { - "labels_*": { + "labels": { "mapping": { "scaling_factor": 1000000, "type": "scaled_float" @@ -28684,8 +44809,8 @@ "type": "keyword" }, "hostname": { - "path": "agent.name", - "type": "alias" + "ignore_above": 1024, + "type": "keyword" }, "id": { "ignore_above": 1024, @@ -28726,15 +44851,6 @@ } } }, - "child": { - "dynamic": "false", - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, "client": { "dynamic": "false", "properties": { @@ -28897,15 +45013,10 @@ "cloud": { "properties": { "account": { - "dynamic": "false", "properties": { "id": { "ignore_above": 1024, "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" } } }, @@ -28922,7 +45033,6 @@ } }, "instance": { - "dynamic": "false", "properties": { "id": { "ignore_above": 1024, @@ -28935,7 +45045,6 @@ } }, "machine": { - "dynamic": "false", "properties": { "type": { "ignore_above": 1024, @@ -28944,15 +45053,10 @@ } }, "project": { - "dynamic": "false", "properties": { "id": { "ignore_above": 1024, "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" } } }, @@ -28966,29 +45070,6 @@ } } }, - "clr": { - "properties": { - "gc": { - "properties": { - "count": { - "type": "long" - }, - "gen0size": { - "type": "float" - }, - "gen1size": { - "type": "float" - }, - "gen2size": { - "type": "float" - }, - "gen3size": { - "type": "float" - } - } - } - } - }, "code_signature": { "properties": { "exists": { @@ -29749,78 +45830,6 @@ } } }, - "golang": { - "properties": { - "goroutines": { - "type": "long" - }, - "heap": { - "properties": { - "allocations": { - "properties": { - "active": { - "type": "float" - }, - "allocated": { - "type": "float" - }, - "frees": { - "type": "float" - }, - "idle": { - "type": "float" - }, - "mallocs": { - "type": "float" - }, - "objects": { - "type": "long" - }, - "total": { - "type": "float" - } - } - }, - "gc": { - "properties": { - "cpu_fraction": { - "type": "float" - }, - "next_gc_limit": { - "type": "float" - }, - "total_count": { - "type": "long" - }, - "total_pause": { - "properties": { - "ns": { - "type": "float" - } - } - } - } - }, - "system": { - "properties": { - "obtained": { - "type": "float" - }, - "released": { - "type": "float" - }, - "stack": { - "type": "long" - }, - "total": { - "type": "float" - } - } - } - } - } - } - }, "group": { "properties": { "domain": { @@ -30133,73 +46142,6 @@ } } }, - "jvm": { - "properties": { - "gc": { - "properties": { - "alloc": { - "type": "float" - }, - "count": { - "type": "long" - }, - "time": { - "type": "long" - } - } - }, - "memory": { - "properties": { - "heap": { - "properties": { - "committed": { - "type": "float" - }, - "max": { - "type": "float" - }, - "pool": { - "properties": { - "committed": { - "type": "float" - }, - "max": { - "type": "float" - }, - "used": { - "type": "float" - } - } - }, - "used": { - "type": "float" - } - } - }, - "non_heap": { - "properties": { - "committed": { - "type": "float" - }, - "max": { - "type": "long" - }, - "used": { - "type": "float" - } - } - } - } - }, - "thread": { - "properties": { - "count": { - "type": "long" - } - } - } - } - }, "kubernetes": { "dynamic": "false", "properties": { @@ -30282,13 +46224,10 @@ "labels": { "dynamic": "true", "properties": { - "env": { - "type": "keyword" - }, - "hostname": { + "foo": { "type": "keyword" }, - "name": { + "productId": { "type": "keyword" } } @@ -30434,78 +46373,6 @@ } } }, - "nodejs": { - "properties": { - "eventloop": { - "properties": { - "delay": { - "properties": { - "avg": { - "properties": { - "ms": { - "type": "float" - } - } - }, - "ns": { - "type": "long" - } - } - } - } - }, - "handles": { - "properties": { - "active": { - "type": "long" - } - } - }, - "memory": { - "properties": { - "arrayBuffers": { - "properties": { - "bytes": { - "type": "float" - } - } - }, - "external": { - "properties": { - "bytes": { - "type": "float" - } - } - }, - "heap": { - "properties": { - "allocated": { - "properties": { - "bytes": { - "type": "float" - } - } - }, - "used": { - "properties": { - "bytes": { - "type": "float" - } - } - } - } - } - } - }, - "requests": { - "properties": { - "active": { - "type": "long" - } - } - } - } - }, "observer": { "dynamic": "false", "properties": { @@ -31287,41 +47154,6 @@ } } }, - "ruby": { - "properties": { - "gc": { - "properties": { - "count": { - "type": "long" - } - } - }, - "heap": { - "properties": { - "allocations": { - "properties": { - "total": { - "type": "float" - } - } - }, - "slots": { - "properties": { - "free": { - "type": "long" - }, - "live": { - "type": "long" - } - } - } - } - }, - "threads": { - "type": "long" - } - } - }, "rule": { "properties": { "author": { @@ -31925,56 +47757,8 @@ }, "process": { "properties": { - "cgroup": { - "properties": { - "memory": { - "properties": { - "mem": { - "properties": { - "limit": { - "properties": { - "bytes": { - "type": "float" - } - } - }, - "usage": { - "properties": { - "bytes": { - "type": "float" - } - } - } - } - }, - "stats": { - "properties": { - "inactive_file": { - "properties": { - "bytes": { - "type": "float" - } - } - } - } - } - } - } - } - }, "cpu": { "properties": { - "system": { - "properties": { - "norm": { - "properties": { - "pct": { - "type": "float" - } - } - } - } - }, "total": { "properties": { "norm": { @@ -31986,17 +47770,6 @@ } } } - }, - "user": { - "properties": { - "norm": { - "properties": { - "pct": { - "type": "float" - } - } - } - } } } }, @@ -32257,9 +48030,6 @@ "count": { "type": "long" }, - "histogram": { - "type": "histogram" - }, "sum": { "properties": { "us": { @@ -32323,9 +48093,6 @@ "ignore_above": 1024, "type": "keyword" }, - "root": { - "type": "boolean" - }, "sampled": { "type": "boolean" }, @@ -32615,19 +48382,21 @@ }, "settings": { "index": { + "auto_expand_replicas": "false", "codec": "best_compression", "lifecycle": { + "indexing_complete": "true", "name": "apm-rollover-30-days", - "rollover_alias": "apm-8.0.0-metric" + "rollover_alias": "apm-8.0.0-span" }, "mapping": { "total_fields": { "limit": "2000" } }, - "number_of_replicas": "1", + "number_of_replicas": "0", "number_of_shards": "1", - "priority": "100", + "priority": "50", "refresh_interval": "5s" } } @@ -32642,7 +48411,7 @@ "is_write_index": false } }, - "index": "apm-8.0.0-span-000001", + "index": "apm-8.0.0-span-2020.07.31-000001", "mappings": { "_meta": { "beat": "apm", @@ -32748,7 +48517,7 @@ } }, { - "labels": { + "labels_string": { "mapping": { "type": "keyword" }, @@ -32757,7 +48526,7 @@ } }, { - "labels": { + "labels_boolean": { "mapping": { "type": "boolean" }, @@ -32766,7 +48535,7 @@ } }, { - "labels": { + "labels_*": { "mapping": { "scaling_factor": 1000000, "type": "scaled_float" @@ -32814,8 +48583,8 @@ "type": "keyword" }, "hostname": { - "ignore_above": 1024, - "type": "keyword" + "path": "agent.name", + "type": "alias" }, "id": { "ignore_above": 1024, @@ -32856,6 +48625,15 @@ } } }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, "client": { "dynamic": "false", "properties": { @@ -33018,10 +48796,15 @@ "cloud": { "properties": { "account": { + "dynamic": "false", "properties": { "id": { "ignore_above": 1024, "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" } } }, @@ -33038,6 +48821,7 @@ } }, "instance": { + "dynamic": "false", "properties": { "id": { "ignore_above": 1024, @@ -33050,6 +48834,7 @@ } }, "machine": { + "dynamic": "false", "properties": { "type": { "ignore_above": 1024, @@ -33058,10 +48843,15 @@ } }, "project": { + "dynamic": "false", "properties": { "id": { "ignore_above": 1024, "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" } } }, @@ -36035,6 +51825,9 @@ "count": { "type": "long" }, + "histogram": { + "type": "histogram" + }, "sum": { "properties": { "us": { @@ -36098,6 +51891,9 @@ "ignore_above": 1024, "type": "keyword" }, + "root": { + "type": "boolean" + }, "sampled": { "type": "boolean" }, @@ -36387,7 +52183,9 @@ }, "settings": { "index": { - "auto_expand_replicas": "false", + "blocks": { + "write": "true" + }, "codec": "best_compression", "lifecycle": { "indexing_complete": "true", @@ -36399,7 +52197,7 @@ "limit": "2000" } }, - "number_of_replicas": "0", + "number_of_replicas": "1", "number_of_shards": "1", "priority": "50", "refresh_interval": "5s" @@ -36416,7 +52214,7 @@ "is_write_index": false } }, - "index": "apm-8.0.0-span-000002", + "index": "apm-8.0.0-span-2020.07.31-000002", "mappings": { "_meta": { "beat": "apm", @@ -36522,7 +52320,7 @@ } }, { - "labels": { + "labels_string": { "mapping": { "type": "keyword" }, @@ -36531,7 +52329,7 @@ } }, { - "labels": { + "labels_boolean": { "mapping": { "type": "boolean" }, @@ -36540,7 +52338,7 @@ } }, { - "labels": { + "labels_*": { "mapping": { "scaling_factor": 1000000, "type": "scaled_float" @@ -36588,8 +52386,8 @@ "type": "keyword" }, "hostname": { - "ignore_above": 1024, - "type": "keyword" + "path": "agent.name", + "type": "alias" }, "id": { "ignore_above": 1024, @@ -36630,6 +52428,15 @@ } } }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, "client": { "dynamic": "false", "properties": { @@ -36792,10 +52599,15 @@ "cloud": { "properties": { "account": { + "dynamic": "false", "properties": { "id": { "ignore_above": 1024, "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" } } }, @@ -36812,6 +52624,7 @@ } }, "instance": { + "dynamic": "false", "properties": { "id": { "ignore_above": 1024, @@ -36824,6 +52637,7 @@ } }, "machine": { + "dynamic": "false", "properties": { "type": { "ignore_above": 1024, @@ -36832,10 +52646,15 @@ } }, "project": { + "dynamic": "false", "properties": { "id": { "ignore_above": 1024, "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" } } }, @@ -39809,6 +55628,9 @@ "count": { "type": "long" }, + "histogram": { + "type": "histogram" + }, "sum": { "properties": { "us": { @@ -39872,6 +55694,9 @@ "ignore_above": 1024, "type": "keyword" }, + "root": { + "type": "boolean" + }, "sampled": { "type": "boolean" }, @@ -40161,7 +55986,6 @@ }, "settings": { "index": { - "auto_expand_replicas": "false", "codec": "best_compression", "lifecycle": { "indexing_complete": "true", @@ -40173,9 +55997,9 @@ "limit": "2000" } }, - "number_of_replicas": "0", + "number_of_replicas": "1", "number_of_shards": "1", - "priority": "50", + "priority": "100", "refresh_interval": "5s" } } @@ -40187,10 +56011,10 @@ "value": { "aliases": { "apm-8.0.0-span": { - "is_write_index": false + "is_write_index": true } }, - "index": "apm-8.0.0-span-2020.07.31-000001", + "index": "apm-8.0.0-span-2020.09.16-000001", "mappings": { "_meta": { "beat": "apm", @@ -41798,11 +57622,32 @@ "labels": { "dynamic": "true", "properties": { + "error": { + "type": "keyword" + }, "foo": { "type": "keyword" }, + "last_type": { + "type": "keyword" + }, + "last_value": { + "type": "keyword" + }, "productId": { "type": "keyword" + }, + "stack_trace": { + "type": "keyword" + }, + "var01": { + "type": "keyword" + }, + "var02": { + "type": "keyword" + }, + "xfailed": { + "type": "keyword" } } }, @@ -41874,6 +57719,13 @@ "norms": false, "type": "text" }, + "metricset": { + "properties": { + "period": { + "type": "long" + } + } + }, "network": { "properties": { "application": { @@ -42614,6 +58466,10 @@ "duration": { "type": "long" }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, "inuse_objects": { "properties": { "count": { @@ -43220,6 +59076,20 @@ "ignore_above": 1024, "type": "keyword" }, + "response_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, "type": { "ignore_above": 1024, "type": "keyword" @@ -43331,6 +59201,43 @@ }, "process": { "properties": { + "cgroup": { + "properties": { + "memory": { + "properties": { + "mem": { + "properties": { + "limit": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "usage": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + }, + "stats": { + "properties": { + "inactive_file": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + } + } + } + } + }, "cpu": { "properties": { "total": { @@ -43619,6 +59526,22 @@ } } }, + "experience": { + "properties": { + "cls": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "fid": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "tbt": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + }, "id": { "ignore_above": 1024, "type": "keyword" @@ -43964,7 +59887,6 @@ "index": { "codec": "best_compression", "lifecycle": { - "indexing_complete": "true", "name": "apm-rollover-30-days", "rollover_alias": "apm-8.0.0-span" }, @@ -43973,6 +59895,7 @@ "limit": "2000" } }, + "max_docvalue_fields_search": "200", "number_of_replicas": "1", "number_of_shards": "1", "priority": "100", @@ -43986,11 +59909,11 @@ "type": "index", "value": { "aliases": { - "apm-8.0.0-span": { - "is_write_index": true + "apm-8.0.0-transaction": { + "is_write_index": false } }, - "index": "apm-8.0.0-span-2020.07.31-000002", + "index": "apm-8.0.0-transaction-000001", "mappings": { "_meta": { "beat": "apm", @@ -44096,7 +60019,7 @@ } }, { - "labels_string": { + "labels": { "mapping": { "type": "keyword" }, @@ -44105,7 +60028,7 @@ } }, { - "labels_boolean": { + "labels": { "mapping": { "type": "boolean" }, @@ -44114,7 +60037,7 @@ } }, { - "labels_*": { + "labels": { "mapping": { "scaling_factor": 1000000, "type": "scaled_float" @@ -44162,8 +60085,8 @@ "type": "keyword" }, "hostname": { - "path": "agent.name", - "type": "alias" + "ignore_above": 1024, + "type": "keyword" }, "id": { "ignore_above": 1024, @@ -44204,15 +60127,6 @@ } } }, - "child": { - "dynamic": "false", - "properties": { - "id": { - "ignore_above": 1024, - "type": "keyword" - } - } - }, "client": { "dynamic": "false", "properties": { @@ -44375,15 +60289,10 @@ "cloud": { "properties": { "account": { - "dynamic": "false", "properties": { "id": { "ignore_above": 1024, "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" } } }, @@ -44400,7 +60309,6 @@ } }, "instance": { - "dynamic": "false", "properties": { "id": { "ignore_above": 1024, @@ -44413,7 +60321,6 @@ } }, "machine": { - "dynamic": "false", "properties": { "type": { "ignore_above": 1024, @@ -44422,15 +60329,10 @@ } }, "project": { - "dynamic": "false", "properties": { "id": { "ignore_above": 1024, "type": "keyword" - }, - "name": { - "ignore_above": 1024, - "type": "keyword" } } }, @@ -45598,10 +61500,28 @@ "labels": { "dynamic": "true", "properties": { + "company": { + "type": "keyword" + }, + "customer_email": { + "type": "keyword" + }, + "customer_name": { + "type": "keyword" + }, "foo": { "type": "keyword" }, - "productId": { + "lorem": { + "type": "keyword" + }, + "multi-line": { + "type": "keyword" + }, + "served_from_cache": { + "type": "keyword" + }, + "this-is-a-very-long-tag-name-without-any-spaces": { "type": "keyword" } } @@ -47404,9 +63324,6 @@ "count": { "type": "long" }, - "histogram": { - "type": "histogram" - }, "sum": { "properties": { "us": { @@ -47433,6 +63350,94 @@ "type": "object" } } + }, + "agent": { + "properties": { + "domComplete": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domInteractive": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "firstContentfulPaint": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "largestContentfulPaint": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "timeToFirstByte": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + }, + "navigationTiming": { + "properties": { + "connectEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "connectStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domComplete": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domContentLoadedEventEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domContentLoadedEventStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domInteractive": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domLoading": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domainLookupEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "domainLookupStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "fetchStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "loadEventEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "loadEventStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "requestStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "responseEnd": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "responseStart": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } } } }, @@ -47470,9 +63475,6 @@ "ignore_above": 1024, "type": "keyword" }, - "root": { - "type": "boolean" - }, "sampled": { "type": "boolean" }, @@ -47762,19 +63764,21 @@ }, "settings": { "index": { + "auto_expand_replicas": "false", "codec": "best_compression", "lifecycle": { + "indexing_complete": "true", "name": "apm-rollover-30-days", - "rollover_alias": "apm-8.0.0-span" + "rollover_alias": "apm-8.0.0-transaction" }, "mapping": { "total_fields": { "limit": "2000" } }, - "number_of_replicas": "1", + "number_of_replicas": "0", "number_of_shards": "1", - "priority": "100", + "priority": "50", "refresh_interval": "5s" } } @@ -47789,7 +63793,7 @@ "is_write_index": false } }, - "index": "apm-8.0.0-transaction-000001", + "index": "apm-8.0.0-transaction-000002", "mappings": { "_meta": { "beat": "apm", @@ -49385,6 +65389,9 @@ "customer_name": { "type": "keyword" }, + "customer_tier": { + "type": "keyword" + }, "foo": { "type": "keyword" }, @@ -49394,6 +65401,9 @@ "multi-line": { "type": "keyword" }, + "request_id": { + "type": "keyword" + }, "served_from_cache": { "type": "keyword" }, @@ -51669,7 +67679,7 @@ "is_write_index": false } }, - "index": "apm-8.0.0-transaction-000002", + "index": "apm-8.0.0-transaction-2020.07.31-000001", "mappings": { "_meta": { "beat": "apm", @@ -51775,7 +67785,7 @@ } }, { - "labels": { + "labels_string": { "mapping": { "type": "keyword" }, @@ -51784,7 +67794,7 @@ } }, { - "labels": { + "labels_boolean": { "mapping": { "type": "boolean" }, @@ -51793,7 +67803,7 @@ } }, { - "labels": { + "labels_*": { "mapping": { "scaling_factor": 1000000, "type": "scaled_float" @@ -51841,8 +67851,8 @@ "type": "keyword" }, "hostname": { - "ignore_above": 1024, - "type": "keyword" + "path": "agent.name", + "type": "alias" }, "id": { "ignore_above": 1024, @@ -51883,6 +67893,15 @@ } } }, + "child": { + "dynamic": "false", + "properties": { + "id": { + "ignore_above": 1024, + "type": "keyword" + } + } + }, "client": { "dynamic": "false", "properties": { @@ -52045,10 +68064,15 @@ "cloud": { "properties": { "account": { + "dynamic": "false", "properties": { "id": { "ignore_above": 1024, "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" } } }, @@ -52065,6 +68089,7 @@ } }, "instance": { + "dynamic": "false", "properties": { "id": { "ignore_above": 1024, @@ -52077,6 +68102,7 @@ } }, "machine": { + "dynamic": "false", "properties": { "type": { "ignore_above": 1024, @@ -52085,10 +68111,15 @@ } }, "project": { + "dynamic": "false", "properties": { "id": { "ignore_above": 1024, "type": "keyword" + }, + "name": { + "ignore_above": 1024, + "type": "keyword" } } }, @@ -55086,6 +71117,9 @@ "count": { "type": "long" }, + "histogram": { + "type": "histogram" + }, "sum": { "properties": { "us": { @@ -55123,14 +71157,6 @@ "scaling_factor": 1000000, "type": "scaled_float" }, - "firstContentfulPaint": { - "scaling_factor": 1000000, - "type": "scaled_float" - }, - "largestContentfulPaint": { - "scaling_factor": 1000000, - "type": "scaled_float" - }, "timeToFirstByte": { "scaling_factor": 1000000, "type": "scaled_float" @@ -55237,6 +71263,9 @@ "ignore_above": 1024, "type": "keyword" }, + "root": { + "type": "boolean" + }, "sampled": { "type": "boolean" }, @@ -55526,7 +71555,9 @@ }, "settings": { "index": { - "auto_expand_replicas": "false", + "blocks": { + "write": "true" + }, "codec": "best_compression", "lifecycle": { "indexing_complete": "true", @@ -55538,7 +71569,7 @@ "limit": "2000" } }, - "number_of_replicas": "0", + "number_of_replicas": "1", "number_of_shards": "1", "priority": "50", "refresh_interval": "5s" @@ -55555,7 +71586,7 @@ "is_write_index": false } }, - "index": "apm-8.0.0-transaction-2020.07.31-000001", + "index": "apm-8.0.0-transaction-2020.07.31-000002", "mappings": { "_meta": { "beat": "apm", @@ -59033,6 +75064,14 @@ "scaling_factor": 1000000, "type": "scaled_float" }, + "firstContentfulPaint": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "largestContentfulPaint": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, "timeToFirstByte": { "scaling_factor": 1000000, "type": "scaled_float" @@ -59459,7 +75498,7 @@ "is_write_index": true } }, - "index": "apm-8.0.0-transaction-2020.07.31-000002", + "index": "apm-8.0.0-transaction-2020.09.16-000001", "mappings": { "_meta": { "beat": "apm", @@ -61092,10 +77131,16 @@ "type": "keyword" }, "served_from_cache": { - "type": "keyword" + "type": "boolean" }, "this-is-a-very-long-tag-name-without-any-spaces": { "type": "keyword" + }, + "var01": { + "type": "keyword" + }, + "var02": { + "type": "keyword" } } }, @@ -61167,6 +77212,13 @@ "norms": false, "type": "text" }, + "metricset": { + "properties": { + "period": { + "type": "long" + } + } + }, "network": { "properties": { "application": { @@ -61907,6 +77959,10 @@ "duration": { "type": "long" }, + "id": { + "ignore_above": 1024, + "type": "keyword" + }, "inuse_objects": { "properties": { "count": { @@ -62513,6 +78569,20 @@ "ignore_above": 1024, "type": "keyword" }, + "response_time": { + "properties": { + "count": { + "type": "long" + }, + "sum": { + "properties": { + "us": { + "type": "long" + } + } + } + } + }, "type": { "ignore_above": 1024, "type": "keyword" @@ -62624,6 +78694,43 @@ }, "process": { "properties": { + "cgroup": { + "properties": { + "memory": { + "properties": { + "mem": { + "properties": { + "limit": { + "properties": { + "bytes": { + "type": "long" + } + } + }, + "usage": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + }, + "stats": { + "properties": { + "inactive_file": { + "properties": { + "bytes": { + "type": "long" + } + } + } + } + } + } + } + } + }, "cpu": { "properties": { "total": { @@ -62912,6 +79019,22 @@ } } }, + "experience": { + "properties": { + "cls": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "fid": { + "scaling_factor": 1000000, + "type": "scaled_float" + }, + "tbt": { + "scaling_factor": 1000000, + "type": "scaled_float" + } + } + }, "id": { "ignore_above": 1024, "type": "keyword" @@ -63353,6 +79476,7 @@ "limit": "2000" } }, + "max_docvalue_fields_search": "200", "number_of_replicas": "1", "number_of_shards": "1", "priority": "100", diff --git a/x-pack/test/apm_api_integration/trial/tests/csm/url_search.ts b/x-pack/test/apm_api_integration/trial/tests/csm/url_search.ts index 76dc758895e32..c887fa3e77648 100644 --- a/x-pack/test/apm_api_integration/trial/tests/csm/url_search.ts +++ b/x-pack/test/apm_api_integration/trial/tests/csm/url_search.ts @@ -16,7 +16,7 @@ export default function rumServicesApiTests({ getService }: FtrProviderContext) describe('when there is no data', () => { it('returns empty list', async () => { const response = await supertest.get( - '/api/apm/rum-client/url-search?start=2020-09-07T20%3A35%3A54.654Z&end=2020-09-14T20%3A35%3A54.654Z&uiFilters=%7B%22serviceName%22%3A%5B%22elastic-co-rum-test%22%5D%7D' + '/api/apm/rum-client/url-search?start=2020-09-07T20%3A35%3A54.654Z&end=2020-09-14T20%3A35%3A54.654Z&uiFilters=%7B%22serviceName%22%3A%5B%22elastic-co-rum-test%22%5D%7D&percentile=50' ); expect(response.status).to.be(200); @@ -41,7 +41,7 @@ export default function rumServicesApiTests({ getService }: FtrProviderContext) it('returns top urls when no query', async () => { const response = await supertest.get( - '/api/apm/rum-client/url-search?start=2020-09-07T20%3A35%3A54.654Z&end=2020-09-16T20%3A35%3A54.654Z&uiFilters=%7B%22serviceName%22%3A%5B%22kibana-frontend-8_0_0%22%5D%7D' + '/api/apm/rum-client/url-search?start=2020-09-07T20%3A35%3A54.654Z&end=2020-09-16T20%3A35%3A54.654Z&uiFilters=%7B%22serviceName%22%3A%5B%22kibana-frontend-8_0_0%22%5D%7D&percentile=50' ); expect(response.status).to.be(200); @@ -67,7 +67,7 @@ export default function rumServicesApiTests({ getService }: FtrProviderContext) it('returns specific results against query', async () => { const response = await supertest.get( - '/api/apm/rum-client/url-search?start=2020-09-07T20%3A35%3A54.654Z&end=2020-09-16T20%3A35%3A54.654Z&uiFilters=%7B%22serviceName%22%3A%5B%22kibana-frontend-8_0_0%22%5D%7D&urlQuery=csm' + '/api/apm/rum-client/url-search?start=2020-09-07T20%3A35%3A54.654Z&end=2020-09-16T20%3A35%3A54.654Z&uiFilters=%7B%22serviceName%22%3A%5B%22kibana-frontend-8_0_0%22%5D%7D&urlQuery=csm&percentile=50' ); expect(response.status).to.be(200); diff --git a/x-pack/test/apm_api_integration/trial/tests/csm/web_core_vitals.ts b/x-pack/test/apm_api_integration/trial/tests/csm/web_core_vitals.ts index 6364a79a12f04..efbdb75c47cc1 100644 --- a/x-pack/test/apm_api_integration/trial/tests/csm/web_core_vitals.ts +++ b/x-pack/test/apm_api_integration/trial/tests/csm/web_core_vitals.ts @@ -16,7 +16,7 @@ export default function rumServicesApiTests({ getService }: FtrProviderContext) describe('when there is no data', () => { it('returns empty list', async () => { const response = await supertest.get( - '/api/apm/rum-client/web-core-vitals?start=2020-09-07T20%3A35%3A54.654Z&end=2020-09-14T20%3A35%3A54.654Z&uiFilters=%7B%22serviceName%22%3A%5B%22elastic-co-rum-test%22%5D%7D' + '/api/apm/rum-client/web-core-vitals?start=2020-09-07T20%3A35%3A54.654Z&end=2020-09-14T20%3A35%3A54.654Z&uiFilters=%7B%22serviceName%22%3A%5B%22elastic-co-rum-test%22%5D%7D&percentile=50' ); expect(response.status).to.be(200); @@ -45,7 +45,7 @@ export default function rumServicesApiTests({ getService }: FtrProviderContext) it('returns web core vitals values', async () => { const response = await supertest.get( - '/api/apm/rum-client/web-core-vitals?start=2020-09-07T20%3A35%3A54.654Z&end=2020-09-16T20%3A35%3A54.654Z&uiFilters=%7B%22serviceName%22%3A%5B%22kibana-frontend-8_0_0%22%5D%7D' + '/api/apm/rum-client/web-core-vitals?start=2020-09-07T20%3A35%3A54.654Z&end=2020-09-16T20%3A35%3A54.654Z&uiFilters=%7B%22serviceName%22%3A%5B%22kibana-frontend-8_0_0%22%5D%7D&percentile=50' ); expect(response.status).to.be(200); @@ -59,13 +59,13 @@ export default function rumServicesApiTests({ getService }: FtrProviderContext) 0, ], "fcp": 1072, - "fid": "1.35", + "fid": 1352.13, "fidRanks": Array [ 0, 0, 100, ], - "lcp": "1.27", + "lcp": 1270.5, "lcpRanks": Array [ 100, 0, diff --git a/x-pack/test/apm_api_integration/trial/tests/service_maps/__snapshots__/service_maps.snap b/x-pack/test/apm_api_integration/trial/tests/service_maps/__snapshots__/service_maps.snap index 320ffd5a98696..1249561a549bd 100644 --- a/x-pack/test/apm_api_integration/trial/tests/service_maps/__snapshots__/service_maps.snap +++ b/x-pack/test/apm_api_integration/trial/tests/service_maps/__snapshots__/service_maps.snap @@ -5,58 +5,95 @@ Object { "elements": Array [ Object { "data": Object { - "agent.name": "nodejs", - "id": "opbeans-node", - "service.environment": "ENVIRONMENT_NOT_DEFINED", - "service.name": "opbeans-node", - }, - }, - Object { - "data": Object { - "agent.name": "python", - "id": "opbeans-python", - "service.environment": "ENVIRONMENT_NOT_DEFINED", - "service.name": "opbeans-python", - }, - }, - Object { - "data": Object { - "agent.name": "ruby", - "id": "opbeans-ruby", - "service.environment": "ENVIRONMENT_NOT_DEFINED", - "service.name": "opbeans-ruby", - }, - }, - Object { - "data": Object { - "agent.name": "java", - "id": "opbeans-java", - "service.environment": "ENVIRONMENT_NOT_DEFINED", - "service.name": "opbeans-java", - }, - }, - Object { - "data": Object { - "agent.name": "go", - "id": "opbeans-go", + "agent.name": "rum-js", + "id": "elastic-co-frontend", "service.environment": "ENVIRONMENT_NOT_DEFINED", - "service.name": "opbeans-go", + "service.name": "elastic-co-frontend", + "serviceAnomalyStats": Object { + "anomalyScore": 0, + "healthStatus": "healthy", + "jobId": "apm-environment_not_defined-7ed6-high_mean_transaction_duration", + "transactionType": "page-load", + }, }, }, Object { "data": Object { - "agent.name": "rum-js", - "id": "opbeans-rum", - "service.environment": "ENVIRONMENT_NOT_DEFINED", - "service.name": "opbeans-rum", + "groupedConnections": Array [ + Object { + "id": ">a18132920325.cdn.optimizely.com:443", + "label": "a18132920325.cdn.optimizely.com:443", + "span.destination.service.resource": "a18132920325.cdn.optimizely.com:443", + "span.subtype": "iframe", + "span.type": "resource", + }, + Object { + "id": ">cdn.optimizely.com:443", + "label": "cdn.optimizely.com:443", + "span.destination.service.resource": "cdn.optimizely.com:443", + "span.subtype": "script", + "span.type": "resource", + }, + Object { + "id": ">fonts.googleapis.com:443", + "label": "fonts.googleapis.com:443", + "span.destination.service.resource": "fonts.googleapis.com:443", + "span.subtype": "link", + "span.type": "resource", + }, + Object { + "id": ">images.contentstack.io:443", + "label": "images.contentstack.io:443", + "span.destination.service.resource": "images.contentstack.io:443", + "span.subtype": "css", + "span.type": "resource", + }, + Object { + "id": ">info.elastic.co:443", + "label": "info.elastic.co:443", + "span.destination.service.resource": "info.elastic.co:443", + "span.subtype": "script", + "span.type": "resource", + }, + Object { + "id": ">p.typekit.net:443", + "label": "p.typekit.net:443", + "span.destination.service.resource": "p.typekit.net:443", + "span.subtype": "css", + "span.type": "resource", + }, + Object { + "id": ">static-www.elastic.co:443", + "label": "static-www.elastic.co:443", + "span.destination.service.resource": "static-www.elastic.co:443", + "span.subtype": "img", + "span.type": "resource", + }, + Object { + "id": ">use.typekit.net:443", + "label": "use.typekit.net:443", + "span.destination.service.resource": "use.typekit.net:443", + "span.subtype": "link", + "span.type": "resource", + }, + Object { + "id": ">www.elastic.co:443", + "label": "www.elastic.co:443", + "span.destination.service.resource": "www.elastic.co:443", + "span.subtype": "browser-timing", + "span.type": "hard-navigation", + }, + ], + "id": "resourceGroup{elastic-co-frontend}", + "label": "9 resources", + "span.type": "external", }, }, Object { "data": Object { - "agent.name": "dotnet", - "id": "opbeans-dotnet", - "service.environment": "ENVIRONMENT_NOT_DEFINED", - "service.name": "opbeans-dotnet", + "id": "elastic-co-frontend~>resourceGroup{elastic-co-frontend}", + "source": "elastic-co-frontend", + "target": "resourceGroup{elastic-co-frontend}", }, }, ], @@ -67,26 +104,27 @@ exports[`Service Maps with a trial license /api/apm/service-map when there is da Array [ Object { "data": Object { - "agent.name": "rum-js", - "id": "opbeans-rum", - "service.environment": "testing", - "service.name": "opbeans-rum", + "agent.name": "ruby", + "id": "opbeans-ruby", + "service.environment": "production", + "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { + "actualValue": 141536.936507937, "anomalyScore": 0, "healthStatus": "healthy", - "jobId": "apm-environment_not_defined-7ed6-high_mean_transaction_duration", - "transactionType": "page-load", + "jobId": "apm-production-229a-high_mean_transaction_duration", + "transactionType": "request", }, }, }, Object { "data": Object { - "agent.name": "python", - "id": "opbeans-python", + "agent.name": "java", + "id": "opbeans-java", "service.environment": "production", - "service.name": "opbeans-python", + "service.name": "opbeans-java", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 559010.6, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -96,73 +134,71 @@ Array [ }, Object { "data": Object { - "agent.name": "java", - "id": "opbeans-java", - "service.environment": "production", - "service.name": "opbeans-java", + "id": ">postgresql", + "label": "postgresql", + "span.destination.service.resource": "postgresql", + "span.subtype": "postgresql", + "span.type": "db", + }, + }, + Object { + "data": Object { + "agent.name": "rum-js", + "id": "elastic-co-frontend", + "service.name": "elastic-co-frontend", "serviceAnomalyStats": Object { - "actualValue": 14901.32, "anomalyScore": 0, "healthStatus": "healthy", - "jobId": "apm-production-229a-high_mean_transaction_duration", - "transactionType": "request", + "jobId": "apm-environment_not_defined-7ed6-high_mean_transaction_duration", + "transactionType": "page-load", }, }, }, Object { "data": Object { - "agent.name": "nodejs", - "id": "opbeans-node", + "agent.name": "rum-js", + "id": "opbeans-rum", "service.environment": "testing", - "service.name": "opbeans-node", + "service.name": "opbeans-rum", "serviceAnomalyStats": Object { - "actualValue": 32226.649122807, "anomalyScore": 0, "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", + "jobId": "apm-environment_not_defined-7ed6-high_mean_transaction_duration", + "transactionType": "page-load", }, }, }, + Object { + "data": Object { + "agent.name": "nodejs", + "id": "opbeans-node", + "service.environment": "testing", + "service.name": "opbeans-node", + }, + }, Object { "data": Object { "agent.name": "go", "id": "opbeans-go", "service.environment": "testing", "service.name": "opbeans-go", - "serviceAnomalyStats": Object { - "actualValue": 3933482.17647059, - "anomalyScore": 2.61017027514827, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, }, Object { "data": Object { - "agent.name": "ruby", - "id": "opbeans-ruby", + "agent.name": "python", + "id": "opbeans-python", "service.environment": "production", - "service.name": "opbeans-ruby", + "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 684716.581395349, - "anomalyScore": 0.204989077199074, + "actualValue": 47107.7692307692, + "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", }, }, }, - Object { - "data": Object { - "id": ">postgresql", - "label": "postgresql", - "span.destination.service.resource": "postgresql", - "span.subtype": "postgresql", - "span.type": "db", - }, - }, Object { "data": Object { "id": ">elasticsearch", @@ -189,6 +225,78 @@ Array [ "service.name": "opbeans-dotnet", }, }, + Object { + "data": Object { + "groupedConnections": Array [ + Object { + "id": ">a18132920325.cdn.optimizely.com:443", + "label": "a18132920325.cdn.optimizely.com:443", + "span.destination.service.resource": "a18132920325.cdn.optimizely.com:443", + "span.subtype": "iframe", + "span.type": "resource", + }, + Object { + "id": ">cdn.optimizely.com:443", + "label": "cdn.optimizely.com:443", + "span.destination.service.resource": "cdn.optimizely.com:443", + "span.subtype": "script", + "span.type": "resource", + }, + Object { + "id": ">fonts.googleapis.com:443", + "label": "fonts.googleapis.com:443", + "span.destination.service.resource": "fonts.googleapis.com:443", + "span.subtype": "link", + "span.type": "resource", + }, + Object { + "id": ">images.contentstack.io:443", + "label": "images.contentstack.io:443", + "span.destination.service.resource": "images.contentstack.io:443", + "span.subtype": "css", + "span.type": "resource", + }, + Object { + "id": ">info.elastic.co:443", + "label": "info.elastic.co:443", + "span.destination.service.resource": "info.elastic.co:443", + "span.subtype": "script", + "span.type": "resource", + }, + Object { + "id": ">p.typekit.net:443", + "label": "p.typekit.net:443", + "span.destination.service.resource": "p.typekit.net:443", + "span.subtype": "css", + "span.type": "resource", + }, + Object { + "id": ">static-www.elastic.co:443", + "label": "static-www.elastic.co:443", + "span.destination.service.resource": "static-www.elastic.co:443", + "span.subtype": "img", + "span.type": "resource", + }, + Object { + "id": ">use.typekit.net:443", + "label": "use.typekit.net:443", + "span.destination.service.resource": "use.typekit.net:443", + "span.subtype": "link", + "span.type": "resource", + }, + Object { + "id": ">www.elastic.co:443", + "label": "www.elastic.co:443", + "span.destination.service.resource": "www.elastic.co:443", + "span.subtype": "browser-timing", + "span.type": "hard-navigation", + }, + ], + "id": "resourceGroup{elastic-co-frontend}", + "label": "9 resources", + "span.type": "external", + }, + }, Object { "data": Object { "id": "opbeans-go~>postgresql", @@ -198,13 +306,6 @@ Array [ "id": "opbeans-go", "service.environment": "testing", "service.name": "opbeans-go", - "serviceAnomalyStats": Object { - "actualValue": 3933482.17647059, - "anomalyScore": 2.61017027514827, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, "target": ">postgresql", "targetData": Object { @@ -216,40 +317,6 @@ Array [ }, }, }, - Object { - "data": Object { - "bidirectional": true, - "id": "opbeans-go~opbeans-java", - "source": "opbeans-go", - "sourceData": Object { - "agent.name": "go", - "id": "opbeans-go", - "service.environment": "testing", - "service.name": "opbeans-go", - "serviceAnomalyStats": Object { - "actualValue": 3933482.17647059, - "anomalyScore": 2.61017027514827, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, - }, - "target": "opbeans-java", - "targetData": Object { - "agent.name": "java", - "id": "opbeans-java", - "service.environment": "production", - "service.name": "opbeans-java", - "serviceAnomalyStats": Object { - "actualValue": 14901.32, - "anomalyScore": 0, - "healthStatus": "healthy", - "jobId": "apm-production-229a-high_mean_transaction_duration", - "transactionType": "request", - }, - }, - }, - }, Object { "data": Object { "bidirectional": true, @@ -260,13 +327,6 @@ Array [ "id": "opbeans-go", "service.environment": "testing", "service.name": "opbeans-go", - "serviceAnomalyStats": Object { - "actualValue": 3933482.17647059, - "anomalyScore": 2.61017027514827, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, "target": "opbeans-node", "targetData": Object { @@ -274,13 +334,6 @@ Array [ "id": "opbeans-node", "service.environment": "testing", "service.name": "opbeans-node", - "serviceAnomalyStats": Object { - "actualValue": 32226.649122807, - "anomalyScore": 0, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, }, }, @@ -294,13 +347,6 @@ Array [ "id": "opbeans-go", "service.environment": "testing", "service.name": "opbeans-go", - "serviceAnomalyStats": Object { - "actualValue": 3933482.17647059, - "anomalyScore": 2.61017027514827, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, "target": "opbeans-python", "targetData": Object { @@ -309,7 +355,7 @@ Array [ "service.environment": "production", "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 47107.7692307692, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -328,7 +374,7 @@ Array [ "service.environment": "production", "service.name": "opbeans-java", "serviceAnomalyStats": Object { - "actualValue": 14901.32, + "actualValue": 559010.6, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -345,44 +391,10 @@ Array [ }, }, }, - Object { - "data": Object { - "id": "opbeans-java~opbeans-go", - "isInverseEdge": true, - "source": "opbeans-java", - "sourceData": Object { - "agent.name": "java", - "id": "opbeans-java", - "service.environment": "production", - "service.name": "opbeans-java", - "serviceAnomalyStats": Object { - "actualValue": 14901.32, - "anomalyScore": 0, - "healthStatus": "healthy", - "jobId": "apm-production-229a-high_mean_transaction_duration", - "transactionType": "request", - }, - }, - "target": "opbeans-go", - "targetData": Object { - "agent.name": "go", - "id": "opbeans-go", - "service.environment": "testing", - "service.name": "opbeans-go", - "serviceAnomalyStats": Object { - "actualValue": 3933482.17647059, - "anomalyScore": 2.61017027514827, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, - }, - }, - }, Object { "data": Object { "bidirectional": true, - "id": "opbeans-java~opbeans-python", + "id": "opbeans-java~opbeans-node", "source": "opbeans-java", "sourceData": Object { "agent.name": "java", @@ -390,26 +402,19 @@ Array [ "service.environment": "production", "service.name": "opbeans-java", "serviceAnomalyStats": Object { - "actualValue": 14901.32, + "actualValue": 559010.6, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", }, }, - "target": "opbeans-python", + "target": "opbeans-node", "targetData": Object { - "agent.name": "python", - "id": "opbeans-python", - "service.environment": "production", - "service.name": "opbeans-python", - "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, - "anomalyScore": 0, - "healthStatus": "healthy", - "jobId": "apm-production-229a-high_mean_transaction_duration", - "transactionType": "request", - }, + "agent.name": "nodejs", + "id": "opbeans-node", + "service.environment": "testing", + "service.name": "opbeans-node", }, }, }, @@ -424,7 +429,7 @@ Array [ "service.environment": "production", "service.name": "opbeans-java", "serviceAnomalyStats": Object { - "actualValue": 14901.32, + "actualValue": 559010.6, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -438,8 +443,8 @@ Array [ "service.environment": "production", "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { - "actualValue": 684716.581395349, - "anomalyScore": 0.204989077199074, + "actualValue": 141536.936507937, + "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", @@ -456,13 +461,6 @@ Array [ "id": "opbeans-node", "service.environment": "testing", "service.name": "opbeans-node", - "serviceAnomalyStats": Object { - "actualValue": 32226.649122807, - "anomalyScore": 0, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, "target": ">postgresql", "targetData": Object { @@ -484,13 +482,6 @@ Array [ "id": "opbeans-node", "service.environment": "testing", "service.name": "opbeans-node", - "serviceAnomalyStats": Object { - "actualValue": 32226.649122807, - "anomalyScore": 0, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, "target": "opbeans-go", "targetData": Object { @@ -498,11 +489,31 @@ Array [ "id": "opbeans-go", "service.environment": "testing", "service.name": "opbeans-go", + }, + }, + }, + Object { + "data": Object { + "id": "opbeans-node~opbeans-java", + "isInverseEdge": true, + "source": "opbeans-node", + "sourceData": Object { + "agent.name": "nodejs", + "id": "opbeans-node", + "service.environment": "testing", + "service.name": "opbeans-node", + }, + "target": "opbeans-java", + "targetData": Object { + "agent.name": "java", + "id": "opbeans-java", + "service.environment": "production", + "service.name": "opbeans-java", "serviceAnomalyStats": Object { - "actualValue": 3933482.17647059, - "anomalyScore": 2.61017027514827, + "actualValue": 559010.6, + "anomalyScore": 0, "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", + "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", }, }, @@ -518,22 +529,42 @@ Array [ "id": "opbeans-node", "service.environment": "testing", "service.name": "opbeans-node", + }, + "target": "opbeans-python", + "targetData": Object { + "agent.name": "python", + "id": "opbeans-python", + "service.environment": "production", + "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 32226.649122807, + "actualValue": 47107.7692307692, "anomalyScore": 0, "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", + "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", }, }, - "target": "opbeans-python", + }, + }, + Object { + "data": Object { + "bidirectional": true, + "id": "opbeans-node~opbeans-ruby", + "source": "opbeans-node", + "sourceData": Object { + "agent.name": "nodejs", + "id": "opbeans-node", + "service.environment": "testing", + "service.name": "opbeans-node", + }, + "target": "opbeans-ruby", "targetData": Object { - "agent.name": "python", - "id": "opbeans-python", + "agent.name": "ruby", + "id": "opbeans-ruby", "service.environment": "production", - "service.name": "opbeans-python", + "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 141536.936507937, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -552,7 +583,7 @@ Array [ "service.environment": "production", "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 47107.7692307692, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -579,7 +610,7 @@ Array [ "service.environment": "production", "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 47107.7692307692, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -606,7 +637,7 @@ Array [ "service.environment": "production", "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 47107.7692307692, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -634,7 +665,7 @@ Array [ "service.environment": "production", "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 47107.7692307692, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -647,19 +678,12 @@ Array [ "id": "opbeans-go", "service.environment": "testing", "service.name": "opbeans-go", - "serviceAnomalyStats": Object { - "actualValue": 3933482.17647059, - "anomalyScore": 2.61017027514827, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, }, }, Object { "data": Object { - "id": "opbeans-python~opbeans-java", + "id": "opbeans-python~opbeans-node", "isInverseEdge": true, "source": "opbeans-python", "sourceData": Object { @@ -668,33 +692,26 @@ Array [ "service.environment": "production", "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 47107.7692307692, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", }, }, - "target": "opbeans-java", + "target": "opbeans-node", "targetData": Object { - "agent.name": "java", - "id": "opbeans-java", - "service.environment": "production", - "service.name": "opbeans-java", - "serviceAnomalyStats": Object { - "actualValue": 14901.32, - "anomalyScore": 0, - "healthStatus": "healthy", - "jobId": "apm-production-229a-high_mean_transaction_duration", - "transactionType": "request", - }, + "agent.name": "nodejs", + "id": "opbeans-node", + "service.environment": "testing", + "service.name": "opbeans-node", }, }, }, Object { "data": Object { - "id": "opbeans-python~opbeans-node", - "isInverseEdge": true, + "bidirectional": true, + "id": "opbeans-python~opbeans-ruby", "source": "opbeans-python", "sourceData": Object { "agent.name": "python", @@ -702,24 +719,24 @@ Array [ "service.environment": "production", "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 47107.7692307692, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", }, }, - "target": "opbeans-node", + "target": "opbeans-ruby", "targetData": Object { - "agent.name": "nodejs", - "id": "opbeans-node", - "service.environment": "testing", - "service.name": "opbeans-node", + "agent.name": "ruby", + "id": "opbeans-ruby", + "service.environment": "production", + "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { - "actualValue": 32226.649122807, + "actualValue": 141536.936507937, "anomalyScore": 0, "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", + "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", }, }, @@ -735,8 +752,8 @@ Array [ "service.environment": "production", "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { - "actualValue": 684716.581395349, - "anomalyScore": 0.204989077199074, + "actualValue": 141536.936507937, + "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", @@ -762,8 +779,8 @@ Array [ "service.environment": "production", "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { - "actualValue": 684716.581395349, - "anomalyScore": 0.204989077199074, + "actualValue": 141536.936507937, + "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", @@ -775,13 +792,6 @@ Array [ "id": "opbeans-go", "service.environment": "testing", "service.name": "opbeans-go", - "serviceAnomalyStats": Object { - "actualValue": 3933482.17647059, - "anomalyScore": 2.61017027514827, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, }, }, @@ -796,8 +806,8 @@ Array [ "service.environment": "production", "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { - "actualValue": 684716.581395349, - "anomalyScore": 0.204989077199074, + "actualValue": 141536.936507937, + "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", @@ -810,7 +820,7 @@ Array [ "service.environment": "production", "service.name": "opbeans-java", "serviceAnomalyStats": Object { - "actualValue": 14901.32, + "actualValue": 559010.6, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -822,6 +832,7 @@ Array [ Object { "data": Object { "id": "opbeans-ruby~opbeans-node", + "isInverseEdge": true, "source": "opbeans-ruby", "sourceData": Object { "agent.name": "ruby", @@ -829,8 +840,8 @@ Array [ "service.environment": "production", "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { - "actualValue": 684716.581395349, - "anomalyScore": 0.204989077199074, + "actualValue": 141536.936507937, + "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", @@ -842,19 +853,13 @@ Array [ "id": "opbeans-node", "service.environment": "testing", "service.name": "opbeans-node", - "serviceAnomalyStats": Object { - "actualValue": 32226.649122807, - "anomalyScore": 0, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, }, }, Object { "data": Object { "id": "opbeans-ruby~opbeans-python", + "isInverseEdge": true, "source": "opbeans-ruby", "sourceData": Object { "agent.name": "ruby", @@ -862,8 +867,8 @@ Array [ "service.environment": "production", "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { - "actualValue": 684716.581395349, - "anomalyScore": 0.204989077199074, + "actualValue": 141536.936507937, + "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", @@ -876,7 +881,7 @@ Array [ "service.environment": "production", "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 47107.7692307692, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -907,13 +912,6 @@ Array [ "id": "opbeans-go", "service.environment": "testing", "service.name": "opbeans-go", - "serviceAnomalyStats": Object { - "actualValue": 3933482.17647059, - "anomalyScore": 2.61017027514827, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, }, }, @@ -940,7 +938,7 @@ Array [ "service.environment": "production", "service.name": "opbeans-java", "serviceAnomalyStats": Object { - "actualValue": 14901.32, + "actualValue": 559010.6, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -971,13 +969,6 @@ Array [ "id": "opbeans-node", "service.environment": "testing", "service.name": "opbeans-node", - "serviceAnomalyStats": Object { - "actualValue": 32226.649122807, - "anomalyScore": 0, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, }, }, @@ -1004,7 +995,7 @@ Array [ "service.environment": "production", "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 47107.7692307692, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -1036,8 +1027,8 @@ Array [ "service.environment": "production", "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { - "actualValue": 684716.581395349, - "anomalyScore": 0.204989077199074, + "actualValue": 141536.936507937, + "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", @@ -1045,6 +1036,13 @@ Array [ }, }, }, + Object { + "data": Object { + "id": "elastic-co-frontend~>resourceGroup{elastic-co-frontend}", + "source": "elastic-co-frontend", + "target": "resourceGroup{elastic-co-frontend}", + }, + }, ] `; @@ -1053,26 +1051,27 @@ Object { "elements": Array [ Object { "data": Object { - "agent.name": "rum-js", - "id": "opbeans-rum", - "service.environment": "testing", - "service.name": "opbeans-rum", + "agent.name": "ruby", + "id": "opbeans-ruby", + "service.environment": "production", + "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { + "actualValue": 141536.936507937, "anomalyScore": 0, "healthStatus": "healthy", - "jobId": "apm-environment_not_defined-7ed6-high_mean_transaction_duration", - "transactionType": "page-load", + "jobId": "apm-production-229a-high_mean_transaction_duration", + "transactionType": "request", }, }, }, Object { "data": Object { - "agent.name": "python", - "id": "opbeans-python", + "agent.name": "java", + "id": "opbeans-java", "service.environment": "production", - "service.name": "opbeans-python", + "service.name": "opbeans-java", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 559010.6, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -1082,16 +1081,37 @@ Object { }, Object { "data": Object { - "agent.name": "java", - "id": "opbeans-java", - "service.environment": "production", - "service.name": "opbeans-java", + "id": ">postgresql", + "label": "postgresql", + "span.destination.service.resource": "postgresql", + "span.subtype": "postgresql", + "span.type": "db", + }, + }, + Object { + "data": Object { + "agent.name": "rum-js", + "id": "elastic-co-frontend", + "service.name": "elastic-co-frontend", "serviceAnomalyStats": Object { - "actualValue": 14901.32, "anomalyScore": 0, "healthStatus": "healthy", - "jobId": "apm-production-229a-high_mean_transaction_duration", - "transactionType": "request", + "jobId": "apm-environment_not_defined-7ed6-high_mean_transaction_duration", + "transactionType": "page-load", + }, + }, + }, + Object { + "data": Object { + "agent.name": "rum-js", + "id": "opbeans-rum", + "service.environment": "testing", + "service.name": "opbeans-rum", + "serviceAnomalyStats": Object { + "anomalyScore": 0, + "healthStatus": "healthy", + "jobId": "apm-environment_not_defined-7ed6-high_mean_transaction_duration", + "transactionType": "page-load", }, }, }, @@ -1101,13 +1121,6 @@ Object { "id": "opbeans-node", "service.environment": "testing", "service.name": "opbeans-node", - "serviceAnomalyStats": Object { - "actualValue": 32226.649122807, - "anomalyScore": 0, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, }, Object { @@ -1116,39 +1129,23 @@ Object { "id": "opbeans-go", "service.environment": "testing", "service.name": "opbeans-go", - "serviceAnomalyStats": Object { - "actualValue": 3933482.17647059, - "anomalyScore": 2.61017027514827, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, }, Object { "data": Object { - "agent.name": "ruby", - "id": "opbeans-ruby", + "agent.name": "python", + "id": "opbeans-python", "service.environment": "production", - "service.name": "opbeans-ruby", + "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 684716.581395349, - "anomalyScore": 0.204989077199074, + "actualValue": 47107.7692307692, + "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", }, }, }, - Object { - "data": Object { - "id": ">postgresql", - "label": "postgresql", - "span.destination.service.resource": "postgresql", - "span.subtype": "postgresql", - "span.type": "db", - }, - }, Object { "data": Object { "id": ">elasticsearch", @@ -1175,6 +1172,78 @@ Object { "service.name": "opbeans-dotnet", }, }, + Object { + "data": Object { + "groupedConnections": Array [ + Object { + "id": ">a18132920325.cdn.optimizely.com:443", + "label": "a18132920325.cdn.optimizely.com:443", + "span.destination.service.resource": "a18132920325.cdn.optimizely.com:443", + "span.subtype": "iframe", + "span.type": "resource", + }, + Object { + "id": ">cdn.optimizely.com:443", + "label": "cdn.optimizely.com:443", + "span.destination.service.resource": "cdn.optimizely.com:443", + "span.subtype": "script", + "span.type": "resource", + }, + Object { + "id": ">fonts.googleapis.com:443", + "label": "fonts.googleapis.com:443", + "span.destination.service.resource": "fonts.googleapis.com:443", + "span.subtype": "link", + "span.type": "resource", + }, + Object { + "id": ">images.contentstack.io:443", + "label": "images.contentstack.io:443", + "span.destination.service.resource": "images.contentstack.io:443", + "span.subtype": "css", + "span.type": "resource", + }, + Object { + "id": ">info.elastic.co:443", + "label": "info.elastic.co:443", + "span.destination.service.resource": "info.elastic.co:443", + "span.subtype": "script", + "span.type": "resource", + }, + Object { + "id": ">p.typekit.net:443", + "label": "p.typekit.net:443", + "span.destination.service.resource": "p.typekit.net:443", + "span.subtype": "css", + "span.type": "resource", + }, + Object { + "id": ">static-www.elastic.co:443", + "label": "static-www.elastic.co:443", + "span.destination.service.resource": "static-www.elastic.co:443", + "span.subtype": "img", + "span.type": "resource", + }, + Object { + "id": ">use.typekit.net:443", + "label": "use.typekit.net:443", + "span.destination.service.resource": "use.typekit.net:443", + "span.subtype": "link", + "span.type": "resource", + }, + Object { + "id": ">www.elastic.co:443", + "label": "www.elastic.co:443", + "span.destination.service.resource": "www.elastic.co:443", + "span.subtype": "browser-timing", + "span.type": "hard-navigation", + }, + ], + "id": "resourceGroup{elastic-co-frontend}", + "label": "9 resources", + "span.type": "external", + }, + }, Object { "data": Object { "id": "opbeans-go~>postgresql", @@ -1184,13 +1253,6 @@ Object { "id": "opbeans-go", "service.environment": "testing", "service.name": "opbeans-go", - "serviceAnomalyStats": Object { - "actualValue": 3933482.17647059, - "anomalyScore": 2.61017027514827, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, "target": ">postgresql", "targetData": Object { @@ -1202,40 +1264,6 @@ Object { }, }, }, - Object { - "data": Object { - "bidirectional": true, - "id": "opbeans-go~opbeans-java", - "source": "opbeans-go", - "sourceData": Object { - "agent.name": "go", - "id": "opbeans-go", - "service.environment": "testing", - "service.name": "opbeans-go", - "serviceAnomalyStats": Object { - "actualValue": 3933482.17647059, - "anomalyScore": 2.61017027514827, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, - }, - "target": "opbeans-java", - "targetData": Object { - "agent.name": "java", - "id": "opbeans-java", - "service.environment": "production", - "service.name": "opbeans-java", - "serviceAnomalyStats": Object { - "actualValue": 14901.32, - "anomalyScore": 0, - "healthStatus": "healthy", - "jobId": "apm-production-229a-high_mean_transaction_duration", - "transactionType": "request", - }, - }, - }, - }, Object { "data": Object { "bidirectional": true, @@ -1246,13 +1274,6 @@ Object { "id": "opbeans-go", "service.environment": "testing", "service.name": "opbeans-go", - "serviceAnomalyStats": Object { - "actualValue": 3933482.17647059, - "anomalyScore": 2.61017027514827, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, "target": "opbeans-node", "targetData": Object { @@ -1260,13 +1281,6 @@ Object { "id": "opbeans-node", "service.environment": "testing", "service.name": "opbeans-node", - "serviceAnomalyStats": Object { - "actualValue": 32226.649122807, - "anomalyScore": 0, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, }, }, @@ -1280,13 +1294,6 @@ Object { "id": "opbeans-go", "service.environment": "testing", "service.name": "opbeans-go", - "serviceAnomalyStats": Object { - "actualValue": 3933482.17647059, - "anomalyScore": 2.61017027514827, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, "target": "opbeans-python", "targetData": Object { @@ -1295,7 +1302,7 @@ Object { "service.environment": "production", "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 47107.7692307692, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -1314,7 +1321,7 @@ Object { "service.environment": "production", "service.name": "opbeans-java", "serviceAnomalyStats": Object { - "actualValue": 14901.32, + "actualValue": 559010.6, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -1331,44 +1338,10 @@ Object { }, }, }, - Object { - "data": Object { - "id": "opbeans-java~opbeans-go", - "isInverseEdge": true, - "source": "opbeans-java", - "sourceData": Object { - "agent.name": "java", - "id": "opbeans-java", - "service.environment": "production", - "service.name": "opbeans-java", - "serviceAnomalyStats": Object { - "actualValue": 14901.32, - "anomalyScore": 0, - "healthStatus": "healthy", - "jobId": "apm-production-229a-high_mean_transaction_duration", - "transactionType": "request", - }, - }, - "target": "opbeans-go", - "targetData": Object { - "agent.name": "go", - "id": "opbeans-go", - "service.environment": "testing", - "service.name": "opbeans-go", - "serviceAnomalyStats": Object { - "actualValue": 3933482.17647059, - "anomalyScore": 2.61017027514827, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, - }, - }, - }, Object { "data": Object { "bidirectional": true, - "id": "opbeans-java~opbeans-python", + "id": "opbeans-java~opbeans-node", "source": "opbeans-java", "sourceData": Object { "agent.name": "java", @@ -1376,26 +1349,19 @@ Object { "service.environment": "production", "service.name": "opbeans-java", "serviceAnomalyStats": Object { - "actualValue": 14901.32, + "actualValue": 559010.6, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", }, }, - "target": "opbeans-python", + "target": "opbeans-node", "targetData": Object { - "agent.name": "python", - "id": "opbeans-python", - "service.environment": "production", - "service.name": "opbeans-python", - "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, - "anomalyScore": 0, - "healthStatus": "healthy", - "jobId": "apm-production-229a-high_mean_transaction_duration", - "transactionType": "request", - }, + "agent.name": "nodejs", + "id": "opbeans-node", + "service.environment": "testing", + "service.name": "opbeans-node", }, }, }, @@ -1410,7 +1376,7 @@ Object { "service.environment": "production", "service.name": "opbeans-java", "serviceAnomalyStats": Object { - "actualValue": 14901.32, + "actualValue": 559010.6, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -1424,8 +1390,8 @@ Object { "service.environment": "production", "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { - "actualValue": 684716.581395349, - "anomalyScore": 0.204989077199074, + "actualValue": 141536.936507937, + "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", @@ -1442,13 +1408,6 @@ Object { "id": "opbeans-node", "service.environment": "testing", "service.name": "opbeans-node", - "serviceAnomalyStats": Object { - "actualValue": 32226.649122807, - "anomalyScore": 0, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, "target": ">postgresql", "targetData": Object { @@ -1470,13 +1429,6 @@ Object { "id": "opbeans-node", "service.environment": "testing", "service.name": "opbeans-node", - "serviceAnomalyStats": Object { - "actualValue": 32226.649122807, - "anomalyScore": 0, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, "target": "opbeans-go", "targetData": Object { @@ -1484,11 +1436,31 @@ Object { "id": "opbeans-go", "service.environment": "testing", "service.name": "opbeans-go", + }, + }, + }, + Object { + "data": Object { + "id": "opbeans-node~opbeans-java", + "isInverseEdge": true, + "source": "opbeans-node", + "sourceData": Object { + "agent.name": "nodejs", + "id": "opbeans-node", + "service.environment": "testing", + "service.name": "opbeans-node", + }, + "target": "opbeans-java", + "targetData": Object { + "agent.name": "java", + "id": "opbeans-java", + "service.environment": "production", + "service.name": "opbeans-java", "serviceAnomalyStats": Object { - "actualValue": 3933482.17647059, - "anomalyScore": 2.61017027514827, + "actualValue": 559010.6, + "anomalyScore": 0, "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", + "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", }, }, @@ -1504,22 +1476,42 @@ Object { "id": "opbeans-node", "service.environment": "testing", "service.name": "opbeans-node", + }, + "target": "opbeans-python", + "targetData": Object { + "agent.name": "python", + "id": "opbeans-python", + "service.environment": "production", + "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 32226.649122807, + "actualValue": 47107.7692307692, "anomalyScore": 0, "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", + "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", }, }, - "target": "opbeans-python", + }, + }, + Object { + "data": Object { + "bidirectional": true, + "id": "opbeans-node~opbeans-ruby", + "source": "opbeans-node", + "sourceData": Object { + "agent.name": "nodejs", + "id": "opbeans-node", + "service.environment": "testing", + "service.name": "opbeans-node", + }, + "target": "opbeans-ruby", "targetData": Object { - "agent.name": "python", - "id": "opbeans-python", + "agent.name": "ruby", + "id": "opbeans-ruby", "service.environment": "production", - "service.name": "opbeans-python", + "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 141536.936507937, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -1538,7 +1530,7 @@ Object { "service.environment": "production", "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 47107.7692307692, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -1565,7 +1557,7 @@ Object { "service.environment": "production", "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 47107.7692307692, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -1592,7 +1584,7 @@ Object { "service.environment": "production", "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 47107.7692307692, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -1620,7 +1612,7 @@ Object { "service.environment": "production", "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 47107.7692307692, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -1633,19 +1625,12 @@ Object { "id": "opbeans-go", "service.environment": "testing", "service.name": "opbeans-go", - "serviceAnomalyStats": Object { - "actualValue": 3933482.17647059, - "anomalyScore": 2.61017027514827, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, }, }, Object { "data": Object { - "id": "opbeans-python~opbeans-java", + "id": "opbeans-python~opbeans-node", "isInverseEdge": true, "source": "opbeans-python", "sourceData": Object { @@ -1654,33 +1639,26 @@ Object { "service.environment": "production", "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 47107.7692307692, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", }, }, - "target": "opbeans-java", + "target": "opbeans-node", "targetData": Object { - "agent.name": "java", - "id": "opbeans-java", - "service.environment": "production", - "service.name": "opbeans-java", - "serviceAnomalyStats": Object { - "actualValue": 14901.32, - "anomalyScore": 0, - "healthStatus": "healthy", - "jobId": "apm-production-229a-high_mean_transaction_duration", - "transactionType": "request", - }, + "agent.name": "nodejs", + "id": "opbeans-node", + "service.environment": "testing", + "service.name": "opbeans-node", }, }, }, Object { "data": Object { - "id": "opbeans-python~opbeans-node", - "isInverseEdge": true, + "bidirectional": true, + "id": "opbeans-python~opbeans-ruby", "source": "opbeans-python", "sourceData": Object { "agent.name": "python", @@ -1688,24 +1666,24 @@ Object { "service.environment": "production", "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 47107.7692307692, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", }, }, - "target": "opbeans-node", + "target": "opbeans-ruby", "targetData": Object { - "agent.name": "nodejs", - "id": "opbeans-node", - "service.environment": "testing", - "service.name": "opbeans-node", + "agent.name": "ruby", + "id": "opbeans-ruby", + "service.environment": "production", + "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { - "actualValue": 32226.649122807, + "actualValue": 141536.936507937, "anomalyScore": 0, "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", + "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", }, }, @@ -1721,8 +1699,8 @@ Object { "service.environment": "production", "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { - "actualValue": 684716.581395349, - "anomalyScore": 0.204989077199074, + "actualValue": 141536.936507937, + "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", @@ -1748,8 +1726,8 @@ Object { "service.environment": "production", "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { - "actualValue": 684716.581395349, - "anomalyScore": 0.204989077199074, + "actualValue": 141536.936507937, + "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", @@ -1761,13 +1739,6 @@ Object { "id": "opbeans-go", "service.environment": "testing", "service.name": "opbeans-go", - "serviceAnomalyStats": Object { - "actualValue": 3933482.17647059, - "anomalyScore": 2.61017027514827, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, }, }, @@ -1782,8 +1753,8 @@ Object { "service.environment": "production", "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { - "actualValue": 684716.581395349, - "anomalyScore": 0.204989077199074, + "actualValue": 141536.936507937, + "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", @@ -1796,7 +1767,7 @@ Object { "service.environment": "production", "service.name": "opbeans-java", "serviceAnomalyStats": Object { - "actualValue": 14901.32, + "actualValue": 559010.6, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -1808,6 +1779,7 @@ Object { Object { "data": Object { "id": "opbeans-ruby~opbeans-node", + "isInverseEdge": true, "source": "opbeans-ruby", "sourceData": Object { "agent.name": "ruby", @@ -1815,8 +1787,8 @@ Object { "service.environment": "production", "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { - "actualValue": 684716.581395349, - "anomalyScore": 0.204989077199074, + "actualValue": 141536.936507937, + "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", @@ -1828,19 +1800,13 @@ Object { "id": "opbeans-node", "service.environment": "testing", "service.name": "opbeans-node", - "serviceAnomalyStats": Object { - "actualValue": 32226.649122807, - "anomalyScore": 0, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, }, }, Object { "data": Object { "id": "opbeans-ruby~opbeans-python", + "isInverseEdge": true, "source": "opbeans-ruby", "sourceData": Object { "agent.name": "ruby", @@ -1848,8 +1814,8 @@ Object { "service.environment": "production", "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { - "actualValue": 684716.581395349, - "anomalyScore": 0.204989077199074, + "actualValue": 141536.936507937, + "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", @@ -1862,7 +1828,7 @@ Object { "service.environment": "production", "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 47107.7692307692, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -1893,13 +1859,6 @@ Object { "id": "opbeans-go", "service.environment": "testing", "service.name": "opbeans-go", - "serviceAnomalyStats": Object { - "actualValue": 3933482.17647059, - "anomalyScore": 2.61017027514827, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, }, }, @@ -1926,7 +1885,7 @@ Object { "service.environment": "production", "service.name": "opbeans-java", "serviceAnomalyStats": Object { - "actualValue": 14901.32, + "actualValue": 559010.6, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -1957,13 +1916,6 @@ Object { "id": "opbeans-node", "service.environment": "testing", "service.name": "opbeans-node", - "serviceAnomalyStats": Object { - "actualValue": 32226.649122807, - "anomalyScore": 0, - "healthStatus": "healthy", - "jobId": "apm-testing-d457-high_mean_transaction_duration", - "transactionType": "request", - }, }, }, }, @@ -1990,7 +1942,7 @@ Object { "service.environment": "production", "service.name": "opbeans-python", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 47107.7692307692, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -2022,8 +1974,8 @@ Object { "service.environment": "production", "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { - "actualValue": 684716.581395349, - "anomalyScore": 0.204989077199074, + "actualValue": 141536.936507937, + "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", "transactionType": "request", @@ -2031,6 +1983,13 @@ Object { }, }, }, + Object { + "data": Object { + "id": "elastic-co-frontend~>resourceGroup{elastic-co-frontend}", + "source": "elastic-co-frontend", + "target": "resourceGroup{elastic-co-frontend}", + }, + }, ], } `; diff --git a/x-pack/test/apm_api_integration/trial/tests/service_maps/service_maps.ts b/x-pack/test/apm_api_integration/trial/tests/service_maps/service_maps.ts index a8632d7a27c3c..6e7046ac0ba12 100644 --- a/x-pack/test/apm_api_integration/trial/tests/service_maps/service_maps.ts +++ b/x-pack/test/apm_api_integration/trial/tests/service_maps/service_maps.ts @@ -58,6 +58,7 @@ export default function serviceMapsApiTests({ getService }: FtrProviderContext) expectSnapshot(serviceNames).toMatchInline(` Array [ + "elastic-co-frontend", "opbeans-dotnet", "opbeans-go", "opbeans-java", @@ -95,7 +96,7 @@ export default function serviceMapsApiTests({ getService }: FtrProviderContext) body.elements.forEach((element: { data: Record }) => { environments.add(element.data['service.environment']); }); - expect(environments.size).to.eql(1); + expect(environments.has(ENVIRONMENT_NOT_DEFINED)).to.eql(true); expectSnapshot(body).toMatch(); }); @@ -153,31 +154,32 @@ export default function serviceMapsApiTests({ getService }: FtrProviderContext) (el: { data: { serviceAnomalyStats?: {} } }) => !isEmpty(el.data.serviceAnomalyStats) ); - expectSnapshot(dataWithAnomalies.length).toMatchInline(`6`); + expectSnapshot(dataWithAnomalies.length).toMatchInline(`5`); expectSnapshot(dataWithAnomalies.slice(0, 3)).toMatchInline(` Array [ Object { "data": Object { - "agent.name": "rum-js", - "id": "opbeans-rum", - "service.environment": "testing", - "service.name": "opbeans-rum", + "agent.name": "ruby", + "id": "opbeans-ruby", + "service.environment": "production", + "service.name": "opbeans-ruby", "serviceAnomalyStats": Object { + "actualValue": 141536.936507937, "anomalyScore": 0, "healthStatus": "healthy", - "jobId": "apm-environment_not_defined-7ed6-high_mean_transaction_duration", - "transactionType": "page-load", + "jobId": "apm-production-229a-high_mean_transaction_duration", + "transactionType": "request", }, }, }, Object { "data": Object { - "agent.name": "python", - "id": "opbeans-python", + "agent.name": "java", + "id": "opbeans-java", "service.environment": "production", - "service.name": "opbeans-python", + "service.name": "opbeans-java", "serviceAnomalyStats": Object { - "actualValue": 66218.0833333333, + "actualValue": 559010.6, "anomalyScore": 0, "healthStatus": "healthy", "jobId": "apm-production-229a-high_mean_transaction_duration", @@ -187,16 +189,14 @@ export default function serviceMapsApiTests({ getService }: FtrProviderContext) }, Object { "data": Object { - "agent.name": "java", - "id": "opbeans-java", - "service.environment": "production", - "service.name": "opbeans-java", + "agent.name": "rum-js", + "id": "elastic-co-frontend", + "service.name": "elastic-co-frontend", "serviceAnomalyStats": Object { - "actualValue": 14901.32, "anomalyScore": 0, "healthStatus": "healthy", - "jobId": "apm-production-229a-high_mean_transaction_duration", - "transactionType": "request", + "jobId": "apm-environment_not_defined-7ed6-high_mean_transaction_duration", + "transactionType": "page-load", }, }, }, diff --git a/x-pack/test/apm_api_integration/trial/tests/services/top_services.ts b/x-pack/test/apm_api_integration/trial/tests/services/top_services.ts index ab127aaac8490..c23c26f504a6c 100644 --- a/x-pack/test/apm_api_integration/trial/tests/services/top_services.ts +++ b/x-pack/test/apm_api_integration/trial/tests/services/top_services.ts @@ -60,8 +60,9 @@ export default function ApiTest({ getService }: FtrProviderContext) { expectSnapshot(healthStatuses).toMatchInline(` Array [ "healthy", + undefined, "healthy", - "healthy", + undefined, "healthy", "healthy", "healthy", diff --git a/x-pack/test/functional/apps/discover/index.ts b/x-pack/test/functional/apps/discover/index.ts index 759225d80fa20..816428f7b3cc3 100644 --- a/x-pack/test/functional/apps/discover/index.ts +++ b/x-pack/test/functional/apps/discover/index.ts @@ -14,5 +14,6 @@ export default function ({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./async_scripted_fields')); loadTestFile(require.resolve('./reporting')); loadTestFile(require.resolve('./error_handling')); + loadTestFile(require.resolve('./value_suggestions')); }); } diff --git a/x-pack/test/functional/apps/discover/value_suggestions.ts b/x-pack/test/functional/apps/discover/value_suggestions.ts new file mode 100644 index 0000000000000..54720b94172f6 --- /dev/null +++ b/x-pack/test/functional/apps/discover/value_suggestions.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const esArchiver = getService('esArchiver'); + const queryBar = getService('queryBar'); + const PageObjects = getPageObjects(['common']); + + describe('value suggestions', function describeIndexTests() { + before(async function () { + await esArchiver.loadIfNeeded('logstash_functional'); + await esArchiver.load('dashboard/drilldowns'); + await PageObjects.common.navigateToApp('discover'); + }); + + after(async () => { + await esArchiver.unload('dashboard/drilldowns'); + }); + + it('show up', async () => { + await queryBar.setQuery('extension.raw : '); + const suggestions = await queryBar.getSuggestions(); + expect(suggestions.length).to.be(5); + expect(suggestions).to.contain('"jpg"'); + }); + }); +} diff --git a/x-pack/test/functional/apps/ml/permissions/full_ml_access.ts b/x-pack/test/functional/apps/ml/permissions/full_ml_access.ts index c3dde872fa4a6..7e9b73686a23b 100644 --- a/x-pack/test/functional/apps/ml/permissions/full_ml_access.ts +++ b/x-pack/test/functional/apps/ml/permissions/full_ml_access.ts @@ -16,7 +16,8 @@ export default function ({ getService }: FtrProviderContext) { const testUsers = [USER.ML_POWERUSER, USER.ML_POWERUSER_SPACES]; - describe('for user with full ML access', function () { + // flaky UI behavior makes this test fail, see https://github.com/elastic/kibana/issues/78965 + describe.skip('for user with full ML access', function () { this.tags(['skipFirefox', 'mlqa']); describe('with no data loaded', function () { diff --git a/x-pack/test/functional/apps/uptime/ml_anomaly.ts b/x-pack/test/functional/apps/uptime/ml_anomaly.ts index 20491a063caf8..6930996921823 100644 --- a/x-pack/test/functional/apps/uptime/ml_anomaly.ts +++ b/x-pack/test/functional/apps/uptime/ml_anomaly.ts @@ -40,7 +40,6 @@ export default ({ getService }: FtrProviderContext) => { it('can create job successfully', async () => { await uptime.ml.createMLJob(); - // await uptime.navigation.refreshApp(); }); it('can open ML Manage Menu', async () => { diff --git a/x-pack/test/functional/es_archives/actions/data.json b/x-pack/test/functional/es_archives/actions/data.json index 325d79651196b..aeeca87deb9ff 100644 --- a/x-pack/test/functional/es_archives/actions/data.json +++ b/x-pack/test/functional/es_archives/actions/data.json @@ -13,3 +13,46 @@ } } } + +{ + "type": "doc", + "value": { + "id": "action:791a2ab1-784a-46ea-aa68-04c837e5da2d", + "index": ".kibana_1", + "source": { + "action": { + "actionTypeId": ".jira", + "config": { + "apiUrl": "http://elastic:changeme@localhost:5620/api/_actions-FTS-external-service-simulators/jira", + "casesConfiguration": { + "mapping": [ + { + "actionType": "overwrite", + "source": "title", + "target": "summary" + }, + { + "actionType": "overwrite", + "source": "description", + "target": "description" + }, + { + "actionType": "append", + "source": "comments", + "target": "comments" + } + ] + }, + "projectKey": "CK" + }, + "name": "A jira action", + "secrets": "gUYVHxyvkY6I6rZrST16PzSBjwuPLzWYIm9Ow6qjJXiCimA1wHGgH1BR5nO/xZJjv9QqIGO3eKDSYsn7K9m39UJv83+oi5P4ZgtFktsFq0Jv6XEFQPFkuVY5sWno7w89CxgxlsTQFpYAJb0Hl0qf/6p6bKKaje48YRqNS5roebNAAribh9AWu80uxIJFWNo=" + }, + "references": [ + ], + "type": "action", + "updated_at": "2020-09-24T08:08:23.715Z" + }, + "type": "_doc" + } +} diff --git a/x-pack/test/functional/es_archives/actions/mappings.json b/x-pack/test/functional/es_archives/actions/mappings.json new file mode 100644 index 0000000000000..ee128369ddd2b --- /dev/null +++ b/x-pack/test/functional/es_archives/actions/mappings.json @@ -0,0 +1,2556 @@ +{ + "type": "index", + "value": { + "aliases": { + ".kibana": { + } + }, + "index": ".kibana_1", + "mappings": { + "_meta": { + "migrationMappingPropertyHashes": { + "action": "6e96ac5e648f57523879661ea72525b7", + "action_task_params": "a9d49f184ee89641044be0ca2950fa3a", + "alert": "7b44fba6773e37c806ce290ea9b7024e", + "apm-indices": "9bb9b2bf1fa636ed8619cbab5ce6a1dd", + "apm-telemetry": "3d1b76c39bfb2cc8296b024d73854724", + "app_search_telemetry": "3d1b76c39bfb2cc8296b024d73854724", + "application_usage_daily": "43b8830d5d0df85a6823d290885fc9fd", + "application_usage_totals": "3d1b76c39bfb2cc8296b024d73854724", + "application_usage_transactional": "3d1b76c39bfb2cc8296b024d73854724", + "canvas-element": "7390014e1091044523666d97247392fc", + "canvas-workpad": "b0a1706d356228dbdcb4a17e6b9eb231", + "canvas-workpad-template": "ae2673f678281e2c055d764b153e9715", + "cases": "32aa96a6d3855ddda53010ae2048ac22", + "cases-comments": "c2061fb929f585df57425102fa928b4b", + "cases-configure": "42711cbb311976c0687853f4c1354572", + "cases-user-actions": "32277330ec6b721abe3b846cfd939a71", + "config": "c63748b75f39d0c54de12d12c1ccbc20", + "dashboard": "d00f614b29a80360e1190193fd333bab", + "endpoint:user-artifact": "4a11183eee21e6fbad864f7a30b39ad0", + "endpoint:user-artifact-manifest": "4b9c0e7cfaf86d82a7ee9ed68065e50d", + "epm-packages": "8f6e0b09ea0374c4ffe98c3755373cff", + "exception-list": "497afa2f881a675d72d58e20057f3d8b", + "exception-list-agnostic": "497afa2f881a675d72d58e20057f3d8b", + "file-upload-telemetry": "0ed4d3e1983d1217a30982630897092e", + "fleet-agent-actions": "e520c855577170c24481be05c3ae14ec", + "fleet-agent-events": "3231653fafe4ef3196fe3b32ab774bf2", + "fleet-agents": "034346488514b7058a79140b19ddf631", + "fleet-enrollment-api-keys": "28b91e20b105b6f928e2012600085d8f", + "graph-workspace": "cd7ba1330e6682e9cc00b78850874be1", + "index-pattern": "66eccb05066c5a89924f48a9e9736499", + "infrastructure-ui-source": "2b2809653635caf490c93f090502d04c", + "ingest-agent-policies": "9326f99c977fd2ef5ab24b6336a0675c", + "ingest-outputs": "8aa988c376e65443fefc26f1075e93a3", + "ingest-package-policies": "8545e51d7bc8286d6dace3d41240d749", + "ingest_manager_settings": "012cf278ec84579495110bb827d1ed09", + "inventory-view": "88fc7e12fd1b45b6f0787323ce4f18d2", + "kql-telemetry": "d12a98a6f19a2d273696597547e064ee", + "lens": "d33c68a69ff1e78c9888dedd2164ac22", + "lens-ui-telemetry": "509bfa5978586998e05f9e303c07a327", + "map": "4a05b35c3a3a58fbc72dd0202dc3487f", + "maps-telemetry": "5ef305b18111b77789afefbd36b66171", + "metrics-explorer-view": "a8df1d270ee48c969d22d23812d08187", + "migrationVersion": "4a1746014a75ade3a714e1db5763276f", + "ml-telemetry": "257fd1d4b4fdbb9cb4b8a3b27da201e9", + "namespace": "2f4316de49999235636386fe51dc06c1", + "namespaces": "2f4316de49999235636386fe51dc06c1", + "query": "11aaeb7f5f7fa5bb43f25e18ce26e7d9", + "references": "7997cf5a56cc02bdc9c93361bde732b0", + "sample-data-telemetry": "7d3cfeb915303c9641c59681967ffeb4", + "search": "5c4b9a6effceb17ae8a0ab22d0c49767", + "search-telemetry": "3d1b76c39bfb2cc8296b024d73854724", + "siem-detection-engine-rule-actions": "6569b288c169539db10cb262bf79de18", + "siem-detection-engine-rule-status": "ae783f41c6937db6b7a2ef5c93a9e9b0", + "siem-ui-timeline": "94bc38c7a421d15fbfe8ea565370a421", + "siem-ui-timeline-note": "8874706eedc49059d4cf0f5094559084", + "siem-ui-timeline-pinned-event": "20638091112f0e14f0e443d512301c29", + "space": "c5ca8acafa0beaa4d08d014a97b6bc6b", + "telemetry": "36a616f7026dfa617d6655df850fe16d", + "timelion-sheet": "9a2a2748877c7a7b582fef201ab1d4cf", + "tsvb-validation-telemetry": "3a37ef6c8700ae6fc97d5c7da00e9215", + "type": "2f4316de49999235636386fe51dc06c1", + "ui-metric": "0d409297dc5ebe1e3a1da691c6ee32e3", + "updated_at": "00da57df13e94e9d98437d13ace4bfe0", + "upgrade-assistant-reindex-operation": "215107c281839ea9b3ad5f6419819763", + "upgrade-assistant-telemetry": "56702cec857e0a9dacfb696655b4ff7b", + "uptime-dynamic-settings": "fcdb453a30092f022f2642db29523d80", + "url": "c7f66a0df8b1b52f17c28c4adb111105", + "visualization": "52d7a13ad68a150c4525b292d23e12cc", + "workplace_search_telemetry": "3d1b76c39bfb2cc8296b024d73854724" + } + }, + "dynamic": "strict", + "properties": { + "action": { + "properties": { + "actionTypeId": { + "type": "keyword" + }, + "config": { + "enabled": false, + "type": "object" + }, + "name": { + "fields": { + "keyword": { + "type": "keyword" + } + }, + "type": "text" + }, + "secrets": { + "type": "binary" + } + } + }, + "action_task_params": { + "properties": { + "actionId": { + "type": "keyword" + }, + "apiKey": { + "type": "binary" + }, + "params": { + "enabled": false, + "type": "object" + } + } + }, + "alert": { + "properties": { + "actions": { + "properties": { + "actionRef": { + "type": "keyword" + }, + "actionTypeId": { + "type": "keyword" + }, + "group": { + "type": "keyword" + }, + "params": { + "enabled": false, + "type": "object" + } + }, + "type": "nested" + }, + "alertTypeId": { + "type": "keyword" + }, + "apiKey": { + "type": "binary" + }, + "apiKeyOwner": { + "type": "keyword" + }, + "consumer": { + "type": "keyword" + }, + "createdAt": { + "type": "date" + }, + "createdBy": { + "type": "keyword" + }, + "enabled": { + "type": "boolean" + }, + "muteAll": { + "type": "boolean" + }, + "mutedInstanceIds": { + "type": "keyword" + }, + "name": { + "fields": { + "keyword": { + "type": "keyword" + } + }, + "type": "text" + }, + "params": { + "enabled": false, + "type": "object" + }, + "schedule": { + "properties": { + "interval": { + "type": "keyword" + } + } + }, + "scheduledTaskId": { + "type": "keyword" + }, + "tags": { + "type": "keyword" + }, + "throttle": { + "type": "keyword" + }, + "updatedBy": { + "type": "keyword" + } + } + }, + "apm-indices": { + "properties": { + "apm_oss": { + "properties": { + "errorIndices": { + "type": "keyword" + }, + "metricsIndices": { + "type": "keyword" + }, + "onboardingIndices": { + "type": "keyword" + }, + "sourcemapIndices": { + "type": "keyword" + }, + "spanIndices": { + "type": "keyword" + }, + "transactionIndices": { + "type": "keyword" + } + } + } + } + }, + "apm-telemetry": { + "dynamic": "false", + "type": "object" + }, + "app_search_telemetry": { + "dynamic": "false", + "type": "object" + }, + "application_usage_daily": { + "dynamic": "false", + "properties": { + "timestamp": { + "type": "date" + } + } + }, + "application_usage_totals": { + "dynamic": "false", + "type": "object" + }, + "application_usage_transactional": { + "dynamic": "false", + "type": "object" + }, + "canvas-element": { + "dynamic": "false", + "properties": { + "@created": { + "type": "date" + }, + "@timestamp": { + "type": "date" + }, + "content": { + "type": "text" + }, + "help": { + "type": "text" + }, + "image": { + "type": "text" + }, + "name": { + "fields": { + "keyword": { + "type": "keyword" + } + }, + "type": "text" + } + } + }, + "canvas-workpad": { + "dynamic": "false", + "properties": { + "@created": { + "type": "date" + }, + "@timestamp": { + "type": "date" + }, + "name": { + "fields": { + "keyword": { + "type": "keyword" + } + }, + "type": "text" + } + } + }, + "canvas-workpad-template": { + "dynamic": "false", + "properties": { + "help": { + "fields": { + "keyword": { + "type": "keyword" + } + }, + "type": "text" + }, + "name": { + "fields": { + "keyword": { + "type": "keyword" + } + }, + "type": "text" + }, + "tags": { + "fields": { + "keyword": { + "type": "keyword" + } + }, + "type": "text" + }, + "template_key": { + "type": "keyword" + } + } + }, + "cases": { + "properties": { + "closed_at": { + "type": "date" + }, + "closed_by": { + "properties": { + "email": { + "type": "keyword" + }, + "full_name": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + }, + "connector_id": { + "type": "keyword" + }, + "created_at": { + "type": "date" + }, + "created_by": { + "properties": { + "email": { + "type": "keyword" + }, + "full_name": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + }, + "description": { + "type": "text" + }, + "external_service": { + "properties": { + "connector_id": { + "type": "keyword" + }, + "connector_name": { + "type": "keyword" + }, + "external_id": { + "type": "keyword" + }, + "external_title": { + "type": "text" + }, + "external_url": { + "type": "text" + }, + "pushed_at": { + "type": "date" + }, + "pushed_by": { + "properties": { + "email": { + "type": "keyword" + }, + "full_name": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + } + } + }, + "status": { + "type": "keyword" + }, + "tags": { + "type": "keyword" + }, + "title": { + "type": "keyword" + }, + "updated_at": { + "type": "date" + }, + "updated_by": { + "properties": { + "email": { + "type": "keyword" + }, + "full_name": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + } + } + }, + "cases-comments": { + "properties": { + "comment": { + "type": "text" + }, + "created_at": { + "type": "date" + }, + "created_by": { + "properties": { + "email": { + "type": "keyword" + }, + "full_name": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + }, + "pushed_at": { + "type": "date" + }, + "pushed_by": { + "properties": { + "email": { + "type": "keyword" + }, + "full_name": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + }, + "updated_at": { + "type": "date" + }, + "updated_by": { + "properties": { + "email": { + "type": "keyword" + }, + "full_name": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + } + } + }, + "cases-configure": { + "properties": { + "closure_type": { + "type": "keyword" + }, + "connector_id": { + "type": "keyword" + }, + "connector_name": { + "type": "keyword" + }, + "created_at": { + "type": "date" + }, + "created_by": { + "properties": { + "email": { + "type": "keyword" + }, + "full_name": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + }, + "updated_at": { + "type": "date" + }, + "updated_by": { + "properties": { + "email": { + "type": "keyword" + }, + "full_name": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + } + } + }, + "cases-user-actions": { + "properties": { + "action": { + "type": "keyword" + }, + "action_at": { + "type": "date" + }, + "action_by": { + "properties": { + "email": { + "type": "keyword" + }, + "full_name": { + "type": "keyword" + }, + "username": { + "type": "keyword" + } + } + }, + "action_field": { + "type": "keyword" + }, + "new_value": { + "type": "text" + }, + "old_value": { + "type": "text" + } + } + }, + "config": { + "dynamic": "false", + "properties": { + "buildNum": { + "type": "keyword" + } + } + }, + "dashboard": { + "properties": { + "description": { + "type": "text" + }, + "hits": { + "type": "integer" + }, + "kibanaSavedObjectMeta": { + "properties": { + "searchSourceJSON": { + "type": "text" + } + } + }, + "optionsJSON": { + "type": "text" + }, + "panelsJSON": { + "type": "text" + }, + "refreshInterval": { + "properties": { + "display": { + "type": "keyword" + }, + "pause": { + "type": "boolean" + }, + "section": { + "type": "integer" + }, + "value": { + "type": "integer" + } + } + }, + "timeFrom": { + "type": "keyword" + }, + "timeRestore": { + "type": "boolean" + }, + "timeTo": { + "type": "keyword" + }, + "title": { + "type": "text" + }, + "version": { + "type": "integer" + } + } + }, + "endpoint:user-artifact": { + "properties": { + "body": { + "type": "binary" + }, + "compressionAlgorithm": { + "index": false, + "type": "keyword" + }, + "created": { + "index": false, + "type": "date" + }, + "decodedSha256": { + "index": false, + "type": "keyword" + }, + "decodedSize": { + "index": false, + "type": "long" + }, + "encodedSha256": { + "type": "keyword" + }, + "encodedSize": { + "index": false, + "type": "long" + }, + "encryptionAlgorithm": { + "index": false, + "type": "keyword" + }, + "identifier": { + "type": "keyword" + } + } + }, + "endpoint:user-artifact-manifest": { + "properties": { + "created": { + "index": false, + "type": "date" + }, + "ids": { + "index": false, + "type": "keyword" + }, + "schemaVersion": { + "type": "keyword" + }, + "semanticVersion": { + "index": false, + "type": "keyword" + } + } + }, + "epm-packages": { + "properties": { + "es_index_patterns": { + "enabled": false, + "type": "object" + }, + "installed_es": { + "properties": { + "id": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + }, + "type": "nested" + }, + "installed_kibana": { + "properties": { + "id": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + }, + "type": "nested" + }, + "internal": { + "type": "boolean" + }, + "name": { + "type": "keyword" + }, + "removable": { + "type": "boolean" + }, + "version": { + "type": "keyword" + } + } + }, + "exception-list": { + "properties": { + "_tags": { + "type": "keyword" + }, + "comments": { + "properties": { + "comment": { + "type": "keyword" + }, + "created_at": { + "type": "keyword" + }, + "created_by": { + "type": "keyword" + }, + "id": { + "type": "keyword" + }, + "updated_at": { + "type": "keyword" + }, + "updated_by": { + "type": "keyword" + } + } + }, + "created_at": { + "type": "keyword" + }, + "created_by": { + "type": "keyword" + }, + "description": { + "type": "keyword" + }, + "entries": { + "properties": { + "entries": { + "properties": { + "field": { + "type": "keyword" + }, + "operator": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "value": { + "fields": { + "text": { + "type": "text" + } + }, + "type": "keyword" + } + } + }, + "field": { + "type": "keyword" + }, + "list": { + "properties": { + "id": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + }, + "operator": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "value": { + "fields": { + "text": { + "type": "text" + } + }, + "type": "keyword" + } + } + }, + "immutable": { + "type": "boolean" + }, + "item_id": { + "type": "keyword" + }, + "list_id": { + "type": "keyword" + }, + "list_type": { + "type": "keyword" + }, + "meta": { + "type": "keyword" + }, + "name": { + "type": "keyword" + }, + "tags": { + "type": "keyword" + }, + "tie_breaker_id": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "updated_by": { + "type": "keyword" + }, + "version": { + "type": "keyword" + } + } + }, + "exception-list-agnostic": { + "properties": { + "_tags": { + "type": "keyword" + }, + "comments": { + "properties": { + "comment": { + "type": "keyword" + }, + "created_at": { + "type": "keyword" + }, + "created_by": { + "type": "keyword" + }, + "id": { + "type": "keyword" + }, + "updated_at": { + "type": "keyword" + }, + "updated_by": { + "type": "keyword" + } + } + }, + "created_at": { + "type": "keyword" + }, + "created_by": { + "type": "keyword" + }, + "description": { + "type": "keyword" + }, + "entries": { + "properties": { + "entries": { + "properties": { + "field": { + "type": "keyword" + }, + "operator": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "value": { + "fields": { + "text": { + "type": "text" + } + }, + "type": "keyword" + } + } + }, + "field": { + "type": "keyword" + }, + "list": { + "properties": { + "id": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + }, + "operator": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "value": { + "fields": { + "text": { + "type": "text" + } + }, + "type": "keyword" + } + } + }, + "immutable": { + "type": "boolean" + }, + "item_id": { + "type": "keyword" + }, + "list_id": { + "type": "keyword" + }, + "list_type": { + "type": "keyword" + }, + "meta": { + "type": "keyword" + }, + "name": { + "type": "keyword" + }, + "tags": { + "type": "keyword" + }, + "tie_breaker_id": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "updated_by": { + "type": "keyword" + }, + "version": { + "type": "keyword" + } + } + }, + "file-upload-telemetry": { + "properties": { + "filesUploadedTotalCount": { + "type": "long" + } + } + }, + "fleet-agent-actions": { + "properties": { + "agent_id": { + "type": "keyword" + }, + "created_at": { + "type": "date" + }, + "data": { + "type": "binary" + }, + "sent_at": { + "type": "date" + }, + "type": { + "type": "keyword" + } + } + }, + "fleet-agent-events": { + "properties": { + "action_id": { + "type": "keyword" + }, + "agent_id": { + "type": "keyword" + }, + "config_id": { + "type": "keyword" + }, + "data": { + "type": "text" + }, + "message": { + "type": "text" + }, + "payload": { + "type": "text" + }, + "stream_id": { + "type": "keyword" + }, + "subtype": { + "type": "keyword" + }, + "timestamp": { + "type": "date" + }, + "type": { + "type": "keyword" + } + } + }, + "fleet-agents": { + "properties": { + "access_api_key_id": { + "type": "keyword" + }, + "active": { + "type": "boolean" + }, + "config_id": { + "type": "keyword" + }, + "config_revision": { + "type": "integer" + }, + "current_error_events": { + "index": false, + "type": "text" + }, + "default_api_key": { + "type": "binary" + }, + "default_api_key_id": { + "type": "keyword" + }, + "enrolled_at": { + "type": "date" + }, + "last_checkin": { + "type": "date" + }, + "last_checkin_status": { + "type": "keyword" + }, + "last_updated": { + "type": "date" + }, + "local_metadata": { + "type": "flattened" + }, + "packages": { + "type": "keyword" + }, + "shared_id": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "unenrolled_at": { + "type": "date" + }, + "unenrollment_started_at": { + "type": "date" + }, + "updated_at": { + "type": "date" + }, + "user_provided_metadata": { + "type": "flattened" + }, + "version": { + "type": "keyword" + } + } + }, + "fleet-enrollment-api-keys": { + "properties": { + "active": { + "type": "boolean" + }, + "api_key": { + "type": "binary" + }, + "api_key_id": { + "type": "keyword" + }, + "config_id": { + "type": "keyword" + }, + "created_at": { + "type": "date" + }, + "expire_at": { + "type": "date" + }, + "name": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "updated_at": { + "type": "date" + } + } + }, + "graph-workspace": { + "properties": { + "description": { + "type": "text" + }, + "kibanaSavedObjectMeta": { + "properties": { + "searchSourceJSON": { + "type": "text" + } + } + }, + "numLinks": { + "type": "integer" + }, + "numVertices": { + "type": "integer" + }, + "title": { + "type": "text" + }, + "version": { + "type": "integer" + }, + "wsState": { + "type": "text" + } + } + }, + "index-pattern": { + "properties": { + "fieldFormatMap": { + "type": "text" + }, + "fields": { + "type": "text" + }, + "intervalName": { + "type": "keyword" + }, + "notExpandable": { + "type": "boolean" + }, + "sourceFilters": { + "type": "text" + }, + "timeFieldName": { + "type": "keyword" + }, + "title": { + "type": "text" + }, + "type": { + "type": "keyword" + }, + "typeMeta": { + "type": "keyword" + } + } + }, + "infrastructure-ui-source": { + "properties": { + "description": { + "type": "text" + }, + "fields": { + "properties": { + "container": { + "type": "keyword" + }, + "host": { + "type": "keyword" + }, + "pod": { + "type": "keyword" + }, + "tiebreaker": { + "type": "keyword" + }, + "timestamp": { + "type": "keyword" + } + } + }, + "inventoryDefaultView": { + "type": "keyword" + }, + "logAlias": { + "type": "keyword" + }, + "logColumns": { + "properties": { + "fieldColumn": { + "properties": { + "field": { + "type": "keyword" + }, + "id": { + "type": "keyword" + } + } + }, + "messageColumn": { + "properties": { + "id": { + "type": "keyword" + } + } + }, + "timestampColumn": { + "properties": { + "id": { + "type": "keyword" + } + } + } + }, + "type": "nested" + }, + "metricAlias": { + "type": "keyword" + }, + "metricsExplorerDefaultView": { + "type": "keyword" + }, + "name": { + "type": "text" + } + } + }, + "ingest-agent-policies": { + "properties": { + "description": { + "type": "text" + }, + "is_default": { + "type": "boolean" + }, + "monitoring_enabled": { + "index": false, + "type": "keyword" + }, + "name": { + "type": "keyword" + }, + "namespace": { + "type": "keyword" + }, + "package_configs": { + "type": "keyword" + }, + "revision": { + "type": "integer" + }, + "status": { + "type": "keyword" + }, + "updated_at": { + "type": "date" + }, + "updated_by": { + "type": "keyword" + } + } + }, + "ingest-outputs": { + "properties": { + "ca_sha256": { + "index": false, + "type": "keyword" + }, + "config": { + "type": "flattened" + }, + "fleet_enroll_password": { + "type": "binary" + }, + "fleet_enroll_username": { + "type": "binary" + }, + "hosts": { + "type": "keyword" + }, + "is_default": { + "type": "boolean" + }, + "name": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + }, + "ingest-package-policies": { + "properties": { + "config_id": { + "type": "keyword" + }, + "created_at": { + "type": "date" + }, + "created_by": { + "type": "keyword" + }, + "description": { + "type": "text" + }, + "enabled": { + "type": "boolean" + }, + "inputs": { + "enabled": false, + "properties": { + "config": { + "type": "flattened" + }, + "enabled": { + "type": "boolean" + }, + "streams": { + "properties": { + "compiled_stream": { + "type": "flattened" + }, + "config": { + "type": "flattened" + }, + "data_stream": { + "properties": { + "dataset": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + }, + "enabled": { + "type": "boolean" + }, + "id": { + "type": "keyword" + }, + "vars": { + "type": "flattened" + } + }, + "type": "nested" + }, + "type": { + "type": "keyword" + }, + "vars": { + "type": "flattened" + } + }, + "type": "nested" + }, + "name": { + "type": "keyword" + }, + "namespace": { + "type": "keyword" + }, + "output_id": { + "type": "keyword" + }, + "package": { + "properties": { + "name": { + "type": "keyword" + }, + "title": { + "type": "keyword" + }, + "version": { + "type": "keyword" + } + } + }, + "revision": { + "type": "integer" + }, + "updated_at": { + "type": "date" + }, + "updated_by": { + "type": "keyword" + } + } + }, + "ingest_manager_settings": { + "properties": { + "agent_auto_upgrade": { + "type": "keyword" + }, + "has_seen_add_data_notice": { + "index": false, + "type": "boolean" + }, + "kibana_ca_sha256": { + "type": "keyword" + }, + "kibana_url": { + "type": "keyword" + }, + "package_auto_upgrade": { + "type": "keyword" + } + } + }, + "inventory-view": { + "properties": { + "accountId": { + "type": "keyword" + }, + "autoBounds": { + "type": "boolean" + }, + "autoReload": { + "type": "boolean" + }, + "boundsOverride": { + "properties": { + "max": { + "type": "integer" + }, + "min": { + "type": "integer" + } + } + }, + "customMetrics": { + "properties": { + "aggregation": { + "type": "keyword" + }, + "field": { + "type": "keyword" + }, + "id": { + "type": "keyword" + }, + "label": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + }, + "type": "nested" + }, + "customOptions": { + "properties": { + "field": { + "type": "keyword" + }, + "text": { + "type": "keyword" + } + }, + "type": "nested" + }, + "filterQuery": { + "properties": { + "expression": { + "type": "keyword" + }, + "kind": { + "type": "keyword" + } + } + }, + "groupBy": { + "properties": { + "field": { + "type": "keyword" + }, + "label": { + "type": "keyword" + } + }, + "type": "nested" + }, + "legend": { + "properties": { + "palette": { + "type": "keyword" + }, + "reverseColors": { + "type": "boolean" + }, + "steps": { + "type": "long" + } + } + }, + "metric": { + "properties": { + "aggregation": { + "type": "keyword" + }, + "field": { + "type": "keyword" + }, + "id": { + "type": "keyword" + }, + "label": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + }, + "name": { + "type": "keyword" + }, + "nodeType": { + "type": "keyword" + }, + "region": { + "type": "keyword" + }, + "sort": { + "properties": { + "by": { + "type": "keyword" + }, + "direction": { + "type": "keyword" + } + } + }, + "time": { + "type": "long" + }, + "view": { + "type": "keyword" + } + } + }, + "kql-telemetry": { + "properties": { + "optInCount": { + "type": "long" + }, + "optOutCount": { + "type": "long" + } + } + }, + "lens": { + "properties": { + "description": { + "type": "text" + }, + "expression": { + "index": false, + "type": "keyword" + }, + "state": { + "type": "flattened" + }, + "title": { + "type": "text" + }, + "visualizationType": { + "type": "keyword" + } + } + }, + "lens-ui-telemetry": { + "properties": { + "count": { + "type": "integer" + }, + "date": { + "type": "date" + }, + "name": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + } + }, + "map": { + "properties": { + "description": { + "type": "text" + }, + "layerListJSON": { + "type": "text" + }, + "mapStateJSON": { + "type": "text" + }, + "title": { + "type": "text" + }, + "uiStateJSON": { + "type": "text" + }, + "version": { + "type": "integer" + } + } + }, + "maps-telemetry": { + "enabled": false, + "type": "object" + }, + "metrics-explorer-view": { + "properties": { + "chartOptions": { + "properties": { + "stack": { + "type": "boolean" + }, + "type": { + "type": "keyword" + }, + "yAxisMode": { + "type": "keyword" + } + } + }, + "currentTimerange": { + "properties": { + "from": { + "type": "keyword" + }, + "interval": { + "type": "keyword" + }, + "to": { + "type": "keyword" + } + } + }, + "name": { + "type": "keyword" + }, + "options": { + "properties": { + "aggregation": { + "type": "keyword" + }, + "filterQuery": { + "type": "keyword" + }, + "forceInterval": { + "type": "boolean" + }, + "groupBy": { + "type": "keyword" + }, + "limit": { + "type": "integer" + }, + "metrics": { + "properties": { + "aggregation": { + "type": "keyword" + }, + "color": { + "type": "keyword" + }, + "field": { + "type": "keyword" + }, + "label": { + "type": "keyword" + } + }, + "type": "nested" + }, + "source": { + "type": "keyword" + } + } + } + } + }, + "migrationVersion": { + "dynamic": "true", + "properties": { + "config": { + "fields": { + "keyword": { + "ignore_above": 256, + "type": "keyword" + } + }, + "type": "text" + }, + "space": { + "fields": { + "keyword": { + "ignore_above": 256, + "type": "keyword" + } + }, + "type": "text" + } + } + }, + "ml-telemetry": { + "properties": { + "file_data_visualizer": { + "properties": { + "index_creation_count": { + "type": "long" + } + } + } + } + }, + "namespace": { + "type": "keyword" + }, + "namespaces": { + "type": "keyword" + }, + "query": { + "properties": { + "description": { + "type": "text" + }, + "filters": { + "enabled": false, + "type": "object" + }, + "query": { + "properties": { + "language": { + "type": "keyword" + }, + "query": { + "index": false, + "type": "keyword" + } + } + }, + "timefilter": { + "enabled": false, + "type": "object" + }, + "title": { + "type": "text" + } + } + }, + "references": { + "properties": { + "id": { + "type": "keyword" + }, + "name": { + "type": "keyword" + }, + "type": { + "type": "keyword" + } + }, + "type": "nested" + }, + "sample-data-telemetry": { + "properties": { + "installCount": { + "type": "long" + }, + "unInstallCount": { + "type": "long" + } + } + }, + "search": { + "properties": { + "columns": { + "index": false, + "type": "keyword" + }, + "description": { + "type": "text" + }, + "hits": { + "index": false, + "type": "integer" + }, + "kibanaSavedObjectMeta": { + "properties": { + "searchSourceJSON": { + "index": false, + "type": "text" + } + } + }, + "sort": { + "index": false, + "type": "keyword" + }, + "title": { + "type": "text" + }, + "version": { + "type": "integer" + } + } + }, + "search-telemetry": { + "dynamic": "false", + "type": "object" + }, + "siem-detection-engine-rule-actions": { + "properties": { + "actions": { + "properties": { + "action_type_id": { + "type": "keyword" + }, + "group": { + "type": "keyword" + }, + "id": { + "type": "keyword" + }, + "params": { + "enabled": false, + "type": "object" + } + } + }, + "alertThrottle": { + "type": "keyword" + }, + "ruleAlertId": { + "type": "keyword" + }, + "ruleThrottle": { + "type": "keyword" + } + } + }, + "siem-detection-engine-rule-status": { + "properties": { + "alertId": { + "type": "keyword" + }, + "bulkCreateTimeDurations": { + "type": "float" + }, + "gap": { + "type": "text" + }, + "lastFailureAt": { + "type": "date" + }, + "lastFailureMessage": { + "type": "text" + }, + "lastLookBackDate": { + "type": "date" + }, + "lastSuccessAt": { + "type": "date" + }, + "lastSuccessMessage": { + "type": "text" + }, + "searchAfterTimeDurations": { + "type": "float" + }, + "status": { + "type": "keyword" + }, + "statusDate": { + "type": "date" + } + } + }, + "siem-ui-timeline": { + "properties": { + "columns": { + "properties": { + "aggregatable": { + "type": "boolean" + }, + "category": { + "type": "keyword" + }, + "columnHeaderType": { + "type": "keyword" + }, + "description": { + "type": "text" + }, + "example": { + "type": "text" + }, + "id": { + "type": "keyword" + }, + "indexes": { + "type": "keyword" + }, + "name": { + "type": "text" + }, + "placeholder": { + "type": "text" + }, + "searchable": { + "type": "boolean" + }, + "type": { + "type": "keyword" + } + } + }, + "created": { + "type": "date" + }, + "createdBy": { + "type": "text" + }, + "dataProviders": { + "properties": { + "and": { + "properties": { + "enabled": { + "type": "boolean" + }, + "excluded": { + "type": "boolean" + }, + "id": { + "type": "keyword" + }, + "kqlQuery": { + "type": "text" + }, + "name": { + "type": "text" + }, + "queryMatch": { + "properties": { + "displayField": { + "type": "text" + }, + "displayValue": { + "type": "text" + }, + "field": { + "type": "text" + }, + "operator": { + "type": "text" + }, + "value": { + "type": "text" + } + } + }, + "type": { + "type": "text" + } + } + }, + "enabled": { + "type": "boolean" + }, + "excluded": { + "type": "boolean" + }, + "id": { + "type": "keyword" + }, + "kqlQuery": { + "type": "text" + }, + "name": { + "type": "text" + }, + "queryMatch": { + "properties": { + "displayField": { + "type": "text" + }, + "displayValue": { + "type": "text" + }, + "field": { + "type": "text" + }, + "operator": { + "type": "text" + }, + "value": { + "type": "text" + } + } + }, + "type": { + "type": "text" + } + } + }, + "dateRange": { + "properties": { + "end": { + "type": "date" + }, + "start": { + "type": "date" + } + } + }, + "description": { + "type": "text" + }, + "eventType": { + "type": "keyword" + }, + "excludedRowRendererIds": { + "type": "text" + }, + "favorite": { + "properties": { + "favoriteDate": { + "type": "date" + }, + "fullName": { + "type": "text" + }, + "keySearch": { + "type": "text" + }, + "userName": { + "type": "text" + } + } + }, + "filters": { + "properties": { + "exists": { + "type": "text" + }, + "match_all": { + "type": "text" + }, + "meta": { + "properties": { + "alias": { + "type": "text" + }, + "controlledBy": { + "type": "text" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "text" + }, + "formattedValue": { + "type": "text" + }, + "index": { + "type": "keyword" + }, + "key": { + "type": "keyword" + }, + "negate": { + "type": "boolean" + }, + "params": { + "type": "text" + }, + "type": { + "type": "keyword" + }, + "value": { + "type": "text" + } + } + }, + "missing": { + "type": "text" + }, + "query": { + "type": "text" + }, + "range": { + "type": "text" + }, + "script": { + "type": "text" + } + } + }, + "kqlMode": { + "type": "keyword" + }, + "kqlQuery": { + "properties": { + "filterQuery": { + "properties": { + "kuery": { + "properties": { + "expression": { + "type": "text" + }, + "kind": { + "type": "keyword" + } + } + }, + "serializedQuery": { + "type": "text" + } + } + } + } + }, + "savedQueryId": { + "type": "keyword" + }, + "sort": { + "properties": { + "columnId": { + "type": "keyword" + }, + "sortDirection": { + "type": "keyword" + } + } + }, + "status": { + "type": "keyword" + }, + "templateTimelineId": { + "type": "text" + }, + "templateTimelineVersion": { + "type": "integer" + }, + "timelineType": { + "type": "keyword" + }, + "title": { + "type": "text" + }, + "updated": { + "type": "date" + }, + "updatedBy": { + "type": "text" + } + } + }, + "siem-ui-timeline-note": { + "properties": { + "created": { + "type": "date" + }, + "createdBy": { + "type": "text" + }, + "eventId": { + "type": "keyword" + }, + "note": { + "type": "text" + }, + "timelineId": { + "type": "keyword" + }, + "updated": { + "type": "date" + }, + "updatedBy": { + "type": "text" + } + } + }, + "siem-ui-timeline-pinned-event": { + "properties": { + "created": { + "type": "date" + }, + "createdBy": { + "type": "text" + }, + "eventId": { + "type": "keyword" + }, + "timelineId": { + "type": "keyword" + }, + "updated": { + "type": "date" + }, + "updatedBy": { + "type": "text" + } + } + }, + "space": { + "properties": { + "_reserved": { + "type": "boolean" + }, + "color": { + "type": "keyword" + }, + "description": { + "type": "text" + }, + "disabledFeatures": { + "type": "keyword" + }, + "imageUrl": { + "index": false, + "type": "text" + }, + "initials": { + "type": "keyword" + }, + "name": { + "fields": { + "keyword": { + "ignore_above": 2048, + "type": "keyword" + } + }, + "type": "text" + } + } + }, + "telemetry": { + "properties": { + "allowChangingOptInStatus": { + "type": "boolean" + }, + "enabled": { + "type": "boolean" + }, + "lastReported": { + "type": "date" + }, + "lastVersionChecked": { + "type": "keyword" + }, + "reportFailureCount": { + "type": "integer" + }, + "reportFailureVersion": { + "type": "keyword" + }, + "sendUsageFrom": { + "type": "keyword" + }, + "userHasSeenNotice": { + "type": "boolean" + } + } + }, + "timelion-sheet": { + "properties": { + "description": { + "type": "text" + }, + "hits": { + "type": "integer" + }, + "kibanaSavedObjectMeta": { + "properties": { + "searchSourceJSON": { + "type": "text" + } + } + }, + "timelion_chart_height": { + "type": "integer" + }, + "timelion_columns": { + "type": "integer" + }, + "timelion_interval": { + "type": "keyword" + }, + "timelion_other_interval": { + "type": "keyword" + }, + "timelion_rows": { + "type": "integer" + }, + "timelion_sheet": { + "type": "text" + }, + "title": { + "type": "text" + }, + "version": { + "type": "integer" + } + } + }, + "tsvb-validation-telemetry": { + "properties": { + "failedRequests": { + "type": "long" + } + } + }, + "type": { + "type": "keyword" + }, + "ui-metric": { + "properties": { + "count": { + "type": "integer" + } + } + }, + "updated_at": { + "type": "date" + }, + "upgrade-assistant-reindex-operation": { + "properties": { + "errorMessage": { + "fields": { + "keyword": { + "ignore_above": 256, + "type": "keyword" + } + }, + "type": "text" + }, + "indexName": { + "type": "keyword" + }, + "lastCompletedStep": { + "type": "long" + }, + "locked": { + "type": "date" + }, + "newIndexName": { + "fields": { + "keyword": { + "ignore_above": 256, + "type": "keyword" + } + }, + "type": "text" + }, + "reindexOptions": { + "properties": { + "openAndClose": { + "type": "boolean" + }, + "queueSettings": { + "properties": { + "queuedAt": { + "type": "long" + }, + "startedAt": { + "type": "long" + } + } + } + } + }, + "reindexTaskId": { + "fields": { + "keyword": { + "ignore_above": 256, + "type": "keyword" + } + }, + "type": "text" + }, + "reindexTaskPercComplete": { + "type": "float" + }, + "runningReindexCount": { + "type": "integer" + }, + "status": { + "type": "integer" + } + } + }, + "upgrade-assistant-telemetry": { + "properties": { + "features": { + "properties": { + "deprecation_logging": { + "properties": { + "enabled": { + "null_value": true, + "type": "boolean" + } + } + } + } + }, + "ui_open": { + "properties": { + "cluster": { + "null_value": 0, + "type": "long" + }, + "indices": { + "null_value": 0, + "type": "long" + }, + "overview": { + "null_value": 0, + "type": "long" + } + } + }, + "ui_reindex": { + "properties": { + "close": { + "null_value": 0, + "type": "long" + }, + "open": { + "null_value": 0, + "type": "long" + }, + "start": { + "null_value": 0, + "type": "long" + }, + "stop": { + "null_value": 0, + "type": "long" + } + } + } + } + }, + "uptime-dynamic-settings": { + "properties": { + "certAgeThreshold": { + "type": "long" + }, + "certExpirationThreshold": { + "type": "long" + }, + "heartbeatIndices": { + "type": "keyword" + } + } + }, + "url": { + "properties": { + "accessCount": { + "type": "long" + }, + "accessDate": { + "type": "date" + }, + "createDate": { + "type": "date" + }, + "url": { + "fields": { + "keyword": { + "ignore_above": 2048, + "type": "keyword" + } + }, + "type": "text" + } + } + }, + "visualization": { + "properties": { + "description": { + "type": "text" + }, + "kibanaSavedObjectMeta": { + "properties": { + "searchSourceJSON": { + "type": "text" + } + } + }, + "savedSearchRefName": { + "type": "keyword" + }, + "title": { + "type": "text" + }, + "uiStateJSON": { + "type": "text" + }, + "version": { + "type": "integer" + }, + "visState": { + "type": "text" + } + } + }, + "workplace_search_telemetry": { + "dynamic": "false", + "type": "object" + } + } + }, + "settings": { + "index": { + "auto_expand_replicas": "0-1", + "number_of_replicas": "0", + "number_of_shards": "1" + } + } + } +} \ No newline at end of file diff --git a/x-pack/test/functional/es_archives/fleet/agents/data.json b/x-pack/test/functional/es_archives/fleet/agents/data.json index e05a2fe010e89..f204e44b31bc9 100644 --- a/x-pack/test/functional/es_archives/fleet/agents/data.json +++ b/x-pack/test/functional/es_archives/fleet/agents/data.json @@ -196,7 +196,7 @@ "type": "fleet-agent-actions", "fleet-agent-actions": { "agent_id": "agent1", - "type": "CONFIG_CHANGE", + "type": "POLICY_CHANGE", "created_at": "2020-03-15T03:47:15.129Z", "sent_at": "2020-03-04T15:03:07+0000" } @@ -213,7 +213,7 @@ "type": "fleet-agent-actions", "fleet-agent-actions": { "agent_id": "agent1", - "type": "CONFIG_CHANGE", + "type": "POLICY_CHANGE", "created_at": "2020-03-15T03:47:15.129Z", "sent_at": "2020-03-04T15:03:07+0000" } diff --git a/x-pack/test/functional/services/ml/data_frame_analytics_creation.ts b/x-pack/test/functional/services/ml/data_frame_analytics_creation.ts index e01e065867ac7..71d68b16c4037 100644 --- a/x-pack/test/functional/services/ml/data_frame_analytics_creation.ts +++ b/x-pack/test/functional/services/ml/data_frame_analytics_creation.ts @@ -29,23 +29,16 @@ export function MachineLearningDataFrameAnalyticsCreationProvider( await testSubjects.existOrFail('mlAnalyticsCreateJobWizardJobTypeSelect'); }, - async assertJobTypeSelection(expectedSelection: string) { + async assertJobTypeSelection(jobTypeAttribute: string) { await retry.tryForTime(5000, async () => { - const actualSelection = await testSubjects.getAttribute( - 'mlAnalyticsCreateJobWizardJobTypeSelect', - 'value' - ); - expect(actualSelection).to.eql( - expectedSelection, - `Job type selection should be '${expectedSelection}' (got '${actualSelection}')` - ); + await testSubjects.existOrFail(`${jobTypeAttribute} selectedJobType`); }); }, async selectJobType(jobType: string) { - await testSubjects.click('mlAnalyticsCreateJobWizardJobTypeSelect'); - await testSubjects.click(`mlAnalyticsCreation-${jobType}-option`); - await this.assertJobTypeSelection(jobType); + const jobTypeAttribute = `mlAnalyticsCreation-${jobType}-option`; + await testSubjects.click(jobTypeAttribute); + await this.assertJobTypeSelection(jobTypeAttribute); }, async assertAdvancedEditorSwitchExists() { @@ -505,7 +498,8 @@ export function MachineLearningDataFrameAnalyticsCreationProvider( async assertInitialCloneJobConfigStep(job: DataFrameAnalyticsConfig) { const jobType = Object.keys(job.analysis)[0]; - await this.assertJobTypeSelection(jobType); + const jobTypeAttribute = `mlAnalyticsCreation-${jobType}-option`; + await this.assertJobTypeSelection(jobTypeAttribute); if (isClassificationAnalysis(job.analysis) || isRegressionAnalysis(job.analysis)) { await this.assertDependentVariableSelection([job.analysis[jobType].dependent_variable]); await this.assertTrainingPercentValue(String(job.analysis[jobType].training_percent)); diff --git a/x-pack/test/functional/services/uptime/ml_anomaly.ts b/x-pack/test/functional/services/uptime/ml_anomaly.ts index ac9f6ab2b3d14..cdeec2129e459 100644 --- a/x-pack/test/functional/services/uptime/ml_anomaly.ts +++ b/x-pack/test/functional/services/uptime/ml_anomaly.ts @@ -66,8 +66,8 @@ export function UptimeMLAnomalyProvider({ getService }: FtrProviderContext) { return await testSubjects.click('uptimeEnableAnomalyAlertBtn'); }, - async disableAnomalyAlertIsVisible() { - return await testSubjects.exists('uptimeDisableAnomalyAlertBtn'); + async manageAnomalyAlertIsVisible() { + return await testSubjects.exists('uptimeManageAnomalyAlertBtn'); }, async changeAlertThreshold(level: string) { diff --git a/x-pack/test/functional_with_es_ssl/apps/uptime/anomaly_alert.ts b/x-pack/test/functional_with_es_ssl/apps/uptime/anomaly_alert.ts index 03343bff642c3..55ef7e9784ff4 100644 --- a/x-pack/test/functional_with_es_ssl/apps/uptime/anomaly_alert.ts +++ b/x-pack/test/functional_with_es_ssl/apps/uptime/anomaly_alert.ts @@ -111,7 +111,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { it('change button to disable anomaly alert', async () => { await uptime.ml.openMLManageMenu(); - expect(uptime.ml.disableAnomalyAlertIsVisible()).to.eql(true); + expect(uptime.ml.manageAnomalyAlertIsVisible()).to.eql(true); }); it('can delete job successfully', async () => { diff --git a/x-pack/test/ingest_manager_api_integration/apis/epm/install_remove_assets.ts b/x-pack/test/ingest_manager_api_integration/apis/epm/install_remove_assets.ts index 492af399d5e30..a067501766873 100644 --- a/x-pack/test/ingest_manager_api_integration/apis/epm/install_remove_assets.ts +++ b/x-pack/test/ingest_manager_api_integration/apis/epm/install_remove_assets.ts @@ -88,7 +88,7 @@ export default function (providerContext: FtrProviderContext) { it('should have installed the transform components', async function () { const res = await es.transport.request({ method: 'GET', - path: `/_transform/${logsTemplateName}-default-${pkgVersion}`, + path: `/_transform/${pkgName}-test-default-${pkgVersion}`, }); expect(res.statusCode).equal(200); }); @@ -253,7 +253,7 @@ export default function (providerContext: FtrProviderContext) { const res = await es.transport.request( { method: 'GET', - path: `/_transform/${logsTemplateName}-default-${pkgVersion}`, + path: `/_transform/${pkgName}-test-default-${pkgVersion}`, }, { ignore: [404], diff --git a/x-pack/test/ingest_manager_api_integration/apis/fixtures/test_packages/all_assets/0.1.0/dataset/test_logs/elasticsearch/transform/default.json b/x-pack/test/ingest_manager_api_integration/apis/fixtures/test_packages/all_assets/0.1.0/elasticsearch/transform/test/default.json similarity index 100% rename from x-pack/test/ingest_manager_api_integration/apis/fixtures/test_packages/all_assets/0.1.0/dataset/test_logs/elasticsearch/transform/default.json rename to x-pack/test/ingest_manager_api_integration/apis/fixtures/test_packages/all_assets/0.1.0/elasticsearch/transform/test/default.json diff --git a/x-pack/test/ingest_manager_api_integration/apis/fleet/agents/actions.ts b/x-pack/test/ingest_manager_api_integration/apis/fleet/agents/actions.ts index 68e02933f5650..f5a647593ef52 100644 --- a/x-pack/test/ingest_manager_api_integration/apis/fleet/agents/actions.ts +++ b/x-pack/test/ingest_manager_api_integration/apis/fleet/agents/actions.ts @@ -26,13 +26,13 @@ export default function (providerContext: FtrProviderContext) { .set('kbn-xsrf', 'xx') .send({ action: { - type: 'CONFIG_CHANGE', + type: 'POLICY_CHANGE', data: { data: 'action_data' }, }, }) .expect(200); - expect(apiResponse.item.type).to.eql('CONFIG_CHANGE'); + expect(apiResponse.item.type).to.eql('POLICY_CHANGE'); expect(apiResponse.item.data).to.eql({ data: 'action_data' }); }); @@ -58,7 +58,7 @@ export default function (providerContext: FtrProviderContext) { .set('kbn-xsrf', 'xx') .send({ action: { - type: 'CONFIG_CHANGE', + type: 'POLICY_CHANGE', data: { data: 'action_data' }, sent_at: '2020-03-18T19:45:02.620Z', }, diff --git a/x-pack/test/ingest_manager_api_integration/apis/fleet/agents/complete_flow.ts b/x-pack/test/ingest_manager_api_integration/apis/fleet/agents/complete_flow.ts index 1d5b682d71c7a..a59b3ff0890f7 100644 --- a/x-pack/test/ingest_manager_api_integration/apis/fleet/agents/complete_flow.ts +++ b/x-pack/test/ingest_manager_api_integration/apis/fleet/agents/complete_flow.ts @@ -76,9 +76,9 @@ export default function (providerContext: FtrProviderContext) { .expect(200); expect(checkinApiResponse.actions).length(1); - expect(checkinApiResponse.actions[0].type).be('CONFIG_CHANGE'); + expect(checkinApiResponse.actions[0].type).be('POLICY_CHANGE'); const policyChangeAction = checkinApiResponse.actions[0]; - const defaultOutputApiKey = policyChangeAction.data.config.outputs.default.api_key; + const defaultOutputApiKey = policyChangeAction.data.policy.outputs.default.api_key; // Ack actions await supertestWithoutAuth diff --git a/x-pack/test/ingest_manager_api_integration/apis/package_policy/create.ts b/x-pack/test/ingest_manager_api_integration/apis/package_policy/create.ts index 113fbeca494d8..e5ffe62663a95 100644 --- a/x-pack/test/ingest_manager_api_integration/apis/package_policy/create.ts +++ b/x-pack/test/ingest_manager_api_integration/apis/package_policy/create.ts @@ -101,6 +101,25 @@ export default function ({ getService }: FtrProviderContext) { }, }) .expect(400); + await supertest + .post(`/api/ingest_manager/package_policies`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: 'filetest-1', + description: '', + namespace: + 'testlength😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀', + policy_id: agentPolicyId, + enabled: true, + output_id: '', + inputs: [], + package: { + name: 'filetest', + title: 'For File Tests', + version: '0.1.0', + }, + }) + .expect(400); } else { warnAndSkipTest(this, log); } diff --git a/x-pack/test/plugin_api_perf/plugins/task_manager_performance/package.json b/x-pack/test/plugin_api_perf/plugins/task_manager_performance/package.json index 542c8358114f4..1eb524e71da19 100644 --- a/x-pack/test/plugin_api_perf/plugins/task_manager_performance/package.json +++ b/x-pack/test/plugin_api_perf/plugins/task_manager_performance/package.json @@ -12,7 +12,7 @@ }, "dependencies": { "uuid": "3.3.2", - "stats-lite": "2.2.0", + "stats-lite": "^2.2.0", "pretty-ms": "5.0.0" }, "devDependencies": { diff --git a/x-pack/test/reporting_api_integration/reporting_and_security/spaces.ts b/x-pack/test/reporting_api_integration/reporting_and_security/spaces.ts index b216f137e27b5..80ba3215ab96f 100644 --- a/x-pack/test/reporting_api_integration/reporting_and_security/spaces.ts +++ b/x-pack/test/reporting_api_integration/reporting_and_security/spaces.ts @@ -62,7 +62,7 @@ export default function ({ getService }: FtrProviderContext) { }); it('should use formats from non-default spaces', async () => { - setSpaceConfig('non_default_space', { + await setSpaceConfig('non_default_space', { 'csv:separator': ';', 'csv:quoteValues': false, 'dateFormat:tz': 'US/Alaska', @@ -82,7 +82,10 @@ export default function ({ getService }: FtrProviderContext) { it(`should use browserTimezone in jobParams for date formatting`, async () => { const tzParam = 'America/Phoenix'; const tzSettings = 'Browser'; - setSpaceConfig('non_default_space', { 'csv:separator': ';', 'dateFormat:tz': tzSettings }); + await setSpaceConfig('non_default_space', { + 'csv:separator': ';', + 'dateFormat:tz': tzSettings, + }); const path = await reportingAPI.postJobJSON(`/api/reporting/generate/csv`, { jobParams: `(browserTimezone:${tzParam},conflictedTypesFields:!(),fields:!(order_date,category,customer_full_name,taxful_total_price,currency),indexPatternId:aac3e500-f2c7-11ea-8250-fb138aa491e7,metaFields:!(_source,_id,_type,_index,_score),objectType:search,searchRequest:(body:(_source:(includes:!(order_date,category,customer_full_name,taxful_total_price,currency)),docvalue_fields:!((field:order_date,format:date_time)),query:(bool:(filter:!((match_all:()),(range:(order_date:(format:strict_date_optional_time,gte:'2019-05-30T05:09:59.743Z',lte:'2019-07-26T08:47:09.682Z')))),must:!(),must_not:!(),should:!())),script_fields:(),sort:!((order_date:(order:desc,unmapped_type:boolean))),stored_fields:!(order_date,category,customer_full_name,taxful_total_price,currency),version:!t),index:'ec*'),title:'EC SEARCH from DEFAULT')`, }); diff --git a/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_list.ts b/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_list.ts index c9d2b7a21d0da..569378df5930a 100644 --- a/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_list.ts +++ b/x-pack/test/security_solution_endpoint/apps/endpoint/endpoint_list.ts @@ -8,7 +8,6 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../ftr_provider_context'; import { - deleteMetadataCurrentStream, deleteMetadataStream, deleteAllDocsFromMetadataCurrentIndex, } from '../../../security_solution_endpoint_api_int/apis/data_stream_helper'; @@ -73,13 +72,11 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { describe('when initially navigating to page', () => { before(async () => { await deleteMetadataStream(getService); - await deleteMetadataCurrentStream(getService); await deleteAllDocsFromMetadataCurrentIndex(getService); await pageObjects.endpoint.navigateToEndpointList(); }); after(async () => { await deleteMetadataStream(getService); - await deleteMetadataCurrentStream(getService); await deleteAllDocsFromMetadataCurrentIndex(getService); }); @@ -88,8 +85,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); it('finds data after load and polling', async () => { - await esArchiver.load('endpoint/metadata/destination_index', { useCreate: true }); - await pageObjects.endpoint.waitForTableToHaveData('endpointListTable', 1100); + await esArchiver.load('endpoint/metadata/api_feature', { useCreate: true }); + await pageObjects.endpoint.waitForTableToHaveData('endpointListTable', 100000); const tableData = await pageObjects.endpointPageUtils.tableData('endpointListTable'); expect(tableData).to.eql(expectedData); }); @@ -97,12 +94,12 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { describe('when there is data,', () => { before(async () => { - await esArchiver.load('endpoint/metadata/destination_index', { useCreate: true }); + await esArchiver.load('endpoint/metadata/api_feature', { useCreate: true }); + await sleep(100000); await pageObjects.endpoint.navigateToEndpointList(); }); after(async () => { await deleteMetadataStream(getService); - await deleteMetadataCurrentStream(getService); await deleteAllDocsFromMetadataCurrentIndex(getService); }); @@ -215,12 +212,11 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { describe('displays the correct table data for the kql queries', () => { before(async () => { - await esArchiver.load('endpoint/metadata/destination_index', { useCreate: true }); + await esArchiver.load('endpoint/metadata/api_feature', { useCreate: true }); await pageObjects.endpoint.navigateToEndpointList(); }); after(async () => { await deleteMetadataStream(getService); - await deleteMetadataCurrentStream(getService); await deleteAllDocsFromMetadataCurrentIndex(getService); }); it('for the kql query: na, table shows an empty list', async () => { diff --git a/x-pack/test/security_solution_endpoint/apps/endpoint/resolver.ts b/x-pack/test/security_solution_endpoint/apps/endpoint/resolver.ts index 3e9726bf40073..13b76f7738321 100644 --- a/x-pack/test/security_solution_endpoint/apps/endpoint/resolver.ts +++ b/x-pack/test/security_solution_endpoint/apps/endpoint/resolver.ts @@ -12,9 +12,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const esArchiver = getService('esArchiver'); const queryBar = getService('queryBar'); + const browser = getService('browser'); - // FLAKY: https://github.com/elastic/kibana/issues/78375 - describe.skip('Endpoint Event Resolver', function () { + describe('Endpoint Event Resolver', function () { before(async () => { await esArchiver.load('endpoint/resolver_tree', { useCreate: true }); await pageObjects.hosts.navigateToSecurityHostsPage(); @@ -23,9 +23,11 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await pageObjects.timePicker.setAbsoluteRange(fromTime, toTime); await queryBar.setQuery('event.dataset : endpoint.events.file'); await queryBar.submitQuery(); - await (await testSubjects.find('draggable-content-host.name')).click(); + await browser.refresh(); + await browser.setWindowSize(1800, 1200); + await testSubjects.click('draggable-content-host.name'); await testSubjects.existOrFail('header-page-title'); - await (await testSubjects.find('navigation-events')).click(); + await testSubjects.click('navigation-events'); await testSubjects.existOrFail('events-viewer-panel'); await testSubjects.exists('investigate-in-resolver-button', { timeout: 4000 }); await (await testSubjects.findAll('investigate-in-resolver-button'))[0].click(); diff --git a/x-pack/test/security_solution_endpoint_api_int/apis/data_stream_helper.ts b/x-pack/test/security_solution_endpoint_api_int/apis/data_stream_helper.ts index f1c05b2fc8f20..8e5f8c71068a8 100644 --- a/x-pack/test/security_solution_endpoint_api_int/apis/data_stream_helper.ts +++ b/x-pack/test/security_solution_endpoint_api_int/apis/data_stream_helper.ts @@ -51,10 +51,6 @@ export async function deleteMetadataStream(getService: (serviceName: 'es') => Cl await deleteDataStream(getService, metadataIndexPattern); } -export async function deleteMetadataCurrentStream(getService: (serviceName: 'es') => Client) { - await deleteDataStream(getService, metadataCurrentIndexPattern); -} - export async function deleteAllDocsFromMetadataIndex(getService: (serviceName: 'es') => Client) { await deleteAllDocsFromIndex(getService, metadataIndexPattern); } diff --git a/x-pack/test/security_solution_endpoint_api_int/apis/metadata.ts b/x-pack/test/security_solution_endpoint_api_int/apis/metadata.ts index 2ab12e1ff3aae..ad0cbd765f1fc 100644 --- a/x-pack/test/security_solution_endpoint_api_int/apis/metadata.ts +++ b/x-pack/test/security_solution_endpoint_api_int/apis/metadata.ts @@ -7,7 +7,6 @@ import expect from '@kbn/expect/expect.js'; import { FtrProviderContext } from '../ftr_provider_context'; import { deleteAllDocsFromMetadataCurrentIndex, - deleteMetadataCurrentStream, deleteAllDocsFromMetadataIndex, deleteMetadataStream, } from './data_stream_helper'; @@ -29,7 +28,6 @@ export default function ({ getService }: FtrProviderContext) { it('metadata api should return empty result when index is empty', async () => { await deleteMetadataStream(getService); await deleteAllDocsFromMetadataIndex(getService); - await deleteMetadataCurrentStream(getService); await deleteAllDocsFromMetadataCurrentIndex(getService); const { body } = await supertest .post(`${METADATA_REQUEST_ROUTE}`) @@ -54,7 +52,6 @@ export default function ({ getService }: FtrProviderContext) { after(async () => { await deleteMetadataStream(getService); await deleteAllDocsFromMetadataIndex(getService); - await deleteMetadataCurrentStream(getService); await deleteAllDocsFromMetadataCurrentIndex(getService); }); it('metadata api should return one entry for each host with default paging', async () => { diff --git a/x-pack/test/tsconfig.json b/x-pack/test/tsconfig.json index 3736d957a55a6..628f2edefb079 100644 --- a/x-pack/test/tsconfig.json +++ b/x-pack/test/tsconfig.json @@ -17,6 +17,9 @@ "../typings/jest.d.ts" ], "references": [ - { "path": "../../src/core/tsconfig.json" } + { "path": "../../src/core/tsconfig.json" }, + { "path": "../../src/plugins/kibana_utils/tsconfig.json" }, + { "path": "../../src/plugins/kibana_react/tsconfig.json" }, + { "path": "../plugins/licensing/tsconfig.json" } ] } diff --git a/x-pack/tsconfig.json b/x-pack/tsconfig.json index 7978a89231566..d4722aba4882c 100644 --- a/x-pack/tsconfig.json +++ b/x-pack/tsconfig.json @@ -11,7 +11,8 @@ "test/**/*", "plugins/security_solution/cypress/**/*", "plugins/apm/e2e/cypress/**/*", - "plugins/apm/scripts/**/*" + "plugins/apm/scripts/**/*", + "plugins/licensing/**/*" ], "compilerOptions": { "outDir": ".", @@ -24,5 +25,10 @@ // overhead is too significant "incremental": false }, - "references": [{ "path": "../src/core/tsconfig.json" }] + "references": [ + { "path": "../src/core/tsconfig.json" }, + { "path": "../src/plugins/kibana_utils/tsconfig.json" }, + { "path": "../src/plugins/kibana_react/tsconfig.json" }, + { "path": "./plugins/licensing/tsconfig.json" } + ] } diff --git a/x-pack/tsconfig.refs.json b/x-pack/tsconfig.refs.json new file mode 100644 index 0000000000000..0b4c46b893aa8 --- /dev/null +++ b/x-pack/tsconfig.refs.json @@ -0,0 +1,6 @@ +{ + "include": [], + "references": [ + { "path": "./plugins/licensing/tsconfig.json" } + ] +} diff --git a/x-pack/typings/index.d.ts b/x-pack/typings/index.d.ts index 73efee0dab2eb..50c57c9e776b9 100644 --- a/x-pack/typings/index.d.ts +++ b/x-pack/typings/index.d.ts @@ -42,3 +42,10 @@ declare module '*.json' { // eslint-disable-next-line import/no-default-export export default json; } + +// Storybook references this module. It's @ts-ignored in the codebase but when +// built into its dist it strips that out. Add it here to avoid a type checking +// error. +// +// See https://github.com/storybookjs/storybook/issues/11684 +declare module 'react-syntax-highlighter/dist/cjs/create-element'; diff --git a/yarn.lock b/yarn.lock index 35f3f7797655e..c84e43942e3cd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18,14 +18,14 @@ optionalDependencies: chokidar "^2.1.8" -"@babel/code-frame@7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== +"@babel/code-frame@7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== dependencies: - "@babel/highlight" "^7.0.0" + "@babel/highlight" "^7.8.3" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.5.5": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== @@ -41,7 +41,29 @@ invariant "^2.2.4" semver "^5.5.0" -"@babel/core@^7.0.1", "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.4.3", "@babel/core@^7.7.5": +"@babel/core@7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.5.tgz#1f15e2cca8ad9a1d78a38ddba612f5e7cdbbd330" + integrity sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.10.5" + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helpers" "^7.10.4" + "@babel/parser" "^7.10.5" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.5" + "@babel/types" "^7.10.5" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.0.1", "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.7.5", "@babel/core@^7.9.0": version "7.11.1" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.1.tgz#2c55b604e73a40dc21b0e52650b11c65cf276643" integrity sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ== @@ -63,7 +85,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.0.0", "@babel/generator@^7.11.0": +"@babel/generator@^7.10.5", "@babel/generator@^7.11.0", "@babel/generator@^7.9.6": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.0.tgz#4b90c78d8c12825024568cbe83ee6c9af193585c" integrity sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ== @@ -210,7 +232,7 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@7.10.4", "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== @@ -289,7 +311,7 @@ "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/highlight@^7.0.0", "@babel/highlight@^7.10.4": +"@babel/highlight@^7.10.4", "@babel/highlight@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== @@ -298,7 +320,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.0", "@babel/parser@^7.11.1", "@babel/parser@^7.11.2", "@babel/parser@^7.2.0", "@babel/parser@^7.7.5": +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.10.5", "@babel/parser@^7.11.0", "@babel/parser@^7.11.1", "@babel/parser@^7.11.2", "@babel/parser@^7.2.0", "@babel/parser@^7.7.5", "@babel/parser@^7.9.6": version "7.11.3" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.3.tgz#9e1eae46738bcd08e23e867bab43e7b95299a8f9" integrity sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA== @@ -312,7 +334,7 @@ "@babel/helper-remap-async-to-generator" "^7.10.4" "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/plugin-proposal-class-properties@^7.10.4", "@babel/plugin-proposal-class-properties@^7.7.0": +"@babel/plugin-proposal-class-properties@^7.10.4", "@babel/plugin-proposal-class-properties@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== @@ -320,6 +342,15 @@ "@babel/helper-create-class-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-proposal-decorators@^7.8.3": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.5.tgz#42898bba478bc4b1ae242a703a953a7ad350ffb4" + integrity sha512-Sc5TAQSZuLzgY0664mMDn24Vw2P8g/VhyLyGPaWiHahhgLqeZvcGeyBZOrJW0oSKIK2mvQ22a1ENXBIQLhrEiQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-decorators" "^7.10.4" + "@babel/plugin-proposal-dynamic-import@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" @@ -328,6 +359,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-dynamic-import" "^7.8.0" +"@babel/plugin-proposal-export-default-from@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.10.4.tgz#08f66eef0067cbf6a7bc036977dcdccecaf0c6c5" + integrity sha512-G1l00VvDZ7Yk2yRlC5D8Ybvu3gmeHS3rCHoUYdjrqGYUtdeOBoRypnvDZ5KQqxyaiiGHWnVDeSEzA5F9ozItig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-default-from" "^7.10.4" + "@babel/plugin-proposal-export-namespace-from@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54" @@ -352,7 +391,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== @@ -368,7 +407,16 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.11.0", "@babel/plugin-proposal-object-rest-spread@^7.6.2": +"@babel/plugin-proposal-object-rest-spread@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz#50129ac216b9a6a55b3853fdd923e74bf553a4c0" + integrity sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.11.0", "@babel/plugin-proposal-object-rest-spread@^7.9.6": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== @@ -385,7 +433,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.11.0": +"@babel/plugin-proposal-optional-chaining@^7.10.1", "@babel/plugin-proposal-optional-chaining@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076" integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA== @@ -394,7 +442,7 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-private-methods@^7.10.4": +"@babel/plugin-proposal-private-methods@^7.10.4", "@babel/plugin-proposal-private-methods@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== @@ -431,13 +479,27 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.8.0": +"@babel/plugin-syntax-decorators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.4.tgz#6853085b2c429f9d322d02f5a635018cdeb2360c" + integrity sha512-2NaoC6fAk2VMdhY1eerkfHV+lVYC1u8b+jmRJISqANCJlTxYy19HGdIkkQtix2UtkcPuPu+IlDgrVseZnU03bw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-export-default-from@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.10.4.tgz#e5494f95006355c10292a0ff1ce42a5746002ec8" + integrity sha512-79V6r6Pgudz0RnuMGp5xidu6Z+bPFugh8/Q9eDHonmLp4wKFAZDwygJwYgCzuDu8lFA/sYyT+mc5y2wkd7bTXA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" @@ -459,7 +521,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.10.4": +"@babel/plugin-syntax-jsx@7.10.4", "@babel/plugin-syntax-jsx@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz#39abaae3cbf710c4373d8429484e6ba21340166c" integrity sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g== @@ -487,7 +549,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== @@ -522,7 +584,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-arrow-functions@^7.10.4": +"@babel/plugin-transform-arrow-functions@^7.10.4", "@babel/plugin-transform-arrow-functions@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== @@ -545,14 +607,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-block-scoping@^7.10.4": +"@babel/plugin-transform-block-scoping@^7.10.4", "@babel/plugin-transform-block-scoping@^7.8.3": version "7.11.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215" integrity sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-classes@^7.10.4": +"@babel/plugin-transform-classes@^7.10.4", "@babel/plugin-transform-classes@^7.9.5": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== @@ -573,7 +635,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-destructuring@^7.10.4": +"@babel/plugin-transform-destructuring@^7.10.4", "@babel/plugin-transform-destructuring@^7.9.5": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== @@ -611,7 +673,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-flow" "^7.10.4" -"@babel/plugin-transform-for-of@^7.10.4": +"@babel/plugin-transform-for-of@^7.10.4", "@babel/plugin-transform-for-of@^7.9.0": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== @@ -699,7 +761,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-replace-supers" "^7.10.4" -"@babel/plugin-transform-parameters@^7.10.4": +"@babel/plugin-transform-parameters@^7.10.4", "@babel/plugin-transform-parameters@^7.9.5": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== @@ -714,7 +776,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-constant-elements@^7.0.0", "@babel/plugin-transform-react-constant-elements@^7.2.0", "@babel/plugin-transform-react-constant-elements@^7.6.3": +"@babel/plugin-transform-react-constant-elements@^7.9.0": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.10.4.tgz#0f485260bf1c29012bb973e7e404749eaac12c9e" integrity sha512-cYmQBW1pXrqBte1raMkAulXmi7rjg3VI6ZLg9QIic8Hq7BtYXaWuZSxsr2siOMI6SWwpxjWfnwhTUrd7JlAV7g== @@ -753,7 +815,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-jsx" "^7.10.4" -"@babel/plugin-transform-react-jsx@^7.10.4": +"@babel/plugin-transform-react-jsx@^7.10.4", "@babel/plugin-transform-react-jsx@^7.3.0": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz#673c9f913948764a4421683b2bef2936968fddf2" integrity sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A== @@ -795,14 +857,14 @@ resolve "^1.8.1" semver "^5.5.1" -"@babel/plugin-transform-shorthand-properties@^7.10.4": +"@babel/plugin-transform-shorthand-properties@^7.10.4", "@babel/plugin-transform-shorthand-properties@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-spread@^7.11.0": +"@babel/plugin-transform-spread@^7.11.0", "@babel/plugin-transform-spread@^7.8.3": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw== @@ -818,7 +880,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-regex" "^7.10.4" -"@babel/plugin-transform-template-literals@^7.10.4": +"@babel/plugin-transform-template-literals@^7.10.4", "@babel/plugin-transform-template-literals@^7.8.3": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== @@ -857,7 +919,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/preset-env@^7.0.0", "@babel/preset-env@^7.11.0", "@babel/preset-env@^7.4.3", "@babel/preset-env@^7.4.5": +"@babel/preset-env@^7.0.0", "@babel/preset-env@^7.11.0", "@babel/preset-env@^7.9.5", "@babel/preset-env@^7.9.6": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.0.tgz#860ee38f2ce17ad60480c2021ba9689393efb796" integrity sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg== @@ -950,7 +1012,7 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.0.0", "@babel/preset-react@^7.10.4": +"@babel/preset-react@^7.0.0", "@babel/preset-react@^7.10.4", "@babel/preset-react@^7.8.3", "@babel/preset-react@^7.9.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.10.4.tgz#92e8a66d816f9911d11d4cc935be67adfc82dbcf" integrity sha512-BrHp4TgOIy4M19JAfO1LhycVXOPWdDbTRep7eVyatf174Hff+6Uk53sDyajqZPu8W1qXRBiYOfIamek6jA7YVw== @@ -963,7 +1025,7 @@ "@babel/plugin-transform-react-jsx-source" "^7.10.4" "@babel/plugin-transform-react-pure-annotations" "^7.10.4" -"@babel/preset-typescript@^7.10.4": +"@babel/preset-typescript@^7.10.4", "@babel/preset-typescript@^7.9.0": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.10.4.tgz#7d5d052e52a682480d6e2cc5aa31be61c8c25e36" integrity sha512-SdYnvGPv+bLlwkF2VkJnaX/ni1sMNetcGI1+nThF1gyv6Ph8Qucc4ZZAjM5yZcE/AKRXIOTZz7eSRDWOEjPyRQ== @@ -1012,12 +1074,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/standalone@^7.4.5": - version "7.11.3" - resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.11.3.tgz#043e6ff3b12226e41ed2013418b9a4c055d9c21e" - integrity sha512-rcoT32Hw0faYhmCDR0P84ODKL5kpEdhYPgdzlTKs7+v9oJaVLsGvq0xlkmLRj01F6LrItH3tY9eEoRsPLie4RQ== - -"@babel/template@^7.0.0", "@babel/template@^7.10.4", "@babel/template@^7.3.3", "@babel/template@^7.7.4": +"@babel/template@^7.10.4", "@babel/template@^7.3.3", "@babel/template@^7.7.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== @@ -1026,7 +1083,7 @@ "@babel/parser" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.6", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.0", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.4": +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.6", "@babel/traverse@^7.10.4", "@babel/traverse@^7.10.5", "@babel/traverse@^7.11.0", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.4": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.0.tgz#9b996ce1b98f53f7c3e4175115605d56ed07dd24" integrity sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg== @@ -1041,7 +1098,7 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4", "@babel/types@^7.4.0", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.9.5": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d" integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA== @@ -1050,6 +1107,11 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@base2/pretty-print-object@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.0.tgz#860ce718b0b73f4009e153541faff2cb6b85d047" + integrity sha512-4Th98KlMHr5+JkxfcoDT//6vY8vM+iSPrLNpHhRyLx2CFYi8e2RfqPLdpbnpo0Q5lQC5hNB79yes07zb02fvCw== + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1212,28 +1274,6 @@ resolved "https://registry.yarnpkg.com/@elastic/eslint-plugin-eui/-/eslint-plugin-eui-0.0.2.tgz#56b9ef03984a05cc213772ae3713ea8ef47b0314" integrity sha512-IoxURM5zraoQ7C8f+mJb9HYSENiZGgRVcG4tLQxE61yHNNRDXtGDWTZh8N1KIHcsqN1CEPETjuzBXkJYF/fDiQ== -"@elastic/eui@0.0.55": - version "0.0.55" - resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-0.0.55.tgz#95ff5b70ecb1d333e1a5570a0e4a4079fdf7887b" - integrity sha512-U+YElZOnWEHcLyyfN4hk4LB3znuIR5V6VruPisMXymu/seKrvND2pJmMaB0nP8a1SVa8KufboXrGEDzBWJ4TUg== - dependencies: - classnames "^2.2.5" - core-js "^2.5.1" - focus-trap-react "^3.0.4" - highlight.js "^9.12.0" - html "^1.0.0" - keymirror "^0.1.1" - lodash "^3.10.1" - numeral "^2.0.6" - prop-types "^15.6.0" - react-ace "^5.5.0" - react-color "^2.13.8" - react-datepicker v1.4.1 - react-input-autosize "^2.2.1" - react-virtualized "^9.18.5" - tabbable "^1.1.0" - uuid "^3.1.0" - "@elastic/eui@29.0.0": version "29.0.0" resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-29.0.0.tgz#1c8d822c62ad5e29298a3a36f5b02fd9b32a5550" @@ -1421,7 +1461,7 @@ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== -"@emotion/is-prop-valid@0.8.8", "@emotion/is-prop-valid@^0.8.8": +"@emotion/is-prop-valid@0.8.8", "@emotion/is-prop-valid@^0.8.6", "@emotion/is-prop-valid@^0.8.8": version "0.8.8" resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA== @@ -1773,28 +1813,6 @@ jest-runner "^25.5.4" jest-runtime "^25.5.4" -"@jest/transform@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" - integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^24.9.0" - babel-plugin-istanbul "^5.1.0" - chalk "^2.0.1" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.1.15" - jest-haste-map "^24.9.0" - jest-regex-util "^24.9.0" - jest-util "^24.9.0" - micromatch "^3.1.10" - pirates "^4.0.1" - realpath-native "^1.1.0" - slash "^2.0.0" - source-map "^0.6.1" - write-file-atomic "2.4.1" - "@jest/transform@^25.5.1": version "25.5.1" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.5.1.tgz#0469ddc17699dd2bf985db55fa0fb9309f5c2db3" @@ -1817,6 +1835,27 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" +"@jest/transform@^26.0.0": + version "26.3.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.3.0.tgz#c393e0e01459da8a8bfc6d2a7c2ece1a13e8ba55" + integrity sha512-Isj6NB68QorGoFWvcOjlUhpkT56PqNIsXKR7XfvoDlCANn/IANlh8DrKAA2l2JKC3yWSMH5wS0GwuQM20w3b2A== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^26.3.0" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^26.3.0" + jest-regex-util "^26.0.0" + jest-util "^26.3.0" + micromatch "^4.0.2" + pirates "^4.0.1" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + "@jest/types@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" @@ -2260,6 +2299,50 @@ resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe" integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q== +"@mdx-js/loader@^1.5.1": + version "1.6.16" + resolved "https://registry.yarnpkg.com/@mdx-js/loader/-/loader-1.6.16.tgz#5a9c3b0ab41885cd2df85bcf360644ca63e44e88" + integrity sha512-jYIAav17lXmEvweO6bzbsqY9mRTm49UeXXSZPAB81uCX8j91Pgi50Z0NnEN777yQEgGm2Z5PMtnJdxGFQIAjJQ== + dependencies: + "@mdx-js/mdx" "1.6.16" + "@mdx-js/react" "1.6.16" + loader-utils "2.0.0" + +"@mdx-js/mdx@1.6.16", "@mdx-js/mdx@^1.5.1": + version "1.6.16" + resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.16.tgz#f01af0140539c1ce043d246259d8becd2153b2bb" + integrity sha512-jnYyJ0aCafCIehn3GjYcibIapaLBgs3YkoenNQBPcPFyyuUty7B3B07OE+pMllhJ6YkWeP/R5Ax19x0nqTzgJw== + dependencies: + "@babel/core" "7.10.5" + "@babel/plugin-syntax-jsx" "7.10.4" + "@babel/plugin-syntax-object-rest-spread" "7.8.3" + "@mdx-js/util" "1.6.16" + babel-plugin-apply-mdx-type-prop "1.6.16" + babel-plugin-extract-import-names "1.6.16" + camelcase-css "2.0.1" + detab "2.0.3" + hast-util-raw "6.0.0" + lodash.uniq "4.5.0" + mdast-util-to-hast "9.1.0" + remark-footnotes "1.0.0" + remark-mdx "1.6.16" + remark-parse "8.0.3" + remark-squeeze-paragraphs "4.0.0" + style-to-object "0.3.0" + unified "9.1.0" + unist-builder "2.0.3" + unist-util-visit "2.0.3" + +"@mdx-js/react@1.6.16", "@mdx-js/react@^1.5.1": + version "1.6.16" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.16.tgz#538eb14473194d0b3c54020cb230e426174315cd" + integrity sha512-+FhuSVOPo7+4fZaRwWuCSRUcZkJOkZu0rfAbBKvoCg1LWb1Td8Vzi0DTLORdSvgWNbU6+EL40HIgwTOs00x2Jw== + +"@mdx-js/util@1.6.16": + version "1.6.16" + resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.16.tgz#07a7342f6b61ea1ecbfb31e6e23bf7a8c79b9b57" + integrity sha512-SFtLGIGZummuyMDPRL5KdmpgI8U19Ble28UjEWihPjGxF1Lgj8aDjLWY8KiaUy9eqb9CKiVCqEIrK9jbnANfkw== + "@microsoft/api-documenter@7.7.2": version "7.7.2" resolved "https://registry.yarnpkg.com/@microsoft/api-documenter/-/api-documenter-7.7.2.tgz#b6897f052ad447d6bb74f806287e8846c64691da" @@ -2654,16 +2737,15 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.4.2.tgz#7c6dc4ecef16149fd7a736710baa1b811017fdca" integrity sha512-JlGTGRYHC2QK+DDbePyXdBdooxFq2+noLfWpRqJtkxcb/oYWzOF0kcbfvvbWrwevCC1l6hLUg1wHYT+ona5BWQ== -"@reach/router@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.2.1.tgz#34ae3541a5ac44fa7796e5506a5d7274a162be4e" - integrity sha512-kTaX08X4g27tzIFQGRukaHmNbtMYDS3LEWIS8+l6OayGIw6Oyo1HIF/JzeuR2FoF9z6oV+x/wJSVSq4v8tcUGQ== +"@reach/router@^1.3.3": + version "1.3.4" + resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.3.4.tgz#d2574b19370a70c80480ed91f3da840136d10f8c" + integrity sha512-+mtn9wjlB9NN2CNnnC/BRYtwdKBfSyyasPYraNAyvaV1occr/5NnB4CVzjEZipNHwYebQwcndGUmpFzxAUoqSA== dependencies: - create-react-context "^0.2.1" + create-react-context "0.3.0" invariant "^2.2.3" prop-types "^15.6.1" react-lifecycles-compat "^3.0.4" - warning "^3.0.0" "@redux-saga/core@^1.1.3": version "1.1.3" @@ -2795,70 +2877,138 @@ "@types/node" ">=8.9.0" axios "^0.18.0" -"@storybook/addon-actions@^5.3.19": - version "5.3.19" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-5.3.19.tgz#50548fa6e84bc79ad95233ce23ade4878fc7cfac" - integrity sha512-gXF29FFUgYlUoFf1DcVCmH1chg2ElaHWMmCi5h7aZe+g6fXBQw0UtEdJnYLMOqZCIiWoZyuf1ETD0RbNHPhRIw== - dependencies: - "@storybook/addons" "5.3.19" - "@storybook/api" "5.3.19" - "@storybook/client-api" "5.3.19" - "@storybook/components" "5.3.19" - "@storybook/core-events" "5.3.19" - "@storybook/theming" "5.3.19" +"@storybook/addon-actions@6.0.16", "@storybook/addon-actions@^6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-6.0.16.tgz#869c90291fdfec4a0644e8415f5004cc57e59145" + integrity sha512-kyPGMP2frdhUgJAm6ChqvndaUawwQE9Vx7pN1pk/Q4qnyVlWCneZVojQf0iAgL45q0az0XI1tOPr4ooroaniYg== + dependencies: + "@storybook/addons" "6.0.16" + "@storybook/api" "6.0.16" + "@storybook/client-api" "6.0.16" + "@storybook/components" "6.0.16" + "@storybook/core-events" "6.0.16" + "@storybook/theming" "6.0.16" core-js "^3.0.1" - fast-deep-equal "^2.0.1" + fast-deep-equal "^3.1.1" global "^4.3.2" - polished "^3.3.1" + lodash "^4.17.15" + polished "^3.4.4" prop-types "^15.7.2" react "^16.8.3" - react-inspector "^4.0.0" - uuid "^3.3.2" - -"@storybook/addon-console@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-console/-/addon-console-1.2.1.tgz#f338401661b4636118b13839848061e996d4e104" - integrity sha512-2iDbDTipWonvRpIqLLntfhCGvawFFvoG1xyErpyL7K/HRdQ1zzIvR1Qm83S7TK8Vg+RzZWm4wcDbxx7WOsFCNg== - dependencies: - global "^4.3.2" + react-inspector "^5.0.1" + regenerator-runtime "^0.13.3" + ts-dedent "^1.1.1" + util-deprecate "^1.0.2" + uuid "^8.0.0" + +"@storybook/addon-backgrounds@6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-6.0.16.tgz#cbf909992a86dbbdfea172d3950300e8c2a7de01" + integrity sha512-0sH7hlZh4bHt6zV6QyG3ryNGJsxD42iXVwWdwAShzfWJKGfLy5XwdvHUKkMEBbY9bOPeoI9oMli2RAfsD6juLQ== + dependencies: + "@storybook/addons" "6.0.16" + "@storybook/api" "6.0.16" + "@storybook/client-logger" "6.0.16" + "@storybook/components" "6.0.16" + "@storybook/core-events" "6.0.16" + "@storybook/theming" "6.0.16" + core-js "^3.0.1" + memoizerific "^1.11.3" + react "^16.8.3" + regenerator-runtime "^0.13.3" -"@storybook/addon-info@^5.3.19": - version "5.3.19" - resolved "https://registry.yarnpkg.com/@storybook/addon-info/-/addon-info-5.3.19.tgz#175af53ba54ddb8fe24b3c979206ffbbf42bc4f4" - integrity sha512-MiFLcyoOmwawquagQHkqiPHnvBOKrVaS/wnO1XyBvIHwkK+KN7CZ9l7HakA4SO76kugrY9OJYyi5YvEEdN6vww== - dependencies: - "@storybook/addons" "5.3.19" - "@storybook/client-logger" "5.3.19" - "@storybook/components" "5.3.19" - "@storybook/theming" "5.3.19" +"@storybook/addon-controls@6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-6.0.16.tgz#c7fc765a01cc3a0de397f8b55bfeda3f328e5495" + integrity sha512-RgBOply9o3PYoWI7TNKef2AQixw7l620pT1fCJbXykp/lu17eqKaIa5KYHRE9vEajun5RuEQxGnSzQOV3OZAsA== + dependencies: + "@storybook/addons" "6.0.16" + "@storybook/api" "6.0.16" + "@storybook/client-api" "6.0.16" + "@storybook/components" "6.0.16" + "@storybook/node-logger" "6.0.16" + "@storybook/theming" "6.0.16" + core-js "^3.0.1" + ts-dedent "^1.1.1" + +"@storybook/addon-docs@6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-6.0.16.tgz#b24983a63c6c9469a418bb1478606626aff42dff" + integrity sha512-7gM/0lQ3mSybpOpQbgR8fjAU+u3zgAWyOM1a+LR7zVn5lNjgBhZD2pfHuwViTeAGG/IIpvmOsd57BKlFJw5TPA== + dependencies: + "@babel/generator" "^7.9.6" + "@babel/parser" "^7.9.6" + "@babel/plugin-transform-react-jsx" "^7.3.0" + "@babel/preset-env" "^7.9.6" + "@jest/transform" "^26.0.0" + "@mdx-js/loader" "^1.5.1" + "@mdx-js/mdx" "^1.5.1" + "@mdx-js/react" "^1.5.1" + "@storybook/addons" "6.0.16" + "@storybook/api" "6.0.16" + "@storybook/client-api" "6.0.16" + "@storybook/client-logger" "6.0.16" + "@storybook/components" "6.0.16" + "@storybook/core" "6.0.16" + "@storybook/core-events" "6.0.16" + "@storybook/csf" "0.0.1" + "@storybook/node-logger" "6.0.16" + "@storybook/postinstall" "6.0.16" + "@storybook/source-loader" "6.0.16" + "@storybook/theming" "6.0.16" + acorn "^7.1.0" + acorn-jsx "^5.1.0" + acorn-walk "^7.0.0" core-js "^3.0.1" + doctrine "^3.0.0" + escodegen "^1.12.0" + fast-deep-equal "^3.1.1" global "^4.3.2" - marksy "^8.0.0" - nested-object-assign "^1.0.3" + html-tags "^3.1.0" + js-string-escape "^1.0.1" + lodash "^4.17.15" prop-types "^15.7.2" - react "^16.8.3" - react-addons-create-fragment "^15.6.2" - react-element-to-jsx-string "^14.0.2" - react-is "^16.8.3" - react-lifecycles-compat "^3.0.4" + react-element-to-jsx-string "^14.3.1" + regenerator-runtime "^0.13.3" + remark-external-links "^6.0.0" + remark-slug "^6.0.0" + ts-dedent "^1.1.1" util-deprecate "^1.0.2" -"@storybook/addon-knobs@^5.3.19": - version "5.3.19" - resolved "https://registry.yarnpkg.com/@storybook/addon-knobs/-/addon-knobs-5.3.19.tgz#b2483e401e2dca6390e1c0a81801130a0b515efb" - integrity sha512-e7z6KhvVOUGjygK4VL5Un1U3t0XG0jkb/BOHVWQMtH5dWNn3zofD3LrZZy24eAsyre/ej/LGo/BzwDSXkKLTog== - dependencies: - "@storybook/addons" "5.3.19" - "@storybook/api" "5.3.19" - "@storybook/client-api" "5.3.19" - "@storybook/components" "5.3.19" - "@storybook/core-events" "5.3.19" - "@storybook/theming" "5.3.19" - "@types/react-color" "^3.0.1" +"@storybook/addon-essentials@^6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-6.0.16.tgz#031b05f6a9947fd93a86f28767b1c354e8ea4237" + integrity sha512-tHH2B4cGYihaPytzIlcFlc/jDSu1PUMgaQM4uzIDOn6SCYZJMp5vygK97zF7hf41x/TXv+8i9ZMN5iUJ7l1+fw== + dependencies: + "@storybook/addon-actions" "6.0.16" + "@storybook/addon-backgrounds" "6.0.16" + "@storybook/addon-controls" "6.0.16" + "@storybook/addon-docs" "6.0.16" + "@storybook/addon-toolbars" "6.0.16" + "@storybook/addon-viewport" "6.0.16" + "@storybook/addons" "6.0.16" + "@storybook/api" "6.0.16" + "@storybook/node-logger" "6.0.16" + core-js "^3.0.1" + regenerator-runtime "^0.13.3" + ts-dedent "^1.1.1" + +"@storybook/addon-knobs@^6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/addon-knobs/-/addon-knobs-6.0.16.tgz#ef7b9a67c5f3f75579af1d3c2c1f36205f77f505" + integrity sha512-//4Fq70M7LLOghM6+eugL53QHVmlbBm5240u+Aq2nWQLUtaszrPW6/7Vj0XRwLyp/DQtEHetTE/fFfCLoGK+dw== + dependencies: + "@storybook/addons" "6.0.16" + "@storybook/api" "6.0.16" + "@storybook/channels" "6.0.16" + "@storybook/client-api" "6.0.16" + "@storybook/components" "6.0.16" + "@storybook/core-events" "6.0.16" + "@storybook/theming" "6.0.16" copy-to-clipboard "^3.0.8" core-js "^3.0.1" escape-html "^1.0.3" - fast-deep-equal "^2.0.1" + fast-deep-equal "^3.1.1" global "^4.3.2" lodash "^4.17.15" prop-types "^15.7.2" @@ -2866,205 +3016,259 @@ react-color "^2.17.0" react-lifecycles-compat "^3.0.4" react-select "^3.0.8" + regenerator-runtime "^0.13.3" -"@storybook/addon-options@^5.3.19": - version "5.3.19" - resolved "https://registry.yarnpkg.com/@storybook/addon-options/-/addon-options-5.3.19.tgz#065e8f6be53073b37ebcaebe602dcc85ee202eaf" - integrity sha512-i5PzPlsv4QWdOvQhYVlyOW7VEW2ovhxg4MWVRjCoVy6vhF42MR+0HRtIOeOENuc3XnpSxsSk0ci/UI2XQjnX3Q== - dependencies: - "@storybook/addons" "5.3.19" - core-js "^3.0.1" - util-deprecate "^1.0.2" - -"@storybook/addon-storyshots@^5.3.19": - version "5.3.19" - resolved "https://registry.yarnpkg.com/@storybook/addon-storyshots/-/addon-storyshots-5.3.19.tgz#cb07ac3cc20d3a399ed4b6758008e10f910691d0" - integrity sha512-4TBbpAqbc9HLPxaJB2koQija67OBgGRhBZ5l2goczbgIWbbh3BXDrg3SwmKXC0cFnslgbuKU3CMX7infgtkByA== +"@storybook/addon-storyshots@^6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/addon-storyshots/-/addon-storyshots-6.0.16.tgz#e912273966d4c7cba1a9053d6a76e8856e3b834f" + integrity sha512-wQhM6pnjUCLTr/6BMXTptGeqiMPnnTrvLeaRwG1cDChGK/qs3YqTsa2QqLXQ17IvNUDTHLUNQlYk5af+HrCGhg== dependencies: - "@jest/transform" "^24.9.0" - "@storybook/addons" "5.3.19" - "@storybook/client-api" "5.3.19" - "@storybook/core" "5.3.19" + "@jest/transform" "^26.0.0" + "@storybook/addons" "6.0.16" + "@storybook/client-api" "6.0.16" + "@storybook/core" "6.0.16" "@types/glob" "^7.1.1" - "@types/jest" "^24.0.16" + "@types/jest" "^25.1.1" "@types/jest-specific-snapshot" "^0.5.3" babel-plugin-require-context-hook "^1.0.0" core-js "^3.0.1" glob "^7.1.3" global "^4.3.2" - jest-specific-snapshot "^2.0.0" + jest-specific-snapshot "^4.0.0" + pretty-format "^26.4.0" read-pkg-up "^7.0.0" regenerator-runtime "^0.13.3" - ts-dedent "^1.1.0" + ts-dedent "^1.1.1" -"@storybook/addons@5.3.19": - version "5.3.19" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-5.3.19.tgz#3a7010697afd6df9a41b8c8a7351d9a06ff490a4" - integrity sha512-Ky/k22p6i6FVNvs1VhuFyGvYJdcp+FgXqFgnPyY/OXJW/vPDapdElpTpHJZLFI9I2FQBDcygBPU5RXkumQ+KUQ== +"@storybook/addon-toolbars@6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-6.0.16.tgz#704a5d506b8d952eca6e5dca96c00b22aedf495f" + integrity sha512-6ulvPqe38NJRbQp0zajeNsDJQKZzGqbCMsSw3gtkFOMt8D/V625MF8YY/Y9UZ+xHWor17GUgE1k9hljdyZe1Nw== dependencies: - "@storybook/api" "5.3.19" - "@storybook/channels" "5.3.19" - "@storybook/client-logger" "5.3.19" - "@storybook/core-events" "5.3.19" + "@storybook/addons" "6.0.16" + "@storybook/api" "6.0.16" + "@storybook/client-api" "6.0.16" + "@storybook/components" "6.0.16" + core-js "^3.0.1" + +"@storybook/addon-viewport@6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-6.0.16.tgz#574cc0a3f991ce405ba4a3540132fb05edf488f6" + integrity sha512-3vk6lBZrKJrK9rwxglLT1p579WkLvoJxgW5ddpvSsu31NPAKfDufkDqOZOQGyMmcgIFzZJEc9eKjoTcLiHxppw== + dependencies: + "@storybook/addons" "6.0.16" + "@storybook/api" "6.0.16" + "@storybook/client-logger" "6.0.16" + "@storybook/components" "6.0.16" + "@storybook/core-events" "6.0.16" + "@storybook/theming" "6.0.16" core-js "^3.0.1" global "^4.3.2" - util-deprecate "^1.0.2" + memoizerific "^1.11.3" + prop-types "^15.7.2" + regenerator-runtime "^0.13.3" + +"@storybook/addons@6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-6.0.16.tgz#a20a219bd5b1474ad02b92e79a74652898a684d9" + integrity sha512-jGMaOJYTM2yZeX1tI6whEn+4xpI1aAybZBrc+OD21CcGoQrbF/jplZMq7xKI0Y6vOMguuTGulpUNCezD3LbBjA== + dependencies: + "@storybook/api" "6.0.16" + "@storybook/channels" "6.0.16" + "@storybook/client-logger" "6.0.16" + "@storybook/core-events" "6.0.16" + "@storybook/router" "6.0.16" + "@storybook/theming" "6.0.16" + core-js "^3.0.1" + global "^4.3.2" + regenerator-runtime "^0.13.3" -"@storybook/api@5.3.19": - version "5.3.19" - resolved "https://registry.yarnpkg.com/@storybook/api/-/api-5.3.19.tgz#77f15e9e2eee59fe1ddeaba1ef39bc34713a6297" - integrity sha512-U/VzDvhNCPmw2igvJYNNM+uwJCL+3teiL6JmuoL4/cmcqhI6IqqG9dZmMP1egoCd19wXEP7rnAfB/VcYVg41dQ== +"@storybook/api@6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/api/-/api-6.0.16.tgz#56cdfc6f7a21d62d1a4ab06b4741c1560160d320" + integrity sha512-RTC4BKmH5i8bJUQejOHEtjebVKtOaHkmEagI2HQRalsokBc1GLAf84EGrO2TaZiRrItAPL5zZQgEnKUblsGJGw== dependencies: - "@reach/router" "^1.2.1" - "@storybook/channels" "5.3.19" - "@storybook/client-logger" "5.3.19" - "@storybook/core-events" "5.3.19" + "@reach/router" "^1.3.3" + "@storybook/channels" "6.0.16" + "@storybook/client-logger" "6.0.16" + "@storybook/core-events" "6.0.16" "@storybook/csf" "0.0.1" - "@storybook/router" "5.3.19" - "@storybook/theming" "5.3.19" - "@types/reach__router" "^1.2.3" + "@storybook/router" "6.0.16" + "@storybook/semver" "^7.3.2" + "@storybook/theming" "6.0.16" + "@types/reach__router" "^1.3.5" core-js "^3.0.1" - fast-deep-equal "^2.0.1" + fast-deep-equal "^3.1.1" global "^4.3.2" lodash "^4.17.15" memoizerific "^1.11.3" - prop-types "^15.6.2" react "^16.8.3" - semver "^6.0.0" - shallow-equal "^1.1.0" + regenerator-runtime "^0.13.3" store2 "^2.7.1" - telejson "^3.2.0" + telejson "^5.0.2" + ts-dedent "^1.1.1" util-deprecate "^1.0.2" -"@storybook/channel-postmessage@5.3.19": - version "5.3.19" - resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-5.3.19.tgz#ef9fe974c2a529d89ce342ff7acf5cc22805bae9" - integrity sha512-Iq0f4NPHR0UVVFCWt0cI7Myadk4/SATXYJPT6sv95KhnLjKEeYw571WBlThfp8a9FM80887xG+eIRe93c8dleA== +"@storybook/channel-postmessage@6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-6.0.16.tgz#a617578c49543b0de9f53eb28daae2bd3c9e1754" + integrity sha512-66B4FH5R7k9i7LBhGsr/hYOxwE4UBM1JMPGV0rhAnFY8m91GiUWl4YWTRdbYIkeaZxf/0oT4sgPScqz44hnw6Q== dependencies: - "@storybook/channels" "5.3.19" - "@storybook/client-logger" "5.3.19" + "@storybook/channels" "6.0.16" + "@storybook/client-logger" "6.0.16" + "@storybook/core-events" "6.0.16" core-js "^3.0.1" global "^4.3.2" - telejson "^3.2.0" + qs "^6.6.0" + telejson "^5.0.2" -"@storybook/channels@5.3.19": - version "5.3.19" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-5.3.19.tgz#65ad7cd19d70aa5eabbb2e5e39ceef5e510bcb7f" - integrity sha512-38seaeyshRGotTEZJppyYMg/Vx2zRKgFv1L6uGqkJT0LYoNSYtJhsiNFCJ2/KUJu2chAJ/j8h80bpVBVLQ/+WA== +"@storybook/channels@6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-6.0.16.tgz#94e521b9eae535da80afb23feae593aa69bfe75d" + integrity sha512-TsI4GA7lKD4L2w6IjODMRfnEOkmvEp4eJDgf3MKm7+sMbxwi1y1d6yrW1UQbnmwoNJWk60ArMN2yqDBV+5MNJQ== dependencies: core-js "^3.0.1" + ts-dedent "^1.1.1" + util-deprecate "^1.0.2" -"@storybook/client-api@5.3.19": - version "5.3.19" - resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-5.3.19.tgz#7a5630bb8fffb92742b1773881e9004ee7fdf8e0" - integrity sha512-Dh8ZLrLH91j9Fa28Gmp0KFUvvgK348aNMrDNAUdj4m4witz/BWQ2pxz6qq9/xFVErk/GanVC05kazGElqgYCRQ== +"@storybook/client-api@6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-6.0.16.tgz#4af47caccf92a31326ab77c5094dd4f90f888b91" + integrity sha512-fFsp53lt9W2QHSumqdfFRbh+DI9fvd7li0GDxqLeNESXaUVw48yg8lQiyRNK+j5Pl4VBS3AqytLugJ+0MGm2cA== dependencies: - "@storybook/addons" "5.3.19" - "@storybook/channel-postmessage" "5.3.19" - "@storybook/channels" "5.3.19" - "@storybook/client-logger" "5.3.19" - "@storybook/core-events" "5.3.19" + "@storybook/addons" "6.0.16" + "@storybook/channel-postmessage" "6.0.16" + "@storybook/channels" "6.0.16" + "@storybook/client-logger" "6.0.16" + "@storybook/core-events" "6.0.16" "@storybook/csf" "0.0.1" - "@types/webpack-env" "^1.15.0" + "@types/qs" "^6.9.0" + "@types/webpack-env" "^1.15.2" core-js "^3.0.1" - eventemitter3 "^4.0.0" global "^4.3.2" - is-plain-object "^3.0.0" lodash "^4.17.15" memoizerific "^1.11.3" qs "^6.6.0" stable "^0.1.8" - ts-dedent "^1.1.0" + store2 "^2.7.1" + ts-dedent "^1.1.1" util-deprecate "^1.0.2" -"@storybook/client-logger@5.3.19": - version "5.3.19" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-5.3.19.tgz#fbbd186e82102eaca1d6a5cca640271cae862921" - integrity sha512-nHftT9Ow71YgAd2/tsu79kwKk30mPuE0sGRRUHZVyCRciGFQweKNOS/6xi2Aq+WwBNNjPKNlbgxwRt1yKe1Vkg== +"@storybook/client-logger@6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-6.0.16.tgz#6265d2b869a82be64538eaac39470e3845c9e069" + integrity sha512-xM61Aewxqoo8500UxV7iPpfqwikITojiCX3+w8ZiCJ2NizSaXkis95TEFAeHqyozfNym5CqG+6v2NWvGYV3ncQ== dependencies: core-js "^3.0.1" + global "^4.3.2" -"@storybook/components@5.3.19": - version "5.3.19" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-5.3.19.tgz#aac1f9eea1247cc85bd93b10fca803876fb84a6b" - integrity sha512-3g23/+ktlocaHLJKISu9Neu3XKa6aYP2ctDYkRtGchSB0Q55hQsUVGO+BEVuT7Pk2D59mVCxboBjxcRoPUY4pw== +"@storybook/components@6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-6.0.16.tgz#d4c797f7897cefa11bbdb8dfd07bb3d4fa66b3e9" + integrity sha512-zpYGt3tWiN0yT7V0VhBl2T5Mr0COiNnTQUGCpA9Gl3pUBmAov2jCVf1sUxsIcBcMMZmDRcfo6NbJ/LqCFeUg+Q== dependencies: - "@storybook/client-logger" "5.3.19" - "@storybook/theming" "5.3.19" + "@storybook/client-logger" "6.0.16" + "@storybook/csf" "0.0.1" + "@storybook/theming" "6.0.16" + "@types/overlayscrollbars" "^1.9.0" + "@types/react-color" "^3.0.1" "@types/react-syntax-highlighter" "11.0.4" - "@types/react-textarea-autosize" "^4.3.3" core-js "^3.0.1" + fast-deep-equal "^3.1.1" global "^4.3.2" lodash "^4.17.15" markdown-to-jsx "^6.11.4" memoizerific "^1.11.3" - polished "^3.3.1" + overlayscrollbars "^1.10.2" + polished "^3.4.4" popper.js "^1.14.7" - prop-types "^15.7.2" react "^16.8.3" + react-color "^2.17.0" react-dom "^16.8.3" - react-focus-lock "^2.1.0" - react-helmet-async "^1.0.2" - react-popper-tooltip "^2.8.3" - react-syntax-highlighter "^11.0.2" - react-textarea-autosize "^7.1.0" - simplebar-react "^1.0.0-alpha.6" - ts-dedent "^1.1.0" + react-popper-tooltip "^2.11.0" + react-syntax-highlighter "^12.2.1" + react-textarea-autosize "^8.1.1" + ts-dedent "^1.1.1" -"@storybook/core-events@5.3.19": - version "5.3.19" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-5.3.19.tgz#18020cd52e0d8ef0973a8e9622a10d5f99796f79" - integrity sha512-lh78ySqMS7pDdMJAQAe35d1I/I4yPTqp09Cq0YIYOxx9BQZhah4DZTV1QIZt22H5p2lPb5MWLkWSxBaexZnz8A== +"@storybook/core-events@6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-6.0.16.tgz#3f8cd525c15fd80c9f327389851cce82a4b96850" + integrity sha512-ib+58N4OY8AOix2qcBH9ICRmVHUocpGaGRVlIo79WxJrpnB/HNQ8pEaniD+OAavDRq1B7uJqFlMkTXCC0GoFiQ== dependencies: core-js "^3.0.1" -"@storybook/core@5.3.19": - version "5.3.19" - resolved "https://registry.yarnpkg.com/@storybook/core/-/core-5.3.19.tgz#1e61f35c5148343a0c580f5d5efb77f3b4243a30" - integrity sha512-4EYzglqb1iD6x9gxtAYpRGwGP6qJGiU2UW4GiYrErEmeu6y6tkyaqW5AwGlIo9+6jAfwD0HjaK8afvjKTtmmMQ== - dependencies: - "@babel/plugin-proposal-class-properties" "^7.7.0" - "@babel/plugin-proposal-object-rest-spread" "^7.6.2" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - "@babel/plugin-transform-react-constant-elements" "^7.2.0" - "@babel/preset-env" "^7.4.5" - "@storybook/addons" "5.3.19" - "@storybook/channel-postmessage" "5.3.19" - "@storybook/client-api" "5.3.19" - "@storybook/client-logger" "5.3.19" - "@storybook/core-events" "5.3.19" +"@storybook/core@6.0.16", "@storybook/core@^6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/core/-/core-6.0.16.tgz#ec9aa8c0fd1c23d29bf8401b650c0876c41d1b5f" + integrity sha512-dVgw03bB8rSMrYDw+v07Yiqyy4yas1olnXpytscWCWdbBuflSAQU+mtqcHMIH9YlhucIT2dYiErDDDNmqP+6tw== + dependencies: + "@babel/plugin-proposal-class-properties" "^7.8.3" + "@babel/plugin-proposal-decorators" "^7.8.3" + "@babel/plugin-proposal-export-default-from" "^7.8.3" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1" + "@babel/plugin-proposal-object-rest-spread" "^7.9.6" + "@babel/plugin-proposal-optional-chaining" "^7.10.1" + "@babel/plugin-proposal-private-methods" "^7.8.3" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-transform-arrow-functions" "^7.8.3" + "@babel/plugin-transform-block-scoping" "^7.8.3" + "@babel/plugin-transform-classes" "^7.9.5" + "@babel/plugin-transform-destructuring" "^7.9.5" + "@babel/plugin-transform-for-of" "^7.9.0" + "@babel/plugin-transform-parameters" "^7.9.5" + "@babel/plugin-transform-shorthand-properties" "^7.8.3" + "@babel/plugin-transform-spread" "^7.8.3" + "@babel/plugin-transform-template-literals" "^7.8.3" + "@babel/preset-env" "^7.9.6" + "@babel/preset-react" "^7.8.3" + "@babel/preset-typescript" "^7.9.0" + "@babel/register" "^7.10.5" + "@storybook/addons" "6.0.16" + "@storybook/api" "6.0.16" + "@storybook/channel-postmessage" "6.0.16" + "@storybook/channels" "6.0.16" + "@storybook/client-api" "6.0.16" + "@storybook/client-logger" "6.0.16" + "@storybook/components" "6.0.16" + "@storybook/core-events" "6.0.16" "@storybook/csf" "0.0.1" - "@storybook/node-logger" "5.3.19" - "@storybook/router" "5.3.19" - "@storybook/theming" "5.3.19" - "@storybook/ui" "5.3.19" + "@storybook/node-logger" "6.0.16" + "@storybook/router" "6.0.16" + "@storybook/semver" "^7.3.2" + "@storybook/theming" "6.0.16" + "@storybook/ui" "6.0.16" + "@types/glob-base" "^0.3.0" + "@types/micromatch" "^4.0.1" + "@types/node-fetch" "^2.5.4" airbnb-js-shims "^2.2.1" ansi-to-html "^0.6.11" autoprefixer "^9.7.2" - babel-plugin-add-react-displayname "^0.0.5" + babel-loader "^8.0.6" babel-plugin-emotion "^10.0.20" - babel-plugin-macros "^2.7.0" + babel-plugin-macros "^2.8.0" babel-preset-minify "^0.5.0 || 0.6.0-alpha.5" + better-opn "^2.0.0" boxen "^4.1.0" case-sensitive-paths-webpack-plugin "^2.2.0" - chalk "^3.0.0" - cli-table3 "0.5.1" - commander "^4.0.1" + chalk "^4.0.0" + cli-table3 "0.6.0" + commander "^5.0.0" core-js "^3.0.1" - corejs-upgrade-webpack-plugin "^2.2.0" - css-loader "^3.0.0" + css-loader "^3.5.3" detect-port "^1.3.0" dotenv-webpack "^1.7.0" - ejs "^2.7.4" + ejs "^3.1.2" express "^4.17.0" - file-loader "^4.2.0" + file-loader "^6.0.0" file-system-cache "^1.0.5" - find-cache-dir "^3.0.0" find-up "^4.1.0" - fs-extra "^8.0.1" + fork-ts-checker-webpack-plugin "^4.1.4" + fs-extra "^9.0.0" + glob "^7.1.6" glob-base "^0.3.0" + glob-promise "^3.4.0" global "^4.3.2" - html-webpack-plugin "^4.0.0-beta.2" + html-webpack-plugin "^4.2.1" inquirer "^7.0.0" interpret "^2.0.0" ip "^1.1.5" @@ -3072,30 +3276,29 @@ lazy-universal-dotenv "^3.0.1" micromatch "^4.0.2" node-fetch "^2.6.0" - open "^7.0.0" - pnp-webpack-plugin "1.5.0" + pkg-dir "^4.2.0" + pnp-webpack-plugin "1.6.4" postcss-flexbugs-fixes "^4.1.0" postcss-loader "^3.0.0" pretty-hrtime "^1.0.3" qs "^6.6.0" - raw-loader "^3.1.0" - react-dev-utils "^9.0.0" + raw-loader "^4.0.1" + react-dev-utils "^10.0.0" regenerator-runtime "^0.13.3" - resolve "^1.11.0" resolve-from "^5.0.0" - semver "^6.0.0" serve-favicon "^2.5.0" shelljs "^0.8.3" - style-loader "^1.0.0" - terser-webpack-plugin "^2.1.2" - ts-dedent "^1.1.0" + stable "^0.1.8" + style-loader "^1.2.1" + terser-webpack-plugin "^3.0.0" + ts-dedent "^1.1.1" unfetch "^4.1.0" - url-loader "^2.0.1" + url-loader "^4.0.0" util-deprecate "^1.0.2" - webpack "^4.33.0" + webpack "^4.43.0" webpack-dev-middleware "^3.7.0" webpack-hot-middleware "^2.25.0" - webpack-virtual-modules "^0.2.0" + webpack-virtual-modules "^0.2.2" "@storybook/csf@0.0.1": version "0.0.1" @@ -3104,104 +3307,130 @@ dependencies: lodash "^4.17.15" -"@storybook/node-logger@5.3.19": - version "5.3.19" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-5.3.19.tgz#c414e4d3781aeb06298715220012f552a36dff29" - integrity sha512-hKshig/u5Nj9fWy0OsyU04yqCxr0A9pydOHIassr4fpLAaePIN2YvqCqE2V+TxQHjZUnowSSIhbXrGt0DI5q2A== +"@storybook/node-logger@6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-6.0.16.tgz#805e0748355d13535c3295455f568ea94e57d1ad" + integrity sha512-mD6so/puFV5oByBkDp9rv2mV/WyGy21QdrwXpXdtLDKNgqPuJjHZuF1RA/+MmDK4P1CjvP1no2H5WDKg+aW4QQ== dependencies: "@types/npmlog" "^4.1.2" - chalk "^3.0.0" + chalk "^4.0.0" core-js "^3.0.1" npmlog "^4.1.2" pretty-hrtime "^1.0.3" - regenerator-runtime "^0.13.3" -"@storybook/react@^5.3.19": - version "5.3.19" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-5.3.19.tgz#ad7e7a5538399e2794cdb5a1b844a2b77c10bd09" - integrity sha512-OBRUqol3YLQi/qE55x2pWkv4YpaAmmfj6/Km+7agx+og+oNQl0nnlXy7r27X/4j3ERczzURa5pJHtSjwiNaJNw== +"@storybook/postinstall@6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-6.0.16.tgz#77c428534dd10074778dc669f7ffce9f387acc93" + integrity sha512-gZgPNJK/58VepIBodK0pSlD1jPQgIVTEFWot5/iDjxv9cnSl9V+LbIEW5jZp/lzoAONSj8AS646ZZjAM87S4RQ== + dependencies: + core-js "^3.0.1" + +"@storybook/react@^6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-6.0.16.tgz#21464749f7bd90dc6026235b2ee47acf168d974a" + integrity sha512-cxnBwewx37rL1BjXo3TQFIvvCv9z26r3yuRRWh527/0QODfwGz8TT+/sJHeqBA5JIQzLwAHNqNJhLp6xzfr5Dw== dependencies: - "@babel/plugin-transform-react-constant-elements" "^7.6.3" "@babel/preset-flow" "^7.0.0" "@babel/preset-react" "^7.0.0" - "@storybook/addons" "5.3.19" - "@storybook/core" "5.3.19" - "@storybook/node-logger" "5.3.19" - "@svgr/webpack" "^4.0.3" - "@types/webpack-env" "^1.15.0" + "@storybook/addons" "6.0.16" + "@storybook/core" "6.0.16" + "@storybook/node-logger" "6.0.16" + "@storybook/semver" "^7.3.2" + "@svgr/webpack" "^5.4.0" + "@types/webpack-env" "^1.15.2" babel-plugin-add-react-displayname "^0.0.5" babel-plugin-named-asset-import "^0.3.1" - babel-plugin-react-docgen "^4.0.0" + babel-plugin-react-docgen "^4.1.0" core-js "^3.0.1" global "^4.3.2" lodash "^4.17.15" - mini-css-extract-plugin "^0.7.0" prop-types "^15.7.2" - react-dev-utils "^9.0.0" + react-dev-utils "^10.0.0" + react-docgen-typescript-plugin "^0.5.2" regenerator-runtime "^0.13.3" - semver "^6.0.0" - ts-dedent "^1.1.0" - webpack "^4.33.0" + ts-dedent "^1.1.1" + webpack "^4.43.0" -"@storybook/router@5.3.19": - version "5.3.19" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-5.3.19.tgz#0f783b85658f99e4007f74347ad7ef17dbf7fc3a" - integrity sha512-yNClpuP7BXQlBTRf6Ggle3/R349/k6kvI5Aim4jf6X/2cFVg2pzBXDAF41imNm9PcvdxwabQLm6I48p7OvKr/w== +"@storybook/router@6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-6.0.16.tgz#b18cc0b1bba477f16f9f2ae8f0eaa0d5ba4b0a0e" + integrity sha512-zijPJ3CR4ytHE0v+pGdaWT3H+es+mLHRkR6hkqcD0ABT5HVfwMlmXJ9FkQGCVpnnNeBOz7+QKCdE13HMelQpqg== dependencies: - "@reach/router" "^1.2.1" - "@storybook/csf" "0.0.1" - "@types/reach__router" "^1.2.3" + "@reach/router" "^1.3.3" + "@types/reach__router" "^1.3.5" core-js "^3.0.1" global "^4.3.2" - lodash "^4.17.15" memoizerific "^1.11.3" qs "^6.6.0" - util-deprecate "^1.0.2" -"@storybook/theming@5.3.19", "@storybook/theming@^5.3.19": - version "5.3.19" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-5.3.19.tgz#177d9819bd64f7a1a6ea2f1920ffa5baf9a5f467" - integrity sha512-ecG+Rq3hc1GOzKHamYnD4wZ0PEP9nNg0mXbC3RhbxfHj+pMMCWWmx9B2Uu75SL1PTT8WcfkFO0hU/0IO84Pzlg== +"@storybook/semver@^7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@storybook/semver/-/semver-7.3.2.tgz#f3b9c44a1c9a0b933c04e66d0048fcf2fa10dac0" + integrity sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg== + dependencies: + core-js "^3.6.5" + find-up "^4.1.0" + +"@storybook/source-loader@6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/source-loader/-/source-loader-6.0.16.tgz#a3eb2b0cbede7d9121387738a530d71df645db5d" + integrity sha512-Ub6bU7o2JJUigzu9MSrFH1RD2SmpZZnym+WEidWI9A1gseKp1Rd4KDq36AqJo/oL3hAzoAOirrv3ZixIwXLFMg== + dependencies: + "@storybook/addons" "6.0.16" + "@storybook/client-logger" "6.0.16" + "@storybook/csf" "0.0.1" + core-js "^3.0.1" + estraverse "^4.2.0" + global "^4.3.2" + loader-utils "^2.0.0" + lodash "^4.17.15" + prettier "^2.0.5" + regenerator-runtime "^0.13.3" + +"@storybook/theming@6.0.16", "@storybook/theming@^6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-6.0.16.tgz#dd6de4f29316a6a2380018978b7b4a0ef9ea33c8" + integrity sha512-6D7oMEbeABYZdDY8e3i+O39XLrk6fvG3GBaSGp31BE30d269NcPkGPxMKY/nzc6MY30a+/LbBbM7b6gRKe6b4Q== dependencies: "@emotion/core" "^10.0.20" + "@emotion/is-prop-valid" "^0.8.6" "@emotion/styled" "^10.0.17" - "@storybook/client-logger" "5.3.19" + "@storybook/client-logger" "6.0.16" core-js "^3.0.1" deep-object-diff "^1.1.0" emotion-theming "^10.0.19" global "^4.3.2" memoizerific "^1.11.3" - polished "^3.3.1" - prop-types "^15.7.2" + polished "^3.4.4" resolve-from "^5.0.0" - ts-dedent "^1.1.0" + ts-dedent "^1.1.1" -"@storybook/ui@5.3.19": - version "5.3.19" - resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-5.3.19.tgz#ac03b67320044a3892ee784111d4436b61874332" - integrity sha512-r0VxdWab49nm5tzwvveVDnsHIZHMR76veYOu/NHKDUZ5hnQl1LMG1YyMCFFa7KiwD/OrZxRWr6/Ma7ep9kR4Gw== +"@storybook/ui@6.0.16": + version "6.0.16" + resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-6.0.16.tgz#448d2286404554afb13e27fecd9efb0861fa9286" + integrity sha512-4F21kwQVaMwgqoJmO+566j7MXmvPp+7jfWBMPAvyGsf5uIZ4q6V29h5mMLvTOFA4qHw0lHZk2k8V0g5gk/tjCA== dependencies: "@emotion/core" "^10.0.20" - "@storybook/addons" "5.3.19" - "@storybook/api" "5.3.19" - "@storybook/channels" "5.3.19" - "@storybook/client-logger" "5.3.19" - "@storybook/components" "5.3.19" - "@storybook/core-events" "5.3.19" - "@storybook/router" "5.3.19" - "@storybook/theming" "5.3.19" + "@storybook/addons" "6.0.16" + "@storybook/api" "6.0.16" + "@storybook/channels" "6.0.16" + "@storybook/client-logger" "6.0.16" + "@storybook/components" "6.0.16" + "@storybook/core-events" "6.0.16" + "@storybook/router" "6.0.16" + "@storybook/semver" "^7.3.2" + "@storybook/theming" "6.0.16" + "@types/markdown-to-jsx" "^6.11.0" copy-to-clipboard "^3.0.8" core-js "^3.0.1" core-js-pure "^3.0.1" emotion-theming "^10.0.19" - fast-deep-equal "^2.0.1" - fuse.js "^3.4.6" + fuse.js "^3.6.1" global "^4.3.2" lodash "^4.17.15" markdown-to-jsx "^6.11.4" memoizerific "^1.11.3" - polished "^3.3.1" - prop-types "^15.7.2" + polished "^3.4.4" qs "^6.6.0" react "^16.8.3" react-dom "^16.8.3" @@ -3209,117 +3438,112 @@ react-helmet-async "^1.0.2" react-hotkeys "2.0.0" react-sizeme "^2.6.7" - regenerator-runtime "^0.13.2" + regenerator-runtime "^0.13.3" resolve-from "^5.0.0" - semver "^6.0.0" store2 "^2.7.1" - telejson "^3.2.0" - util-deprecate "^1.0.2" -"@svgr/babel-plugin-add-jsx-attribute@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz#dadcb6218503532d6884b210e7f3c502caaa44b1" - integrity sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig== +"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" + integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== -"@svgr/babel-plugin-remove-jsx-attribute@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.2.0.tgz#297550b9a8c0c7337bea12bdfc8a80bb66f85abc" - integrity sha512-3XHLtJ+HbRCH4n28S7y/yZoEQnRpl0tvTZQsHqvaeNXPra+6vE5tbRliH3ox1yZYPCxrlqaJT/Mg+75GpDKlvQ== +"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" + integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== -"@svgr/babel-plugin-remove-jsx-empty-expression@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz#c196302f3e68eab6a05e98af9ca8570bc13131c7" - integrity sha512-yTr2iLdf6oEuUE9MsRdvt0NmdpMBAkgK8Bjhl6epb+eQWk6abBaX3d65UZ3E3FWaOwePyUgNyNCMVG61gGCQ7w== +"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" + integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== -"@svgr/babel-plugin-replace-jsx-attribute-value@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz#310ec0775de808a6a2e4fd4268c245fd734c1165" - integrity sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w== +"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" + integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== -"@svgr/babel-plugin-svg-dynamic-title@^4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.0.tgz#826c7d30f8f98f26bdb4af205a5dfbf1f04d80ec" - integrity sha512-3eI17Pb3jlg3oqV4Tie069n1SelYKBUpI90txDcnBWk4EGFW+YQGyQjy6iuJAReH0RnpUJ9jUExrt/xniGvhqw== +"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" + integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== -"@svgr/babel-plugin-svg-em-dimensions@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.2.0.tgz#9a94791c9a288108d20a9d2cc64cac820f141391" - integrity sha512-C0Uy+BHolCHGOZ8Dnr1zXy/KgpBOkEUYY9kI/HseHVPeMbluaX3CijJr7D4C5uR8zrc1T64nnq/k63ydQuGt4w== +"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" + integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== -"@svgr/babel-plugin-transform-react-native-svg@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.2.0.tgz#151487322843359a1ca86b21a3815fd21a88b717" - integrity sha512-7YvynOpZDpCOUoIVlaaOUU87J4Z6RdD6spYN4eUb5tfPoKGSF9OG2NuhgYnq4jSkAxcpMaXWPf1cePkzmqTPNw== +"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" + integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== -"@svgr/babel-plugin-transform-svg-component@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.2.0.tgz#5f1e2f886b2c85c67e76da42f0f6be1b1767b697" - integrity sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw== +"@svgr/babel-plugin-transform-svg-component@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.4.0.tgz#a2212b4d018e6075a058bb7e220a66959ef7a03c" + integrity sha512-zLl4Fl3NvKxxjWNkqEcpdSOpQ3LGVH2BNFQ6vjaK6sFo2IrSznrhURIPI0HAphKiiIwNYjAfE0TNoQDSZv0U9A== -"@svgr/babel-preset@^4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-4.3.0.tgz#8a0bcc95ea7124762699e87a45ab11f408e8765e" - integrity sha512-Lgy1RJiZumGtv6yJroOxzFuL64kG/eIcivJQ7y9ljVWL+0QXvFz4ix1xMrmjMD+rpJWwj50ayCIcFelevG/XXg== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^4.2.0" - "@svgr/babel-plugin-remove-jsx-attribute" "^4.2.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^4.2.0" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^4.2.0" - "@svgr/babel-plugin-svg-dynamic-title" "^4.3.0" - "@svgr/babel-plugin-svg-em-dimensions" "^4.2.0" - "@svgr/babel-plugin-transform-react-native-svg" "^4.2.0" - "@svgr/babel-plugin-transform-svg-component" "^4.2.0" - -"@svgr/core@^4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-4.3.0.tgz#4a2bcb41e0946679a2ebe6b5bb2edd88ed35706b" - integrity sha512-Ycu1qrF5opBgKXI0eQg3ROzupalCZnSDETKCK/3MKN4/9IEmt3jPX/bbBjftklnRW+qqsCEpO0y/X9BTRw2WBg== +"@svgr/babel-preset@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.4.0.tgz#da21854643e1c4ad2279239baa7d5a8b128c1f15" + integrity sha512-Gyx7cCxua04DBtyILTYdQxeO/pwfTBev6+eXTbVbxe4HTGhOUW6yo7PSbG2p6eJMl44j6XSequ0ZDP7bl0nu9A== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" + "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" + "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" + "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" + "@svgr/babel-plugin-transform-svg-component" "^5.4.0" + +"@svgr/core@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.4.0.tgz#655378ee43679eb94fee3d4e1976e38252dff8e7" + integrity sha512-hWGm1DCCvd4IEn7VgDUHYiC597lUYhFau2lwJBYpQWDirYLkX4OsXu9IslPgJ9UpP7wsw3n2Ffv9sW7SXJVfqQ== dependencies: - "@svgr/plugin-jsx" "^4.3.0" - camelcase "^5.3.1" - cosmiconfig "^5.2.0" + "@svgr/plugin-jsx" "^5.4.0" + camelcase "^6.0.0" + cosmiconfig "^6.0.0" -"@svgr/hast-util-to-babel-ast@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.2.0.tgz#dd743435a5f3a8e84a1da067f27b5fae3d7b6b63" - integrity sha512-IvAeb7gqrGB5TH9EGyBsPrMRH/QCzIuAkLySKvH2TLfLb2uqk98qtJamordRQTpHH3e6TORfBXoTo7L7Opo/Ow== +"@svgr/hast-util-to-babel-ast@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.4.0.tgz#bb5d002e428f510aa5b53ec0a02377a95b367715" + integrity sha512-+U0TZZpPsP2V1WvVhqAOSTk+N+CjYHdZx+x9UBa1eeeZDXwH8pt0CrQf2+SvRl/h2CAPRFkm+Ey96+jKP8Bsgg== dependencies: - "@babel/types" "^7.4.0" + "@babel/types" "^7.9.5" -"@svgr/plugin-jsx@^4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-4.3.0.tgz#6be203abc58e187545aa1b9a51df30d051b658e2" - integrity sha512-0ab8zJdSOTqPfjZtl89cjq2IOmXXUYV3Fs7grLT9ur1Al3+x3DSp2+/obrYKUGbQUnLq96RMjSZ7Icd+13vwlQ== - dependencies: - "@babel/core" "^7.4.3" - "@svgr/babel-preset" "^4.3.0" - "@svgr/hast-util-to-babel-ast" "^4.2.0" - rehype-parse "^6.0.0" - unified "^7.1.0" - vfile "^4.0.0" +"@svgr/plugin-jsx@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.4.0.tgz#ab47504c55615833c6db70fca2d7e489f509787c" + integrity sha512-SGzO4JZQ2HvGRKDzRga9YFSqOqaNrgLlQVaGvpZ2Iht2gwRp/tq+18Pvv9kS9ZqOMYgyix2LLxZMY1LOe9NPqw== + dependencies: + "@babel/core" "^7.7.5" + "@svgr/babel-preset" "^5.4.0" + "@svgr/hast-util-to-babel-ast" "^5.4.0" + svg-parser "^2.0.2" -"@svgr/plugin-svgo@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-4.2.0.tgz#2a594a2d3312955e75fd87dc77ae51f377c809f3" - integrity sha512-zUEKgkT172YzHh3mb2B2q92xCnOAMVjRx+o0waZ1U50XqKLrVQ/8dDqTAtnmapdLsGurv8PSwenjLCUpj6hcvw== +"@svgr/plugin-svgo@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.4.0.tgz#45d9800b7099a6f7b4d85ebac89ab9abe8592f64" + integrity sha512-3Cgv3aYi1l6SHyzArV9C36yo4kgwVdF3zPQUC6/aCDUeXAofDYwE5kk3e3oT5ZO2a0N3lB+lLGvipBG6lnG8EA== dependencies: - cosmiconfig "^5.2.0" + cosmiconfig "^6.0.0" merge-deep "^3.0.2" - svgo "^1.2.1" + svgo "^1.2.2" -"@svgr/webpack@^4.0.3": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-4.3.0.tgz#4462e05070d91c04806b99c30a703fb2b50b2bb9" - integrity sha512-rYcwi1pUnaZoOUEa8xhrX10FHnONvube1WBoJ5PQf/Cbl0GuiUUSdXSVaFgxWdeyv6jCG0vWH1mrCHhspaJv1Q== - dependencies: - "@babel/core" "^7.4.3" - "@babel/plugin-transform-react-constant-elements" "^7.0.0" - "@babel/preset-env" "^7.4.3" - "@babel/preset-react" "^7.0.0" - "@svgr/core" "^4.3.0" - "@svgr/plugin-jsx" "^4.3.0" - "@svgr/plugin-svgo" "^4.2.0" - loader-utils "^1.2.3" +"@svgr/webpack@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.4.0.tgz#b68bc86e29cf007292b96ced65f80971175632e0" + integrity sha512-LjepnS/BSAvelnOnnzr6Gg0GcpLmnZ9ThGFK5WJtm1xOqdBE/1IACZU7MMdVzjyUkfFqGz87eRE4hFaSLiUwYg== + dependencies: + "@babel/core" "^7.9.0" + "@babel/plugin-transform-react-constant-elements" "^7.9.0" + "@babel/preset-env" "^7.9.5" + "@babel/preset-react" "^7.9.4" + "@svgr/core" "^5.4.0" + "@svgr/plugin-jsx" "^5.4.0" + "@svgr/plugin-svgo" "^5.4.0" + loader-utils "^2.0.0" "@szmarczak/http-timer@^1.1.2": version "1.1.2" @@ -3602,6 +3826,11 @@ resolved "https://registry.yarnpkg.com/@types/boom/-/boom-7.2.0.tgz#19c36cbb5811a7493f0f2e37f31d42b28df1abc1" integrity sha512-HonbGsHFbskh9zRAzA6tabcw18mCOsSEOL2ibGAuVqk6e7nElcRmWO5L4UfIHpDbWBWw+eZYFdsQ1+MEGgpcVA== +"@types/braces@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/braces/-/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb" + integrity sha512-TbH79tcyi9FHwbyboOKeRachRq63mSuWYXOflsNO9ZyE5ClQ/JaozNKl+aWUq87qPNsXasXxi2AbgfwIJ+8GQw== + "@types/cacheable-request@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.1.tgz#5d22f3dded1fd3a84c0bbeb5039a7419c2c91976" @@ -3654,10 +3883,10 @@ resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.9.tgz#d868b6febb02666330410fe7f58f3c4b8258be7b" integrity sha512-MNl+rT5UmZeilaPxAVs6YaPC2m6aA8rofviZbhbxpPpl61uKodfdQVsBtgJGTqGizEf02oW3tsVe7FYB8kK14A== -"@types/clone@~0.1.30": - version "0.1.30" - resolved "https://registry.yarnpkg.com/@types/clone/-/clone-0.1.30.tgz#e7365648c1b42136a59c7d5040637b3b5c83b614" - integrity sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ= +"@types/clone@~2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/clone/-/clone-2.1.0.tgz#cb888a3fe5319275b566ae3a9bc606e310c533d4" + integrity sha512-d/aS/lPOnUSruPhgNtT8jW39fHRVTLQy9sodysP1kkG8EdAtdZu1vt8NJaYA8w/6Z9j8izkAsx1A/yJhcYR1CA== "@types/cmd-shim@^2.0.0": version "2.0.0" @@ -3880,6 +4109,11 @@ resolved "https://registry.yarnpkg.com/@types/git-url-parse/-/git-url-parse-9.0.0.tgz#aac1315a44fa4ed5a52c3820f6c3c2fb79cbd12d" integrity sha512-kA2RxBT/r/ZuDDKwMl+vFWn1Z0lfm1/Ik6Qb91wnSzyzCDa/fkM8gIOq6ruB7xfr37n6Mj5dyivileUVKsidlg== +"@types/glob-base@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@types/glob-base/-/glob-base-0.3.0.tgz#a581d688347e10e50dd7c17d6f2880a10354319d" + integrity sha1-pYHWiDR+EOUN18F9byiAoQNUMZ0= + "@types/glob-stream@*": version "6.1.0" resolved "https://registry.yarnpkg.com/@types/glob-stream/-/glob-stream-6.1.0.tgz#7ede8a33e59140534f8d8adfb8ac9edfb31897bc" @@ -3888,7 +4122,7 @@ "@types/glob" "*" "@types/node" "*" -"@types/glob@*", "@types/glob@^5.0.35": +"@types/glob@*": version "5.0.35" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-5.0.35.tgz#1ae151c802cece940443b5ac246925c85189f32a" integrity sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg== @@ -3906,12 +4140,13 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/globby@^6.1.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@types/globby/-/globby-6.1.0.tgz#7c25b975512a89effea2a656ca8cf6db7fb29d11" - integrity sha512-j3XSDNoK4LO5T+ZviQD6PqfEjm07QFEacOTbJR3hnLWuWX0ZMLJl9oRPgj1PyrfGbXhfHFkksC9QZ9HFltJyrw== +"@types/glob@^7.1.2": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== dependencies: - "@types/glob" "*" + "@types/minimatch" "*" + "@types/node" "*" "@types/globby@^8.0.0": version "8.0.0" @@ -3997,6 +4232,13 @@ resolved "https://registry.yarnpkg.com/@types/has-ansi/-/has-ansi-3.0.0.tgz#636403dc4e0b2649421c4158e5c404416f3f0330" integrity sha512-H3vFOwfLlFEC0MOOrcSkus8PCnMCzz4N0EqUbdJZCdDhBTfkAu86aRYA+MTxjKW6jCpUvxcn4715US8g+28BMA== +"@types/hast@^2.0.0": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.1.tgz#b16872f2a6144c7025f296fb9636a667ebb79cd9" + integrity sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q== + dependencies: + "@types/unist" "*" + "@types/he@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/he/-/he-1.1.1.tgz#19e14033c4ee8f1a702c74dcc6182664839ac2b7" @@ -4030,6 +4272,11 @@ "@types/react" "*" hoist-non-react-statics "^3.3.0" +"@types/html-minifier-terser@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz#551a4589b6ee2cc9c1dff08056128aec29b94880" + integrity sha512-iYCgjm1dGPRuo12+BStjd1HiVQqhlRhWDOQigNxn023HcjnhsiFz9pc6CzJj4HwDCSQca9bxTL4PxJDbkdm3PA== + "@types/http-cache-semantics@*": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz#9140779736aa2655635ee756e2467d787cfe8a2a" @@ -4056,14 +4303,6 @@ dependencies: "@types/hapi" "*" -"@types/inquirer@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-6.5.0.tgz#b83b0bf30b88b8be7246d40e51d32fe9d10e09be" - integrity sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw== - dependencies: - "@types/through" "*" - rxjs "^6.4.0" - "@types/inquirer@^7.3.1": version "7.3.1" resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-7.3.1.tgz#1f231224e7df11ccfaf4cf9acbcc3b935fea292d" @@ -4135,7 +4374,7 @@ dependencies: "@types/jest" "*" -"@types/jest@*", "@types/jest@^25.2.3": +"@types/jest@*", "@types/jest@^25.1.1", "@types/jest@^25.2.3": version "25.2.3" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.2.3.tgz#33d27e4c4716caae4eced355097a47ad363fdcaf" integrity sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw== @@ -4143,13 +4382,6 @@ jest-diff "^25.2.1" pretty-format "^25.2.1" -"@types/jest@^24.0.16": - version "24.9.1" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.9.1.tgz#02baf9573c78f1b9974a5f36778b366aa77bd534" - integrity sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q== - dependencies: - jest-diff "^24.3.0" - "@types/joi@*", "@types/joi@^13.4.2": version "13.6.1" resolved "https://registry.yarnpkg.com/@types/joi/-/joi-13.6.1.tgz#325486a397504f8e22c8c551dc8b0e1d41d5d5ae" @@ -4241,6 +4473,14 @@ "@types/node" "*" "@types/webpack" "*" +"@types/loader-utils@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/loader-utils/-/loader-utils-2.0.1.tgz#4073425aca25762099823f7b922e86599c2b85ec" + integrity sha512-X3jTNi/I2AEd2WrHdSqRppPkYzWkRMNGxJzeMwS0o3hVi8ZB6JCnf/XyQmqpUuCidld5lC/1VxVgTktEweRK+w== + dependencies: + "@types/node" "*" + "@types/webpack" "*" + "@types/lodash.difference@^4.5.6": version "4.5.6" resolved "https://registry.yarnpkg.com/@types/lodash.difference/-/lodash.difference-4.5.6.tgz#41ec5c4e684eeacf543848a9a1b2a4856ccf9853" @@ -4289,6 +4529,13 @@ dependencies: "@types/linkify-it" "*" +"@types/markdown-to-jsx@^6.11.0": + version "6.11.1" + resolved "https://registry.yarnpkg.com/@types/markdown-to-jsx/-/markdown-to-jsx-6.11.1.tgz#4d9464aa76337d798b874dd3f2d6b4c86ddd98ad" + integrity sha512-fm/II24OzSx7J7CzXnHjEIf0d+s82bmdcokbyzY7PFMUnhyhnuGJgedt8R+yZgDn1mqhCLHmMjBPMsL8K4Xp9g== + dependencies: + "@types/react" "*" + "@types/md5@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@types/md5/-/md5-2.2.0.tgz#cd82e16b95973f94bb03dee40c5b6be4a7fb7fb4" @@ -4308,6 +4555,13 @@ resolved "https://registry.yarnpkg.com/@types/memoize-one/-/memoize-one-4.1.1.tgz#41dd138a4335b5041f7d8fc038f9d593d88b3369" integrity sha512-+9djKUUn8hOyktLCfCy4hLaIPgDNovaU36fsnZe9trFHr6ddlbIn2q0SEsnkCkNR+pBWEU440Molz/+Mpyf+gQ== +"@types/micromatch@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/micromatch/-/micromatch-4.0.1.tgz#9381449dd659fc3823fd2a4190ceacc985083bc7" + integrity sha512-my6fLBvpY70KattTNzYOK6KU1oR1+UCz9ug/JbcF5UrEmeCt9P7DV2t7L8+t18mMPINqGQCE4O8PLOPbI84gxw== + dependencies: + "@types/braces" "*" + "@types/mime-db@*": version "1.27.0" resolved "https://registry.yarnpkg.com/@types/mime-db/-/mime-db-1.27.0.tgz#9bc014a1fd1fdf47649c1a54c6dd7966b8284792" @@ -4390,7 +4644,7 @@ dependencies: "@types/node" "*" -"@types/node-fetch@^2.5.7": +"@types/node-fetch@^2.5.4", "@types/node-fetch@^2.5.7": version "2.5.7" resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.7.tgz#20a2afffa882ab04d44ca786449a276f9f6bbf3c" integrity sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw== @@ -4465,7 +4719,12 @@ dependencies: "@types/node" "*" -"@types/papaparse@^5.0.3": +"@types/overlayscrollbars@^1.9.0": + version "1.12.0" + resolved "https://registry.yarnpkg.com/@types/overlayscrollbars/-/overlayscrollbars-1.12.0.tgz#98456caceca8ad73bd5bb572632a585074e70764" + integrity sha512-h/pScHNKi4mb+TrJGDon8Yb06ujFG0mSg12wIO0sWMUF3dQIe2ExRRdNRviaNt9IjxIiOfnRr7FsQAdHwK4sMg== + +"@types/papaparse@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@types/papaparse/-/papaparse-5.0.3.tgz#7cedc1ebc9484819af8306a8b42f9f08ca9bdb44" integrity sha512-SgWGWnBGxl6XgjKDM2eoDg163ZFQtH6m6C2aOuaAf1T2gUB3rjaiPDDARbY9WlacRgZqieRG9imAfJaJ+5ouDA== @@ -4482,7 +4741,7 @@ resolved "https://registry.yarnpkg.com/@types/parse-link-header/-/parse-link-header-1.0.0.tgz#69f059e40a0fa93dc2e095d4142395ae6adc5d7a" integrity sha512-fCA3btjE7QFeRLfcD0Sjg+6/CnmC66HpMBoRfRzd2raTaWMJV21CCZ0LO8MOqf8onl5n0EPfjq4zDhbyX8SVwA== -"@types/parse5@*": +"@types/parse5@*", "@types/parse5@^5.0.0": version "5.0.3" resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== @@ -4492,10 +4751,10 @@ resolved "https://registry.yarnpkg.com/@types/pegjs/-/pegjs-0.10.1.tgz#9a2f3961dc62430fdb21061eb0ddbd890f9e3b94" integrity sha512-ra8IchO9odGQmYKbm+94K58UyKCEKdZh9y0vxhG4pIpOJOBlC1C+ZtBVr6jLs+/oJ4pl+1p/4t3JtBA8J10Vvw== -"@types/pngjs@^3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@types/pngjs/-/pngjs-3.3.2.tgz#8ed3bd655ab3a92ea32ada7a21f618e63b93b1d4" - integrity sha512-/SBsv93rVnjByzcau24rBwb+N7BHFp2LateaXz1e7m7M0Wzck/ymXTNdWVrCtkuMbwTHAnfdc3X/I/5szsTEAA== +"@types/pngjs@^3.4.0": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@types/pngjs/-/pngjs-3.4.2.tgz#8dc49b45fbcf18a5873179e3664f049388e39ecf" + integrity sha512-LJVPDraJ5YFEnMHnzxTN4psdWz1M61MtaAAWPn3qnDk5fvs7BAmmQ9pd3KPlrdrvozMyne4ktanD4pg0L7x1Pw== dependencies: "@types/node" "*" @@ -4514,7 +4773,7 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== -"@types/prettier@^2.0.2": +"@types/prettier@^2.0.0", "@types/prettier@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.0.2.tgz#5bb52ee68d0f8efa9cc0099920e56be6cc4e37f3" integrity sha512-IkVfat549ggtkZUthUzEX49562eGikhSYeVGX97SkMFn+sTZrgRewXjQ4tPKFPCykZHkX1Zfd9OoELGqKU2jJA== @@ -4553,12 +4812,17 @@ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== +"@types/qs@^6.9.0": + version "6.9.4" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.4.tgz#a59e851c1ba16c0513ea123830dd639a0a15cb6a" + integrity sha512-+wYo+L6ZF6BMoEjtf8zB2esQsqdV6WsjRK/GP9WOgLPrq87PbNWgIxS76dS5uvl/QXtHGakZmwTznIfcPXcKlQ== + "@types/rbush@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/rbush/-/rbush-3.0.0.tgz#b6887d99b159e87ae23cd14eceff34f139842aa6" integrity sha512-W3ue/GYWXBOpkRm0VSoifrP3HV0Ni47aVJWvXyWMcbtpBy/l/K/smBRiJ+fI8f7shXRjZBiux+iJzYbh7VmcZg== -"@types/reach__router@^1.2.3", "@types/reach__router@^1.2.6": +"@types/reach__router@^1.2.6": version "1.2.6" resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.2.6.tgz#b14cf1adbd1a365d204bbf6605cd9dd7b8816c87" integrity sha512-Oh5DAVr/L2svBvubw6QEFpXGu295Y406BPs4i9t1n2pp7M+q3pmCmhzb9oZV5wncR41KCD3NHl1Yhi7uKnTPsA== @@ -4566,6 +4830,14 @@ "@types/history" "*" "@types/react" "*" +"@types/reach__router@^1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.3.5.tgz#14e1e981cccd3a5e50dc9e969a72de0b9d472f6d" + integrity sha512-h0NbqXN/tJuBY/xggZSej1SKQEstbHO7J/omt1tYoFGmj3YXOodZKbbqD4mNDh7zvEGYd7YFrac1LTtAr3xsYQ== + dependencies: + "@types/history" "*" + "@types/react" "*" + "@types/react-beautiful-dnd@^13.0.0": version "13.0.0" resolved "https://registry.yarnpkg.com/@types/react-beautiful-dnd/-/react-beautiful-dnd-13.0.0.tgz#e60d3d965312fcf1516894af92dc3e9249587db4" @@ -4669,13 +4941,6 @@ dependencies: "@types/react" "*" -"@types/react-textarea-autosize@^4.3.3": - version "4.3.5" - resolved "https://registry.yarnpkg.com/@types/react-textarea-autosize/-/react-textarea-autosize-4.3.5.tgz#6c4d2753fa1864c98c0b2b517f67bb1f6e4c46de" - integrity sha512-PiDL83kPMTolyZAWW3lyzO6ktooTb9tFTntVy7CA83/qFLWKLJ5bLeRboy6J6j3b1e8h2Eec6gBTEOOJRjV14A== - dependencies: - "@types/react" "*" - "@types/react-virtualized-auto-sizer@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.0.tgz#fc32f30a8dab527b5816f3a757e1e1d040c8f272" @@ -4876,6 +5141,11 @@ resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.4.tgz#b4ffc7dc97b498c969b360a41eee247f82616370" integrity sha512-78AdXtlhpCHT0K3EytMpn4JNxaf5tbqbLcbIRoQIHzpTIyjpxLQKRoxU55ujBXAtg3Nl2h/XWvfDa9dsMOd0pQ== +"@types/tapable@^1.0.5", "@types/tapable@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" + integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== + "@types/tar-fs@^1.16.1": version "1.16.1" resolved "https://registry.yarnpkg.com/@types/tar-fs/-/tar-fs-1.16.1.tgz#6e3fba276c173e365ae91e55f7b797a0e64298e5" @@ -4980,14 +5250,6 @@ resolved "https://registry.yarnpkg.com/@types/valid-url/-/valid-url-1.0.2.tgz#60fa435ce24bfd5ba107b8d2a80796aeaf3a8f45" integrity sha1-YPpDXOJL/VuhB7jSqAeWrq86j0U= -"@types/vfile-message@*": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/vfile-message/-/vfile-message-1.0.1.tgz#e1e9895cc6b36c462d4244e64e6d0b6eaf65355a" - integrity sha512-mlGER3Aqmq7bqR1tTTIVHq8KSAFFRyGbrxuM8C/H82g6k7r2fS+IMEkIu3D7JHzG10NvPdR8DNx0jr0pwpp4dA== - dependencies: - "@types/node" "*" - "@types/unist" "*" - "@types/vfile-message@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/vfile-message/-/vfile-message-2.0.0.tgz#690e46af0fdfc1f9faae00cd049cc888957927d5" @@ -4995,15 +5257,6 @@ dependencies: vfile-message "*" -"@types/vfile@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/vfile/-/vfile-3.0.2.tgz#19c18cd232df11ce6fa6ad80259bc86c366b09b9" - integrity sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw== - dependencies: - "@types/node" "*" - "@types/unist" "*" - "@types/vfile-message" "*" - "@types/vinyl-fs@*", "@types/vinyl-fs@^2.4.11": version "2.4.11" resolved "https://registry.yarnpkg.com/@types/vinyl-fs/-/vinyl-fs-2.4.11.tgz#b98119b8bb2494141eaf649b09fbfeb311161206" @@ -5037,11 +5290,18 @@ "@types/node" "*" chokidar "^2.1.2" -"@types/webpack-env@^1.15.0", "@types/webpack-env@^1.15.2": +"@types/webpack-env@^1.15.2": version "1.15.2" resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.15.2.tgz#927997342bb9f4a5185a86e6579a0a18afc33b0a" integrity sha512-67ZgZpAlhIICIdfQrB5fnDvaKFcDxpKibxznfYRVAT4mQE41Dido/3Ty+E3xGBmTogc5+0Qb8tWhna+5B8z1iQ== +"@types/webpack-merge@^4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/webpack-merge/-/webpack-merge-4.1.5.tgz#265fbee4810474860d0f4c17e0107032881eed47" + integrity sha512-cbDo592ljSHeaVe5Q39JKN6Z4vMhmo4+C3JbksOIg+kjhKQYN2keGN7dvr/i18+dughij98Qrsfn1mU9NgVoCA== + dependencies: + "@types/webpack" "*" + "@types/webpack-sources@*": version "0.1.5" resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.5.tgz#be47c10f783d3d6efe1471ff7f042611bd464a92" @@ -5063,6 +5323,18 @@ "@types/webpack-sources" "*" source-map "^0.6.0" +"@types/webpack@^4.41.21", "@types/webpack@^4.41.5", "@types/webpack@^4.41.8": + version "4.41.21" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.21.tgz#cc685b332c33f153bb2f5fc1fa3ac8adeb592dee" + integrity sha512-2j9WVnNrr/8PLAB5csW44xzQSJwS26aOnICsP3pSGCEdsu6KYtfQ6QJsVUKHWRnm1bL7HziJsfh5fHqth87yKA== + dependencies: + "@types/anymatch" "*" + "@types/node" "*" + "@types/tapable" "*" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + source-map "^0.6.0" + "@types/write-pkg@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@types/write-pkg/-/write-pkg-3.1.0.tgz#f58767f4fb9a6a3ad8e95d3e9cd1f2d026ceab26" @@ -5213,21 +5485,45 @@ "@webassemblyjs/helper-wasm-bytecode" "1.8.5" "@webassemblyjs/wast-parser" "1.8.5" +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@webassemblyjs/floating-point-hex-parser@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + "@webassemblyjs/helper-api-error@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + "@webassemblyjs/helper-buffer@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + "@webassemblyjs/helper-code-frame@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" @@ -5235,11 +5531,23 @@ dependencies: "@webassemblyjs/wast-printer" "1.8.5" +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + "@webassemblyjs/helper-fsm@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + "@webassemblyjs/helper-module-context@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" @@ -5248,11 +5556,23 @@ "@webassemblyjs/ast" "1.8.5" mamacro "^0.0.3" +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + "@webassemblyjs/helper-wasm-section@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" @@ -5263,6 +5583,16 @@ "@webassemblyjs/helper-wasm-bytecode" "1.8.5" "@webassemblyjs/wasm-gen" "1.8.5" +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/ieee754@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" @@ -5270,6 +5600,13 @@ dependencies: "@xtuc/ieee754" "^1.2.0" +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + "@webassemblyjs/leb128@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" @@ -5277,11 +5614,23 @@ dependencies: "@xtuc/long" "4.2.2" +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + "@webassemblyjs/utf8@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + "@webassemblyjs/wasm-edit@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" @@ -5296,6 +5645,20 @@ "@webassemblyjs/wasm-parser" "1.8.5" "@webassemblyjs/wast-printer" "1.8.5" +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + "@webassemblyjs/wasm-gen@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" @@ -5307,6 +5670,17 @@ "@webassemblyjs/leb128" "1.8.5" "@webassemblyjs/utf8" "1.8.5" +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + "@webassemblyjs/wasm-opt@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" @@ -5317,6 +5691,16 @@ "@webassemblyjs/wasm-gen" "1.8.5" "@webassemblyjs/wasm-parser" "1.8.5" +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wasm-parser@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" @@ -5329,6 +5713,18 @@ "@webassemblyjs/leb128" "1.8.5" "@webassemblyjs/utf8" "1.8.5" +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + "@webassemblyjs/wast-parser@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" @@ -5341,6 +5737,18 @@ "@webassemblyjs/helper-fsm" "1.8.5" "@xtuc/long" "4.2.2" +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + "@webassemblyjs/wast-printer@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" @@ -5350,6 +5758,15 @@ "@webassemblyjs/wast-parser" "1.8.5" "@xtuc/long" "4.2.2" +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + "@webpack-contrib/schema-utils@^1.0.0-beta.0": version "1.0.0-beta.0" resolved "https://registry.yarnpkg.com/@webpack-contrib/schema-utils/-/schema-utils-1.0.0-beta.0.tgz#bf9638c9464d177b48209e84209e23bee2eb4f65" @@ -5432,13 +5849,6 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abort-controller@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-2.0.3.tgz#b174827a732efadff81227ed4b8d1cc569baf20a" - integrity sha512-EPSq5wr2aFyAZ1PejJB32IX9Qd4Nwus+adnp7STYFM5/23nLPBazqZ1oor6ZqbH+4otaaGXTlC8RN5hq3C8w9Q== - dependencies: - event-target-shim "^5.0.0" - abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -5524,7 +5934,7 @@ acorn@^3.0.4: resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= -acorn@^6.0.1, acorn@^6.0.4, acorn@^6.2.1: +acorn@^6.0.1, acorn@^6.0.4, acorn@^6.2.1, acorn@^6.4.1: version "6.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== @@ -5539,10 +5949,10 @@ acorn@^7.1.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== -address@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/address/-/address-1.1.0.tgz#ef8e047847fcd2c5b6f50c16965f924fd99fe709" - integrity sha512-4diPfzWbLEIElVG4AnqP+00SULlPzNuyJFNnmMrLgyaxG6tZXJ1sn7mjBu4fHrJE+Yp/jgylOweJn2xsLMFggQ== +address@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== address@^1.0.1: version "1.0.3" @@ -5753,7 +6163,7 @@ angular-route@^1.8.0: resolved "https://registry.yarnpkg.com/angular-route/-/angular-route-1.8.0.tgz#cb8066c5d34284ffd6a15ac7be1b3d51c5ad7bb2" integrity sha512-ORvXAdVfCCA6XFwyjSkVQFFGufj0mNGiCvBR93Qsii8+7t/6Ioy6wheUoCj1x4NWUv7hAq3nYYGCVO6QEKb1BQ== -angular-sanitize@1.8.0, angular-sanitize@^1.8.0: +angular-sanitize@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/angular-sanitize/-/angular-sanitize-1.8.0.tgz#9f80782d3afeec3bcc0bb92b3ca6f1f421cfbca6" integrity sha512-j5GiOPCvfcDWK5svEOVoPb11X3UDVy/mdHPRWuy14Iyw86xaq+Bb+x/em2sAOa5MQQeY5ciLXbF3RRp8iCKcNg== @@ -6244,7 +6654,7 @@ archiver-utils@^2.1.0: normalize-path "^3.0.0" readable-stream "^2.0.0" -archiver@3.1.1, archiver@^3.1.1: +archiver@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/archiver/-/archiver-3.1.1.tgz#9db7819d4daf60aec10fe86b16cb9258ced66ea0" integrity sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg== @@ -6354,11 +6764,6 @@ array-filter@^1.0.0: resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= - array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -6421,16 +6826,6 @@ array-last@^1.1.1: dependencies: is-number "^4.0.0" -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI= - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= - array-slice@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" @@ -6773,10 +7168,10 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== -axe-core@^3.4.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.1.tgz#d8d5aaef73f003e8b766ea28bb078343f3622201" - integrity sha512-mwpDgPwWB+5kMHyLjlxh4w25ClJfqSxi+c6LQ4ix349TdCUctMwJNPTkhPD1qP9SYIjFgjeVpVZWCvK9oBGwCg== +axe-core@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.0.2.tgz#c7cf7378378a51fcd272d3c09668002a4990b1cb" + integrity sha512-arU1h31OGFu+LPrOLGZ7nB45v940NMDMEJeNmbutu57P+UFDVnkZg3e+J1I2HJRZ9hT7gO8J91dn/PMrAiKakA== axios@^0.18.0: version "0.18.1" @@ -6918,6 +7313,14 @@ babel-plugin-add-react-displayname@^0.0.5: resolved "https://registry.yarnpkg.com/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz#339d4cddb7b65fd62d1df9db9fe04de134122bd5" integrity sha1-M51M3be2X9YtHfnbn+BN4TQSK9U= +babel-plugin-apply-mdx-type-prop@1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.16.tgz#4becd65b3aa108f15c524a0b125ca7c81f3443d8" + integrity sha512-hjUd24Yhnr5NKtHpC2mcRBGjC6RUKGzSzjN9g5SdjT4WpL/JDlpmjyBf7vWsJJSXFvMIbzRyxF4lT9ukwOnj/w== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + "@mdx-js/util" "1.6.16" + babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" @@ -6957,6 +7360,13 @@ babel-plugin-emotion@^10.0.22: find-root "^1.1.0" source-map "^0.5.7" +babel-plugin-extract-import-names@1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.16.tgz#b964004e794bdd62534c525db67d9e890d5cc079" + integrity sha512-Da6Ra0sbA/1Iavli8LdMbTjyrsOPaxMm4lrKl8VJN4sJI5F64qy2EpLj3+5INLvNPfW4ddwpStbfP3Rf3jIgcw== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + babel-plugin-filter-imports@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-filter-imports/-/babel-plugin-filter-imports-3.0.0.tgz#a849683837ad29960da17492fb32789ab6b09a11" @@ -6965,15 +7375,6 @@ babel-plugin-filter-imports@^3.0.0: "@babel/types" "^7.4.0" lodash "^4.17.11" -babel-plugin-istanbul@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.1.tgz#7981590f1956d75d67630ba46f0c22493588c893" - integrity sha512-RNNVv2lsHAXJQsEJ5jonQwrJVWK8AcZpG1oxhnjCUaAjL7xahYLANhPUZbzEQHjKy1NMYUwn+0NPKQc8iSY4xQ== - dependencies: - find-up "^3.0.0" - istanbul-lib-instrument "^3.0.0" - test-exclude "^5.0.0" - babel-plugin-istanbul@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" @@ -7002,7 +7403,7 @@ babel-plugin-macros@^2.0.0: cosmiconfig "^5.0.5" resolve "^1.8.1" -babel-plugin-macros@^2.7.0: +babel-plugin-macros@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== @@ -7090,7 +7491,7 @@ babel-plugin-named-asset-import@^0.3.1: resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.3.tgz#9ba2f3ac4dc78b042651654f07e847adfe50667c" integrity sha512-1XDRysF4894BUdMChT+2HHbtJYiO7zx5Be7U6bT8dISy7OdyETMGIAQBMPQCsY1YRf0xcubwnKKaDr5bk15JTA== -babel-plugin-react-docgen@^4.0.0: +babel-plugin-react-docgen@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.1.0.tgz#1dfa447dac9ca32d625a123df5733a9e47287c26" integrity sha512-vzpnBlfGv8XOhJM2zbPyyqw2OLEbelgZZsaaRRTpVwNKuYuc+pUg4+dy7i9gCRms0uOQn4osX571HRcCJMJCmA== @@ -7437,6 +7838,13 @@ before-after-hook@^2.1.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== +better-opn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/better-opn/-/better-opn-2.0.0.tgz#c70d198e51164bdc220306a28a885d9ac7a14c44" + integrity sha512-PPbGRgO/K0LowMHbH/JNvaV3qY3Vt+A2nH28fzJxy16h/DfR5OsVti6ldGl6S9SMsyUqT13sltikiAVtI6tKLA== + dependencies: + open "^7.0.3" + big-integer@^1.6.16: version "1.6.48" resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" @@ -7830,14 +8238,15 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@4.6.6: - version "4.6.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.6.tgz#6e4bf467cde520bc9dbdf3747dafa03531cec453" - integrity sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA== +browserslist@4.10.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.10.0.tgz#f179737913eaf0d2b98e4926ac1ca6a15cbcc6a9" + integrity sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA== dependencies: - caniuse-lite "^1.0.30000984" - electron-to-chromium "^1.3.191" - node-releases "^1.1.25" + caniuse-lite "^1.0.30001035" + electron-to-chromium "^1.3.378" + node-releases "^1.1.52" + pkg-up "^3.1.0" browserslist@^4.12.0: version "4.12.0" @@ -8025,6 +8434,29 @@ cacache@^15.0.3, cacache@^15.0.4: tar "^6.0.2" unique-filename "^1.1.1" +cacache@^15.0.5: + version "15.0.5" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" + integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== + dependencies: + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.0" + tar "^6.0.2" + unique-filename "^1.1.1" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -8159,6 +8591,19 @@ camel-case@3.0.x, camel-case@^3.0.0: no-case "^2.2.0" upper-case "^1.1.1" +camel-case@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547" + integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q== + dependencies: + pascal-case "^3.1.1" + tslib "^1.10.0" + +camelcase-css@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -8220,16 +8665,16 @@ camelize@^1.0.0: resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= -can-use-dom@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/can-use-dom/-/can-use-dom-0.1.0.tgz#22cc4a34a0abc43950f42c6411024a3f6366b45a" - integrity sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo= - -caniuse-lite@^1.0.30000984, caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001022, caniuse-lite@^1.0.30001043: +caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001022, caniuse-lite@^1.0.30001043: version "1.0.30001094" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001094.tgz#0b11d02e1cdc201348dbd8e3e57bd9b6ce82b175" integrity sha512-ufHZNtMaDEuRBpTbqD93tIQnngmJ+oBknjvr0IbFympSdtFpAUFmNv4mVKbb53qltxFx0nK3iy32S9AqkLzUNA== +caniuse-lite@^1.0.30001035: + version "1.0.30001114" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001114.tgz#2e88119afb332ead5eaa330e332e951b1c4bfea9" + integrity sha512-ml/zTsfNBM+T1+mjglWRPgVsu2L76GAaADKX5f4t0pbhttEp0WMawJsHDYlFkVZkoA+89uvBRrVrEE4oqenzXQ== + caniuse-lite@^1.0.30001097: version "1.0.30001107" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001107.tgz#809360df7a5b3458f627aa46b0f6ed6d5239da9a" @@ -8520,21 +8965,6 @@ chokidar@2.1.2: optionalDependencies: fsevents "^1.2.7" -chokidar@3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.2.1.tgz#4634772a1924512d990d4505957bf3a510611387" - integrity sha512-/j5PPkb5Feyps9e+jo07jUZGvkB5Aj953NrI4s8xSVScrAo/RHeILrtdb4uzR7N6aaFFxxJ+gt8mA8HfNpw76w== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.1.3" - optionalDependencies: - fsevents "~2.1.0" - chokidar@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" @@ -8569,10 +8999,10 @@ chokidar@^2.0.0, chokidar@^2.0.4, chokidar@^2.1.2, chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.2.2, chokidar@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" - integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g== +chokidar@^3.2.2, chokidar@^3.3.0, chokidar@^3.4.0, chokidar@^3.4.1, chokidar@^3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" + integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -8667,7 +9097,7 @@ class-utils@^0.3.5: lazy-cache "^2.0.2" static-extend "^0.1.1" -classnames@2.2.6, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6: +classnames@2.2.6, classnames@^2.2.5, classnames@^2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== @@ -8684,6 +9114,13 @@ clean-css@4.2.x: dependencies: source-map "~0.6.0" +clean-css@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + dependencies: + source-map "~0.6.0" + clean-stack@^1.0.0, clean-stack@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-1.3.0.tgz#9e821501ae979986c46b1d66d2d432db2fd4ae31" @@ -8758,17 +9195,7 @@ cli-spinners@^2.4.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.4.0.tgz#c6256db216b878cfba4720e719cec7cf72685d7f" integrity sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA== -cli-table3@0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" - integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== - dependencies: - object-assign "^4.1.0" - string-width "^2.1.1" - optionalDependencies: - colors "^1.1.2" - -cli-table3@~0.6.0: +cli-table3@0.6.0, cli-table3@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== @@ -9172,11 +9599,6 @@ commander@2.17.x, commander@~2.17.1: resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -commander@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" - integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== - commander@^2.13.0, commander@^2.15.1, commander@^2.16.0, commander@^2.19.0: version "2.20.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" @@ -9192,10 +9614,10 @@ commander@^2.8.1: resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" integrity sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ== -commander@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.0.tgz#0641ea00838c7a964627f04cddc336a2deddd60a" - integrity sha512-pl3QrGOBa9RZaslQiqnnKX2J068wcQw7j9AIaBQ9/JEp5RY6je4jKTImg0Bd+rpoONSe7GUFSgkxLeo17m3Pow== +commander@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== commander@^4.0.1, commander@^4.1.1: version "4.1.1" @@ -9588,7 +10010,7 @@ core-js@^1.0.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= -core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.1, core-js@^2.5.3, core-js@^2.6.5, core-js@^2.6.9: +core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.3, core-js@^2.6.5, core-js@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== @@ -9598,19 +10020,16 @@ core-js@^3.0.1, core-js@^3.0.4, core-js@^3.6.4: resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.4.tgz#440a83536b458114b9cb2ac1580ba377dc470647" integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw== +core-js@^3.6.5: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" + integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== + core-util-is@1.0.2, core-util-is@^1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -corejs-upgrade-webpack-plugin@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/corejs-upgrade-webpack-plugin/-/corejs-upgrade-webpack-plugin-2.2.0.tgz#503293bf1fdcb104918eb40d0294e4776ad6923a" - integrity sha512-J0QMp9GNoiw91Kj/dkIQFZeiCXgXoja/Wlht1SPybxerBWh4NCmb0pOgCv61lrlQZETwvVVfAFAA3IqoEO9aqQ== - dependencies: - resolve-from "^5.0.0" - webpack "^4.38.0" - cors@^2.8.4: version "2.8.5" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" @@ -9639,7 +10058,7 @@ cosmiconfig@^5.0.5: js-yaml "^3.9.0" parse-json "^4.0.0" -cosmiconfig@^5.2.0, cosmiconfig@^5.2.1: +cosmiconfig@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== @@ -9744,20 +10163,7 @@ create-react-class@^15.5.1, create-react-class@^15.5.2: loose-envify "^1.3.1" object-assign "^4.1.1" -create-react-context@^0.1.5: - version "0.1.6" - resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.1.6.tgz#0f425931d907741127acc6e31acb4f9015dd9fdc" - integrity sha512-eCnYYEUEc5i32LHwpE/W7NlddOB9oHwsPaWtWzYtflNkkwa3IfindIcoXdVWs12zCbwaMCavKNu84EXogVIWHw== - -create-react-context@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.2.3.tgz#9ec140a6914a22ef04b8b09b7771de89567cb6f3" - integrity sha512-CQBmD0+QGgTaxDL3OX1IDXYqjkp2It4RIbcb99jS6AEg27Ga+a9G3JtK6SIu0HBwPLZlmwt9F7UwWA4Bn92Rag== - dependencies: - fbjs "^0.8.0" - gud "^1.0.0" - -create-react-context@^0.3.0: +create-react-context@0.3.0, create-react-context@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c" integrity sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw== @@ -9765,6 +10171,11 @@ create-react-context@^0.3.0: gud "^1.0.0" warning "^4.0.3" +create-react-context@^0.1.5: + version "0.1.6" + resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.1.6.tgz#0f425931d907741127acc6e31acb4f9015dd9fdc" + integrity sha512-eCnYYEUEc5i32LHwpE/W7NlddOB9oHwsPaWtWzYtflNkkwa3IfindIcoXdVWs12zCbwaMCavKNu84EXogVIWHw== + cronstrue@^1.51.0: version "1.51.0" resolved "https://registry.yarnpkg.com/cronstrue/-/cronstrue-1.51.0.tgz#7a63153d61d940344049037628da38a60784c8e2" @@ -9804,6 +10215,15 @@ cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@7.0.1, cross-spawn@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" + integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + cross-spawn@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" @@ -9821,15 +10241,6 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" - integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - crypt@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" @@ -9913,7 +10324,7 @@ css-in-js-utils@^2.0.0: hyphenate-style-name "^1.0.2" isobject "^3.0.1" -css-loader@^3.0.0, css-loader@^3.4.2: +css-loader@^3.4.2: version "3.4.2" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.4.2.tgz#d3fdb3358b43f233b78501c5ed7b1c6da6133202" integrity sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA== @@ -9931,6 +10342,25 @@ css-loader@^3.0.0, css-loader@^3.4.2: postcss-value-parser "^4.0.2" schema-utils "^2.6.0" +css-loader@^3.5.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" + integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== + dependencies: + camelcase "^5.3.1" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^1.2.3" + normalize-path "^3.0.0" + postcss "^7.0.32" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.2" + postcss-modules-scope "^2.2.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.0" + semver "^6.3.0" + css-select-base-adapter@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" @@ -10155,10 +10585,10 @@ d3-array@1, d3-array@1.2.4, d3-array@^1.1.1, d3-array@^1.2.0, d3-array@^1.2.4: resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== -"d3-array@1.2.0 - 2", d3-array@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.4.0.tgz#87f8b9ad11088769c82b5ea846bcb1cc9393f242" - integrity sha512-KQ41bAF2BMakf/HdKT865ALd4cgND6VcIztVQZUTt0+BH3RWy6ZYnHghVXf6NFjt2ritLr8H1T8LreAAlfiNcw== +"d3-array@1 - 2", d3-array@>=2.5, d3-array@^2.3.0, d3-array@^2.7.1: + version "2.8.0" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.8.0.tgz#f76e10ad47f1f4f75f33db5fc322eb9ffde5ef23" + integrity sha512-6V272gsOeg7+9pTW1jSYOR1QE37g95I3my1hBmY+vOUNHRrk9yt4OTz/gK7PMkVAVDrYYq4mq3grTiZ8iJdNIw== d3-cloud@1.2.5: version "1.2.5" @@ -10172,11 +10602,16 @@ d3-collection@1, d3-collection@^1.0.3, d3-collection@^1.0.7: resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e" integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A== -d3-color@1, d3-color@^1.0.3, d3-color@^1.4.0, d3-color@^1.4.1: +d3-color@1, d3-color@^1.0.3, d3-color@^1.4.0: version "1.4.1" resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.1.tgz#c52002bf8846ada4424d55d97982fef26eb3bc8a" integrity sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q== +"d3-color@1 - 2", d3-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-2.0.0.tgz#8d625cab42ed9b8f601a1760a389f7ea9189d62e" + integrity sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ== + d3-contour@^1.1.0: version "1.3.2" resolved "https://registry.yarnpkg.com/d3-contour/-/d3-contour-1.3.2.tgz#652aacd500d2264cb3423cee10db69f6f59bead3" @@ -10184,7 +10619,7 @@ d3-contour@^1.1.0: dependencies: d3-array "^1.1.1" -d3-delaunay@^5.2.1: +d3-delaunay@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/d3-delaunay/-/d3-delaunay-5.3.0.tgz#b47f05c38f854a4e7b3cea80e0bb12e57398772d" integrity sha512-amALSrOllWVLaHTnDLHwMIiz0d1bBu9gZXd1FiLfXf8sHcX9jrcj81TVZOqD4UX7MgBZZ07c8GxzEgBpJqc74w== @@ -10196,10 +10631,15 @@ d3-dispatch@1, d3-dispatch@^1.0.3: resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.6.tgz#00d37bcee4dd8cd97729dd893a0ac29caaba5d58" integrity sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA== -d3-dsv@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.2.0.tgz#9d5f75c3a5f8abd611f74d3f5847b0d4338b885c" - integrity sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g== +"d3-dispatch@1 - 2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-2.0.0.tgz#8a18e16f76dd3fcaef42163c97b926aa9b55e7cf" + integrity sha512-S/m2VsXI7gAti2pBoLClFFTMOO1HTtT0j99AuXLoGFKO6deHDdnv6ZGTxSTTUTgO1zVcv82fCOtDjYK4EECmWA== + +d3-dsv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-2.0.0.tgz#b37b194b6df42da513a120d913ad1be22b5fe7c5" + integrity sha512-E+Pn8UJYx9mViuIUkoc93gJGGYut6mSDKy2+XaPwccwkRGlR+LO97L2VCCRjQivTwLHkSnAJG7yo00BWY6QM+w== dependencies: commander "2" iconv-lite "0.4" @@ -10210,58 +10650,87 @@ d3-ease@1: resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.6.tgz#ebdb6da22dfac0a22222f2d4da06f66c416a0ec0" integrity sha512-SZ/lVU7LRXafqp7XtIcBdxnWl8yyLpgOmzAk0mWBI9gXNzLDx5ybZgnRbH9dN/yY5tzVBqCQ9avltSnqVwessQ== -d3-force@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-2.0.1.tgz#31750eee8c43535301d571195bf9683beda534e2" - integrity sha512-zh73/N6+MElRojiUG7vmn+3vltaKon7iD5vB/7r9nUaBeftXMzRo5IWEG63DLBCto4/8vr9i3m9lwr1OTJNiCg== +d3-force@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-2.1.1.tgz#f20ccbf1e6c9e80add1926f09b51f686a8bc0937" + integrity sha512-nAuHEzBqMvpFVMf9OX75d00OxvOXdxY+xECIXjW6Gv8BRrXu6gAWbv/9XKrvfJ5i5DCokDW7RYE50LRoK092ew== dependencies: - d3-dispatch "1" - d3-quadtree "1" - d3-timer "1" + d3-dispatch "1 - 2" + d3-quadtree "1 - 2" + d3-timer "1 - 2" -d3-format@1, d3-format@^1.2.0, d3-format@^1.4.4: +d3-format@1, d3-format@^1.2.0: version "1.4.4" resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.4.tgz#356925f28d0fd7c7983bfad593726fce46844030" integrity sha512-TWks25e7t8/cqctxCmxpUuzZN11QxIA7YrMbram94zMQ0PXjE4LVIMe/f6a4+xxL8HQ3OsAFULOINQi1pE62Aw== -d3-geo-projection@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/d3-geo-projection/-/d3-geo-projection-2.9.0.tgz#826db62f748e8ecd67cd00aced4c26a236ec030c" - integrity sha512-ZULvK/zBn87of5rWAfFMc9mJOipeSo57O+BBitsKIXmU4rTVAnX1kSsJkE0R+TxY8pGNoM1nbyRRE7GYHhdOEQ== +"d3-format@1 - 2", d3-format@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-2.0.0.tgz#a10bcc0f986c372b729ba447382413aabf5b0767" + integrity sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA== + +d3-geo-projection@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-geo-projection/-/d3-geo-projection-3.0.0.tgz#45ad8ce756cdbfa8340b11b2988644d8e1fa42e4" + integrity sha512-1JE+filVbkEX2bT25dJdQ05iA4QHvUwev6o0nIQHOSrNlHCAKfVss/U10vEM3pA4j5v7uQoFdQ4KLbx9BlEbWA== dependencies: commander "2" - d3-array "1" - d3-geo "^1.12.0" + d3-array "1 - 2" + d3-geo "1.12.0 - 2" resolve "^1.1.10" -d3-geo@^1.12.0, d3-geo@^1.12.1, d3-geo@^1.6.4: +"d3-geo@1.12.0 - 2", d3-geo@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-2.0.1.tgz#2437fdfed3fe3aba2812bd8f30609cac83a7ee39" + integrity sha512-M6yzGbFRfxzNrVhxDJXzJqSLQ90q1cCyb3EWFZ1LF4eWOBYxFypw7I/NFVBNXKNqxv1bqLathhYvdJ6DC+th3A== + dependencies: + d3-array ">=2.5" + +d3-geo@^1.6.4: version "1.12.1" resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.12.1.tgz#7fc2ab7414b72e59fbcbd603e80d9adc029b035f" integrity sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg== dependencies: d3-array "1" -d3-hierarchy@^1.1.4, d3-hierarchy@^1.1.9: +d3-hierarchy@^1.1.4: version "1.1.9" resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz#2f6bee24caaea43f8dc37545fa01628559647a83" integrity sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ== -d3-interpolate@1, d3-interpolate@^1.1.4, d3-interpolate@^1.2.0, d3-interpolate@^1.4.0: +d3-hierarchy@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-2.0.0.tgz#dab88a58ca3e7a1bc6cab390e89667fcc6d20218" + integrity sha512-SwIdqM3HxQX2214EG9GTjgmCc/mbSx4mQBn+DuEETubhOw6/U3fmnji4uCVrmzOydMHSO1nZle5gh6HB/wdOzw== + +d3-interpolate@1, d3-interpolate@^1.1.4: version "1.4.0" resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.4.0.tgz#526e79e2d80daa383f9e0c1c1c7dcc0f0583e987" integrity sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA== dependencies: d3-color "1" -d3-path@1, d3-path@^1.0.9: +"d3-interpolate@1.2.0 - 2", d3-interpolate@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-2.0.1.tgz#98be499cfb8a3b94d4ff616900501a64abc91163" + integrity sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ== + dependencies: + d3-color "1 - 2" + +d3-path@1: version "1.0.9" resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf" integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg== -d3-quadtree@1: - version "1.0.7" - resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-1.0.7.tgz#ca8b84df7bb53763fe3c2f24bd435137f4e53135" - integrity sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA== +"d3-path@1 - 2", d3-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-2.0.0.tgz#55d86ac131a0548adae241eebfb56b4582dd09d8" + integrity sha512-ZwZQxKhBnv9yHaiWd6ZU4x5BtCQ7pXszEV9CU6kRgwIQVQGLMv1oiL4M+MK/n79sYzsj+gcgpPQSctJUsLN7fA== + +"d3-quadtree@1 - 2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-2.0.0.tgz#edbad045cef88701f6fee3aee8e93fb332d30f9d" + integrity sha512-b0Ed2t1UUalJpc3qXzKi+cPGxeXRr4KU9YSlocN74aTzp6R/Ud43t79yLLqxHRWZfsvWXmbDWPpoENK1K539xw== d3-sankey@^0.7.1: version "0.7.1" @@ -10285,46 +10754,70 @@ d3-scale@1.0.7, d3-scale@^1.0.5, d3-scale@^1.0.7: d3-time "1" d3-time-format "2" -d3-scale@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-3.2.1.tgz#da1684adce7261b4bc7a76fe193d887f0e909e69" - integrity sha512-huz5byJO/6MPpz6Q8d4lg7GgSpTjIZW/l+1MQkzKfu2u8P6hjaXaStOpmyrD6ymKoW87d2QVFCKvSjLwjzx/rA== +d3-scale@^3.2.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-3.2.3.tgz#be380f57f1f61d4ff2e6cbb65a40593a51649cfd" + integrity sha512-8E37oWEmEzj57bHcnjPVOBS3n4jqakOeuv1EDdQSiSrYnMCBdMd3nc4HtKk7uia8DUHcY/CGuJ42xxgtEYrX0g== dependencies: - d3-array "1.2.0 - 2" - d3-format "1" - d3-interpolate "^1.2.0" - d3-time "1" - d3-time-format "2" + d3-array "^2.3.0" + d3-format "1 - 2" + d3-interpolate "1.2.0 - 2" + d3-time "1 - 2" + d3-time-format "2 - 3" d3-selection@^1.0.2, d3-selection@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.4.1.tgz#98eedbbe085fbda5bafa2f9e3f3a2f4d7d622a98" integrity sha512-BTIbRjv/m5rcVTfBs4AMBLKs4x8XaaLkwm28KWu9S2vKNqXkXt2AH2Qf0sdPZHjFxcWg/YL53zcqAz+3g4/7PA== -d3-shape@^1.1.0, d3-shape@^1.2.0, d3-shape@^1.3.4, d3-shape@^1.3.7: +d3-shape@^1.1.0, d3-shape@^1.2.0, d3-shape@^1.3.4: version "1.3.7" resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7" integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw== dependencies: d3-path "1" -d3-time-format@2, d3-time-format@^2.2.3: +d3-shape@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-2.0.0.tgz#2331b62fa784a2a1daac47a7233cfd69301381fd" + integrity sha512-djpGlA779ua+rImicYyyjnOjeubyhql1Jyn1HK0bTyawuH76UQRWXd+pftr67H6Fa8hSwetkgb/0id3agKWykw== + dependencies: + d3-path "1 - 2" + +d3-time-format@2: version "2.2.3" resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.2.3.tgz#0c9a12ee28342b2037e5ea1cf0b9eb4dd75f29cb" integrity sha512-RAHNnD8+XvC4Zc4d2A56Uw0yJoM7bsvOlJR33bclxq399Rak/b9bhvu/InjxdWhPtkgU53JJcleJTGkNRnN6IA== dependencies: d3-time "1" -d3-time@1, d3-time@^1.1.0: +"d3-time-format@2 - 3", d3-time-format@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-3.0.0.tgz#df8056c83659e01f20ac5da5fdeae7c08d5f1bb6" + integrity sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag== + dependencies: + d3-time "1 - 2" + +d3-time@1: version "1.1.0" resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1" integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA== -d3-timer@1, d3-timer@^1.0.10: +"d3-time@1 - 2", d3-time@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-2.0.0.tgz#ad7c127d17c67bd57a4c61f3eaecb81108b1e0ab" + integrity sha512-2mvhstTFcMvwStWd9Tj3e6CEqtOivtD8AUiHT8ido/xmzrI9ijrUUihZ6nHuf/vsScRBonagOdj0Vv+SEL5G3Q== + +d3-timer@1: version "1.0.10" resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.10.tgz#dfe76b8a91748831b13b6d9c793ffbd508dd9de5" integrity sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw== +"d3-timer@1 - 2", d3-timer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-2.0.0.tgz#055edb1d170cfe31ab2da8968deee940b56623e6" + integrity sha512-TO4VLh0/420Y/9dO3+f9abDEFYeCUr2WZRlxJvbp4HPTQcSylXNiL6yZa9FIUvV1yRiFufl1bszTCLDqv9PWNA== + d3-transition@^1.0.1: version "1.3.2" resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.3.2.tgz#a98ef2151be8d8600543434c1ca80140ae23b398" @@ -10811,7 +11304,7 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detab@^2.0.0: +detab@2.0.3, detab@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.3.tgz#33e5dd74d230501bd69985a0d2b9a3382699a130" integrity sha512-Up8P0clUVwq0FnFjDclzZsy9PadzRn5FFxrr47tQQvMHqyiFYVbpH8oXDzWtF0Q7pYy3l+RPmtBl+BsFF6wH0A== @@ -11008,6 +11501,11 @@ diff-sequences@^25.2.6: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== +diff-sequences@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.3.0.tgz#62a59b1b29ab7fd27cef2a33ae52abe73042d0a2" + integrity sha512-5j5vdRcw3CNctePNYN0Wy2e/JbWT6cAYnXv5OuqPhDpyCGc0uLu2TK0zOCJWNB9kOIfYMSpIulRaDgIi4HJ6Ig== + diff@3.5.0, diff@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -11113,11 +11611,6 @@ dom-converter@~0.2: dependencies: utila "~0.4" -"dom-helpers@^2.4.0 || ^3.0.0": - version "3.3.1" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6" - integrity sha512-2Sm+JaYn74OiTM2wHvxJOo3roiq/h25Yi69Fqk269cNUwIXsCvATB6CRSFC9Am/20G2b28hGv/+7NiWydIrPvg== - dom-helpers@^5.0.0: version "5.1.3" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.1.3.tgz#7233248eb3a2d1f74aafca31e52c5299cc8ce821" @@ -11208,6 +11701,14 @@ dot-case@^2.1.0: dependencies: no-case "^2.2.0" +dot-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa" + integrity sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA== + dependencies: + no-case "^3.0.3" + tslib "^1.10.0" + dot-prop@^4.1.0, dot-prop@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" @@ -11379,12 +11880,12 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -ejs@^2.3.1, ejs@^2.7.4: +ejs@^2.3.1: version "2.7.4" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -ejs@^3.0.1, ejs@^3.1.5: +ejs@^3.0.1, ejs@^3.1.2, ejs@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.5.tgz#aed723844dc20acb4b170cd9ab1017e476a0d93b" integrity sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w== @@ -11460,11 +11961,16 @@ elasticsearch@^16.7.0: chalk "^1.0.0" lodash "^4.17.10" -electron-to-chromium@^1.3.191, electron-to-chromium@^1.3.338: +electron-to-chromium@^1.3.338: version "1.3.340" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.340.tgz#5d4fe78e984d4211194cf5a52e08069543da146f" integrity sha512-hRFBAglhcj5iVYH+o8QU0+XId1WGoc0VGowJB1cuJAt3exHGrivZvWeAO5BRgBZqwZtwxjm8a5MQeGoT/Su3ww== +electron-to-chromium@^1.3.378: + version "1.3.533" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.533.tgz#d7e5ca4d57e9bc99af87efbe13e7be5dde729b0f" + integrity sha512-YqAL+NXOzjBnpY+dcOKDlZybJDCOzgsq4koW3fvyty/ldTmsb4QazZpOWmVvZ2m0t5jbBf7L0lIGU3BUipwG+A== + electron-to-chromium@^1.3.413: version "1.3.465" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.465.tgz#d692e5c383317570c2bd82092a24a0308c6ccf29" @@ -11502,6 +12008,11 @@ elliptic@^6.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" +"emoji-regex@>=6.0.0 <=6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e" + integrity sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4= + emoji-regex@^7.0.1, emoji-regex@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -11560,6 +12071,15 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1, end-of-stream@ dependencies: once "^1.4.0" +endent@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/endent/-/endent-2.0.1.tgz#fb18383a3f37ae3213a5d9f6c4a880d1061eb4c5" + integrity sha512-mADztvcC+vCk4XEZaCz6xIPO2NHQuprv5CAEjuVAu6aZwqAj7nVNlMyl1goPFYqCCpS2OJV9jwpumJLkotZrNw== + dependencies: + dedent "^0.7.0" + fast-json-parse "^1.0.3" + objectorarray "^1.0.4" + enhanced-resolve@4.1.0, enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" @@ -11569,6 +12089,15 @@ enhanced-resolve@4.1.0, enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: memory-fs "^0.4.0" tapable "^1.0.0" +enhanced-resolve@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" + integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + enhanced-resolve@~0.9.0: version "0.9.1" resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" @@ -11746,7 +12275,7 @@ es-abstract@^1.10.0, es-abstract@^1.13.0, es-abstract@^1.4.3, es-abstract@^1.5.0 string.prototype.trimleft "^2.1.1" string.prototype.trimright "^2.1.1" -es-abstract@^1.17.0, es-abstract@^1.17.4, es-abstract@^1.17.5: +es-abstract@^1.17.0, es-abstract@^1.17.2, es-abstract@^1.17.4, es-abstract@^1.17.5: version "1.17.6" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== @@ -11939,6 +12468,11 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.0, escape-string-regexp@^1 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + escodegen@^1.11.0: version "1.14.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" @@ -11963,6 +12497,18 @@ escodegen@^1.11.1: optionalDependencies: source-map "~0.6.1" +escodegen@^1.12.0: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + escodegen@^1.8.0: version "1.11.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510" @@ -12634,6 +13180,18 @@ expect@^25.5.0: jest-message-util "^25.5.0" jest-regex-util "^25.2.6" +expect@^26.4.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.4.0.tgz#34a0aae523343b0931ff1cf0aa972dfe40edfab4" + integrity sha512-dbYDJhFcqQsamlos6nEwAMe+ahdckJBk5fmw1DYGLQGabGSlUuT+Fm2jHYw5119zG3uIhP+lCQbjJhFEdZMJtg== + dependencies: + "@jest/types" "^26.3.0" + ansi-styles "^4.0.0" + jest-get-type "^26.3.0" + jest-matcher-utils "^26.4.0" + jest-message-util "^26.3.0" + jest-regex-util "^26.0.0" + expiry-js@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/expiry-js/-/expiry-js-0.1.7.tgz#76be8c05e572bf936df40c1766448d0b3b2f555f" @@ -12836,7 +13394,7 @@ fancy-log@^1.3.2: color-support "^1.1.3" time-stamp "^1.0.0" -fast-deep-equal@^2.0.1, fast-deep-equal@^3.1.1, fast-deep-equal@~3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@~3.1.3: version "3.1.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== @@ -12875,6 +13433,11 @@ fast-glob@^3.0.3, fast-glob@^3.1.1, fast-glob@^3.2.2: micromatch "^4.0.2" picomatch "^2.2.1" +fast-json-parse@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fast-json-parse/-/fast-json-parse-1.0.3.tgz#43e5c61ee4efa9265633046b770fb682a7577c4d" + integrity sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw== + fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -12952,7 +13515,7 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" -fbjs@^0.8.0, fbjs@^0.8.1, fbjs@^0.8.16, fbjs@^0.8.4, fbjs@^0.8.9: +fbjs@^0.8.1, fbjs@^0.8.16, fbjs@^0.8.9: version "0.8.17" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= @@ -13048,6 +13611,14 @@ file-loader@^4.2.0: loader-utils "^1.2.3" schema-utils "^2.0.0" +file-loader@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.0.0.tgz#97bbfaab7a2460c07bcbd72d3a6922407f67649f" + integrity sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.6.5" + file-saver@^1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-1.3.8.tgz#e68a30c7cb044e2fb362b428469feb291c2e09d8" @@ -13096,10 +13667,10 @@ filelist@^1.0.1: dependencies: minimatch "^3.0.4" -filesize@3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" - integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== +filesize@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.0.1.tgz#f850b509909c7c86f7e450ea19006c31c2ed3d2f" + integrity sha512-u4AYWPgbI5GBhs6id1KdImZWn5yfyFrrQ8OWZdN7ZMfA8Bf4HcO0BGo9bmUIEV8yrp8I1xVfJ/dn90GtFNNJcg== filing-cabinet@^2.3.1: version "2.3.3" @@ -13184,7 +13755,7 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" -find-cache-dir@^3.0.0, find-cache-dir@^3.2.0, find-cache-dir@^3.3.1: +find-cache-dir@^3.2.0, find-cache-dir@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== @@ -13205,6 +13776,14 @@ find-up@3.0.0, find-up@^3.0.0: dependencies: locate-path "^3.0.0" +find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -13220,14 +13799,6 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" @@ -13374,7 +13945,7 @@ focus-lock@^0.7.0: resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.7.0.tgz#b2bfb0ca7beacc8710a1ff74275fe0dc60a1d88a" integrity sha512-LI7v2mH02R55SekHYdv9pRHR9RajVNyIJ2N5IEkWbg7FT5ZmJ9Hw4mWxHeEUcd+dJo0QmzztHvDvWcc7prVFsw== -focus-trap-react@^3.0.4, focus-trap-react@^3.1.1: +focus-trap-react@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/focus-trap-react/-/focus-trap-react-3.1.2.tgz#4dd021ccd028bbd3321147d132cdf7585d6d1394" integrity sha512-MoQmONoy9gRPyrC5DGezkcOMGgx7MtIOAQDHe098UtL2sA2vmucJwEmQisb+8LRXNYFHxuw5zJ1oLFeKu4Mteg== @@ -13492,14 +14063,27 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -fork-ts-checker-webpack-plugin@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.5.0.tgz#ce1d77190b44d81a761b10b6284a373795e41f0c" - integrity sha512-zEhg7Hz+KhZlBhILYpXy+Beu96gwvkROWJiTXOCyOOMMrdBIRPvsBpBqgTI4jfJGrJXcqGwJR8zsBGDmzY0jsA== +fork-ts-checker-webpack-plugin@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz#a1642c0d3e65f50c2cc1742e9c0a80f441f86b19" + integrity sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ== dependencies: babel-code-frame "^6.22.0" chalk "^2.4.1" - chokidar "^2.0.4" + chokidar "^3.3.0" + micromatch "^3.1.10" + minimatch "^3.0.4" + semver "^5.6.0" + tapable "^1.0.0" + worker-rpc "^0.1.0" + +fork-ts-checker-webpack-plugin@^4.1.4: + version "4.1.6" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz#5055c703febcf37fa06405d400c122b905167fc5" + integrity sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw== + dependencies: + "@babel/code-frame" "^7.5.5" + chalk "^2.4.1" micromatch "^3.1.10" minimatch "^3.0.4" semver "^5.6.0" @@ -13642,7 +14226,7 @@ fs-extra@^7.0.0, fs-extra@^7.0.1, fs-extra@~7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^8.0.1, fs-extra@^8.1.0: +fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -13651,7 +14235,7 @@ fs-extra@^8.0.1, fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.1: +fs-extra@^9.0.0, fs-extra@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== @@ -13711,7 +14295,7 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@^2.1.2, fsevents@~2.1.0, fsevents@~2.1.1, fsevents@~2.1.2: +fsevents@^2.1.2, fsevents@~2.1.1, fsevents@~2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== @@ -13768,7 +14352,7 @@ functions-have-names@^1.2.0: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.0.tgz#83da7583e4ea0c9ac5ff530f73394b033e0bf77d" integrity sha512-zKXyzksTeaCSw5wIX79iCA40YAa6CJMJgNg9wdkU/ERBrIdPSimPICYiLp65lRbSBqtiHql/HZfS2DyI/AH6tQ== -fuse.js@^3.4.6: +fuse.js@^3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.6.1.tgz#7de85fdd6e1b3377c23ce010892656385fd9b10c" integrity sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw== @@ -13881,11 +14465,6 @@ get-nonce@^1.0.0: resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== -get-own-enumerable-property-symbols@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b" - integrity sha512-TtY/sbOemiMKPRUDDanGCSgBYe7Mf0vbRsWnBZ+9yghpZ1MvcpSpuZFjHdEeY/LZjZy0vdLjS77L6HosisFiug== - get-own-enumerable-property-symbols@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" @@ -13935,11 +14514,6 @@ getobject@~0.1.0: resolved "https://registry.yarnpkg.com/getobject/-/getobject-0.1.0.tgz#047a449789fa160d018f5486ed91320b6ec7885c" integrity sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw= -getopts@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/getopts/-/getopts-2.2.4.tgz#3137fe8a5fddf304904059a851bdc1c22f0f54fb" - integrity sha512-Rz7DGyomZjrenu9Jx4qmzdlvJgvrEFHXHvjK0FcZtcTC1U5FmES7OdZHUwMuSnEE6QvBvwse1JODKj7TgbSEjQ== - getopts@^2.2.5: version "2.2.5" resolved "https://registry.yarnpkg.com/getopts/-/getopts-2.2.5.tgz#67a0fe471cacb9c687d817cab6450b96dde8313b" @@ -13995,6 +14569,13 @@ github-markdown-css@^2.10.0: resolved "https://registry.yarnpkg.com/github-markdown-css/-/github-markdown-css-2.10.0.tgz#0612fed22816b33b282f37ef8def7a4ecabfe993" integrity sha512-RX5VUC54uX6Lvrm226M9kMzsNeOa81MnKyxb3J0G5KLjyoOySOZgwyKFkUpv6iUhooiUZdogk+OTwQPJ4WttYg== +github-slugger@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.3.0.tgz#9bd0a95c5efdfc46005e82a906ef8e2a059124c9" + integrity sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q== + dependencies: + emoji-regex ">=6.0.0 <=6.1.1" + github-username@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/github-username/-/github-username-3.0.0.tgz#0a772219b3130743429f2456d0bdd3db55dce7b1" @@ -14007,7 +14588,7 @@ gl-matrix@^3.2.1: resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.3.0.tgz#232eef60b1c8b30a28cbbe75b2caf6c48fd6358b" integrity sha512-COb7LDz+SXaHtl/h4LeaFcNdJdAQSDeVqjiIihSXNrkWObZLhDI4hIkZC11Aeqp7bcE72clzB0BnDXr2SmslRA== -glob-all@^3.1.0, glob-all@^3.2.1: +glob-all@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/glob-all/-/glob-all-3.2.1.tgz#082ca81afd2247cbd3ed2149bb2630f4dc877d95" integrity sha512-x877rVkzB3ipid577QOp+eQCR6M5ZyiwrtaYgrX/z3EThaSPFtLDwBXFHc3sH1cG0R0vFYI5SRYeWMMSEyXkUw== @@ -14045,6 +14626,13 @@ glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" +glob-promise@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/glob-promise/-/glob-promise-3.4.0.tgz#b6b8f084504216f702dc2ce8c9bc9ac8866fdb20" + integrity sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw== + dependencies: + "@types/glob" "*" + glob-stream@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" @@ -15262,6 +15850,18 @@ hast-util-from-parse5@^5.0.0: web-namespaces "^1.1.2" xtend "^4.0.1" +hast-util-from-parse5@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.0.tgz#b38793c81e1a99f5fd592a4a88fc2731dccd0f30" + integrity sha512-3ZYnfKenbbkhhNdmOQqgH10vnvPivTdsOJCri+APn0Kty+nRkDHArnaX9Hiaf8H+Ig+vkNptL+SRY/6RwWJk1Q== + dependencies: + "@types/parse5" "^5.0.0" + ccount "^1.0.0" + hastscript "^5.0.0" + property-information "^5.0.0" + vfile "^4.0.0" + web-namespaces "^1.0.0" + hast-util-is-element@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.0.4.tgz#059090a05cc02e275df1ad02caf8cb422fcd2e02" @@ -15272,6 +15872,22 @@ hast-util-parse-selector@^2.2.0: resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.1.tgz#4ddbae1ae12c124e3eb91b581d2556441766f0ab" integrity sha512-Xyh0v+nHmQvrOqop2Jqd8gOdyQtE8sIP9IQf7mlVDqp924W4w/8Liuguk2L2qei9hARnQSG2m+wAOCxM7npJVw== +hast-util-raw@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.0.0.tgz#49a38f5107d483f83a139709f2f705f22e7e7d32" + integrity sha512-IQo6tv3bMMKxk53DljswliucCJOQxaZFCuKEJ7X80249dmJ1nA9LtOnnylsLlqTG98NjQ+iGcoLAYo9q5FRhRg== + dependencies: + "@types/hast" "^2.0.0" + hast-util-from-parse5 "^6.0.0" + hast-util-to-parse5 "^6.0.0" + html-void-elements "^1.0.0" + parse5 "^6.0.0" + unist-util-position "^3.0.0" + vfile "^4.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + hast-util-raw@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-5.0.2.tgz#62288f311ec2f35e066a30d5e0277f963ad43a67" @@ -15313,6 +15929,17 @@ hast-util-to-parse5@^5.0.0: xtend "^4.0.0" zwitch "^1.0.0" +hast-util-to-parse5@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479" + integrity sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ== + dependencies: + hast-to-hyperscript "^9.0.0" + property-information "^5.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + hast-util-whitespace@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz#e4fe77c4a9ae1cb2e6c25e02df0043d0164f6e41" @@ -15360,7 +15987,7 @@ heavy@6.x.x: hoek "5.x.x" joi "13.x.x" -highlight.js@9.15.10: +highlight.js@9.15.10, highlight.js@~9.15.0, highlight.js@~9.15.1: version "9.15.10" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.15.10.tgz#7b18ed75c90348c045eef9ed08ca1319a2219ad2" integrity sha512-RoV7OkQm0T3os3Dd2VHLNMoaoDVx77Wygln3n9l5YV172XonWG6rgQD3XnF/BuFFZw9A0TJgmMSO8FEWQgvcXw== @@ -15375,17 +16002,22 @@ highlight.js@~10.1.0: resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.1.2.tgz#c20db951ba1c22c055010648dfffd7b2a968e00c" integrity sha512-Q39v/Mn5mfBlMff9r+zzA+gWxRsCRKwEMvYTiisLr/XUiFI/4puWt0Ojdko3R3JCNWGdOWaA5g/Yxqa23kC5AA== -highlight.js@~9.13.0: - version "9.13.1" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.13.1.tgz#054586d53a6863311168488a0f58d6c505ce641e" - integrity sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A== - history-extra@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/history-extra/-/history-extra-5.0.1.tgz#95a2e59dda526c4241d0ae1b124a77a5e4675ce8" integrity sha512-6XV1L1lHgporVWgppa/Kq+Fnz4lhBew7iMxYCTfzVmoEywsAKJnTjdw1zOd+EGLHGYp0/V8jSVMEgqx4QbHLTw== -history@4.9.0, history@^4.9.0: +history@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/history/-/history-3.3.0.tgz#fcedcce8f12975371545d735461033579a6dae9c" + integrity sha1-/O3M6PEpdTcVRdc1RhAzV5ptrpw= + dependencies: + invariant "^2.2.1" + loose-envify "^1.2.0" + query-string "^4.2.2" + warning "^3.0.0" + +history@^4.9.0: version "4.9.0" resolved "https://registry.yarnpkg.com/history/-/history-4.9.0.tgz#84587c2068039ead8af769e9d6a6860a14fa1bca" integrity sha512-H2DkjCjXf0Op9OAr6nJ56fcRkTSNrUiv41vNJ6IswJjif6wlpZK0BTfFbi7qK9dXLSYZxkq5lBsj3vUjlYBYZA== @@ -15397,16 +16029,6 @@ history@4.9.0, history@^4.9.0: tiny-warning "^1.0.0" value-equal "^0.4.0" -history@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/history/-/history-3.3.0.tgz#fcedcce8f12975371545d735461033579a6dae9c" - integrity sha1-/O3M6PEpdTcVRdc1RhAzV5ptrpw= - dependencies: - invariant "^2.2.1" - loose-envify "^1.2.0" - query-string "^4.2.2" - warning "^3.0.0" - hjson@3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/hjson/-/hjson-3.2.1.tgz#20de41dc87fc9a10d1557d0230b0e02afb1b09ac" @@ -15500,7 +16122,20 @@ html-loader@^0.5.5: loader-utils "^1.1.0" object-assign "^4.1.1" -html-minifier@^3.5.20, html-minifier@^3.5.8: +html-minifier-terser@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" + integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== + dependencies: + camel-case "^4.1.1" + clean-css "^4.2.3" + commander "^4.1.1" + he "^1.2.0" + param-case "^3.0.3" + relateurl "^0.2.7" + terser "^4.6.3" + +html-minifier@^3.5.8: version "3.5.21" resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== @@ -15513,6 +16148,11 @@ html-minifier@^3.5.20, html-minifier@^3.5.8: relateurl "0.2.x" uglify-js "3.4.x" +html-tags@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" + integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== + html-to-react@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/html-to-react/-/html-to-react-1.3.4.tgz#647b3a54fdec73a6461864b129fb0d1eec7d4589" @@ -15529,19 +16169,22 @@ html-void-elements@^1.0.0: resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== -html-webpack-plugin@^4.0.0-beta.2: - version "4.0.0-beta.5" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.5.tgz#2c53083c1151bfec20479b1f8aaf0039e77b5513" - integrity sha512-y5l4lGxOW3pz3xBTFdfB9rnnrWRPVxlAhX6nrBYIcW+2k2zC3mSp/3DxlWVCMBfnO6UAnoF8OcFn0IMy6kaKAQ== +html-webpack-plugin@^4.2.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.3.0.tgz#53bf8f6d696c4637d5b656d3d9863d89ce8174fd" + integrity sha512-C0fzKN8yQoVLTelcJxZfJCE+aAvQiY2VUf3UuKrR4a9k5UMWYOtpDLsaXwATbcVCnI05hUS7L9ULQHWLZhyi3w== dependencies: - html-minifier "^3.5.20" - loader-utils "^1.1.0" - lodash "^4.17.11" + "@types/html-minifier-terser" "^5.0.0" + "@types/tapable" "^1.0.5" + "@types/webpack" "^4.41.8" + html-minifier-terser "^5.0.1" + loader-utils "^1.2.3" + lodash "^4.17.15" pretty-error "^2.1.1" - tapable "^1.1.0" + tapable "^1.1.3" util.promisify "1.0.0" -html@1.0.0, html@^1.0.0: +html@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/html/-/html-1.0.0.tgz#a544fa9ea5492bfb3a2cca8210a10be7b5af1f61" integrity sha1-pUT6nqVJK/s6LMqCEKEL57WvH2E= @@ -16087,22 +16730,22 @@ inquirer@6.2.2: strip-ansi "^5.0.0" through "^2.3.6" -inquirer@6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" - integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== +inquirer@7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.4.tgz#99af5bde47153abca23f5c7fc30db247f39da703" + integrity sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ== dependencies: - ansi-escapes "^3.2.0" + ansi-escapes "^4.2.1" chalk "^2.4.2" - cli-cursor "^2.1.0" + cli-cursor "^3.1.0" cli-width "^2.0.0" external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" + rxjs "^6.5.3" + string-width "^4.1.0" strip-ansi "^5.1.0" through "^2.3.6" @@ -16354,7 +16997,7 @@ irregular-plurals@^3.2.0: resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.2.0.tgz#b19c490a0723798db51b235d7e39add44dab0822" integrity sha512-YqTdPLfwP7YFN0SsD3QUVCkm9ZG2VzOXv3DOrw5G5mkMbVwptTwVcFv7/C0vOpBmgTxAeTG19XpUs1E522LW9Q== -is-absolute-url@^3.0.3: +is-absolute-url@^3.0.0, is-absolute-url@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== @@ -16381,6 +17024,11 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-alphabetical@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + is-alphabetical@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.1.tgz#c77079cc91d4efac775be1034bf2d243f95e6f08" @@ -16541,10 +17189,13 @@ is-docker@^2.0.0: resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b" integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ== -is-dom@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/is-dom/-/is-dom-1.0.9.tgz#483832d52972073de12b9fe3f60320870da8370d" - integrity sha1-SDgy1SlyBz3hK5/j9gMghw2oNw0= +is-dom@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-dom/-/is-dom-1.1.0.tgz#af1fced292742443bb59ca3f76ab5e80907b4e8a" + integrity sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ== + dependencies: + is-object "^1.0.1" + is-window "^1.0.2" is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" @@ -16597,6 +17248,11 @@ is-function@^1.0.1, is-function@~1.0.0: resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU= +is-function@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + is-generator-fn@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.0.0.tgz#038c31b774709641bda678b1f06a4e3227c10b3e" @@ -16840,20 +17496,20 @@ is-plain-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-plain-object@2.0.4, is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@3.0.0, is-plain-object@^3.0.0: +is-plain-object@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg== dependencies: isobject "^4.0.0" +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + is-plain-object@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" @@ -16888,6 +17544,13 @@ is-regex@^1.1.0: dependencies: has-symbols "^1.0.1" +is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" @@ -17054,6 +17717,11 @@ is-whitespace-character@^1.0.0: resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.1.tgz#9ae0176f3282b65457a1992cdb084f8a5f833e3b" integrity sha1-muAXbzKCtlRXoZks2whPil+DPjs= +is-window@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-window/-/is-window-1.0.2.tgz#2c896ca53db97de45d3c33133a65d8c9f563480d" + integrity sha1-LIlspT25feRdPDMTOmXYyfVjSA0= + is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -17170,11 +17838,6 @@ istanbul-lib-coverage@^1.2.1: resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ== -istanbul-lib-coverage@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#0b891e5ad42312c2b9488554f603795f9a2211ba" - integrity sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw== - istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.0-alpha.1: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" @@ -17200,19 +17863,6 @@ istanbul-lib-instrument@^1.7.3: istanbul-lib-coverage "^1.2.1" semver "^5.3.0" -istanbul-lib-instrument@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz#a2b5484a7d445f1f311e93190813fa56dfb62971" - integrity sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA== - dependencies: - "@babel/generator" "^7.0.0" - "@babel/parser" "^7.0.0" - "@babel/template" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - istanbul-lib-coverage "^2.0.3" - semver "^5.5.0" - istanbul-lib-instrument@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz#61f13ac2c96cfefb076fe7131156cc05907874e6" @@ -17405,7 +18055,7 @@ jest-config@^25.5.4: pretty-format "^25.5.0" realpath-native "^2.0.0" -jest-diff@^24.3.0, jest-diff@^24.9.0: +jest-diff@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== @@ -17425,6 +18075,16 @@ jest-diff@^25.2.1, jest-diff@^25.5.0: jest-get-type "^25.2.6" pretty-format "^25.5.0" +jest-diff@^26.4.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.4.0.tgz#d073a0a11952b5bd9f1ff39bb9ad24304a0c55f7" + integrity sha512-wwC38HlOW+iTq6j5tkj/ZamHn6/nrdcEOc/fKaVILNtN2NLWGdkfRaHWwfNYr5ehaLvuoG2LfCZIcWByVj0gjg== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.3.0" + jest-get-type "^26.3.0" + pretty-format "^26.4.0" + jest-docblock@^25.3.0: version "25.3.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.3.0.tgz#8b777a27e3477cd77a168c05290c471a575623ef" @@ -17486,24 +18146,10 @@ jest-get-type@^25.2.6: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== -jest-haste-map@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" - integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ== - dependencies: - "@jest/types" "^24.9.0" - anymatch "^2.0.0" - fb-watchman "^2.0.0" - graceful-fs "^4.1.15" - invariant "^2.2.4" - jest-serializer "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.9.0" - micromatch "^3.1.10" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^1.2.7" +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== jest-haste-map@^25.5.1: version "25.5.1" @@ -17525,6 +18171,27 @@ jest-haste-map@^25.5.1: optionalDependencies: fsevents "^2.1.2" +jest-haste-map@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.3.0.tgz#c51a3b40100d53ab777bfdad382d2e7a00e5c726" + integrity sha512-DHWBpTJgJhLLGwE5Z1ZaqLTYqeODQIZpby0zMBsCU9iRFHYyhklYqP4EiG73j5dkbaAdSZhgB938mL51Q5LeZA== + dependencies: + "@jest/types" "^26.3.0" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.3.0" + jest-util "^26.3.0" + jest-worker "^26.3.0" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.1.2" + jest-jasmine2@^25.5.4: version "25.5.4" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz#66ca8b328fb1a3c5364816f8958f6970a8526968" @@ -17576,6 +18243,16 @@ jest-matcher-utils@^25.5.0: jest-get-type "^25.2.6" pretty-format "^25.5.0" +jest-matcher-utils@^26.4.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.4.0.tgz#2bce9a939e008b894faf1bd4b5bb58facd00c252" + integrity sha512-u+xdCdq+F262DH+PutJKXLGr2H5P3DImdJCir51PGSfi3TtbLQ5tbzKaN8BkXbiTIU6ayuAYBWTlU1nyckVdzA== + dependencies: + chalk "^4.0.0" + jest-diff "^26.4.0" + jest-get-type "^26.3.0" + pretty-format "^26.4.0" + jest-message-util@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" @@ -17604,6 +18281,20 @@ jest-message-util@^25.5.0: slash "^3.0.0" stack-utils "^1.0.1" +jest-message-util@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.3.0.tgz#3bdb538af27bb417f2d4d16557606fd082d5841a" + integrity sha512-xIavRYqr4/otGOiLxLZGj3ieMmjcNE73Ui+LdSW/Y790j5acqCsAdDiLIbzHCZMpN07JOENRWX5DcU+OQ+TjTA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^26.3.0" + "@types/stack-utils" "^1.0.1" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + slash "^3.0.0" + stack-utils "^2.0.2" + jest-mock@^24.0.0, jest-mock@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" @@ -17623,6 +18314,11 @@ jest-pnp-resolver@^1.2.1: resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + jest-raw-loader@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/jest-raw-loader/-/jest-raw-loader-1.0.1.tgz#ce9f56d54650f157c4a7d16d224ba5d613bcd626" @@ -17638,6 +18334,11 @@ jest-regex-util@^25.2.6: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964" integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw== +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + jest-resolve-dependencies@^25.5.4: version "25.5.4" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz#85501f53957c8e3be446e863a74777b5a17397a7" @@ -17673,6 +18374,20 @@ jest-resolve@^25.5.1: resolve "^1.17.0" slash "^3.0.0" +jest-resolve@^26.4.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.4.0.tgz#6dc0af7fb93e65b73fec0368ca2b76f3eb59a6d7" + integrity sha512-bn/JoZTEXRSlEx3+SfgZcJAVuTMOksYq9xe9O6s4Ekg84aKBObEaVXKOEilULRqviSLAYJldnoWV9c07kwtiCg== + dependencies: + "@jest/types" "^26.3.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.3.0" + read-pkg-up "^7.0.1" + resolve "^1.17.0" + slash "^3.0.0" + jest-runner@^25.5.4: version "25.5.4" resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.5.4.tgz#ffec5df3875da5f5c878ae6d0a17b8e4ecd7c71d" @@ -17730,11 +18445,6 @@ jest-runtime@^25.5.4: strip-bom "^4.0.0" yargs "^15.3.1" -jest-serializer@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" - integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== - jest-serializer@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.5.0.tgz#a993f484e769b4ed54e70e0efdb74007f503072b" @@ -17742,6 +18452,14 @@ jest-serializer@^25.5.0: dependencies: graceful-fs "^4.2.4" +jest-serializer@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.3.0.tgz#1c9d5e1b74d6e5f7e7f9627080fa205d976c33ef" + integrity sha512-IDRBQBLPlKa4flg77fqg0n/pH87tcRKwe8zxOVTWISxGpPHYkRZ1dXKyh04JOja7gppc60+soKVZ791mruVdow== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + jest-snapshot@^24.1.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba" @@ -17782,13 +18500,41 @@ jest-snapshot@^25.5.1: pretty-format "^25.5.0" semver "^6.3.0" -jest-specific-snapshot@2.0.0, jest-specific-snapshot@^2.0.0: +jest-snapshot@^26.3.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.4.0.tgz#efd42eef09bcb33e9a3eb98e229f2368c73c9235" + integrity sha512-vFGmNGWHMBomrlOpheTMoqihymovuH3GqfmaEIWoPpsxUXyxT3IlbxI5I4m2vg0uv3HUJYg5JoGrkgMzVsAwCg== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^26.3.0" + "@types/prettier" "^2.0.0" + chalk "^4.0.0" + expect "^26.4.0" + graceful-fs "^4.2.4" + jest-diff "^26.4.0" + jest-get-type "^26.3.0" + jest-haste-map "^26.3.0" + jest-matcher-utils "^26.4.0" + jest-message-util "^26.3.0" + jest-resolve "^26.4.0" + natural-compare "^1.4.0" + pretty-format "^26.4.0" + semver "^7.3.2" + +jest-specific-snapshot@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/jest-specific-snapshot/-/jest-specific-snapshot-2.0.0.tgz#425fe524b25df154aa39f97fa6fe9726faaac273" integrity sha512-aXaNqBg/svwEpY5iQEzEHc5I85cUBKgfeVka9KmpznxLnatpjiqjr7QLb/BYNYlsrZjZzgRHTjQJ+Svx+dbdvg== dependencies: jest-snapshot "^24.1.0" +jest-specific-snapshot@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jest-specific-snapshot/-/jest-specific-snapshot-4.0.0.tgz#a52a2e223e7576e610dbeaf341207c557ac20554" + integrity sha512-YdW5P/MVwOizWR0MJwURxdrjdXvdG2MMpXKVGr7dZ2YrBmE6E6Ab74UL3DOYmGmzaCnNAW1CL02pY5MTHE3ulQ== + dependencies: + jest-snapshot "^26.3.0" + jest-styled-components@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/jest-styled-components/-/jest-styled-components-7.0.2.tgz#b7711871ea74a04491b12bad123fa35cc65a2a80" @@ -17796,7 +18542,7 @@ jest-styled-components@^7.0.2: dependencies: css "^2.2.4" -jest-util@^24.0.0, jest-util@^24.9.0: +jest-util@^24.0.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg== @@ -17825,6 +18571,18 @@ jest-util@^25.5.0: is-ci "^2.0.0" make-dir "^3.0.0" +jest-util@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.3.0.tgz#a8974b191df30e2bf523ebbfdbaeb8efca535b3e" + integrity sha512-4zpn6bwV0+AMFN0IYhH/wnzIQzRaYVrz1A8sYnRnj4UXDXbOVtWmlaZkO9mipFqZ13okIfN87aDoJWB7VH6hcw== + dependencies: + "@jest/types" "^26.3.0" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + jest-validate@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.5.0.tgz#fb4c93f332c2e4cf70151a628e58a35e459a413a" @@ -17857,14 +18615,6 @@ jest-when@^2.7.2: bunyan "^1.8.12" expect "^24.8.0" -jest-worker@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" - integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== - dependencies: - merge-stream "^2.0.0" - supports-color "^6.1.0" - jest-worker@^25.4.0, jest-worker@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" @@ -17873,6 +18623,15 @@ jest-worker@^25.4.0, jest-worker@^25.5.0: merge-stream "^2.0.0" supports-color "^7.0.0" +jest-worker@^26.2.1, jest-worker@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.3.0.tgz#7c8a97e4f4364b4f05ed8bca8ca0c24de091871f" + integrity sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + jest@^25.5.4: version "25.5.4" resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db" @@ -17947,6 +18706,11 @@ js-sha3@0.8.0: resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== +js-string-escape@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" + integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= + js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" @@ -18359,7 +19123,7 @@ kew@~0.1.7: resolved "https://registry.yarnpkg.com/kew/-/kew-0.1.7.tgz#0a32a817ff1a9b3b12b8c9bacf4bc4d679af8e72" integrity sha1-CjKoF/8amzsSuMm6z0vE1nmvjnI= -keymirror@0.1.1, keymirror@^0.1.1: +keymirror@0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/keymirror/-/keymirror-0.1.1.tgz#918889ea13f8d0a42e7c557250eee713adc95c35" integrity sha1-kYiJ6hP40KQufFVyUO7nE63JXDU= @@ -18861,7 +19625,7 @@ loader-utils@1.2.3, loader-utils@^1.0.0, loader-utils@^1.0.2, loader-utils@^1.0. emojis-list "^2.0.0" json5 "^1.0.1" -loader-utils@^2.0.0: +loader-utils@2.0.0, loader-utils@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== @@ -19065,11 +19829,6 @@ lodash.map@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - lodash.merge@^4.4.0, lodash.merge@^4.6.1: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -19150,11 +19909,6 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" -lodash.throttle@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" - integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= - lodash.toarray@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" @@ -19170,7 +19924,7 @@ lodash.union@^4.6.0: resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= -lodash.uniq@^4.5.0: +lodash.uniq@4.5.0, lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= @@ -19180,11 +19934,6 @@ lodash@4.17.11, lodash@4.17.15, lodash@>4.17.4, lodash@^4, lodash@^4.0.0, lodash resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== -lodash@^3.10.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= - log-ok@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/log-ok/-/log-ok-0.1.1.tgz#bea3dd36acd0b8a7240d78736b5b97c65444a334" @@ -19329,6 +20078,13 @@ lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2: resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= +lower-case@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" + integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ== + dependencies: + tslib "^1.10.0" + lowercase-keys@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" @@ -19344,6 +20100,14 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lowlight@1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.12.1.tgz#014acf8dd73a370e02ff1cc61debcde3bb1681eb" + integrity sha512-OqaVxMGIESnawn+TU/QMV5BJLbUghUfjDWPAtFqDYDmDtr4FnB+op8xM+pR7nKlauHNUHXGt0VgWatFB8voS5w== + dependencies: + fault "^1.0.2" + highlight.js "~9.15.0" + lowlight@^1.2.0: version "1.14.0" resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.14.0.tgz#83ebc143fec0f9e6c0d3deffe01be129ce56b108" @@ -19352,14 +20116,6 @@ lowlight@^1.2.0: fault "^1.0.0" highlight.js "~10.1.0" -lowlight@~1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.11.0.tgz#1304d83005126d4e8b1dc0f07981e9b689ec2efc" - integrity sha512-xrGGN6XLL7MbTMdPD6NfWPwY43SNkjf/d0mecSx/CW36fUZTjRHEq0/Cdug3TWKtRXLWi7iMl1eP0olYxj/a4A== - dependencies: - fault "^1.0.2" - highlight.js "~9.13.0" - lowlight@~1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.9.1.tgz#ed7c3dffc36f8c1f263735c0fe0c907847c11250" @@ -19367,14 +20123,6 @@ lowlight@~1.9.1: dependencies: highlight.js "~9.12.0" -lru-cache@4.1.5, lru-cache@^4.0.1, lru-cache@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - lru-cache@4.1.x, lru-cache@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.2.tgz#45234b2e6e2f2b33da125624c4664929a0224c3f" @@ -19383,6 +20131,14 @@ lru-cache@4.1.x, lru-cache@^4.0.0: pseudomap "^1.0.2" yallist "^2.1.2" +lru-cache@^4.0.1, lru-cache@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -19390,6 +20146,13 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + lru-queue@0.1: version "0.1.0" resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" @@ -19587,20 +20350,6 @@ markdown-to-jsx@^6.11.4: prop-types "^15.6.2" unquote "^1.1.0" -marked@^0.3.12: - version "0.3.19" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" - integrity sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg== - -marksy@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/marksy/-/marksy-8.0.0.tgz#b595f121fd47058df9dda1448f6ee156ab48810a" - integrity sha512-mmHcKZojCQAGuKTuu3153viXdCuxUmsSxomFaSOBTkOlfWFOZBmDhmJkOp0CsPMNRQ7m6oN2wflvAHLpBNZVPw== - dependencies: - "@babel/standalone" "^7.4.5" - he "^1.2.0" - marked "^0.3.12" - matchdep@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/matchdep/-/matchdep-2.0.0.tgz#c6f34834a0d8dbc3b37c27ee8bbcb27c7775582e" @@ -19640,6 +20389,20 @@ mdast-add-list-metadata@1.0.1: dependencies: unist-util-visit-parents "1.1.2" +mdast-squeeze-paragraphs@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97" + integrity sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ== + dependencies: + unist-util-remove "^2.0.0" + +mdast-util-definitions@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-2.0.1.tgz#2c931d8665a96670639f17f98e32c3afcfee25f3" + integrity sha512-Co+DQ6oZlUzvUR7JCpP249PcexxygiaKk9axJh+eRzHDZJk2julbIdKB4PXHVxdBuLzvJ1Izb+YDpj2deGMOuA== + dependencies: + unist-util-visit "^2.0.0" + mdast-util-definitions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-3.0.1.tgz#06af6c49865fc63d6d7d30125569e2f7ae3d0a86" @@ -19647,7 +20410,7 @@ mdast-util-definitions@^3.0.0: dependencies: unist-util-visit "^2.0.0" -mdast-util-to-hast@^9.1.0: +mdast-util-to-hast@9.1.0, mdast-util-to-hast@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-9.1.0.tgz#6ef121dd3cd3b006bf8650b1b9454da0faf79ffe" integrity sha512-Akl2Vi9y9cSdr19/Dfu58PVwifPXuFt1IrHe7l+Crme1KvgUT+5z+cHLVcQVGCiNTZZcdqjnuv9vPkGsqWytWA== @@ -19664,6 +20427,11 @@ mdast-util-to-hast@^9.1.0: unist-util-position "^3.0.0" unist-util-visit "^2.0.0" +mdast-util-to-string@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527" + integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A== + mdn-data@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" @@ -19787,6 +20555,14 @@ memory-fs@^0.4.0, memory-fs@^0.4.1: errno "^0.1.3" readable-stream "^2.0.1" +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + meow@^3.0.0, meow@^3.3.0, meow@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" @@ -19950,6 +20726,11 @@ mime-db@1.43.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + mime-db@1.x.x, mime-db@~1.37.0: version "1.37.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" @@ -19969,6 +20750,13 @@ mime-types@^2.1.25: dependencies: mime-db "1.43.0" +mime-types@^2.1.26: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + mime-types@~2.1.24: version "2.1.24" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" @@ -20044,16 +20832,6 @@ mini-create-react-context@^0.4.0: "@babel/runtime" "^7.5.5" tiny-warning "^1.0.3" -mini-css-extract-plugin@0.7.0, mini-css-extract-plugin@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.7.0.tgz#5ba8290fbb4179a43dd27cca444ba150bee743a0" - integrity sha512-RQIw6+7utTYn8DBGsf/LpRgZCJMpZt+kuawJ/fju0KiOL6nAaTBNmCJwS7HtwSCXfS47gCkmtBFS7HdsquhdxQ== - dependencies: - loader-utils "^1.1.0" - normalize-url "1.9.1" - schema-utils "^1.0.0" - webpack-sources "^1.1.0" - mini-css-extract-plugin@0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz#81d41ec4fe58c713a96ad7c723cdb2d0bd4d70e1" @@ -20217,6 +20995,13 @@ mkdirp@^0.3.5: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.5.tgz#de3e5f8961c88c787ee1368df849ac4413eca8d7" integrity sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc= +mkdirp@^0.5.3: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" @@ -20485,16 +21270,11 @@ murmurhash3js@3.0.1: resolved "https://registry.yarnpkg.com/murmurhash3js/-/murmurhash3js-3.0.1.tgz#3e983e5b47c2a06f43a713174e7e435ca044b998" integrity sha1-Ppg+W0fCoG9DpxMXTn5DXKBEuZg= -mustache@2.3.2: +mustache@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/mustache/-/mustache-2.3.2.tgz#a6d4d9c3f91d13359ab889a812954f9230a3d0c5" integrity sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ== -mustache@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/mustache/-/mustache-2.3.0.tgz#4028f7778b17708a489930a6e52ac3bca0da41d0" - integrity sha1-QCj3d4sXcIpImTCm5SrDvKDaQdA= - mutation-observer@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/mutation-observer/-/mutation-observer-1.0.3.tgz#42e9222b101bca82e5ba9d5a7acf4a14c0f263d0" @@ -20657,11 +21437,6 @@ nested-error-stacks@^2.1.0: resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz#0fbdcf3e13fe4994781280524f8b96b0cdff9c61" integrity sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug== -nested-object-assign@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/nested-object-assign/-/nested-object-assign-1.0.3.tgz#5aca69390d9affe5a612152b5f0843ae399ac597" - integrity sha512-kgq1CuvLyUcbcIuTiCA93cQ2IJFSlRwXcN+hLcb2qLJwC2qrePHGZZa7IipyWqaWF6tQjdax2pQnVxdq19Zzwg== - newtype-ts@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/newtype-ts/-/newtype-ts-0.2.4.tgz#a02a8f160a3d179f871848d687a93de73a964a41" @@ -20680,7 +21455,7 @@ next-tick@1: resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= -ngreact@0.5.1, ngreact@^0.5.1: +ngreact@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/ngreact/-/ngreact-0.5.1.tgz#2dcccc1541771796689d13e51bb8d5010af41c57" integrity sha512-u/jOWS0KF/twS09O+yuBgNNEEytEhrmSfLTewAuglDSfEYru6a4I8tUnU4fs9/WvlRWbvJTk7WEnwbGamM+Kvg== @@ -20716,6 +21491,14 @@ no-case@^2.2.0, no-case@^2.3.2: dependencies: lower-case "^1.1.1" +no-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8" + integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw== + dependencies: + lower-case "^2.0.1" + tslib "^1.10.0" + nock@12.0.3: version "12.0.3" resolved "https://registry.yarnpkg.com/nock/-/nock-12.0.3.tgz#83f25076dbc4c9aa82b5cdf54c9604c7a778d1c9" @@ -20748,7 +21531,7 @@ node-environment-flags@1.0.6: object.getownpropertydescriptors "^2.0.3" semver "^5.7.0" -node-fetch@2.1.2, node-fetch@2.6.1, node-fetch@^1.0.1, node-fetch@^2.3.0, node-fetch@^2.6.0, node-fetch@^2.6.1: +node-fetch@2.1.2, node-fetch@^1.0.1, node-fetch@^2.3.0, node-fetch@^2.6.0, node-fetch@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== @@ -20920,19 +21703,24 @@ node-preload@^0.2.1: dependencies: process-on-spawn "^1.0.0" -node-releases@^1.1.25, node-releases@^1.1.46: +node-releases@^1.1.46: version "1.1.47" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.47.tgz#c59ef739a1fd7ecbd9f0b7cf5b7871e8a8b591e4" integrity sha512-k4xjVPx5FpwBUj0Gw7uvFOTF4Ep8Hok1I6qjwL3pLfwe7Y0REQSAqOwwv9TWBCUtMHxcXfY4PgRLRozcChvTcA== dependencies: semver "^6.3.0" +node-releases@^1.1.52: + version "1.1.60" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084" + integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA== + node-releases@^1.1.53: version "1.1.58" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.58.tgz#8ee20eef30fa60e52755fcc0942def5a734fe935" integrity sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg== -node-sass@^4.13.0, node-sass@^4.13.1: +node-sass@^4.13.1: version "4.13.1" resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.1.tgz#9db5689696bb2eec2c32b98bfea4c7a2e992d0a3" integrity sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw== @@ -21045,11 +21833,6 @@ normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@3.0.0, normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -21057,6 +21840,11 @@ normalize-path@^2.0.1, normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" @@ -21408,6 +22196,14 @@ object.getownpropertydescriptors@^2.0.3: define-properties "^1.1.2" es-abstract "^1.5.1" +object.getownpropertydescriptors@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + object.map@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" @@ -21441,6 +22237,11 @@ object.values@^1.1.0, object.values@^1.1.1: function-bind "^1.1.1" has "^1.0.3" +objectorarray@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/objectorarray/-/objectorarray-1.0.4.tgz#d69b2f0ff7dc2701903d308bb85882f4ddb49483" + integrity sha512-91k8bjcldstRz1bG6zJo8lWD7c6QXcB4nTDUqiEvIL1xAsLoZlOOZZG+nd6YPz+V7zY1580J4Xxh1vZtyv4i/w== + oboe@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.4.tgz#20c88cdb0c15371bb04119257d4fdd34b0aa49f6" @@ -21530,14 +22331,7 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" -open@^6.3.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" - integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== - dependencies: - is-wsl "^1.1.0" - -open@^7.0.0: +open@^7.0.2, open@^7.0.3: version "7.1.0" resolved "https://registry.yarnpkg.com/open/-/open-7.1.0.tgz#68865f7d3cb238520fa1225a63cf28bcf8368a1c" integrity sha512-lLPI5KgOwEYCDKXf4np7y1PBEkj7HYIyP2DY8mVDRnx0VIIu6bNrRB0R66TuO7Mack6EnTNLm4uvcl1UoklTpA== @@ -21744,6 +22538,11 @@ ospath@^1.2.2: resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= +overlayscrollbars@^1.10.2: + version "1.13.0" + resolved "https://registry.yarnpkg.com/overlayscrollbars/-/overlayscrollbars-1.13.0.tgz#1edb436328133b94877b558f77966d5497ca36a7" + integrity sha512-p8oHrMeRAKxXDMPI/EBNITj/zTVHKNnAnM59Im+xnoZUlV07FyTg46wom2286jJlXGGfcPFG/ba5NUiCwWNd4w== + p-all@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-all/-/p-all-2.1.0.tgz#91419be56b7dee8fe4c5db875d55e0da084244a0" @@ -22018,6 +22817,14 @@ param-case@2.1.x, param-case@^2.1.0: dependencies: no-case "^2.2.0" +param-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.3.tgz#4be41f8399eff621c56eebb829a5e451d9801238" + integrity sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA== + dependencies: + dot-case "^3.0.3" + tslib "^1.10.0" + parent-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.0.tgz#df250bdc5391f4a085fb589dad761f5ad6b865b5" @@ -22085,6 +22892,18 @@ parse-entities@^1.1.2: is-decimal "^1.0.0" is-hexadecimal "^1.0.0" +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + parse-filepath@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" @@ -22169,7 +22988,7 @@ parse-url@^5.0.0: parse-path "^4.0.0" protocols "^1.4.0" -parse5@5.1.0, parse5@^5.0.0: +parse5@5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== @@ -22181,6 +23000,16 @@ parse5@^3.0.1: dependencies: "@types/node" "*" +parse5@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + parseurl@~1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" @@ -22199,6 +23028,14 @@ pascal-case@^2.0.0: camel-case "^3.0.0" upper-case-first "^1.1.0" +pascal-case@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f" + integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA== + dependencies: + no-case "^3.0.3" + tslib "^1.10.0" + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -22520,20 +23357,20 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -pkg-up@2.0.0, pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= - dependencies: - find-up "^2.1.0" - -pkg-up@^3.1.0: +pkg-up@3.1.0, pkg-up@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== dependencies: find-up "^3.0.0" +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + platform@^1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.5.tgz#fb6958c696e07e2918d2eeda0f0bc9448d733444" @@ -22588,22 +23425,22 @@ png-js@^1.0.0: resolved "https://registry.yarnpkg.com/png-js/-/png-js-1.0.0.tgz#e5484f1e8156996e383aceebb3789fd75df1874d" integrity sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g== -pngjs@3.4.0, pngjs@^3.3.3, pngjs@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" - integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== - pngjs@^3.0.0: version "3.3.1" resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.3.1.tgz#8e14e6679ee7424b544334c3b2d21cea6d8c209a" integrity sha512-ggXCTsqHRIsGMkHlCEhbHhUmNTA2r1lpkE0NL4Q9S8spkXbm4vE9TVmPso2AGYn90Gltdz8W5CyzhcIGg2Gejg== -pnp-webpack-plugin@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz#62a1cd3068f46d564bb33c56eb250e4d586676eb" - integrity sha512-jd9olUr9D7do+RN8Wspzhpxhgp1n6Vd0NtQ4SFkmIACZoEL1nkyAdW9Ygrinjec0vgDcWjscFQQ1gDW8rsfKTg== +pngjs@^3.3.3, pngjs@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" + integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== + +pnp-webpack-plugin@1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" + integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== dependencies: - ts-pnp "^1.1.2" + ts-pnp "^1.1.6" podium@3.x.x: version "3.1.2" @@ -22618,23 +23455,23 @@ polished@^1.9.2: resolved "https://registry.yarnpkg.com/polished/-/polished-1.9.2.tgz#d705cac66f3a3ed1bd38aad863e2c1e269baf6b6" integrity sha512-mPocQrVUSiqQdHNZFGL1iHJmsR/etiv05Nf2oZUbya+GMsQkZVEBl5wonN+Sr/e9zQBEhT6yrMjxAUJ06eyocQ== -polished@^3.3.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/polished/-/polished-3.4.1.tgz#1eb5597ec1792206365635811d465751f5cbf71c" - integrity sha512-GflTnlP5rrpDoigjczEkS6Ye7NDA4sFvAnlr5hSDrEvjiVj97Xzev3hZlLi3UB27fpxyTS9rWU64VzVLWkG+mg== +polished@^3.4.4: + version "3.6.5" + resolved "https://registry.yarnpkg.com/polished/-/polished-3.6.5.tgz#dbefdde64c675935ec55119fe2a2ab627ca82e9c" + integrity sha512-VwhC9MlhW7O5dg/z7k32dabcAFW1VI2+7fSe8cE/kXcfL7mVdoa5UxciYGW2sJU78ldDLT6+ROEKIZKFNTnUXQ== dependencies: - "@babel/runtime" "^7.4.5" - -popper.js@^1.14.1, popper.js@^1.14.7: - version "1.15.0" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.15.0.tgz#5560b99bbad7647e9faa475c6b8056621f5a4ff2" - integrity sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA== + "@babel/runtime" "^7.9.2" popper.js@^1.14.4: version "1.14.7" resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.7.tgz#e31ec06cfac6a97a53280c3e55e4e0c860e7738e" integrity sha512-4q1hNvoUre/8srWsH7hnoSJ5xVmIL4qgz+s4qf2TnJIMyZFUFMGH+9vE7mXynAlHSZ/NdTmmow86muD0myUkVQ== +popper.js@^1.14.7: + version "1.15.0" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.15.0.tgz#5560b99bbad7647e9faa475c6b8056621f5a4ff2" + integrity sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA== + portfinder@^1.0.26: version "1.0.27" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.27.tgz#a41333c116b5e5f3d380f9745ac2f35084c4c758" @@ -22699,6 +23536,14 @@ postcss-modules-scope@^2.1.1: postcss "^7.0.6" postcss-selector-parser "^6.0.0" +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + postcss-modules-values@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" @@ -22807,7 +23652,7 @@ prettier@1.16.4: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.4.tgz#73e37e73e018ad2db9c76742e2647e21790c9717" integrity sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g== -prettier@^2.1.1: +prettier@^2.0.5, prettier@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.1.tgz#d9485dd5e499daa6cb547023b87a6cf51bee37d6" integrity sha512-9bY+5ZWCfqj3ghYBLxApy2zf6m+NJo5GzmLTpr9FsApsfjriNnS2dahWReHMi7qNPhhHl9SYHJs2cHZLgexNIw== @@ -22850,6 +23695,16 @@ pretty-format@^25.2.1, pretty-format@^25.5.0: ansi-styles "^4.0.0" react-is "^16.12.0" +pretty-format@^26.4.0: + version "26.4.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.4.0.tgz#c08073f531429e9e5024049446f42ecc9f933a3b" + integrity sha512-mEEwwpCseqrUtuMbrJG4b824877pM5xald3AkilJ47Po2YLr97/siejYQHqj2oDQBeJNbu+Q0qUuekJ8F0NAPg== + dependencies: + "@jest/types" "^26.3.0" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + pretty-format@^26.4.2: version "26.4.2" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.4.2.tgz#d081d032b398e801e2012af2df1214ef75a81237" @@ -23015,20 +23870,20 @@ proper-lockfile@^3.2.0: retry "^0.12.0" signal-exit "^3.0.2" -property-information@^5.0.0, property-information@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.0.1.tgz#c3b09f4f5750b1634c0b24205adbf78f18bdf94f" - integrity sha512-nAtBDVeSwFM3Ot/YxT7s4NqZmqXI7lLzf46BThvotEtYf2uk2yH0ACYuWQkJ7gxKs49PPtKVY0UlDGkyN9aJlw== - dependencies: - xtend "^4.0.1" - -property-information@^5.2.0, property-information@^5.3.0: +property-information@^5.0.0, property-information@^5.2.0, property-information@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.5.0.tgz#4dc075d493061a82e2b7d096f406e076ed859943" integrity sha512-RgEbCx2HLa1chNgvChcx+rrCWD0ctBmGSE0M7lVm1yyv4UbvbrWoXp/BkVLZefzjrRBGW8/Js6uh/BnlHXFyjA== dependencies: xtend "^4.0.0" +property-information@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.0.1.tgz#c3b09f4f5750b1634c0b24205adbf78f18bdf94f" + integrity sha512-nAtBDVeSwFM3Ot/YxT7s4NqZmqXI7lLzf46BThvotEtYf2uk2yH0ACYuWQkJ7gxKs49PPtKVY0UlDGkyN9aJlw== + dependencies: + xtend "^4.0.1" + proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" @@ -23400,7 +24255,7 @@ raw-body@~1.1.0: bytes "1" string_decoder "0.10" -raw-loader@3.1.0, raw-loader@^3.1.0: +raw-loader@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-3.1.0.tgz#5e9d399a5a222cc0de18f42c3bc5e49677532b3f" integrity sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA== @@ -23408,6 +24263,14 @@ raw-loader@3.1.0, raw-loader@^3.1.0: loader-utils "^1.1.0" schema-utils "^2.0.1" +raw-loader@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.1.tgz#14e1f726a359b68437e183d5a5b7d33a3eba6933" + integrity sha512-baolhQBSi3iNh1cglJjA0mYzga+wePk7vdEX//1dTFd+v4TsQlQE0jitJSNF1OIP82rdYulH7otaVmdlDaJ64A== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.6.5" + rbush@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/rbush/-/rbush-3.0.1.tgz#5fafa8a79b3b9afdfe5008403a720cc1de882ecf" @@ -23446,16 +24309,6 @@ re2@^1.15.4: nan "^2.14.1" node-gyp "^7.0.0" -react-ace@^5.5.0: - version "5.10.0" - resolved "https://registry.yarnpkg.com/react-ace/-/react-ace-5.10.0.tgz#e328b37ac52759f700be5afdb86ada2f5ec84c5e" - integrity sha512-aEK/XZCowP8IXq91e2DYqOtGhabk1bbjt+fyeW0UBcIkzDzP/RX/MeJKeyW7wsZcwElACVwyy9nnwXBTqgky3A== - dependencies: - brace "^0.11.0" - lodash.get "^4.4.2" - lodash.isequal "^4.1.1" - prop-types "^15.5.8" - react-ace@^5.9.0: version "5.9.0" resolved "https://registry.yarnpkg.com/react-ace/-/react-ace-5.9.0.tgz#427a1cc4869b960a6f9748aa7eb169a9269fc336" @@ -23477,15 +24330,6 @@ react-ace@^7.0.5: lodash.isequal "^4.5.0" prop-types "^15.7.2" -react-addons-create-fragment@^15.6.2: - version "15.6.2" - resolved "https://registry.yarnpkg.com/react-addons-create-fragment/-/react-addons-create-fragment-15.6.2.tgz#a394de7c2c7becd6b5475ba1b97ac472ce7c74f8" - integrity sha1-o5TefCx77Na1R1uhuXrEcs58dPg= - dependencies: - fbjs "^0.8.4" - loose-envify "^1.3.1" - object-assign "^4.1.0" - react-apollo@^2.1.4: version "2.1.8" resolved "https://registry.yarnpkg.com/react-apollo/-/react-apollo-2.1.8.tgz#ebac0d9bee0f0906df3ce29207f94df337009887" @@ -23540,16 +24384,6 @@ react-color@^2.17.0: reactcss "^1.2.0" tinycolor2 "^1.4.1" -react-datepicker@v1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/react-datepicker/-/react-datepicker-1.4.1.tgz#ee171b71d9853e56f9eece5fc3186402f4648683" - integrity sha512-O/ExTWLS81pyWJWLFg1BRQEr9S/BDd6iMEkGctxQmVrRw2srW8DNdnQm5UgFNu8LoSZGMDvI55OghYZvDpWJhw== - dependencies: - classnames "^2.2.5" - prop-types "^15.6.0" - react-onclickoutside "^6.7.1" - react-popper "^0.9.1" - react-datetime@^2.14.0: version "2.15.0" resolved "https://registry.yarnpkg.com/react-datetime/-/react-datetime-2.15.0.tgz#a8f7da6c58b6b45dbeea32d4e8485db17614e12c" @@ -23560,46 +24394,36 @@ react-datetime@^2.14.0: prop-types "^15.5.7" react-onclickoutside "^6.5.0" -react-dev-utils@^9.0.0: - version "9.0.3" - resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-9.0.3.tgz#7607455587abb84599451460eb37cef0b684131a" - integrity sha512-OyInhcwsvycQ3Zr2pQN+HV4gtRXrky5mJXIy4HnqrWa+mI624xfYfqGuC9dYbxp4Qq3YZzP8GSGQjv0AgNU15w== +react-dev-utils@^10.0.0: + version "10.2.1" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-10.2.1.tgz#f6de325ae25fa4d546d09df4bb1befdc6dd19c19" + integrity sha512-XxTbgJnYZmxuPtY3y/UV0D8/65NKkmaia4rXzViknVnZeVlklSh8u6TnaEYPfAi/Gh1TP4mEOXHI6jQOPbeakQ== dependencies: - "@babel/code-frame" "7.5.5" - address "1.1.0" - browserslist "4.6.6" + "@babel/code-frame" "7.8.3" + address "1.1.2" + browserslist "4.10.0" chalk "2.4.2" - cross-spawn "6.0.5" + cross-spawn "7.0.1" detect-port-alt "1.1.6" - escape-string-regexp "1.0.5" - filesize "3.6.1" - find-up "3.0.0" - fork-ts-checker-webpack-plugin "1.5.0" + escape-string-regexp "2.0.0" + filesize "6.0.1" + find-up "4.1.0" + fork-ts-checker-webpack-plugin "3.1.1" global-modules "2.0.0" globby "8.0.2" gzip-size "5.1.1" immer "1.10.0" - inquirer "6.5.0" + inquirer "7.0.4" is-root "2.1.0" loader-utils "1.2.3" - open "^6.3.0" - pkg-up "2.0.0" - react-error-overlay "^6.0.1" + open "^7.0.2" + pkg-up "3.1.0" + react-error-overlay "^6.0.7" recursive-readdir "2.2.2" - shell-quote "1.6.1" - sockjs-client "1.3.0" - strip-ansi "5.2.0" + shell-quote "1.7.2" + strip-ansi "6.0.0" text-table "0.2.0" -react-docgen-typescript-loader@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/react-docgen-typescript-loader/-/react-docgen-typescript-loader-3.1.0.tgz#09cacf872617c97f946ee920d2239f51d543be41" - integrity sha512-gY+b7RkRPty5ZN4NMQ+jwx9MzTVuIj6LJCwdWRAi1+nrHJfH2gMMytQfxFdzQ7BlgD4COWnSE8Ixtl2L62kCRw== - dependencies: - "@webpack-contrib/schema-utils" "^1.0.0-beta.0" - loader-utils "^1.2.3" - react-docgen-typescript "^1.12.3" - react-docgen-typescript-loader@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/react-docgen-typescript-loader/-/react-docgen-typescript-loader-3.1.1.tgz#c1992538524fb9e45246d6c1314ddcfbf26e9d08" @@ -23609,11 +24433,37 @@ react-docgen-typescript-loader@^3.1.1: loader-utils "^1.2.3" react-docgen-typescript "^1.12.3" +react-docgen-typescript-loader@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/react-docgen-typescript-loader/-/react-docgen-typescript-loader-3.7.2.tgz#45cb2305652c0602767242a8700ad1ebd66bbbbd" + integrity sha512-fNzUayyUGzSyoOl7E89VaPKJk9dpvdSgyXg81cUkwy0u+NBvkzQG3FC5WBIlXda0k/iaxS+PWi+OC+tUiGxzPA== + dependencies: + "@webpack-contrib/schema-utils" "^1.0.0-beta.0" + loader-utils "^1.2.3" + react-docgen-typescript "^1.15.0" + +react-docgen-typescript-plugin@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-0.5.2.tgz#2b294d75ef3145c36303da82be5d447cb67dc0dc" + integrity sha512-NQfWyWLmzUnedkiN2nPDb6Nkm68ik6fqbC3UvgjqYSeZsbKijXUA4bmV6aU7qICOXdop9PevPdjEgJuAN0nNVQ== + dependencies: + debug "^4.1.1" + endent "^2.0.1" + micromatch "^4.0.2" + react-docgen-typescript "^1.20.1" + react-docgen-typescript-loader "^3.7.2" + tslib "^2.0.0" + react-docgen-typescript@^1.12.3: version "1.12.3" resolved "https://registry.yarnpkg.com/react-docgen-typescript/-/react-docgen-typescript-1.12.3.tgz#fe62a5ce82e93573e316366e53adfe8273121c70" integrity sha512-s1XswWs4ykNdWKsPyfM4qptV5dT8nnjnVi2IcjoS/vGlRNYrc0TkW0scVOrinHZ+ndKhPqA4iVNrdwhxZBzJcg== +react-docgen-typescript@^1.15.0, react-docgen-typescript@^1.20.1: + version "1.20.2" + resolved "https://registry.yarnpkg.com/react-docgen-typescript/-/react-docgen-typescript-1.20.2.tgz#78f4a14f18a4e236e31051961c75583133752d46" + integrity sha512-tW1cZErh4AxDJIFiTxny9AfMeSwm+NI7BsXXuAXPvoIxToglFWvmJWsJF6sYhSA3zNu3zhFOIMdRMXTzQAyCpA== + react-docgen@^5.0.0: version "5.3.0" resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-5.3.0.tgz#9aabde5e69f1993c8ba839fd9a86696504654589" @@ -23671,25 +24521,25 @@ react-dropzone@^4.2.9: attr-accept "^1.1.3" prop-types "^15.5.7" -react-element-to-jsx-string@^14.0.2: - version "14.0.2" - resolved "https://registry.yarnpkg.com/react-element-to-jsx-string/-/react-element-to-jsx-string-14.0.2.tgz#586d248bb2416855aa6ac3881e18726832c146d2" - integrity sha512-eYcPUg3FJisgAb8q3sSdce8F/xMZD/iFEjMZYnkE3b7gPi5OamGr2Hst/1pE72mzn7//dfYPXb+UqPK2xdSGsg== +react-element-to-jsx-string@^14.3.1: + version "14.3.1" + resolved "https://registry.yarnpkg.com/react-element-to-jsx-string/-/react-element-to-jsx-string-14.3.1.tgz#a08fa6e46eb76061aca7eabc2e70f433583cb203" + integrity sha512-LRdQWRB+xcVPOL4PU4RYuTg6dUJ/FNmaQ8ls6w38YbzkbV6Yr5tFNESroub9GiSghtnMq8dQg2LcNN5aMIDzVg== dependencies: - is-plain-object "2.0.4" - stringify-object "3.2.2" + "@base2/pretty-print-object" "1.0.0" + is-plain-object "3.0.0" -react-error-overlay@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.1.tgz#b8d3cf9bb991c02883225c48044cb3ee20413e0f" - integrity sha512-V9yoTr6MeZXPPd4nV/05eCBvGH9cGzc52FN8fs0O0TVQ3HYYf1n7EgZVtHbldRq5xU9zEzoXIITjYNIfxDDdUw== +react-error-overlay@^6.0.7: + version "6.0.7" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.7.tgz#1dcfb459ab671d53f660a991513cb2f0a0553108" + integrity sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA== react-fast-compare@2.0.4, react-fast-compare@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== -react-focus-lock@^2.1.0, react-focus-lock@^2.3.1: +react-focus-lock@^2.3.1: version "2.4.1" resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.4.1.tgz#e842cc93da736b5c5d331799012544295cbcee4f" integrity sha512-c5ZP56KSpj9EAxzScTqQO7bQQNPltf/W1ZEBDqNDOV1XOIwvAyHX0O7db9ekiAtxyKgnqZjQlLppVg94fUeL9w== @@ -23742,13 +24592,6 @@ react-hotkeys@2.0.0: dependencies: prop-types "^15.6.1" -react-input-autosize@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.1.tgz#ec428fa15b1592994fb5f9aa15bb1eb6baf420f8" - integrity sha512-3+K4CD13iE4lQQ2WlF8PuV5htfmTRLH6MDnfndHM6LuBRszuXnuyIfE7nhSKt8AzRBZ50bu0sAhkNMeS5pxQQA== - dependencies: - prop-types "^15.5.8" - react-input-autosize@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.2.tgz#fcaa7020568ec206bc04be36f4eb68e647c4d8c2" @@ -23764,13 +24607,13 @@ react-input-range@^1.3.0: autobind-decorator "^1.3.4" prop-types "^15.5.8" -react-inspector@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-4.0.1.tgz#0f888f78ff7daccbc7be5d452b20c96dc6d5fbb8" - integrity sha512-xSiM6CE79JBqSj8Fzd9dWBHv57tLTH7OM57GP3VrE5crzVF3D5Khce9w1Xcw75OAbvrA0Mi2vBneR1OajKmXFg== +react-inspector@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-5.0.1.tgz#8a30f3d488c4f40203624bbe24800f508ae05d3a" + integrity sha512-qRIENuAIcRaytrmg/TL5nN5igYZMzyQqIKlWA8zoYRDltULsZC1bWy2Ua5wYJuwEYnC3gK4FCjcIQnb+5OyLsQ== dependencies: - "@babel/runtime" "^7.6.3" - is-dom "^1.0.9" + "@babel/runtime" "^7.8.7" + is-dom "^1.1.0" prop-types "^15.6.1" react-intl@^2.8.0: @@ -23784,7 +24627,7 @@ react-intl@^2.8.0: intl-relativeformat "^2.1.0" invariant "^2.1.1" -react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.8.3, react-is@^16.8.4, react-is@^16.8.6, react-is@^16.9.0: +react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6, react-is@^16.9.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -23848,12 +24691,7 @@ react-onclickoutside@^6.5.0: resolved "https://registry.yarnpkg.com/react-onclickoutside/-/react-onclickoutside-6.7.1.tgz#6a5b5b8b4eae6b776259712c89c8a2b36b17be93" integrity sha512-p84kBqGaMoa7VYT0vZ/aOYRfJB+gw34yjpda1Z5KeLflg70HipZOT+MXQenEhdkPAABuE2Astq4zEPdMqUQxcg== -react-onclickoutside@^6.7.1: - version "6.8.0" - resolved "https://registry.yarnpkg.com/react-onclickoutside/-/react-onclickoutside-6.8.0.tgz#9f91b5b3ed59f4d9e43fd71620dc200773a4d569" - integrity sha512-5Q4Rn7QLEoh7WIe66KFvYIpWJ49GeHoygP1/EtJyZjXKgrWH19Tf0Ty3lWyQzrEEDyLOwUvvmBFSE3dcDdvagA== - -react-popper-tooltip@^2.10.1, react-popper-tooltip@^2.8.3: +react-popper-tooltip@^2.10.1, react-popper-tooltip@^2.11.0: version "2.11.1" resolved "https://registry.yarnpkg.com/react-popper-tooltip/-/react-popper-tooltip-2.11.1.tgz#3c4bdfd8bc10d1c2b9a162e859bab8958f5b2644" integrity sha512-04A2f24GhyyMicKvg/koIOQ5BzlrRbKiAgP6L+Pdj1MVX3yJ1NeZ8+EidndQsbejFT55oW1b++wg2Z8KlAyhfQ== @@ -23861,14 +24699,6 @@ react-popper-tooltip@^2.10.1, react-popper-tooltip@^2.8.3: "@babel/runtime" "^7.9.2" react-popper "^1.3.7" -react-popper@^0.9.1: - version "0.9.5" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-0.9.5.tgz#02a24ef3eec33af9e54e8358ab70eb0e331edd05" - integrity sha1-AqJO8+7DOvnlToNYq3DrDjMe3QU= - dependencies: - popper.js "^1.14.1" - prop-types "^15.6.1" - react-popper@^1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.7.tgz#f6a3471362ef1f0d10a4963673789de1baca2324" @@ -24065,14 +24895,14 @@ react-style-singleton@^2.1.0: invariant "^2.2.4" tslib "^1.0.0" -react-syntax-highlighter@^11.0.2: - version "11.0.2" - resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-11.0.2.tgz#4e3f376e752b20d2f54e4c55652fd663149e4029" - integrity sha512-kqmpM2OH5OodInbEADKARwccwSQWBfZi0970l5Jhp4h39q9Q65C4frNcnd6uHE5pR00W8pOWj9HDRntj2G4Rww== +react-syntax-highlighter@^12.2.1: + version "12.2.1" + resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-12.2.1.tgz#14d78352da1c1c3f93c6698b70ec7c706b83493e" + integrity sha512-CTsp0ZWijwKRYFg9xhkWD4DSpQqE4vb2NKVMdPAkomnILSmsNBHE0n5GuI5zB+PU3ySVvXvdt9jo+ViD9XibCA== dependencies: "@babel/runtime" "^7.3.1" - highlight.js "~9.13.0" - lowlight "~1.11.0" + highlight.js "~9.15.1" + lowlight "1.12.1" prismjs "^1.8.4" refractor "^2.4.1" @@ -24095,13 +24925,14 @@ react-test-renderer@^16.0.0-0, react-test-renderer@^16.12.0: react-is "^16.8.6" scheduler "^0.18.0" -react-textarea-autosize@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-7.1.0.tgz#3132cb77e65d94417558d37c0bfe415a5afd3445" - integrity sha512-c2FlR/fP0qbxmlrW96SdrbgP/v0XZMTupqB90zybvmDVDutytUgPl7beU35klwcTeMepUIQEpQUn3P3bdshGPg== +react-textarea-autosize@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.2.0.tgz#fae38653f5ec172a855fd5fffb39e466d56aebdb" + integrity sha512-grajUlVbkx6VdtSxCgzloUIphIZF5bKr21OYMceWPKkniy7H0mRAT/AXPrRtObAe+zUePnNlBwUc4ivVjUGIjw== dependencies: - "@babel/runtime" "^7.1.2" - prop-types "^15.6.0" + "@babel/runtime" "^7.10.2" + use-composed-ref "^1.0.0" + use-latest "^1.0.0" react-tiny-virtual-list@^2.2.0: version "2.2.0" @@ -24144,18 +24975,6 @@ react-virtualized-auto-sizer@^1.0.2: resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.2.tgz#a61dd4f756458bbf63bd895a92379f9b70f803bd" integrity sha512-MYXhTY1BZpdJFjUovvYHVBmkq79szK/k7V3MO+36gJkWGkrXKtyr4vCPtpphaTLRAdDNoYEYFZWE8LjN+PIHNg== -react-virtualized@^9.18.5: - version "9.20.1" - resolved "https://registry.yarnpkg.com/react-virtualized/-/react-virtualized-9.20.1.tgz#02dc08fe9070386b8c48e2ac56bce7af0208d22d" - integrity sha512-xIWxBsyNAjceqD3hsE0nw5TcDVxKbIepsHhvS2XneHmNz0KlKxdLdGBmGZBM9ZesEmbZ5EO0Sw70TB1MeCmpbQ== - dependencies: - babel-runtime "^6.26.0" - classnames "^2.2.3" - dom-helpers "^2.4.0 || ^3.0.0" - loose-envify "^1.3.0" - prop-types "^15.6.0" - react-lifecycles-compat "^3.0.4" - react-virtualized@^9.21.2: version "9.21.2" resolved "https://registry.yarnpkg.com/react-virtualized/-/react-virtualized-9.21.2.tgz#02e6df65c1e020c8dbf574ec4ce971652afca84e" @@ -24416,13 +25235,6 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -readdirp@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.1.3.tgz#d6e011ed5b9240a92f08651eeb40f7942ceb6cc1" - integrity sha512-ZOsfTGkjO2kqeR5Mzr5RYDbTGYneSkdNKX2fOX2P5jF7vMrd/GNnIAUtDldeHHumHUCQ3V05YfWUdxMPAsRu9Q== - dependencies: - picomatch "^2.0.4" - readdirp@~3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" @@ -24579,11 +25391,6 @@ redux-saga@^1.1.3: dependencies: "@redux-saga/core" "^1.1.3" -redux-thunk@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.2.0.tgz#e615a16e16b47a19a515766133d1e3e99b7852e5" - integrity sha1-5hWhbha0ehmlFXZhM9Hj6Zt4UuU= - redux-thunk@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" @@ -24679,7 +25486,7 @@ regenerator-runtime@^0.12.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== -regenerator-runtime@^0.13.1, regenerator-runtime@^0.13.2: +regenerator-runtime@^0.13.1: version "0.13.2" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== @@ -24795,15 +25602,6 @@ regjsparser@^0.6.4: dependencies: jsesc "~0.5.0" -rehype-parse@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-6.0.0.tgz#f681555f2598165bee2c778b39f9073d17b16bca" - integrity sha512-V2OjMD0xcSt39G4uRdMTqDXXm6HwkUbLMDayYKA/d037j8/OtVSQ+tqKwYWOuyBeoCs/3clXRe30VUjeMDTBSA== - dependencies: - hast-util-from-parse5 "^5.0.0" - parse5 "^5.0.0" - xtend "^4.0.1" - rehype-raw@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-4.0.2.tgz#5d3191689df96c8c651ce5f51a6c668d2c07b9c8" @@ -24827,7 +25625,7 @@ rehype-stringify@^6.0.1: hast-util-to-html "^6.0.0" xtend "^4.0.0" -relateurl@0.2.x: +relateurl@0.2.x, relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= @@ -24860,6 +25658,22 @@ remark-emoji@^2.1.0: node-emoji "^1.10.0" unist-util-visit "^2.0.2" +remark-external-links@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/remark-external-links/-/remark-external-links-6.1.0.tgz#1a545b3cf896eae00ec1732d90f595f75a329abe" + integrity sha512-dJr+vhe3wuh1+E9jltQ+efRMqtMDOOnfFkhtoArOmhnBcPQX6THttXMkc/H0kdnAvkXTk7f2QdOYm5qo/sGqdw== + dependencies: + extend "^3.0.0" + is-absolute-url "^3.0.0" + mdast-util-definitions "^2.0.0" + space-separated-tokens "^1.0.0" + unist-util-visit "^2.0.0" + +remark-footnotes@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-1.0.0.tgz#9c7a97f9a89397858a50033373020b1ea2aad011" + integrity sha512-X9Ncj4cj3/CIvLI2Z9IobHtVi8FVdUrdJkCNaL9kdX8ohfsi18DXHsCVd/A7ssARBdccdDb5ODnt62WuEWaM/g== + remark-highlight.js@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/remark-highlight.js/-/remark-highlight.js-5.2.0.tgz#6d8d22085e0c76573744b7e3706fc232269f5b02" @@ -24868,6 +25682,42 @@ remark-highlight.js@^5.2.0: lowlight "^1.2.0" unist-util-visit "^1.0.0" +remark-mdx@1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.6.16.tgz#13ee40ad0614a1cc179aca3604d7f1b79e498a2f" + integrity sha512-xqZhBQ4TonFiSFpVt6SnTLRnxstu7M6pcaOibKZhqzk4zMRVacVenD7iECjfESK+72LkPm/NW+0r5ahJAg7zlQ== + dependencies: + "@babel/core" "7.10.5" + "@babel/helper-plugin-utils" "7.10.4" + "@babel/plugin-proposal-object-rest-spread" "7.10.4" + "@babel/plugin-syntax-jsx" "7.10.4" + "@mdx-js/util" "1.6.16" + is-alphabetical "1.0.4" + remark-parse "8.0.3" + unified "9.1.0" + +remark-parse@8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.3.tgz#9c62aa3b35b79a486454c690472906075f40c7e1" + integrity sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q== + dependencies: + ccount "^1.0.0" + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^2.0.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^2.0.0" + vfile-location "^3.0.0" + xtend "^4.0.1" + remark-parse@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" @@ -24917,6 +25767,22 @@ remark-rehype@^7.0.0: dependencies: mdast-util-to-hast "^9.1.0" +remark-slug@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/remark-slug/-/remark-slug-6.0.0.tgz#2b54a14a7b50407a5e462ac2f376022cce263e2c" + integrity sha512-ln67v5BrGKHpETnm6z6adlJPhESFJwfuZZ3jrmi+lKTzeZxh2tzFzUfDD4Pm2hRGOarHLuGToO86MNMZ/hA67Q== + dependencies: + github-slugger "^1.0.0" + mdast-util-to-string "^1.0.0" + unist-util-visit "^2.0.0" + +remark-squeeze-paragraphs@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz#76eb0e085295131c84748c8e43810159c5653ead" + integrity sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw== + dependencies: + mdast-squeeze-paragraphs "^4.0.0" + remedial@^1.0.7: version "1.0.8" resolved "https://registry.yarnpkg.com/remedial/-/remedial-1.0.8.tgz#a5e4fd52a0e4956adbaf62da63a5a46a78c578a0" @@ -25261,7 +26127,7 @@ resolve@1.8.1: dependencies: path-parse "^1.0.5" -resolve@^1.1.10, resolve@^1.1.5, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.7.1, resolve@^1.8.1: +resolve@^1.1.10, resolve@^1.1.5, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.7.1, resolve@^1.8.1: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== @@ -25518,13 +26384,6 @@ rxjs-marbles@^5.0.6: dependencies: fast-equals "^2.0.0" -rxjs@6.5.5, rxjs@^6.5.5: - version "6.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" - integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== - dependencies: - tslib "^1.9.0" - rxjs@^5.5.2: version "5.5.12" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" @@ -25539,6 +26398,20 @@ rxjs@^6.1.0, rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.5.1: dependencies: tslib "^1.9.0" +rxjs@^6.5.3: + version "6.6.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.2.tgz#8096a7ac03f2cc4fe5860ef6e572810d9e01c0d2" + integrity sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg== + dependencies: + tslib "^1.9.0" + +rxjs@^6.5.5: + version "6.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" + integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== + dependencies: + tslib "^1.9.0" + rxjs@^6.6.0: version "6.6.0" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.0.tgz#af2901eedf02e3a83ffa7f886240ff9018bbec84" @@ -25706,7 +26579,7 @@ schema-utils@^0.4.5: ajv "^6.1.0" ajv-keywords "^3.1.0" -schema-utils@^2.0.0, schema-utils@^2.0.1, schema-utils@^2.4.1, schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.1, schema-utils@^2.6.4, schema-utils@^2.6.6, schema-utils@^2.7.0: +schema-utils@^2.0.0, schema-utils@^2.0.1, schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.1, schema-utils@^2.6.4, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== @@ -25830,11 +26703,6 @@ semver@5.5.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== -semver@5.7.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" - integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== - semver@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" @@ -25923,6 +26791,13 @@ serialize-javascript@^3.0.0, serialize-javascript@^3.1.0: dependencies: randombytes "^2.1.0" +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + serve-favicon@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.5.0.tgz#935d240cdfe0f5805307fdfe967d88942a2cbcf0" @@ -26061,11 +26936,6 @@ shallow-copy@~0.0.1: resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170" integrity sha1-QV9CcC1z2BAzApLMXuhurhoRoXA= -shallow-equal@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.0.tgz#fd828d2029ff4e19569db7e19e535e94e2d1f5cc" - integrity sha512-Z21pVxR4cXsfwpMKMhCEIO1PCi5sp7KEp+CmOpBQ+E8GpHwKOw2sEzk7sgblM3d/j4z4gakoWEoPcjK0VJQogA== - shallowequal@1.1.0, shallowequal@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" @@ -26095,15 +26965,10 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c= - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" +shell-quote@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== shelljs@^0.6.0: version "0.6.1" @@ -26175,13 +27040,6 @@ simple-git@1.116.0: dependencies: debug "^4.0.1" -simple-git@^1.91.0: - version "1.92.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.92.0.tgz#6061468eb7d19f0141078fc742e62457e910f547" - integrity sha1-YGFGjrfRnwFBB4/HQuYkV+kQ9Uc= - dependencies: - debug "^3.1.0" - simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" @@ -26189,26 +27047,6 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -simplebar-react@^1.0.0-alpha.6: - version "1.2.0" - resolved "https://registry.yarnpkg.com/simplebar-react/-/simplebar-react-1.2.0.tgz#9c5dd129f77c2f03a7fb5ad4c40e90c845048c77" - integrity sha512-CNCaRcl1VUSVYJ+dqKcvDWbMXcRfdiCsHchsUNf+UMyAcmTNZ1K9peN89WWz1+jL4bsciaZgf9ZXWy0YrfZhFQ== - dependencies: - prop-types "^15.6.1" - simplebar "^4.2.0" - -simplebar@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/simplebar/-/simplebar-4.2.0.tgz#97e5c1c85d05cc04f8c92939e4da71dd087e325c" - integrity sha512-FqPl3FtO0ODIKHMJy2WsunqA+I0/hvw/dnHgackaXGwSP9FO7Y5APH1miPGVCsoGNFCK+v0MXL38f8Epe3qeBw== - dependencies: - can-use-dom "^0.1.0" - core-js "^3.0.1" - lodash.debounce "^4.0.8" - lodash.memoize "^4.1.2" - lodash.throttle "^4.1.1" - resize-observer-polyfill "^1.5.1" - sinon@^7.4.2: version "7.5.0" resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.5.0.tgz#e9488ea466070ea908fd44a3d6478fd4923c67ec" @@ -26305,18 +27143,6 @@ socket-location@^1.0.0: dependencies: await-event "^2.1.0" -sockjs-client@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.3.0.tgz#12fc9d6cb663da5739d3dc5fb6e8687da95cb177" - integrity sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg== - dependencies: - debug "^3.2.5" - eventsource "^1.0.7" - faye-websocket "~0.11.1" - inherits "^2.0.3" - json3 "^3.3.2" - url-parse "^1.4.3" - sockjs-client@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" @@ -26673,6 +27499,13 @@ stack-utils@^1.0.1: resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" integrity sha1-1PM6tU6OOHeLDKXP07OvsS22hiA= +stack-utils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.2.tgz#5cf48b4557becb4638d0bc4f21d23f5d19586593" + integrity sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg== + dependencies: + escape-string-regexp "^2.0.0" + stackframe@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-0.3.1.tgz#33aa84f1177a5548c8935533cbfeb3420975f5a4" @@ -27042,15 +27875,6 @@ stringify-entities@^2.0.0: is-decimal "^1.0.2" is-hexadecimal "^1.0.0" -stringify-object@3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.2.tgz#9853052e5a88fb605a44cd27445aa257ad7ffbcd" - integrity sha512-O696NF21oLiDy8PhpWu8AEqoZHw++QW6mUv0UvKZe8gWSdSvMXkiLufK7OmnP27Dro4GU5kb9U7JIO0mBuCRQg== - dependencies: - get-own-enumerable-property-symbols "^2.0.1" - is-obj "^1.0.1" - is-regexp "^1.0.0" - stringify-object@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" @@ -27060,20 +27884,13 @@ stringify-object@^3.2.1: is-obj "^1.0.1" is-regexp "^1.0.0" -strip-ansi@*, strip-ansi@^6.0.0: +strip-ansi@*, strip-ansi@6.0.0, strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== dependencies: ansi-regex "^5.0.0" -strip-ansi@5.2.0, strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" @@ -27095,6 +27912,13 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + strip-ansi@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" @@ -27195,14 +28019,6 @@ style-it@^2.1.3: dependencies: react-lib-adler32 "^1.0.3" -style-loader@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.2.1.tgz#c5cbbfbf1170d076cfdd86e0109c5bba114baa1a" - integrity sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg== - dependencies: - loader-utils "^2.0.0" - schema-utils "^2.6.6" - style-loader@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.1.3.tgz#9e826e69c683c4d9bf9db924f85e9abb30d5e200" @@ -27211,20 +28027,28 @@ style-loader@^1.1.3: loader-utils "^1.2.3" schema-utils "^2.6.4" -style-to-object@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.2.3.tgz#afcf42bc03846b1e311880c55632a26ad2780bcb" - integrity sha512-1d/k4EY2N7jVLOqf2j04dTc37TPOv/hHxZmvpg8Pdh8UYydxeu/C1W1U4vD8alzf5V2Gt7rLsmkr4dxAlDm9ng== +style-loader@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.2.1.tgz#c5cbbfbf1170d076cfdd86e0109c5bba114baa1a" + integrity sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg== dependencies: - inline-style-parser "0.1.1" + loader-utils "^2.0.0" + schema-utils "^2.6.6" -style-to-object@^0.3.0: +style-to-object@0.3.0, style-to-object@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46" integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== dependencies: inline-style-parser "0.1.1" +style-to-object@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.2.3.tgz#afcf42bc03846b1e311880c55632a26ad2780bcb" + integrity sha512-1d/k4EY2N7jVLOqf2j04dTc37TPOv/hHxZmvpg8Pdh8UYydxeu/C1W1U4vD8alzf5V2Gt7rLsmkr4dxAlDm9ng== + dependencies: + inline-style-parser "0.1.1" + styled-components@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.1.0.tgz#2e3985b54f461027e1c91af3229e1c2530872a4e" @@ -27408,6 +28232,11 @@ sver-compat@^1.5.0: es6-iterator "^2.0.1" es6-symbol "^3.1.1" +svg-parser@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + svg-to-pdfkit@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/svg-to-pdfkit/-/svg-to-pdfkit-0.1.8.tgz#5921765922044843f0c1a5b25ec1ef8a4a33b8af" @@ -27415,7 +28244,7 @@ svg-to-pdfkit@^0.1.8: dependencies: pdfkit ">=0.8.1" -svgo@^1.2.1: +svgo@^1.2.2: version "1.3.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== @@ -27464,7 +28293,7 @@ symbol.prototype.description@^1.0.0: dependencies: has-symbols "^1.0.0" -tabbable@1.1.3, tabbable@^1.1.0: +tabbable@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-1.1.3.tgz#0e4ee376f3631e42d7977a074dbd2b3827843081" integrity sha512-nOWwx35/JuDI4ONuF0ZTo6lYvI0fY0tZCH1ErzY2EXfu4az50ZyiUX8X073FLiZtmWUVlkRnuXsehjJgCw9tYg== @@ -27526,7 +28355,7 @@ tapable@^0.1.8: resolved "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" integrity sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q= -tapable@^1.0.0, tapable@^1.1.0: +tapable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.0.tgz#0d076a172e3d9ba088fd2272b2668fb8d194b78c" integrity sha512-IlqtmLVaZA2qab8epUXbVWRn3aB1imbDMJtjB3nu4X0NqPkcY/JH9ZtCBWKHWPxs8Svi9tyo8w2dBoi07qZbBA== @@ -27679,18 +28508,18 @@ teamwork@3.x.x: resolved "https://registry.yarnpkg.com/teamwork/-/teamwork-3.0.1.tgz#ff38c7161f41f8070b7813716eb6154036ece196" integrity sha512-hEkJIpDOfOYe9NYaLFk00zQbzZeKNCY8T2pRH3I13Y1mJwxaSQ6NEsjY5rCp+11ezCiZpWGoGFTbOuhg4qKevQ== -telejson@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/telejson/-/telejson-3.3.0.tgz#6d814f3c0d254d5c4770085aad063e266b56ad03" - integrity sha512-er08AylQ+LEbDLp1GRezORZu5wKOHaBczF6oYJtgC3Idv10qZ8A3p6ffT+J5BzDKkV9MqBvu8HAKiIIOp6KJ2w== +telejson@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/telejson/-/telejson-5.0.2.tgz#ed1e64be250cc1c757a53c19e1740b49832b3d51" + integrity sha512-XCrDHGbinczsscs8LXFr9jDhvy37yBk9piB7FJrCfxE8oP66WDkolNMpaBkWYgQqB9dQGBGtTDzGQPedc9KJmw== dependencies: "@types/is-function" "^1.0.0" global "^4.4.0" - is-function "^1.0.1" - is-regex "^1.0.4" + is-function "^1.0.2" + is-regex "^1.1.1" is-symbol "^1.0.3" isobject "^4.0.0" - lodash "^4.17.15" + lodash "^4.17.19" memoizerific "^1.11.3" temp-dir@^1.0.0: @@ -27762,6 +28591,21 @@ terser-webpack-plugin@^2.1.2: terser "^4.6.12" webpack-sources "^1.4.3" +terser-webpack-plugin@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-3.1.0.tgz#91e6d39571460ed240c0cf69d295bcf30ebf98cb" + integrity sha512-cjdZte66fYkZ65rQ2oJfrdCAkkhJA7YLYk5eGOcGCSGlq0ieZupRdjedSQXYknMPo2IveQL+tPdrxUkERENCFA== + dependencies: + cacache "^15.0.5" + find-cache-dir "^3.3.1" + jest-worker "^26.2.1" + p-limit "^3.0.2" + schema-utils "^2.6.6" + serialize-javascript "^4.0.0" + source-map "^0.6.1" + terser "^4.8.0" + webpack-sources "^1.4.3" + terser@^4.1.2, terser@^4.6.12: version "4.7.0" resolved "https://registry.yarnpkg.com/terser/-/terser-4.7.0.tgz#15852cf1a08e3256a80428e865a2fa893ffba006" @@ -27771,15 +28615,14 @@ terser@^4.1.2, terser@^4.6.12: source-map "~0.6.1" source-map-support "~0.5.12" -test-exclude@^5.0.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" - integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== +terser@^4.6.3, terser@^4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== dependencies: - glob "^7.1.3" - minimatch "^3.0.4" - read-pkg-up "^4.0.0" - require-main-filename "^2.0.0" + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" test-exclude@^6.0.0: version "6.0.0" @@ -27999,13 +28842,6 @@ tmp@0.0.30: dependencies: os-tmpdir "~1.0.1" -tmp@0.1.0, tmp@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" - integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== - dependencies: - rimraf "^2.6.3" - tmp@^0.0.29: version "0.0.29" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.29.tgz#f25125ff0dd9da3ccb0c2dd371ee1288bb9128c0" @@ -28293,16 +29129,21 @@ ts-debounce@^1.0.0: resolved "https://registry.yarnpkg.com/ts-debounce/-/ts-debounce-1.0.0.tgz#e433301744ba75fe25466f7f23e1382c646aae6a" integrity sha512-V+IzWj418IoqqxVJD6I0zjPtgIyvAJ8VyViqzcxZ0JRiJXsi5mCmy1yUKkWd2gUygT28a8JsVFCgqdrf2pLUHQ== -ts-dedent@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-1.1.0.tgz#67983940793183dc7c7f820acb66ba02cdc33c6e" - integrity sha512-CVCvDwMBWZKjDxpN3mU/Dx1v3k+sJgE8nrhXcC9vRopRfoa7vVzilNvHEAUi5jQnmFHpnxDx5jZdI1TpG8ny2g== +ts-dedent@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-1.1.1.tgz#68fad040d7dbd53a90f545b450702340e17d18f3" + integrity sha512-UGTRZu1evMw4uTPyYF66/KFd22XiU+jMaIuHrkIHQ2GivAXVlLV0v/vHrpOuTRf9BmpNHi/SO7Vd0rLu0y57jg== ts-easing@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/ts-easing/-/ts-easing-0.2.0.tgz#c8a8a35025105566588d87dbda05dd7fbfa5a4ec" integrity sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ== +ts-essentials@^2.0.3: + version "2.0.12" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-2.0.12.tgz#c9303f3d74f75fa7528c3d49b80e089ab09d8745" + integrity sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w== + ts-invariant@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.2.1.tgz#3d587f9d6e3bded97bf9ec17951dd9814d5a9d3f" @@ -28340,10 +29181,10 @@ ts-log@2.1.4: resolved "https://registry.yarnpkg.com/ts-log/-/ts-log-2.1.4.tgz#063c5ad1cbab5d49d258d18015963489fb6fb59a" integrity sha512-P1EJSoyV+N3bR/IWFeAqXzKPZwHpnLY6j7j58mAvewHRipo+BQM2Y1f9Y9BjEQznKwgqqZm7H8iuixmssU7tYQ== -ts-pnp@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.1.4.tgz#ae27126960ebaefb874c6d7fa4729729ab200d90" - integrity sha512-1J/vefLC+BWSo+qe8OnJQfWTYRS6ingxjwqmHMqaMxXMj7kFtKLgAaYW3JeX3mktjgUL+etlU8/B4VUAUI9QGw== +ts-pnp@^1.1.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" + integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== tsd@^0.13.1: version "0.13.1" @@ -28375,11 +29216,16 @@ tslib@^1, tslib@^1.0.0, tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== -tslib@^2.0.0, tslib@~2.0.0: +tslib@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.0.tgz#18d13fc2dce04051e20f074cc8387fd8089ce4f3" integrity sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g== +tslib@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" + integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== + tsutils@^3.17.1: version "3.17.1" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" @@ -28722,6 +29568,18 @@ unicode-trie@^2.0.0: pako "^0.2.5" tiny-inflate "^1.0.0" +unified@9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.1.0.tgz#7ba82e5db4740c47a04e688a9ca8335980547410" + integrity sha512-VXOv7Ic6twsKGJDeZQ2wwPqXs2hM0KNu5Hkg9WgAZbSD1pxhZ7p8swqg583nw1Je2fhwHy6U8aEjiI79x1gvag== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + unified@^6.1.5: version "6.1.6" resolved "https://registry.yarnpkg.com/unified/-/unified-6.1.6.tgz#5ea7f807a0898f1f8acdeefe5f25faa010cc42b1" @@ -28735,20 +29593,6 @@ unified@^6.1.5: x-is-function "^1.0.4" x-is-string "^0.1.0" -unified@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-7.1.0.tgz#5032f1c1ee3364bd09da12e27fdd4a7553c7be13" - integrity sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw== - dependencies: - "@types/unist" "^2.0.0" - "@types/vfile" "^3.0.0" - bail "^1.0.0" - extend "^3.0.0" - is-plain-obj "^1.1.0" - trough "^1.0.0" - vfile "^3.0.0" - x-is-string "^0.1.0" - unified@^8.4.2: version "8.4.2" resolved "https://registry.yarnpkg.com/unified/-/unified-8.4.2.tgz#13ad58b4a437faa2751a4a4c6a16f680c500fff1" @@ -28811,7 +29655,7 @@ unique-string@^2.0.0: dependencies: crypto-random-string "^2.0.0" -unist-builder@^2.0.0: +unist-builder@2.0.3, unist-builder@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== @@ -28848,6 +29692,20 @@ unist-util-remove-position@^1.0.0: dependencies: unist-util-visit "^1.1.0" +unist-util-remove-position@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc" + integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA== + dependencies: + unist-util-visit "^2.0.0" + +unist-util-remove@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.0.0.tgz#32c2ad5578802f2ca62ab808173d505b2c898488" + integrity sha512-HwwWyNHKkeg/eXRnE11IpzY8JT55JNM1YCwwU9YNCnfzk6s8GhPXrVBBZWiwLeATJbI7euvoGSzcy9M29UeW3g== + dependencies: + unist-util-is "^4.0.0" + unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.1.tgz#3ccbdc53679eed6ecf3777dd7f5e3229c1b6aa3c" @@ -28880,6 +29738,15 @@ unist-util-visit-parents@^3.0.0: "@types/unist" "^2.0.0" unist-util-is "^4.0.0" +unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" + integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + unist-util-visit@^1.0.0: version "1.4.1" resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" @@ -28894,15 +29761,6 @@ unist-util-visit@^1.1.0, unist-util-visit@^1.3.0: dependencies: unist-util-is "^2.1.1" -unist-util-visit@^2.0.0, unist-util-visit@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" - integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^4.0.0" - unist-util-visit-parents "^3.0.0" - universal-user-agent@^2.0.0, universal-user-agent@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-2.0.3.tgz#9f6f09f9cc33de867bb720d84c08069b14937c6c" @@ -29074,15 +29932,6 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -url-loader@2.2.0, url-loader@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.2.0.tgz#af321aece1fd0d683adc8aaeb27829f29c75b46e" - integrity sha512-G8nk3np8ZAnwhHXas1JxJEwJyQdqFXAKJehfgZ/XrC48volFBRtO+FIKtF2u0Ma3bw+4vnDVjHPAQYlF9p2vsw== - dependencies: - loader-utils "^1.2.3" - mime "^2.4.4" - schema-utils "^2.4.1" - url-loader@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.3.0.tgz#e0e2ef658f003efb8ca41b0f3ffbf76bab88658b" @@ -29092,6 +29941,15 @@ url-loader@^2.2.0: mime "^2.4.4" schema-utils "^2.5.0" +url-loader@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.0.tgz#c7d6b0d6b0fccd51ab3ffc58a78d32b8d89a7be2" + integrity sha512-IzgAAIC8wRrg6NYkFIJY09vtktQcsvU8V6HhtQj9PTefbYImzLB1hufqo4m+RyM5N3mLx5BqJKccgxJS+W3kqw== + dependencies: + loader-utils "^2.0.0" + mime-types "^2.1.26" + schema-utils "^2.6.5" + url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" @@ -29142,6 +30000,25 @@ use-callback-ref@^1.2.1, use-callback-ref@^1.2.3: resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.2.4.tgz#d86d1577bfd0b955b6e04aaf5971025f406bea3c" integrity sha512-rXpsyvOnqdScyied4Uglsp14qzag1JIemLeTWGKbwpotWht57hbP78aNT+Q4wdFKQfQibbUX4fb6Qb4y11aVOQ== +use-composed-ref@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.0.0.tgz#bb13e8f4a0b873632cde4940abeb88b92d03023a" + integrity sha512-RVqY3NFNjZa0xrmK3bIMWNmQ01QjKPDc7DeWR3xa/N8aliVppuutOE5bZzPkQfvL+5NRWMMp0DJ99Trd974FIw== + dependencies: + ts-essentials "^2.0.3" + +use-isomorphic-layout-effect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.0.0.tgz#f56b4ed633e1c21cd9fc76fe249002a1c28989fb" + integrity sha512-JMwJ7Vd86NwAt1jH7q+OIozZSIxA4ND0fx6AsOe2q1H8ooBUp5aN6DvVCqZiIaYU6JaMRJGyR0FO7EBCIsb/Rg== + +use-latest@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.1.0.tgz#7bf9684555869c3f5f37e10d0884c8accf4d3aa6" + integrity sha512-gF04d0ZMV3AMB8Q7HtfkAWe+oq1tFXP6dZKwBHQF5nVXtGsh2oAYeeqma5ZzxtlpOcW8Ro/tLcfmEodjDeqtuw== + dependencies: + use-isomorphic-layout-effect "^1.0.0" + use-memo-one@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.1.tgz#39e6f08fe27e422a7d7b234b5f9056af313bd22c" @@ -29195,7 +30072,7 @@ util-extend@^1.0.1: resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8= -util.promisify@1.0.0, util.promisify@^1.0.0, util.promisify@~1.0.0: +util.promisify@1.0.0, util.promisify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== @@ -29203,6 +30080,16 @@ util.promisify@1.0.0, util.promisify@^1.0.0, util.promisify@~1.0.0: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" +util.promisify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + util@0.10.3, util@^0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" @@ -29257,7 +30144,7 @@ uuid@^3.0.0, uuid@^3.1.0, uuid@^3.3.2, uuid@^3.3.3, uuid@^3.4.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.3.0: +uuid@^8.0.0, uuid@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== @@ -29334,339 +30221,350 @@ vary@^1, vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= -vega-canvas@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/vega-canvas/-/vega-canvas-1.2.2.tgz#f31aae9ac1e1ed01bb7817a1e53099279e2d3d43" - integrity sha512-39h8/fZp4kDwSeDGIEoyEiIgtP3mgY3D08InD1Ldm0FntePpSe1tXzC1zcvoLe/+f7Qprl6Jfwux/ksOXvpj2w== +vega-canvas@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/vega-canvas/-/vega-canvas-1.2.5.tgz#c332bad588893391b583fbeb0c95e1143127f797" + integrity sha512-6+jFEd6s7G088npH0+YuN1JTRxMYsjb1uXbwqcJ8zSP7gFR4f3tg/yA/BHU0+JbvLnxnScr61HYpDXAQ59YW3w== -vega-crossfilter@~4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/vega-crossfilter/-/vega-crossfilter-4.0.2.tgz#739a26eb8eb741b3e1725679d09ee2af56f983b5" - integrity sha512-wlKpqBEUpDd/Y3aaC1u91lebXR+sS7LElYv2jGDDG5pA+RS8lRo3NmSClKVBM5NcY80IeMywG+0a/ogzVeBrPQ== +vega-crossfilter@~4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/vega-crossfilter/-/vega-crossfilter-4.0.5.tgz#cf6a5fca60821928f976b32f22cf66cfd9cbeeae" + integrity sha512-yF+iyGP+ZxU7Tcj5yBsMfoUHTCebTALTXIkBNA99RKdaIHp1E690UaGVLZe6xde2n5WaYpho6I/I6wdAW3NXcg== dependencies: - d3-array "^2.4.0" - vega-dataflow "^5.5.1" - vega-util "^1.13.2" + d3-array "^2.7.1" + vega-dataflow "^5.7.3" + vega-util "^1.15.2" -vega-dataflow@^5.5.1, vega-dataflow@^5.6.0, vega-dataflow@^5.7.0, vega-dataflow@~5.7.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/vega-dataflow/-/vega-dataflow-5.7.0.tgz#811381d946e044cafe093c7c7f8111d366cfbc11" - integrity sha512-W8Q6NBCmk3TCDjTiy/I2PA4JTQljqp3XF6227CiCvZfhmCZCeHchuZKrgwJUBVZ2CoqT+UL2JpCi1SFzrPObIQ== +vega-dataflow@^5.7.3, vega-dataflow@~5.7.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/vega-dataflow/-/vega-dataflow-5.7.3.tgz#66ca06a61f72a210b0732e3b6cc1eec5117197f7" + integrity sha512-2ipzKgQUmbSXcQBH+9XF0BYbXyZrHvjlbJ8ifyRWYQk78w8kMvE6wy/rcdXYK6iVZ6aAbEDDT7jTI+rFt3tGLA== dependencies: - vega-format "^1.0.0" - vega-loader "^4.3.0" - vega-util "^1.14.0" + vega-format "^1.0.4" + vega-loader "^4.3.2" + vega-util "^1.15.2" -vega-encode@~4.8.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/vega-encode/-/vega-encode-4.8.0.tgz#948f3302892360cffc7a76d2107295c421835d12" - integrity sha512-1OYYblMu9oyhuRIiFRK+R7/ChwXn3ckWyl6omK5Q46vkeLZhafBNb8ZdqftPoM/5BnZUTpia0SQ06AGX8VDjHw== +vega-encode@~4.8.3: + version "4.8.3" + resolved "https://registry.yarnpkg.com/vega-encode/-/vega-encode-4.8.3.tgz#b3048fb39845d72f18d8dc302ad697f826e0ff83" + integrity sha512-JoRYtaV2Hs8spWLzTu/IjR7J9jqRmuIOEicAaWj6T9NSZrNWQzu2zF3IVsX85WnrIDIRUDaehXaFZvy9uv9RQg== dependencies: - d3-array "^2.4.0" - d3-interpolate "^1.4.0" - vega-dataflow "^5.7.0" - vega-scale "^7.0.0" - vega-util "^1.14.0" + d3-array "^2.7.1" + d3-interpolate "^2.0.1" + vega-dataflow "^5.7.3" + vega-scale "^7.0.3" + vega-util "^1.15.2" -vega-event-selector@^2.0.3, vega-event-selector@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/vega-event-selector/-/vega-event-selector-2.0.3.tgz#760c61af7ab5c325d3274fd3ab284d067ff16f8c" - integrity sha512-rUnAvBSy5tkk+0MELY7qICTgjMNjH/DDNIH603q3GRi+bBRCd4MlJxWrPYBhwZIYpmr6XCe130lZ90/F5SgVfA== +vega-event-selector@^2.0.6, vega-event-selector@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/vega-event-selector/-/vega-event-selector-2.0.6.tgz#6beb00e066b78371dde1a0f40cb5e0bbaecfd8bc" + integrity sha512-UwCu50Sqd8kNZ1X/XgiAY+QAyQUmGFAwyDu7y0T5fs6/TPQnDo/Bo346NgSgINBEhEKOAMY1Nd/rPOk4UEm/ew== -vega-expression@^2.6.4, vega-expression@^2.6.5, vega-expression@~2.6.5: - version "2.6.5" - resolved "https://registry.yarnpkg.com/vega-expression/-/vega-expression-2.6.5.tgz#7bda7524b9223cbbf9034071695c7c2a9bd81971" - integrity sha512-3hJts0gKomu3ePXYeIb+VAw7yNKoHJ6VqSKsHHFPyoEGNdwmlgI5d9IBblelPCiMCHK4sMt7h1OTWB33cfxZGA== +vega-expression@^3.0.0, vega-expression@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/vega-expression/-/vega-expression-3.0.0.tgz#39179d010b34c57513162bf1ab5a7bff4b31be91" + integrity sha512-/ObjIOK94MB+ziTuh8HZt2eWlKUPT/piRJLal5tx5QL1sQbfRi++7lHKTaKMLXLqc4Xqp9/DewE3PqQ6tYzaUA== dependencies: - vega-util "^1.14.0" + vega-util "^1.15.2" -vega-force@~4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/vega-force/-/vega-force-4.0.4.tgz#b73cba2e169cc248c994c9d981c374eb06aff764" - integrity sha512-ETTezb3lpQIbrk8pdmv4WpoNlChWdIK1Hv5CHL8Q/oOT/lIop/NHnI+JZO4yuzaYv+o3UqNWPcjiY0U5/i51dw== +vega-force@~4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/vega-force/-/vega-force-4.0.7.tgz#6dc39ecb7889d9102661244d62fbc8d8714162ee" + integrity sha512-pyLKdwXSZ9C1dVIqdJOobvBY29rLvZjvRRTla9BU/nMwAiAGlGi6WKUFdRGdneyGe3zo2nSZDTZlZM/Z5VaQNA== dependencies: - d3-force "^2.0.1" - vega-dataflow "^5.5.1" - vega-util "^1.13.2" + d3-force "^2.1.1" + vega-dataflow "^5.7.3" + vega-util "^1.15.2" -vega-format@^1.0.0, vega-format@^1.0.1, vega-format@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vega-format/-/vega-format-1.0.1.tgz#94b5be9eb3d6a8b315fcf3d523ed6a1bb2ea4d71" - integrity sha512-f9IZ+SDHVFFneDDc+d8RfeJhXXvUgquAuM+1MZ2Rjf4xqpg+E8FSNQkh8wjeo82mc6G3KVa9hynSdfN/a0AktQ== +vega-format@^1.0.4, vega-format@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/vega-format/-/vega-format-1.0.4.tgz#40c0c252d11128738b845ee73d8173f8064d6626" + integrity sha512-oTAeub3KWm6nKhXoYCx1q9G3K43R6/pDMXvqDlTSUtjoY7b/Gixm8iLcir5S9bPjvH40n4AcbZsPmNfL/Up77A== dependencies: - d3-array "^2.4.0" - d3-format "^1.4.4" - d3-time-format "^2.2.3" - vega-time "^2.0.0" - vega-util "^1.14.0" + d3-array "^2.7.1" + d3-format "^2.0.0" + d3-time-format "^3.0.0" + vega-time "^2.0.3" + vega-util "^1.15.2" -vega-functions@^5.7.0, vega-functions@^5.7.1, vega-functions@~5.7.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/vega-functions/-/vega-functions-5.7.1.tgz#4231f013c7a8a6cdcefaa6ee08c96f361c0c9ef5" - integrity sha512-PQUcRkLAJwiRK+Y2o8MZdHJOHZwGcIYKvnYZnes2IY5433lhKYL7b1DmwQhUqyHyKCudqlz/pRnoLpmuL8sAgg== - dependencies: - d3-array "^2.4.0" - d3-color "^1.4.1" - d3-geo "^1.12.1" - vega-dataflow "^5.7.0" - vega-expression "^2.6.5" - vega-scale "^7.0.0" - vega-scenegraph "^4.8.0" - vega-selections "^5.1.1" - vega-statistics "^1.7.5" - vega-time "^2.0.1" - vega-util "^1.14.0" - -vega-geo@~4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/vega-geo/-/vega-geo-4.3.4.tgz#1bd26e438a304ff2596d51f57acee0e119e81313" - integrity sha512-sfMK1XGCLzMnfmy7fBJ2D+h8NG5WDwnSiPvcsjgwwAyonlUgCZWKdrNouAyLaRODy5ICZUEj/GDILSBdlIfUCg== - dependencies: - d3-array "^2.4.0" - d3-color "^1.4.1" - d3-geo "^1.12.1" - vega-canvas "^1.2.2" - vega-dataflow "^5.6.0" - vega-projection "^1.4.2" - vega-statistics "^1.7.5" - vega-util "^1.14.0" - -vega-hierarchy@~4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/vega-hierarchy/-/vega-hierarchy-4.0.6.tgz#e286e917e47f1d4d9bfefa278cfdfa163d9f1225" - integrity sha512-v71NQzz9503aBJgRPnrBEZ/87q58EjwylmAs3uh+SaI5ocMCn9+goE+x5ZwZ0gNT9qJv4Umm5L3GZ9h8LuXjlg== +vega-functions@^5.8.0, vega-functions@~5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/vega-functions/-/vega-functions-5.8.0.tgz#48e02b0e5b14261cd445bda3c4721a18b02c810c" + integrity sha512-xaUqWZHEX+EuJuKfN0Biux3rrCHDEHmMbW7LHYyyEqguR0i6+zhtOSUEWmYqDfzB/+BlIwCk5Vif6q6/mzJxbQ== + dependencies: + d3-array "^2.7.1" + d3-color "^2.0.0" + d3-geo "^2.0.1" + vega-dataflow "^5.7.3" + vega-expression "^3.0.0" + vega-scale "^7.1.1" + vega-scenegraph "^4.9.2" + vega-selections "^5.1.4" + vega-statistics "^1.7.9" + vega-time "^2.0.4" + vega-util "^1.15.2" + +vega-geo@~4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/vega-geo/-/vega-geo-4.3.7.tgz#4220137458a17d422fa15705f24905ba2595ca40" + integrity sha512-5HC1D9Z/WYuM1Gmlk8PxuRKgeN8snNWsfKO4E9PTmR7wo7tuU/2SGlRoE27aTsgwMMpBIrpRbSgKtgh5l/fMUQ== + dependencies: + d3-array "^2.7.1" + d3-color "^2.0.0" + d3-geo "^2.0.1" + vega-canvas "^1.2.5" + vega-dataflow "^5.7.3" + vega-projection "^1.4.5" + vega-statistics "^1.7.9" + vega-util "^1.15.2" + +vega-hierarchy@~4.0.9: + version "4.0.9" + resolved "https://registry.yarnpkg.com/vega-hierarchy/-/vega-hierarchy-4.0.9.tgz#4b4bafbc181a14a280ecdbee8874c0db7e369f47" + integrity sha512-4XaWK6V38/QOZ+vllKKTafiwL25m8Kd+ebHmDV+Q236ONHmqc/gv82wwn9nBeXPEfPv4FyJw2SRoqa2Jol6fug== dependencies: - d3-hierarchy "^1.1.9" - vega-dataflow "^5.5.1" - vega-util "^1.13.2" + d3-hierarchy "^2.0.0" + vega-dataflow "^5.7.3" + vega-util "^1.15.2" -vega-lite@^4.13.1: - version "4.13.1" - resolved "https://registry.yarnpkg.com/vega-lite/-/vega-lite-4.13.1.tgz#e9ee31c76cb93565e287a760700e432e57244064" - integrity sha512-OHZSSqVLuikoZ3idz3jIRk0UCKtVU2Lq5gaD6cLNTnJjNetoHKKdfZ023LVj4+Y9yWPz5meb+EJUsfBAGfF4Vw== +vega-label@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/vega-label/-/vega-label-1.0.0.tgz#c3bea3a608a62217ca554ecc0f7fe0395d81bd1b" + integrity sha512-hCdm2pcHgkKgxnzW9GvX5JmYNiUMlOXOibtMmBzvFBQHX3NiV9giQ5nsPiQiFbV08VxEPtM+VYXr2HyrIcq5zQ== dependencies: - "@types/clone" "~0.1.30" + vega-canvas "^1.2.5" + vega-dataflow "^5.7.3" + vega-scenegraph "^4.9.2" + vega-util "^1.15.2" + +vega-lite@^4.16.8: + version "4.16.8" + resolved "https://registry.yarnpkg.com/vega-lite/-/vega-lite-4.16.8.tgz#23a91f9b87a97c7ffc6d754d0ec8f6a3b04d6976" + integrity sha512-WB9OOHbFyIaLvx5k9m8XGEaB2p0sTC9Srtsm9ETQ6EoOksdLQtVesxCalgT+cGaUVtHAiqBNmLh/nQGxZXml7w== + dependencies: + "@types/clone" "~2.1.0" "@types/fast-json-stable-stringify" "^2.0.0" array-flat-polyfill "^1.0.1" clone "~2.1.2" - fast-deep-equal "~3.1.1" + fast-deep-equal "~3.1.3" fast-json-stable-stringify "~2.1.0" json-stringify-pretty-compact "~2.0.0" - tslib "~2.0.0" - vega-event-selector "~2.0.3" - vega-expression "~2.6.5" - vega-util "~1.14.0" - yargs "~15.3.1" - -vega-loader@^4.3.0, vega-loader@~4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/vega-loader/-/vega-loader-4.3.0.tgz#f32d70e2dd57d753e4160aae2e1f48c20e0d00e5" - integrity sha512-XrwwJ1xWnsVS2N2M4vdvzieUdXWegdD31t04sCPQ5C3US58NYlq1ho1Md+5FVrtl0uCd0wG/mk700Jp7yPhN+w== - dependencies: - d3-dsv "^1.2.0" - node-fetch "^2.6.0" + tslib "~2.0.1" + vega-event-selector "~2.0.6" + vega-expression "~3.0.0" + vega-util "~1.15.3" + yargs "~16.0.3" + +vega-loader@^4.3.2, vega-loader@^4.3.3, vega-loader@~4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/vega-loader/-/vega-loader-4.3.3.tgz#1432dabae4dd7ab344f84c5ae6e250234e9c1005" + integrity sha512-ZcAMi6C7yfbA3gpxDnFe3PvsP/jcDwUjgPIpZ2IYsaQS+JijZAj5g3i4mpQCao0Atc+C/g7htg0Ir3twFLPjkQ== + dependencies: + d3-dsv "^2.0.0" + node-fetch "^2.6.1" topojson-client "^3.1.0" - vega-format "^1.0.0" - vega-util "^1.14.0" - -vega-parser@~6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/vega-parser/-/vega-parser-6.0.2.tgz#c76dfd13a38abedacb07658fe75fd0c05a509a1c" - integrity sha512-3337WvsUuuYZ0+H7ew4uZFgn82QWoaWv/9uinlMOH7ncnu8qTuWt4nV3WoUX9RFqie38qIMw/mf6+HK5gfXBoQ== - dependencies: - vega-dataflow "^5.6.0" - vega-event-selector "^2.0.3" - vega-functions "^5.7.0" - vega-scale "^7.0.0" - vega-util "^1.14.0" - -vega-projection@^1.4.2, vega-projection@~1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/vega-projection/-/vega-projection-1.4.2.tgz#2e5edfffac54e8ba8ab56fba29f174dab0bc98d1" - integrity sha512-eULwc/8TMVjFkGtIVF5IGpJzEksnS0ccbaaCH9QjHtQTyBaR2CA679r5/98x6ur7ZLaYgcm2o082kjReUoyncA== - dependencies: - d3-geo "^1.12.1" - d3-geo-projection "^2.9.0" + vega-format "^1.0.4" + vega-util "^1.15.2" -vega-regression@~1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/vega-regression/-/vega-regression-1.0.6.tgz#0081a91328e933c826813c06afe7041915532d4f" - integrity sha512-s4kjsKp23WvDJDHkpIrGNUaLI3/95k6nTURj9RDtM4C6CbUgO2snIaEfki4JfOCnBYtvotwDuZgXKmJInu9hVw== +vega-parser@~6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/vega-parser/-/vega-parser-6.1.0.tgz#485fb6fcd79d14b09efee340e2b55fb510e57e20" + integrity sha512-u14bHXV8vtcuMIJkMNoDAJ4Xu3lwKIkep+YEkPumWvlwl3fClWy26EAcwTneeM3rXu2F6ZJI6W3ddu/If8u13w== dependencies: - d3-array "^2.4.0" - vega-dataflow "^5.5.1" - vega-statistics "^1.7.4" - vega-util "^1.13.2" + vega-dataflow "^5.7.3" + vega-event-selector "^2.0.6" + vega-functions "^5.8.0" + vega-scale "^7.1.1" + vega-util "^1.15.2" -vega-runtime@^6.1.0, vega-runtime@~6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/vega-runtime/-/vega-runtime-6.1.0.tgz#7b3016e616bcea779f971e242065b03e8d3ea6b5" - integrity sha512-wKzymOtUsselAIJZbiC/88zVgeuhB1lHZTdPN7IrB2o1qgxF50DdDa7eNUpKrkFJ2DK6gCJ8JlqLtM3QVr3iXQ== +vega-projection@^1.4.5, vega-projection@~1.4.5: + version "1.4.5" + resolved "https://registry.yarnpkg.com/vega-projection/-/vega-projection-1.4.5.tgz#020cb646b4eaae535359da25f4f48eef8d324af2" + integrity sha512-85kWcPv0zrrNfxescqHtSYpRknilrS0K3CVRZc7IYQxnLtL1oma9WEbrSr1LCmDoCP5hl2Z1kKbomPXkrQX5Ag== dependencies: - vega-dataflow "^5.7.0" - vega-util "^1.14.0" + d3-geo "^2.0.1" + d3-geo-projection "^3.0.0" -vega-scale@^7.0.0, vega-scale@~7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/vega-scale/-/vega-scale-7.0.0.tgz#0101802c6da29e2e903887160a269d57d6da479e" - integrity sha512-3oQAQYLRk+PIs6aF6kdb7tbhm5IpxNiwdFVM9fNS+SSsii6v8kFC681EuUMqLVZOHELiklWIE1rZIHaB5dNRXg== +vega-regression@~1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/vega-regression/-/vega-regression-1.0.9.tgz#f33da47fe457e03ad134782c11414bcef7b1da82" + integrity sha512-KSr3QbCF0vJEAWFVY2MA9X786oiJncTTr3gqRMPoaLr/Yo3f7OPKXRoUcw36RiWa0WCOEMgTYtM28iK6ZuSgaA== dependencies: - d3-array "^2.4.0" - d3-interpolate "^1.4.0" - d3-scale "^3.2.1" - vega-time "^2.0.0" - vega-util "^1.14.0" + d3-array "^2.7.1" + vega-dataflow "^5.7.3" + vega-statistics "^1.7.9" + vega-util "^1.15.2" -vega-scenegraph@^4.8.0, vega-scenegraph@^4.8.3, vega-scenegraph@~4.8.3: - version "4.8.3" - resolved "https://registry.yarnpkg.com/vega-scenegraph/-/vega-scenegraph-4.8.3.tgz#11b557019175ec5ddc258c3a5eb7371e64cec5e1" - integrity sha512-2GznqXm/py7/XX9juohFbLYQTKxHY5VNRZLHc0bL35Nd7lShKeOlHY9uVkHw2FoLLCz78UcXFminWM8lddvGxw== +vega-runtime@^6.1.3, vega-runtime@~6.1.3: + version "6.1.3" + resolved "https://registry.yarnpkg.com/vega-runtime/-/vega-runtime-6.1.3.tgz#01e18246f7a80cee034a96017ac30113b92c4034" + integrity sha512-gE+sO2IfxMUpV0RkFeQVnHdmPy3K7LjHakISZgUGsDI/ZFs9y+HhBf8KTGSL5pcZPtQsZh3GBQ0UonqL1mp9PA== dependencies: - d3-path "^1.0.9" - d3-shape "^1.3.7" - vega-canvas "^1.2.2" - vega-loader "^4.3.0" - vega-scale "^7.0.0" - vega-util "^1.14.0" + vega-dataflow "^5.7.3" + vega-util "^1.15.2" -vega-schema-url-parser@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vega-schema-url-parser/-/vega-schema-url-parser-1.1.0.tgz#39168ec04e5468ce278a06c16ec0d126035a85b5" - integrity sha512-Tc85J2ofMZZOsxiqDM9sbvfsa+Vdo3GwNLjEEsPOsCDeYqsUHKAlc1IpbbhPLZ6jusyM9Lk0e1izF64GGklFDg== +vega-scale@^7.0.3, vega-scale@^7.1.1, vega-scale@~7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/vega-scale/-/vega-scale-7.1.1.tgz#b69a38d1980f6fc1093390f796e556be63fdc808" + integrity sha512-yE0to0prA9E5PBJ/XP77TO0BMkzyUVyt7TH5PAwj+CZT7PMsMO6ozihelRhoIiVcP0Ae/ByCEQBUQkzN5zJ0ZA== + dependencies: + d3-array "^2.7.1" + d3-interpolate "^2.0.1" + d3-scale "^3.2.2" + vega-time "^2.0.4" + vega-util "^1.15.2" + +vega-scenegraph@^4.9.2, vega-scenegraph@~4.9.2: + version "4.9.2" + resolved "https://registry.yarnpkg.com/vega-scenegraph/-/vega-scenegraph-4.9.2.tgz#83b1dbc34a9ab5595c74d547d6d95849d74451ed" + integrity sha512-epm1CxcB8AucXQlSDeFnmzy0FCj+HV2k9R6ch2lfLRln5lPLEfgJWgFcFhVf5jyheY0FSeHH52Q5zQn1vYI1Ow== + dependencies: + d3-path "^2.0.0" + d3-shape "^2.0.0" + vega-canvas "^1.2.5" + vega-loader "^4.3.3" + vega-scale "^7.1.1" + vega-util "^1.15.2" + +vega-schema-url-parser@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/vega-schema-url-parser/-/vega-schema-url-parser-2.1.0.tgz#847f9cf9f1624f36f8a51abc1adb41ebc6673cb4" + integrity sha512-JHT1PfOyVzOohj89uNunLPirs05Nf59isPT5gnwIkJph96rRgTIBJE7l7yLqndd7fLjr3P8JXHGAryRp74sCaQ== -vega-selections@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/vega-selections/-/vega-selections-5.1.1.tgz#5ea3931bbf7bc13f2ab7c5c5ebf39aed98e4c114" - integrity sha512-ztZUMfDicuIGJHZimSdVvMGzMvaa37ICzUHHvwxS51OhYv096dzKgoSypjx+tsmR7wnhY7ZL+iQgpT1/O29jlA== +vega-selections@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/vega-selections/-/vega-selections-5.1.4.tgz#cc086fac5b4e646f9f1e000777f8786782d8516a" + integrity sha512-L7CHwcIjVf90GoW2tS2x5O496O5Joaerp5A1KM6VJ1uo4z6KfqxY6M/328a/uaAs0LC5qbQgXT3htFbtUrPW/A== dependencies: - vega-expression "^2.6.4" - vega-util "^1.13.2" + vega-expression "^3.0.0" + vega-util "^1.15.2" vega-spec-injector@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/vega-spec-injector/-/vega-spec-injector-0.0.2.tgz#f1d990109dd9d845c524738f818baa4b72a60ca6" integrity sha512-wOMMqmpssn0/ZFPW7wl1v26vbseRX7zHPWzEyS9TwNXTRCu1TcjIBIR+X23lCWocxhoBqFxmqyn8UowMhlGtAg== -vega-statistics@^1.7.4, vega-statistics@^1.7.5, vega-statistics@~1.7.6: - version "1.7.6" - resolved "https://registry.yarnpkg.com/vega-statistics/-/vega-statistics-1.7.6.tgz#6f920c83adbec9a25087ca60c41af272838f85bd" - integrity sha512-w6z5t4p1zYNSvsg3lln4TZakxXlH/tM0w5WAP1EXLYrCYRw0F/SvxqLQ+WqEZVnI/WGQDq2v5xMAn0WvHJ/kUg== +vega-statistics@^1.7.9, vega-statistics@~1.7.9: + version "1.7.9" + resolved "https://registry.yarnpkg.com/vega-statistics/-/vega-statistics-1.7.9.tgz#feec01d463e1b50593d890d20631f72138fcb65d" + integrity sha512-T0sd2Z08k/mHxr1Vb4ajLWytPluLFYnsYqyk4SIS5czzUs4errpP2gUu63QJ0B7CKNu33vnS9WdOMOo/Eprr/Q== dependencies: - d3-array "^2.4.0" + d3-array "^2.7.1" -vega-time@^2.0.0, vega-time@^2.0.1, vega-time@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/vega-time/-/vega-time-2.0.1.tgz#2a91c3acafd091e6724063dea26e4b3fe6061d2f" - integrity sha512-Ij0gmABKDRKAMUTh/1AGSSkU6ocWiteLkIK/cmcnt98u8LiuVcFT5w7gusd0+ibO9EooeMKazn5xPmjvQs0qEg== +vega-time@^2.0.3, vega-time@^2.0.4, vega-time@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vega-time/-/vega-time-2.0.4.tgz#ff308358a831de927caa44e281cdc96f0863ba08" + integrity sha512-U314UDR9+ZlWrD3KBaeH+j/c2WSMdvcZq5yJfFT0yTg1jsBKAQBYFGvl+orackD8Zx3FveHOxx3XAObaQeDX+Q== dependencies: - d3-array "^2.4.0" - d3-time "^1.1.0" - vega-util "^1.14.0" + d3-array "^2.7.1" + d3-time "^2.0.0" + vega-util "^1.15.2" -vega-tooltip@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/vega-tooltip/-/vega-tooltip-0.12.0.tgz#014b21b08ea5fe14eb59c9b6643614c77a3b3e47" - integrity sha512-0a1gYQ5NjdVxzSm8ameZGnSocDAW9lB3h6e2Us5L2oTlU6tYI6et1+7qU1yRCycBuUQ/oAUsNbeINVwvsV9UIg== +vega-tooltip@^0.24.2: + version "0.24.2" + resolved "https://registry.yarnpkg.com/vega-tooltip/-/vega-tooltip-0.24.2.tgz#da55a171a96ea48a8ff135a728622e1cbb1152af" + integrity sha512-b7IeYQl/piNVsMmTliOgTnwSOhBs67KqoZ9UzP1I3XpH7TKbSuc3YHA7b1CSxkRR0hHKdradby4UI8c9rdH74w== dependencies: - vega-util "^1.7.0" + vega-util "^1.15.2" -vega-transforms@~4.9.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/vega-transforms/-/vega-transforms-4.9.0.tgz#272be37adb8565633ccde68f64079fb5029a8ac9" - integrity sha512-xsgvkHsyKgEWdCB86DVts2Zu6fJ+cGjpc56MpcCWPArNuhcUSugivIoTAFAh8w7QempQBsAtnPrnbaytMYOJ8w== +vega-transforms@~4.9.3: + version "4.9.3" + resolved "https://registry.yarnpkg.com/vega-transforms/-/vega-transforms-4.9.3.tgz#40e5234b956a68eaa03eedf489ed03293075bbfb" + integrity sha512-PdqQd5oPlRyD405M2w+Sz9Bo+i7Rwi8o03SVK7RaeQsJC2FffKGJ6acIaSEgOq+yD1Q2k/1SePmCXcmLUlIiEA== dependencies: - d3-array "^2.4.0" - vega-dataflow "^5.7.0" - vega-statistics "^1.7.5" - vega-time "^2.0.1" - vega-util "^1.14.0" + d3-array "^2.7.1" + vega-dataflow "^5.7.3" + vega-statistics "^1.7.9" + vega-time "^2.0.4" + vega-util "^1.15.2" -vega-typings@~0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/vega-typings/-/vega-typings-0.18.0.tgz#c8f66406cae8418eafed6fbc4c7c63f88eee670d" - integrity sha512-uMSS7EEP8Q2gg4dN7D2xhi4S+dp/IQGTQp3VgieJx8ki8mrm0N43pdUC14nNYTtiUDxDdmup5nyj6JHuboKUmg== +vega-typings@~0.19.0: + version "0.19.1" + resolved "https://registry.yarnpkg.com/vega-typings/-/vega-typings-0.19.1.tgz#a53949143fa37721ae7bd146bbb9add5c78aca52" + integrity sha512-OSyNYwMJ8FayTTNU/gohprbt1EFQBpoiMPP9p2vqo1O9z45XVnotQ92jYHAhraI6gWiMIIfo4OjPbSe/GX7etg== dependencies: - vega-util "^1.14.0" + vega-util "^1.15.2" -vega-util@^1.13.2, vega-util@^1.14.0, vega-util@^1.7.0, vega-util@~1.14.0, vega-util@~1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/vega-util/-/vega-util-1.14.1.tgz#0fb614277764f98738ba0b80e5cdfbe663426183" - integrity sha512-pSKJ8OCkgfgHZDTljyj+gmGltgulceWbk1BV6LWrXqp6P3J8qPA/oZA8+a93YNApYxXZ3yzIVUDOo5O27xk0jw== +vega-util@^1.15.2, vega-util@~1.15.2, vega-util@~1.15.3: + version "1.15.3" + resolved "https://registry.yarnpkg.com/vega-util/-/vega-util-1.15.3.tgz#b42b4fb11f32fbb57fb5cd116d4d3e1827d177aa" + integrity sha512-NCbfCPMVgdP4geLrFtCDN9PTEXrgZgJBBLvpyos7HGv2xSe9bGjDCysv6qcueHrc1myEeCQzrHDFaShny6wXDg== -vega-view-transforms@~4.5.5: - version "4.5.5" - resolved "https://registry.yarnpkg.com/vega-view-transforms/-/vega-view-transforms-4.5.5.tgz#b934da0fc1b41c10039300c036cfa38a56c83631" - integrity sha512-HFTA6j2zFKRlfBlS6b9tmLLDNt7g78ZoyKFAT9fCm3X0KLT6FTn13PiiB4KppMg40nwgm0c2KUQmjnC6fGgIdQ== +vega-view-transforms@~4.5.8: + version "4.5.8" + resolved "https://registry.yarnpkg.com/vega-view-transforms/-/vega-view-transforms-4.5.8.tgz#c8dc42c3c7d4aa725d40b8775180c9f23bc98f4e" + integrity sha512-966m7zbzvItBL8rwmF2nKG14rBp7q+3sLCKWeMSUrxoG+M15Smg5gWEGgwTG3A/RwzrZ7rDX5M1sRaAngRH25g== dependencies: - vega-dataflow "^5.6.0" - vega-scenegraph "^4.8.0" - vega-util "^1.14.0" + vega-dataflow "^5.7.3" + vega-scenegraph "^4.9.2" + vega-util "^1.15.2" -vega-view@~5.8.0: - version "5.8.0" - resolved "https://registry.yarnpkg.com/vega-view/-/vega-view-5.8.0.tgz#64ff5acd32855c16b4799cdb4b657d9f3e15b7f9" - integrity sha512-0H+m0olEYpadUq+3z35t6g6ozbr9AzpGqg8KOklHpe+rSmmaaItEF8B+eGr3Ut5i/+u0c7PKa6jEdVG61xbpGA== - dependencies: - d3-array "^2.4.0" - d3-timer "^1.0.10" - vega-dataflow "^5.7.0" - vega-format "^1.0.1" - vega-functions "^5.7.1" - vega-runtime "^6.1.0" - vega-scenegraph "^4.8.3" - vega-util "^1.14.0" - -vega-voronoi@~4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/vega-voronoi/-/vega-voronoi-4.1.2.tgz#459b78f5191fb707e94d9afa7d8c1a68ad9aec7a" - integrity sha512-XXp2UChi4/6jkEqWkLFbjDBVLMizQICWDv4RUkfMeDNhWmhEY/3kPHCU6taqfTVkbxfA7aN20ivbakJzoywiAQ== - dependencies: - d3-delaunay "^5.2.1" - vega-dataflow "^5.5.1" - vega-util "^1.13.2" - -vega-wordcloud@~4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/vega-wordcloud/-/vega-wordcloud-4.1.0.tgz#edf020a99378eb88109cb9ac4702fec0e0ac8cdd" - integrity sha512-WiISiNlHdbTL6QsnxyzxbniUgcPmjzwdwZzu6clQSHXNRz9kThCPhXOyLwYdbFV+9sjd4sJlW0YOaCcx7wMT2Q== +vega-view@~5.9.0: + version "5.9.0" + resolved "https://registry.yarnpkg.com/vega-view/-/vega-view-5.9.0.tgz#ee6d5abd66d2503dec71e05e7ca8cf813465ae3f" + integrity sha512-HqRFuqO2OwoPHHK+CVt8vB8fu2L8GjQerLpmEpglWtCPDns5+gn5B6F7M8Ah8v24WlfqW7cLrY81t9OloPZOyw== + dependencies: + d3-array "^2.7.1" + d3-timer "^2.0.0" + vega-dataflow "^5.7.3" + vega-format "^1.0.4" + vega-functions "^5.8.0" + vega-runtime "^6.1.3" + vega-scenegraph "^4.9.2" + vega-util "^1.15.2" + +vega-voronoi@~4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/vega-voronoi/-/vega-voronoi-4.1.5.tgz#e7af574d4c27fd9cb12d70082f12c6f59b80b445" + integrity sha512-950IkgCFLj0zG33EWLAm1hZcp+FMqWcNQliMYt+MJzOD5S4MSpZpZ7K4wp2M1Jktjw/CLKFL9n38JCI0i3UonA== dependencies: - vega-canvas "^1.2.2" - vega-dataflow "^5.6.0" - vega-scale "^7.0.0" - vega-statistics "^1.7.5" - vega-util "^1.14.0" + d3-delaunay "^5.3.0" + vega-dataflow "^5.7.3" + vega-util "^1.15.2" -vega@^5.13.0: - version "5.13.0" - resolved "https://registry.yarnpkg.com/vega/-/vega-5.13.0.tgz#12253667d203e8f82fe317014084c55b479057ee" - integrity sha512-3X6ptCqQrfYg1xdy6rCkywKXOiIQIIJBFESV5JJOXaqm1ye9LRD3NOmZukqenLJXlg6aaPbP6kFFqpjBzmAefg== - dependencies: - vega-crossfilter "~4.0.2" - vega-dataflow "~5.7.0" - vega-encode "~4.8.0" - vega-event-selector "~2.0.3" - vega-expression "~2.6.5" - vega-force "~4.0.4" - vega-format "~1.0.1" - vega-functions "~5.7.1" - vega-geo "~4.3.4" - vega-hierarchy "~4.0.6" - vega-loader "~4.3.0" - vega-parser "~6.0.2" - vega-projection "~1.4.2" - vega-regression "~1.0.6" - vega-runtime "~6.1.0" - vega-scale "~7.0.0" - vega-scenegraph "~4.8.3" - vega-statistics "~1.7.6" - vega-time "~2.0.1" - vega-transforms "~4.9.0" - vega-typings "~0.18.0" - vega-util "~1.14.1" - vega-view "~5.8.0" - vega-view-transforms "~4.5.5" - vega-voronoi "~4.1.2" - vega-wordcloud "~4.1.0" +vega-wordcloud@~4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/vega-wordcloud/-/vega-wordcloud-4.1.3.tgz#ce90900333f4e0d3ee706ba4f36bb0905f8b4a9f" + integrity sha512-is4zYn9FMAyp9T4SAcz2P/U/wqc0Lx3P5YtpWKCbOH02a05vHjUQrQ2TTPOuvmMfAEDCSKvbMSQIJMOE018lJA== + dependencies: + vega-canvas "^1.2.5" + vega-dataflow "^5.7.3" + vega-scale "^7.1.1" + vega-statistics "^1.7.9" + vega-util "^1.15.2" + +vega@^5.16.1: + version "5.16.1" + resolved "https://registry.yarnpkg.com/vega/-/vega-5.16.1.tgz#76a794c28118b685e8578a8f9944c5e239dbe1cd" + integrity sha512-bqovD23iKvIgFnTkP9WqapJbaejhgdED6YjAVWIwG8hsDq5Lf/ZNstJJWPiSDu3j785GQU/o6ZU3RXywdH4dJA== + dependencies: + vega-crossfilter "~4.0.5" + vega-dataflow "~5.7.3" + vega-encode "~4.8.3" + vega-event-selector "~2.0.6" + vega-expression "~3.0.0" + vega-force "~4.0.7" + vega-format "~1.0.4" + vega-functions "~5.8.0" + vega-geo "~4.3.7" + vega-hierarchy "~4.0.9" + vega-label "~1.0.0" + vega-loader "~4.3.3" + vega-parser "~6.1.0" + vega-projection "~1.4.5" + vega-regression "~1.0.9" + vega-runtime "~6.1.3" + vega-scale "~7.1.1" + vega-scenegraph "~4.9.2" + vega-statistics "~1.7.9" + vega-time "~2.0.4" + vega-transforms "~4.9.3" + vega-typings "~0.19.0" + vega-util "~1.15.2" + vega-view "~5.9.0" + vega-view-transforms "~4.5.8" + vega-voronoi "~4.1.5" + vega-wordcloud "~4.1.3" venn.js@0.2.20: version "0.2.20" @@ -29691,6 +30589,11 @@ vfile-location@^2.0.0: resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.2.tgz#d3675c59c877498e492b4756ff65e4af1a752255" integrity sha1-02dcWch3SY5JK0dW/2Xkrxp1IlU= +vfile-location@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.0.1.tgz#d78677c3546de0f7cd977544c367266764d31bb3" + integrity sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ== + vfile-message@*: version "2.0.4" resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" @@ -29746,16 +30649,6 @@ vfile@^2.0.0: unist-util-stringify-position "^1.0.0" vfile-message "^1.0.0" -vfile@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-3.0.1.tgz#47331d2abe3282424f4a4bb6acd20a44c4121803" - integrity sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ== - dependencies: - is-buffer "^2.0.0" - replace-ext "1.0.0" - unist-util-stringify-position "^1.0.0" - vfile-message "^1.0.0" - vfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.0.0.tgz#ebf3b48af9fcde524d5e08d5f75812058a5f78ad" @@ -29997,6 +30890,17 @@ watchpack@^1.6.0: chokidar "^3.4.0" watchpack-chokidar2 "^2.0.0" +watchpack@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" + integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.0" + wbuf@^1.1.0: version "1.7.2" resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.2.tgz#d697b99f1f59512df2751be42769c1580b5801fe" @@ -30143,14 +31047,14 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack- source-list-map "^2.0.0" source-map "~0.6.1" -webpack-virtual-modules@^0.2.0: +webpack-virtual-modules@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz#20863dc3cb6bb2104729fff951fbe14b18bd0299" integrity sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA== dependencies: debug "^3.0.0" -webpack@^4.33.0, webpack@^4.38.0, webpack@^4.41.5: +webpack@^4.41.5: version "4.41.5" resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.5.tgz#3210f1886bce5310e62bb97204d18c263341b77c" integrity sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw== @@ -30179,6 +31083,35 @@ webpack@^4.33.0, webpack@^4.38.0, webpack@^4.41.5: watchpack "^1.6.0" webpack-sources "^1.4.1" +webpack@^4.43.0: + version "4.44.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.1.tgz#17e69fff9f321b8f117d1fda714edfc0b939cc21" + integrity sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.3.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" + websocket-driver@0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" @@ -30516,15 +31449,6 @@ wreck@14.x.x: boom "7.x.x" hoek "5.x.x" -write-file-atomic@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" - integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - write-file-atomic@^1.1.2: version "1.3.4" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" @@ -30810,7 +31734,7 @@ yargs-parser@^10.0.0: dependencies: camelcase "^4.1.0" -yargs-parser@^18.1.1, yargs-parser@^18.1.2, yargs-parser@^18.1.3: +yargs-parser@^18.1.2, yargs-parser@^18.1.3: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== @@ -30882,7 +31806,7 @@ yargs@^15.0.2, yargs@^15.1.0, yargs@^15.3.1, yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.0.3: +yargs@^16.0.3, yargs@~16.0.3: version "16.0.3" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.0.3.tgz#7a919b9e43c90f80d4a142a89795e85399a7e54c" integrity sha512-6+nLw8xa9uK1BOEOykaiYAJVh6/CjxWXK/q9b5FpRgNslt8s22F2xMBqVIKgCRjNgGvGPBy8Vog7WN7yh4amtA== @@ -30927,23 +31851,6 @@ yargs@^7.0.0, yargs@^7.1.0: y18n "^3.2.1" yargs-parser "5.0.0-security.0" -yargs@~15.3.1: - version "15.3.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" - integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.1" - yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" @@ -30954,7 +31861,7 @@ yargs@~3.10.0: decamelize "^1.0.0" window-size "0.1.0" -yauzl@2.10.0, yauzl@^2.10.0: +yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=